vulkan: Implement VkSurfaceKHR and use vulkanext.h
Between header version 0.183.0 and 0.184.0, a copy of vulkan.h which
includes extensions was added to the registry, called vulkanext.h. The
vulkan.h included here is actually the registry's vulkanext.h.
(In a later upstream change, the no-extensions version was removed
from the registry, and vulkanext.h was renamed vulkan.h, matching what
we're doing here.)
The version of the extensions picked up in the header file is later
than the ones used in the previous SDK, so this change also updates
our implementation to the extension versions included in the header.
The main change is replacing the VkSurfaceDescriptionKHR structure
with a VkSurfaceKHR object.
Change-Id: I18fa5a269db0fcdbdbde3e9304167bc15e456f85
(cherry picked from commit 957a59a48a8d2e81ca3bb52aacd8d08b1b43dc74)
diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
index 175e353..878cf44 100644
--- a/vulkan/api/vulkan.api
+++ b/vulkan/api/vulkan.api
@@ -45,6 +45,46 @@
// API keyword, but needs special handling by some templates
define NULL_HANDLE 0
+@extension("VK_EXT_KHR_surface") define VK_EXT_KHR_SURFACE_REVISION 19
+@extension("VK_EXT_KHR_surface") define VK_EXT_KHR_SURFACE_EXTENSION_NUMBER 1
+@extension("VK_EXT_KHR_surface") define VK_EXT_KHR_SURFACE_EXTENSION_NAME "VK_EXT_KHR_surface"
+
+@extension("VK_EXT_KHR_swapchain") define VK_EXT_KHR_SWAPCHAIN_REVISION 59
+@extension("VK_EXT_KHR_swapchain") define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NUMBER 2
+@extension("VK_EXT_KHR_swapchain") define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NAME "VK_EXT_KHR_swapchain"
+
+@extension("VK_EXT_KHR_display") define VK_EXT_KHR_DISPLAY_REVISION 16
+@extension("VK_EXT_KHR_display") define VK_EXT_KHR_DISPLAY_EXTENSION_NUMBER 3
+@extension("VK_EXT_KHR_display") define VK_EXT_KHR_DISPLAY_EXTENSION_NAME "VK_EXT_KHR_display"
+
+@extension("VK_EXT_KHR_display_swapchain") define VK_EXT_KHR_DISPLAY_REVISION 14
+@extension("VK_EXT_KHR_display_swapchain") define VK_EXT_KHR_DISPLAY_EXTENSION_NUMBER 4
+@extension("VK_EXT_KHR_display_swapchain") define VK_EXT_KHR_DISPLAY_EXTENSION_NAME "VK_EXT_KHR_display_swapchain"
+
+@extension("VK_EXT_KHR_x11_surface") define VK_EXT_KHR_X11_SURFACE_REVISION 1
+@extension("VK_EXT_KHR_x11_surface") define VK_EXT_KHR_X11_SURFACE_NUMBER 4
+@extension("VK_EXT_KHR_x11_surface") define VK_EXT_KHR_X11_SURFACE_NAME "VK_EXT_KHR_x11_surface"
+
+@extension("VK_EXT_KHR_xcb_surface") define VK_EXT_KHR_XCB_SURFACE_REVISION 1
+@extension("VK_EXT_KHR_xcb_surface") define VK_EXT_KHR_XCB_SURFACE_NUMBER 6
+@extension("VK_EXT_KHR_xcb_surface") define VK_EXT_KHR_XCB_SURFACE_NAME "VK_EXT_KHR_xcb_surface"
+
+@extension("VK_EXT_KHR_wayland_surface") define VK_EXT_KHR_WAYLAND_SURFACE_REVISION 1
+@extension("VK_EXT_KHR_wayland_surface") define VK_EXT_KHR_WAYLAND_SURFACE_NUMBER 7
+@extension("VK_EXT_KHR_wayland_surface") define VK_EXT_KHR_WAYLAND_SURFACE_NAME "VK_EXT_KHR_wayland_surface"
+
+@extension("VK_EXT_KHR_mir_surface") define VK_EXT_KHR_MIR_SURFACE_REVISION 1
+@extension("VK_EXT_KHR_mir_surface") define VK_EXT_KHR_MIR_SURFACE_NUMBER 8
+@extension("VK_EXT_KHR_mir_surface") define VK_EXT_KHR_MIR_SURFACE_NAME "VK_EXT_KHR_mir_surface"
+
+@extension("VK_EXT_KHR_android_surface") define VK_EXT_KHR_ANDROID_SURFACE_REVISION 1
+@extension("VK_EXT_KHR_android_surface") define VK_EXT_KHR_ANDROID_SURFACE_NUMBER 8
+@extension("VK_EXT_KHR_android_surface") define VK_EXT_KHR_ANDROID_SURFACE_NAME "VK_EXT_KHR_android_surface"
+
+@extension("VK_EXT_KHR_win32_surface") define VK_EXT_KHR_WIN32_SURFACE_REVISION 1
+@extension("VK_EXT_KHR_win32_surface") define VK_EXT_KHR_WIN32_SURFACE_NUMBER 9
+@extension("VK_EXT_KHR_win32_surface") define VK_EXT_KHR_WIN32_SURFACE_NAME "VK_EXT_KHR_win32_surface"
+
/////////////
// Types //
@@ -84,7 +124,13 @@
@nonDispatchHandle type u64 VkFramebuffer
@nonDispatchHandle type u64 VkRenderPass
@nonDispatchHandle type u64 VkPipelineCache
-@nonDispatchHandle type u64 VkSwapchainKHR
+
+@extension("VK_EXT_KHR_surface") @nonDispatchHandle type u64 VkSurfaceKHR
+
+@extension("VK_EXT_KHR_swapchain") @nonDispatchHandle type u64 VkSwapchainKHR
+
+@extension("VK_EXT_KHR_display") @nonDispatchHandle type u64 VkDisplayKHR
+@extension("VK_EXT_KHR_display") @nonDispatchHandle type u64 VkDisplayModeKHR
/////////////
@@ -101,6 +147,9 @@
VK_IMAGE_LAYOUT_TRANSFER_SOURCE_OPTIMAL = 0x00000006, /// Optimal layout when image is used only as source of transfer operations
VK_IMAGE_LAYOUT_TRANSFER_DESTINATION_OPTIMAL = 0x00000007, /// Optimal layout when image is used only as destination of transfer operations
VK_IMAGE_LAYOUT_PREINITIALIZED = 0x00000008, /// Initial layout used when the data is populated by the CPU
+
+ //@extension("VK_EXT_KHR_swapchain")
+ VK_IMAGE_LAYOUT_PRESENT_SOURCE_KHR = 0xc0000802,
}
enum VkAttachmentLoadOp {
@@ -568,6 +617,17 @@
VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 45,
VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 46,
VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO = 47,
+
+ //@extension("VK_EXT_KHR_swapchain")
+ VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 0xc0000801,
+
+ //@extension("VK_EXT_KHR_display")
+ VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 0xc0000c00,
+ VK_STRUCTURE_TYPE_SURFACE_DESCRIPTION_DISPLAY_PLAN_KHR = 0xc0000c01,
+
+ //@extension("VK_EXT_KHR_display_swapchain")
+ VK_STRUCTURE_TYPE_DISPLAY_SWAPCHAIN_CREATE_INFO_KHR = 0xc0001000,
+ VK_STRUCTURE_TYPE_DISPLAY_DISPLAY_PRESENT_INFO_KHR = 0xc0001001,
}
enum VkRenderPassContents {
@@ -586,6 +646,9 @@
VK_EVENT_RESET = 0x00000004,
VK_INCOMPLETE = 0x00000005,
+ //@extension("VK_EXT_KHR_swapchain")
+ VK_SUBOPTIMAL_KHR = 0x40000403,
+
// Error codes (negative values)
VK_ERROR_OUT_OF_HOST_MEMORY = 0xFFFFFFFF,
VK_ERROR_OUT_OF_DEVICE_MEMORY = 0xFFFFFFFE,
@@ -596,6 +659,16 @@
VK_ERROR_EXTENSION_NOT_PRESENT = 0xFFFFFFF9,
VK_ERROR_FEATURE_NOT_PRESENT = 0xFFFFFFF8,
VK_ERROR_INCOMPATIBLE_DRIVER = 0xFFFFFFF7,
+
+ //@extension("VK_EXT_KHR_swapchain")
+ VK_ERROR_OUT_OF_DATE_KHR = 0xC0000804,
+
+ //@extension("VK_EXT_KHR_display_swapchain")
+ VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = 0xC0001002,
+
+ //@extension("VK_EXT_KHR_android_surface")
+ VK_ERROR_INVALID_ANDROID_WINDOW_KHR = 0xC002400,
+ VK_ERROR_ANDROID_WINDOW_IN_USE_KHR = 0xC002401,
}
enum VkDynamicState {
@@ -610,11 +683,7 @@
VK_DYNAMIC_STATE_STENCIL_REFERENCE = 0x00000008,
}
-//////////////////
-// Extensions //
-//////////////////
-
-@extension("VK_EXT_KHR_swapchain")
+@extension("VK_EXT_KHR_surface")
enum VkSurfaceTransformKHR {
VK_SURFACE_TRANSFORM_NONE_KHR = 0x00000000,
VK_SURFACE_TRANSFORM_ROT90_KHR = 0x00000001,
@@ -628,23 +697,13 @@
}
@extension("VK_EXT_KHR_swapchain")
-enum VkPlatformKHR {
- VK_PLATFORM_WIN32_KHR = 0x00000000,
- VK_PLATFORM_X11_KHR = 0x00000001,
- VK_PLATFORM_XCB_KHR = 0x00000002,
- VK_PLATFORM_ANDROID_KHR = 0x00000003,
- VK_PLATFORM_WAYLAND_KHR = 0x00000004,
- VK_PLATFORM_MIR_KHR = 0x00000005,
-}
-
-@extension("VK_EXT_KHR_device_swapchain")
enum VkPresentModeKHR {
VK_PRESENT_MODE_IMMEDIATE_KHR = 0x00000000,
VK_PRESENT_MODE_MAILBOX_KHR = 0x00000001,
VK_PRESENT_MODE_FIFO_KHR = 0x00000002,
}
-@extension("VK_EXT_KHR_device_swapchain")
+@extension("VK_EXT_KHR_swapchain")
enum VkColorSpaceKHR {
VK_COLORSPACE_SRGB_NONLINEAR_KHR = 0x00000000,
}
@@ -941,10 +1000,6 @@
VK_STENCIL_FACE_BACK_BIT = 0x00000002, /// Back face
}
-//////////////////
-// Extensions //
-//////////////////
-
@extension("VK_EXT_KHR_swapchain")
bitfield VkSurfaceTransformFlagsKHR {
VK_SURFACE_TRANSFORM_NONE_BIT_KHR = 0x00000001,
@@ -958,6 +1013,14 @@
VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
}
+@extension("VK_EXT_KHR_display")
+bitfield VkDisplayPlaneAlphaFlagsKHR {
+ VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000001,
+ VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000002,
+ VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000004,
+}
+
+
//////////////////
// Structures //
//////////////////
@@ -1995,73 +2058,136 @@
u32 z
}
-//////////////////
-// Extensions //
-//////////////////
-
-@extension("VK_EXT_KHR_device_swapchain")
+@extension("VK_EXT_KHR_swapchain")
class VkSurfacePropertiesKHR {
- u32 minImageCount
- u32 maxImageCount
- VkExtent2D currentExtent
- VkExtent2D minImageExtent
- VkExtent2D maxImageExtent
- VkSurfaceTransformFlagsKHR supportedTransforms
- VkSurfaceTransformKHR currentTransform
- u32 maxImageArraySize
- VkImageUsageFlags supportedUsageFlags
+ u32 minImageCount
+ u32 maxImageCount
+ VkExtent2D currentExtent
+ VkExtent2D minImageExtent
+ VkExtent2D maxImageExtent
+ VkSurfaceTransformFlagsKHR supportedTransforms
+ VkSurfaceTransformKHR currentTransform
+ u32 maxImageArraySize
+ VkImageUsageFlags supportedUsageFlags
}
-@extension("VK_EXT_KHR_device_swapchain")
+@extension("VK_EXT_KHR_swapchain")
class VkSurfaceFormatKHR {
- VkFormat format
- VkColorSpaceKHR colorSpace
+ VkFormat format
+ VkColorSpaceKHR colorSpace
}
-@extension("VK_EXT_KHR_device_swapchain")
+@extension("VK_EXT_KHR_swapchain")
class VkSwapchainCreateInfoKHR {
- VkStructureType sType
- const void* pNext
- const VkSurfaceDescriptionKHR* pSurfaceDescription
- u32 minImageCount
- VkFormat imageFormat
- VkColorSpaceKHR imageColorSpace
- VkExtent2D imageExtent
- VkImageUsageFlags imageUsageFlags
- VkSurfaceTransformKHR preTransform
- u32 imageArraySize
- VkSharingMode sharingMode
- u32 queueFamilyCount
- const u32* pQueueFamilyIndices
- VkPresentModeKHR presentMode
- VkSwapchainKHR oldSwapchain
- VkBool32 clipped
+ VkStructureType sType
+ const void* pNext
+ VkSurfaceKHR surface
+ u32 minImageCount
+ VkFormat imageFormat
+ VkColorSpaceKHR imageColorSpace
+ VkExtent2D imageExtent
+ VkImageUsageFlags imageUsageFlags
+ VkSurfaceTransformKHR preTransform
+ u32 imageArraySize
+ VkSharingMode sharingMode
+ u32 queueFamilyCount
+ const u32* pQueueFamilyIndices
+ VkPresentModeKHR presentMode
+ VkSwapchainKHR oldSwapchain
+ VkBool32 clipped
}
-@extension("VK_EXT_KHR_device_swapchain")
+@extension("VK_EXT_KHR_swapchain")
class VkPresentInfoKHR {
- VkStructureType sType
- const void* pNext
- u32 swapchainCount
- const VkSwapchainKHR* swapchains
- const u32* imageIndices
+ VkStructureType sType
+ const void* pNext
+ u32 swapchainCount
+ const VkSwapchainKHR* swapchains
+ const u32* imageIndices
}
-@extension("VK_EXT_KHR_swapchain")
-class VkSurfaceDescriptionKHR {
- VkStructureType sType
- const void* pNext
+@extension("VK_EXT_KHR_display")
+class VkDisplayPropertiesKHR {
+ VkDisplayKHR display
+ const char* displayName
+ VkExtent2D physicalDimensions
+ VkExtent2D physicalResolution
+ VkSurfaceTransformFlagsKHR supportedTransforms
+ u32 planeCount
+ VkBool32 planeReorderPossible
}
-@extension("VK_EXT_KHR_swapchain")
-class VkSurfaceDescriptionWindowKHR {
- VkStructureType sType
- const void* pNext
- VkPlatformKHR platform
- void* pPlatformHandle
- void* pPlatformWindow
+@extension("VK_EXT_KHR_display")
+class VkDisplayTimingKHR {
+ u32 pixelClock
+ VkExtent2D visibleRegion
+ VkExtent2D totalRegion
+ VkExtent2D physicalDimensions
+ u32 hSyncStart
+ u32 hSyncEnd
+ u32 vSyncStart
+ u32 vSyncEnd
+ VkBool32 interlaced
+ VkBool32 doublescan
+ VkBool32 hSyncPos
+ VkBool32 vSyncPos
}
+@extension("VK_EXT_KHR_display")
+class VkDisplayModePropertiesKHR {
+ VkDisplayModeKHR displayMode
+ VkDisplayTimingKHR timing
+}
+
+@extension("VK_EXT_KHR_display")
+class VkDisplayModeCreateInfoKHR {
+ VkStructureType sType
+ const void* pNext
+ VkDisplayTimingKHR timing
+}
+
+@extension("VK_EXT_KHR_display")
+class VkDisplayPlanePropertiesKHR {
+ VkDisplayPlaneAlphaFlagsKHR supportedAlpha
+ VkOffset2D minSrcPosition
+ VkOffset2D maxSrcPosition
+ VkExtent2D minSrcExtent
+ VkExtent2D maxSrcExtent
+ VkOffset2D minDstPosition
+ VkOffset2D maxDstPosition
+ VkExtent2D minDstExtent
+ VkExtent2D maxDstExtent
+}
+
+@extension("VK_EXT_KHR_display")
+class VkSurfaceDescriptionDisplayPlaneKHR {
+ VkStructureType sType
+ const void* pNext
+ VkDisplayModeKHR displayMode
+ u32 planeIndex
+ u32 planeStackIndex
+ VkSurfaceTransformKHR transform
+ f32 globalAlpha
+ VkDisplayPlaneAlphaFlagsKHR alphaMode
+ VkExtent2D imageSize
+}
+
+@extension("VK_EXT_KHR_display_swapchain")
+class VkDisplaySwapchainCreateInfoKHR {
+ VkStructureType sType
+ const void* pNext
+ const VkSwapchainCreateInfoKHR* pNextSwapchainCreateInfo
+}
+
+@extension("VK_EXT_KHR_display_swapchain")
+class VkDisplayPresentInfoKHR {
+ VkStructureType sType
+ const void* pNext
+ VkRect2D srcRect
+ VkRect2D dstRect
+}
+
+
////////////////
// Commands //
////////////////
@@ -4296,29 +4422,34 @@
}
}
-////////////////
-// Extensions //
-////////////////
+@extension("VK_EXT_KHR_surface")
+cmd void vkDestroySurfaceKHR(
+ VkInstance instance,
+ VkSurfaceKHR surface) {
+ instanceObject := GetInstance(instance)
+ surfaceObject := GetSurface(surface)
+ assert(surfaceObject.instance == instance)
-@extension("VK_EXT_KHR_swapchain")
-cmd VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
- VkPhysicalDevice physicalDevice,
- u32 queueFamilyIndex,
- const VkSurfaceDescriptionKHR* pSurfaceDescription,
- VkBool32* pSupported) {
- physicalDeviceObject := GetPhysicalDevice(physicalDevice)
-
- supported := ?
- pSupported[0] = supported
-
- return ?
+ State.Surfaces[surface] = null
}
-@extension("VK_EXT_KHR_device_swapchain")
+@extension("VK_EXT_KHR_surface")
+cmd VkBool32 vkGetPhysicalDeviceSurfaceSupportKHR(
+ VkPhysicalDevice physicalDevice,
+ u32 queueFamilyIndex,
+ VkSurfaceKHR surface) {
+ physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+
+ //supported := ?
+
+ return ?//supported
+}
+
+@extension("VK_EXT_KHR_swapchain")
cmd VkResult vkGetSurfacePropertiesKHR(
- VkDevice device,
- const VkSurfaceDescriptionKHR* pSurfaceDescription,
- VkSurfacePropertiesKHR* pSurfaceProperties) {
+ VkDevice device,
+ VkSurfaceKHR surface,
+ VkSurfacePropertiesKHR* pSurfaceProperties) {
deviceObject := GetDevice(device)
surfaceProperties := ?
@@ -4327,12 +4458,12 @@
return ?
}
-@extension("VK_EXT_KHR_device_swapchain")
+@extension("VK_EXT_KHR_swapchain")
cmd VkResult vkGetSurfaceFormatsKHR(
- VkDevice device,
- const VkSurfaceDescriptionKHR* pSurfaceDescription,
- u32* pCount,
- VkSurfaceFormatKHR* pSurfaceFormats) {
+ VkDevice device,
+ VkSurfaceKHR surface,
+ u32* pCount,
+ VkSurfaceFormatKHR* pSurfaceFormats) {
deviceObject := GetDevice(device)
count := as!u32(?)
@@ -4347,12 +4478,12 @@
return ?
}
-@extension("VK_EXT_KHR_device_swapchain")
+@extension("VK_EXT_KHR_swapchain")
cmd VkResult vkGetSurfacePresentModesKHR(
- VkDevice device,
- const VkSurfaceDescriptionKHR* pSurfaceDescription,
- u32* pCount,
- VkPresentModeKHR* pPresentModes) {
+ VkDevice device,
+ VkSurfaceKHR surface,
+ u32* pCount,
+ VkPresentModeKHR* pPresentModes) {
deviceObject := GetDevice(device)
count := as!u32(?)
@@ -4367,12 +4498,12 @@
return ?
}
-@extension("VK_EXT_KHR_device_swapchain")
+@extension("VK_EXT_KHR_swapchain")
cmd VkResult vkCreateSwapchainKHR(
VkDevice device,
const VkSwapchainCreateInfoKHR* pCreateInfo,
VkSwapchainKHR* pSwapchain) {
- //assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
+ assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
deviceObject := GetDevice(device)
swapchain := ?
@@ -4382,8 +4513,8 @@
return ?
}
-@extension("VK_EXT_KHR_device_swapchain")
-cmd VkResult vkDestroySwapchainKHR(
+@extension("VK_EXT_KHR_swapchain")
+cmd void vkDestroySwapchainKHR(
VkDevice device,
VkSwapchainKHR swapchain) {
deviceObject := GetDevice(device)
@@ -4391,11 +4522,9 @@
assert(swapchainObject.device == device)
State.Swapchains[swapchain] = null
-
- return ?
}
-@extension("VK_EXT_KHR_device_swapchain")
+@extension("VK_EXT_KHR_swapchain")
cmd VkResult vkGetSwapchainImagesKHR(
VkDevice device,
VkSwapchainKHR swapchain,
@@ -4410,20 +4539,19 @@
for i in (0 .. count) {
swapchainImage := ?
swapchainImages[i] = swapchainImage
- if !(swapchainImage in State.Images) {
- State.Images[swapchainImage] = new!ImageObject(device: device)
- }
+ State.Images[swapchainImage] = new!ImageObject(device: device)
}
return ?
}
-@extension("VK_EXT_KHR_device_swapchain")
+@extension("VK_EXT_KHR_swapchain")
cmd VkResult vkAcquireNextImageKHR(
VkDevice device,
VkSwapchainKHR swapchain,
u64 timeout,
VkSemaphore semaphore,
+ VkFence fence,
u32* pImageIndex) {
deviceObject := GetDevice(device)
swapchainObject := GetSwapchain(swapchain)
@@ -4434,7 +4562,7 @@
return ?
}
-@extension("VK_EXT_KHR_device_swapchain")
+@extension("VK_EXT_KHR_swapchain")
cmd VkResult vkQueuePresentKHR(
VkQueue queue,
VkPresentInfoKHR* pPresentInfo) {
@@ -4446,6 +4574,107 @@
return ?
}
+@extension("VK_EXT_KHR_display")
+cmd VkResult vkGetPhysicalDeviceDisplayPropertiesKHR(
+ VkPhysicalDevice physicalDevice,
+ u32* count,
+ VkDisplayPropertiesKHR* pProperties) {
+ physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+ return ?
+}
+
+@extension("VK_EXT_KHR_display")
+cmd VkResult vkGetDisplayModePropertiesKHR(
+ VkPhysicalDevice physicalDevice,
+ VkDisplayKHR display,
+ u32* pCount,
+ VkDisplayModePropertiesKHR* pModeProperties) {
+ physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+ return ?
+}
+
+@extension("VK_EXT_KHR_display")
+cmd VkResult vkCreateDisplayModeKHR(
+ VkPhysicalDevice physicalDevice,
+ VkDisplayKHR display,
+ const VkDisplayModeCreateInfoKHR* pCreateInfo,
+ VkDisplayModeKHR* pMode) {
+ physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+ return ?
+}
+
+@extension("VK_EXT_KHR_display")
+cmd VkResult vkGetDisplayPlanePropertiesKHR(
+ VkPhysicalDevice physicalDevice,
+ VkDisplayKHR display,
+ VkDisplayModeKHR mode,
+ u32 planeIndex,
+ VkDisplayPlanePropertiesKHR* pProperties) {
+ physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+ return ?
+}
+
+@extension("VK_EXT_KHR_x11_surface")
+cmd VkResult vkCreateX11SurfaceKHR(
+ VkInstance instance,
+ platform.Display* dpy,
+ platform.Window root,
+ platform.Window window,
+ VkSurfaceKHR* pSurface) {
+ instanceObject := GetInstance(instance)
+ return ?
+}
+
+@extension("VK_EXT_KHR_xcb_surface")
+cmd VkResult vkCreateXCBSurfaceKHR(
+ VkInstance instance,
+ platform.xcb_connection_t* connection,
+ platform.xcb_window_t root,
+ platform.xcb_window_t window,
+ VkSurfaceKHR* pSurface) {
+ instanceObject := GetInstance(instance)
+ return ?
+}
+
+@extension("VK_EXT_KHR_wayland_surface")
+cmd VkResult vkCreateWaylandSurfaceKHR(
+ VkInstance instance,
+ platform.wl_display* display,
+ platform.wl_surface* surface,
+ VkSurfaceKHR* pSurface) {
+ instanceObject := GetInstance(instance)
+ return ?
+}
+
+@extension("VK_EXT_KHR_mir_surface")
+cmd VkResult vkCreateMirSurfaceKHR(
+ VkInstance instance,
+ platform.MirConnection* connection,
+ platform.MirSurface* mirSurface,
+ VkSurfaceKHR* pSurface) {
+ instanceObject := GetInstance(instance)
+ return ?
+}
+
+@extension("VK_EXT_KHR_android_surface")
+cmd VkResult vkCreateAndroidSurfaceKHR(
+ VkInstance instance,
+ platform.ANativeWindow* window
+ VkSurfaceKHR* pSurface) {
+ instanceObject := GetInstance(instance)
+ return ?
+}
+
+@extension("VK_EXT_KHR_win32_surface")
+cmd VkResult vkCreateWin32SurfaceKHR(
+ VkInstance instance,
+ platform.HINSTANCE hinstance,
+ platform.HWND hwnd,
+ VkSurfaceKHR* pSurface) {
+ instanceObject := GetInstance(instance)
+ return ?
+}
+
////////////////
// Validation //
@@ -4490,6 +4719,7 @@
map!(VkRenderPass, ref!RenderPassObject) RenderPasses
map!(VkPipelineCache, ref!PipelineCacheObject) PipelineCaches
map!(VkCmdPool, ref!CmdPoolObject) CmdPools
+ map!(VkSurfaceKHR, ref!SurfaceObject) Surfaces
map!(VkSwapchainKHR, ref!SwapchainObject) Swapchains
}
@@ -4609,6 +4839,10 @@
VkDevice device
}
+@internal class SurfaceObject {
+ VkInstance instance
+}
+
@internal class SwapchainObject {
VkDevice device
}
@@ -4743,6 +4977,11 @@
return State.CmdPools[cmdPool]
}
+macro ref!SurfaceObject GetSurface(VkSurfaceKHR surface) {
+ assert(surface in State.Surfaces)
+ return State.Surfaces[surface]
+}
+
macro ref!SwapchainObject GetSwapchain(VkSwapchainKHR swapchain) {
assert(swapchain in State.Swapchains)
return State.Swapchains[swapchain]