From 4f56a81f276c46f90338b9559a9b646e139d9a27 Mon Sep 17 00:00:00 2001 From: Qining Lu Date: Tue, 18 Dec 2018 12:45:17 -0500 Subject: [PATCH] Vulkan: Merge API logic of KHR extensions and Vulkan 1.1 KHR_get_physical_device_properties2 and KHR-get_memory_requirements2 are merged with corresponding vulkan 1.1 core commands --- gapis/api/vulkan/api/buffer.api | 2 +- gapis/api/vulkan/api/image.api | 2 +- .../api/properties_features_requirements.api | 358 ++++++++++++++++-- .../extensions/khr_dedicated_allocation.api | 11 +- .../khr_get_memory_requirements2.api | 137 +------ .../khr_get_physical_device_properties2.api | 87 ++--- .../khr_get_surface_capabilities2.api | 8 + .../extensions/nv_dedicated_allocation.api | 4 + 8 files changed, 390 insertions(+), 219 deletions(-) diff --git a/gapis/api/vulkan/api/buffer.api b/gapis/api/vulkan/api/buffer.api index b32d0685d3..31c9d50c98 100644 --- a/gapis/api/vulkan/api/buffer.api +++ b/gapis/api/vulkan/api/buffer.api @@ -59,7 +59,7 @@ @untracked @unused ref!QueueObject LastBoundQueue @unused ref!VulkanDebugMarkerInfo DebugInfo VkMemoryRequirements MemoryRequirements - ref!DedicatedRequirementsKHR DedicatedRequirementsKHR + ref!DedicatedRequirements DedicatedRequirements } @threadSafety("system") diff --git a/gapis/api/vulkan/api/image.api b/gapis/api/vulkan/api/image.api index 3e9917d1e8..325e75ac3f 100644 --- a/gapis/api/vulkan/api/image.api +++ b/gapis/api/vulkan/api/image.api @@ -73,7 +73,7 @@ @unused ref!VulkanDebugMarkerInfo DebugInfo VkMemoryRequirements MemoryRequirements map!(u32, VkSparseImageMemoryRequirements) SparseMemoryRequirements - ref!DedicatedRequirementsKHR DedicatedRequirementsKHR + ref!DedicatedRequirements DedicatedRequirements // If ever layer/level is set to the same queue, then set it here instead. // This can save expensive looping through Aspects/Layers/Levels @untracked @unused ref!QueueObject LastBoundQueue diff --git a/gapis/api/vulkan/api/properties_features_requirements.api b/gapis/api/vulkan/api/properties_features_requirements.api index be629a5d4a..71a6059cb2 100644 --- a/gapis/api/vulkan/api/properties_features_requirements.api +++ b/gapis/api/vulkan/api/properties_features_requirements.api @@ -323,15 +323,43 @@ cmd VkResult vkEnumerateInstanceVersion( // Physical Device // ///////////////////// +sub void GetPhysicalDeviceFeatures2( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceFeatures2* pFeatures) { + if !(physicalDevice in PhysicalDevices) { + vkErrorInvalidPhysicalDevice(physicalDevice) + } else { + if pFeatures == null { + vkErrorNullPointer("VkPhysicalDeviceFeatures2(KHR)") + } else { + pFeatures[0] = ? + // TODO: handle pNext + } + } +} + @threadSafety("system") @indirect("VkPhysicalDevice", "VkInstance") cmd void vkGetPhysicalDeviceFeatures2( VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures) { - if !(physicalDevice in PhysicalDevices) { vkErrorInvalidPhysicalDevice(physicalDevice) } - if pFeatures == null { vkErrorNullPointer("VkPhysicalDeviceFeatures2") } - pFeatures[0] = ? - // TODO: handle pNext + GetPhysicalDeviceFeatures2(physicalDevice, pFeatures) +} + +sub void GetPhysicalDeviceFormatProperties2( + VkPhysicalDevice physicalDevice, + VkFormat format, + VkFormatProperties2* pFormatProperties) { + if !(physicalDevice in PhysicalDevices) { + vkErrorInvalidPhysicalDevice(physicalDevice) + } else { + if pFormatProperties == null { + vkErrorNullPointer("VkFormatProperties2(KHR)") + } else { + pFormatProperties[0] = ? + // TODO: handle pNext + } + } } @threadSafety("system") @@ -340,10 +368,37 @@ cmd void vkGetPhysicalDeviceFormatProperties2( VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties) { - if !(physicalDevice in PhysicalDevices) { vkErrorInvalidPhysicalDevice(physicalDevice) } - if pFormatProperties == null { vkErrorNullPointer("VkFormatProperties2") } - pFormatProperties[0] = ? - // TODO: handle pNext + GetPhysicalDeviceFormatProperties2(physicalDevice, format, pFormatProperties) +} + +sub void GetPhysicalDeviceImageFormatProperties2( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, + VkImageFormatProperties2* pImageFormatProperties) { + if pImageFormatInfo == null { + vkErrorNullPointer("const VkPhysicalDeviceImageFormatInfo2(KHR)") + } else { + info := pImageFormatInfo[0] + // handle pNext in format info + if info.pNext != null { + numPNext := numberOfPNext(info.pNext) + next := MutableVoidPtr(as!void*(info.pNext)) + for i in (0 .. numPNext) { + sType := as!const VkStructureType*(next.Ptr)[0:1][0] + _ = sType + // TODO: handle extensions for VkPhysicalDeviceImageFormatInfo2 + next.Ptr = as!VulkanStructHeader*(next.Ptr)[0:1][0].PNext + } + } + } + if pImageFormatProperties == null { + vkErrorNullPointer("VkImageFormatProperties2(KHR)") + } + fence + pImageFormatProperties[0] = ? + props := pImageFormatProperties[0] + _ = props + // TODO: handle pNext in format properties } @threadSafety("system") @@ -352,34 +407,289 @@ cmd VkResult vkGetPhysicalDeviceImageFormatProperties2( VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties) { - if !(physicalDevice in PhysicalDevices) { vkErrorInvalidPhysicalDevice(physicalDevice) } - if pImageFormatInfo == null { vkErrorNullPointer("const VkPhysicalDeviceImageFormatInfo2") } - if pImageFormatProperties == null { vkErrorNullPointer("VkImageFormatProperties2") } - info := pImageFormatInfo[0] - // handle pNext + GetPhysicalDeviceImageFormatProperties2( + physicalDevice, pImageFormatInfo, pImageFormatProperties) + return ? +} + +sub void GetPhysicalDeviceProperties2( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties2* pProperties) { + if pProperties == null { + vkErrorNullPointer("VkPhysicalDeviceProperties2") + } else { + pProperties[0] = ? + // TODO: handle pNext + if !(physicalDevice in PhysicalDevices) { + vkErrorInvalidPhysicalDevice(physicalDevice) + } else { + PhysicalDevices[physicalDevice].PhysicalDeviceProperties = pProperties[0].properties + } + } +} + +@threadSafety("system") +@indirect("VkPhysicalDevice", "VkInstance") +cmd void vkGetPhysicalDeviceProperties2( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties2* pProperties) { + GetPhysicalDeviceProperties2(physicalDevice, pProperties) +} + +sub void GetPhysicalDeviceMemoryProperties2( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties2* pMemoryProperties) { + if pMemoryProperties == null { + vkErrorNullPointer("VkPhysicalDeviceMemoryProperties2(KHR)") + } + fence + pMemoryProperties[0] = ? + memoryProperties := pMemoryProperties[0] + + if !(physicalDevice in PhysicalDevices) { + vkErrorInvalidPhysicalDevice(physicalDevice) + } else { + PhysicalDevices[physicalDevice].MemoryProperties = memoryProperties.memoryProperties + // handle pNext + } +} + +@threadSafety("system") +@indirect("VkPhysicalDevice", "VkInstance") +cmd void vkGetPhysicalDeviceMemoryProperties2( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties2* pMemoryProperties) { + GetPhysicalDeviceMemoryProperties2(physicalDevice, pMemoryProperties) +} + +sub void GetPhysicalDeviceSparseImageFormatProperties2( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, + u32* pPropertyCount, + VkSparseImageFormatProperties2* pProperties) { + if !(physicalDevice in PhysicalDevices) { + vkErrorInvalidPhysicalDevice(physicalDevice) + } + if pPropertyCount == null { vkErrorNullPointer("uint32_t") } + info := pFormatInfo[0] + // handle pNext in pFormatInfo if info.pNext != null { numPNext := numberOfPNext(info.pNext) next := MutableVoidPtr(as!void*(info.pNext)) for i in (0 .. numPNext) { sType := as!const VkStructureType*(next.Ptr)[0:1][0] _ = sType - // TODO: handle extensions for VkPhysicalDeviceImageFormatInfo2 + // TODO: handle extensions for VkPhysicalDeviceSparseImageFormatInfo2KHR next.Ptr = as!VulkanStructHeader*(next.Ptr)[0:1][0].PNext } } - pImageFormatProperties[0] = ? - // TODO: handle pNext - return ? + + _ = pPropertyCount[0] + + if pProperties == null { + pPropertyCount[0] = ? + } else { + count := as!u32(?) + properties := pProperties[0:count] + for i in (0 .. count) { + properties[i] = ? + // TODO: handle pNext in pProperties + } + pPropertyCount[0] = count + } } @threadSafety("system") @indirect("VkPhysicalDevice", "VkInstance") -cmd void vkGetPhysicalDeviceProperties2( - VkPhysicalDevice physicalDevice, - VkPhysicalDeviceProperties2* pProperties) { - if !(physicalDevice in PhysicalDevices) { vkErrorInvalidPhysicalDevice(physicalDevice) } - if pProperties == null { vkErrorNullPointer("VkPhysicalDeviceProperties2") } - pProperties[0] = ? +cmd void vkGetPhysicalDeviceSparseImageFormatProperties2( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, + u32* pPropertyCount, + VkSparseImageFormatProperties2* pProperties) { + GetPhysicalDeviceSparseImageFormatProperties2( + physicalDevice, pFormatInfo, pPropertyCount, pProperties) +} + +//////////// +// Buffer // +//////////// + +sub void GetBufferMemoryRequirements2( + VkDevice device, + const VkBufferMemoryRequirementsInfo2* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { + if !(device in Devices) { vkErrorInvalidDevice(device) } + info := pInfo[0] // TODO: handle pNext - PhysicalDevices[physicalDevice].PhysicalDeviceProperties = pProperties[0].properties + + memReqs := pMemoryRequirements[0] + if memReqs.pNext != null { + nPNext := numberOfPNext(as!const void*(memReqs.pNext)) + next := MutableVoidPtr(as!void*(memReqs.pNext)) + for i in (0 .. nPNext) { + _ = as!const VkStructureType*(next.Ptr)[0] + next.Ptr = as!VulkanStructHeader*(next.Ptr)[0].PNext + } + } + + fence + + if pMemoryRequirements == null { vkErrorNullPointer("VkMemoryRequirements2(KHR)") } + pMemoryRequirements[0] = ? + // TODO: handle pNext for 'memReq' + memReq := pMemoryRequirements[0] + if !(info.buffer in Buffers) { vkErrorInvalidBuffer(info.buffer) } + // TODO: Do the touch of the buffer object once we extract the memory + // requirement info out of the buffer objectd. + Buffers[info.buffer].MemoryRequirements = memReq.memoryRequirements + + if memReq.pNext != null { + numPNext := numberOfPNext(as!const void*(memReq.pNext)) + next := MutableVoidPtr(as!void*(memReq.pNext)) + for i in (0 .. numPNext) { + sType := as!const VkStructureType*(next.Ptr)[0] + switch sType { + case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS: { + ext := as!VkMemoryDedicatedRequirements(?) + Buffers[info.buffer].DedicatedRequirements = new!DedicatedRequirements( + PrefersDedicatedAllocation: ext.prefersDedicatedAllocation, + RequiresDedicatedAllocation: ext.requiresDedicatedAllocation, + ) + as!VkMemoryDedicatedRequirements*(next.Ptr)[0] = ext + } + } + next.Ptr = as!VulkanStructHeader*(next.Ptr)[0].PNext + } + } } + +@threadSafety("system") +@indirect("VkDevice") +cmd void vkGetBufferMemoryRequirements2( + VkDevice device, + const VkBufferMemoryRequirementsInfo2* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { + GetBufferMemoryRequirements2(device, pInfo, pMemoryRequirements) +} + +/////////// +// Image // +/////////// + +sub void GetImageMemoryRequirements2( + VkDevice device, + const VkImageMemoryRequirementsInfo2* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { + if !(device in Devices) { vkErrorInvalidDevice(device) } + info := pInfo[0] + memReqs := pMemoryRequirements[0] + if memReqs.pNext != null { + nPNext := numberOfPNext(as!const void*(memReqs.pNext)) + next := MutableVoidPtr(as!void*(memReqs.pNext)) + for i in (0 .. nPNext) { + _ = as!const VkStructureType*(next.Ptr)[0] + next.Ptr = as!VulkanStructHeader*(next.Ptr)[0].PNext + } + } + + // TODO: handle pNext for 'info' + fence + + if pMemoryRequirements == null { vkErrorNullPointer("VkMemoryRequirements2(KHR)") } + pMemoryRequirements[0] = ? + memReq := pMemoryRequirements[0] + + if !(info.image in Images) { vkErrorInvalidImage(info.image) } + // TODO: Drop the touch of the image object once we extract the memory + // requirement info out of the image object. + Images[info.image].MemoryRequirements = memReq.memoryRequirements + + if memReq.pNext != null { + numPNext := numberOfPNext(as!const void*(memReq.pNext)) + next := MutableVoidPtr(as!void*(memReq.pNext)) + for i in (0 .. numPNext) { + sType := as!const VkStructureType*(next.Ptr)[0] + switch sType { + case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS: { + ext := as!VkMemoryDedicatedRequirements(?) + Images[info.image].DedicatedRequirements = new!DedicatedRequirements( + PrefersDedicatedAllocation: ext.prefersDedicatedAllocation, + RequiresDedicatedAllocation: ext.requiresDedicatedAllocation, + ) + as!VkMemoryDedicatedRequirements*(next.Ptr)[0] = ext + } + } + next.Ptr = as!VulkanStructHeader*(next.Ptr)[0].PNext + } + } +} + +@threadSafety("system") +@indirect("VkDevice") +cmd void vkGetImageMemoryRequirements2( + VkDevice device, + const VkImageMemoryRequirementsInfo2* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { + GetImageMemoryRequirements2(device, pInfo, pMemoryRequirements) +} + +sub void GetImageSparseMemoryRequirements2( + VkDevice device, + const VkImageSparseMemoryRequirementsInfo2* pInfo, + u32* pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) { + if !(device in Devices) { vkErrorInvalidDevice(device) } + info := pInfo[0] + image := info.image + if !(image in Images) { vkErrorInvalidImage(image) } + // handle pNext + if info.pNext != null { + numPNext := numberOfPNext(info.pNext) + next := MutableVoidPtr(as!void*(info.pNext)) + for i in (0 .. numPNext) { + sType := as!const VkStructureType*(next.Ptr)[0:1][0] + _ = sType + // TODO: handle extensions for VkImageSparseMemoryRequirementsInfo2 + next.Ptr = as!VulkanStructHeader*(next.Ptr)[0:1][0].PNext + } + } + if pSparseMemoryRequirementCount == null { vkErrorNullPointer("uint32_t") } + read(pSparseMemoryRequirementCount[0:1]) + + fence + + if pSparseMemoryRequirements == null { + pSparseMemoryRequirementCount[0] = ? + } else { + count := as!u32(?) + requirements := pSparseMemoryRequirements[0:count] + for i in (0 .. count) { + requirements[i] = ? + // TODO: handle pNext for 'requirements[i]' + aspect := requirements[i].memoryRequirements.formatProperties.aspectMask + // TODO: Drop the touch of the image object. + Images[image].SparseMemoryRequirements[as!u32(aspect)] = requirements[i].memoryRequirements + } + pSparseMemoryRequirementCount[0] = count + } +} + +@threadSafety("system") +@indirect("VkDevice") +cmd void vkGetImageSparseMemoryRequirements2( + VkDevice device, + const VkImageSparseMemoryRequirementsInfo2* pInfo, + u32* pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) { + GetImageSparseMemoryRequirements2( + device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements) +} + +//////////////////// +// State tracking // +//////////////////// + +@internal class DedicatedRequirements { + VkBool32 PrefersDedicatedAllocation + VkBool32 RequiresDedicatedAllocation +} \ No newline at end of file diff --git a/gapis/api/vulkan/extensions/khr_dedicated_allocation.api b/gapis/api/vulkan/extensions/khr_dedicated_allocation.api index 79eccb2314..e9828d8cc1 100644 --- a/gapis/api/vulkan/extensions/khr_dedicated_allocation.api +++ b/gapis/api/vulkan/extensions/khr_dedicated_allocation.api @@ -54,13 +54,4 @@ class VkMemoryDedicatedAllocationInfoKHR { const void* pNext VkImage image VkBuffer buffer -} - -//////////////////// -// State tracking // -//////////////////// - -@internal class DedicatedRequirementsKHR { - VkBool32 PrefersDedicatedAllocation - VkBool32 RequiresDedicatedAllocation -} +} \ No newline at end of file diff --git a/gapis/api/vulkan/extensions/khr_get_memory_requirements2.api b/gapis/api/vulkan/extensions/khr_get_memory_requirements2.api index 72722acb3d..ee35c75616 100644 --- a/gapis/api/vulkan/extensions/khr_get_memory_requirements2.api +++ b/gapis/api/vulkan/extensions/khr_get_memory_requirements2.api @@ -36,6 +36,10 @@ // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE // MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +///////////// +// Structs // +///////////// + @extension("VK_KHR_get_memory_requirements2") class VkBufferMemoryRequirementsInfo2KHR { VkStructureType sType @@ -71,54 +75,19 @@ class VkSparseImageMemoryRequirements2KHR { VkSparseImageMemoryRequirements memoryRequirements } +////////////// +// Commands // +////////////// + @extension("VK_KHR_get_memory_requirements2") @indirect("VkDevice") cmd void vkGetImageMemoryRequirements2KHR( VkDevice device, const VkImageMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements) { - if !(device in Devices) { vkErrorInvalidDevice(device) } - info := pInfo[0] - memReqs := pMemoryRequirements[0] - if memReqs.pNext != null { - nPNext := numberOfPNext(as!const void*(memReqs.pNext)) - next := MutableVoidPtr(as!void*(memReqs.pNext)) - for i in (0 .. nPNext) { - _ = as!const VkStructureType*(next.Ptr)[0] - next.Ptr = as!VulkanStructHeader*(next.Ptr)[0].PNext - } - } - - // TODO: handle pNext for 'info' - fence - - if pMemoryRequirements == null { vkErrorNullPointer("VkMemoryRequirements2KHR") } - pMemoryRequirements[0] = ? - memReq := pMemoryRequirements[0] - - if !(info.image in Images) { vkErrorInvalidImage(info.image) } - // TODO: Drop the touch of the image object once we extract the memory - // requirement info out of the image object. - Images[info.image].MemoryRequirements = memReq.memoryRequirements - - if memReq.pNext != null { - numPNext := numberOfPNext(as!const void*(memReq.pNext)) - next := MutableVoidPtr(as!void*(memReq.pNext)) - for i in (0 .. numPNext) { - sType := as!const VkStructureType*(next.Ptr)[0] - switch sType { - case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR: { - ext := as!VkMemoryDedicatedRequirementsKHR(?) - Images[info.image].DedicatedRequirementsKHR = new!DedicatedRequirementsKHR( - PrefersDedicatedAllocation: ext.prefersDedicatedAllocation, - RequiresDedicatedAllocation: ext.requiresDedicatedAllocation, - ) - as!VkMemoryDedicatedRequirementsKHR*(next.Ptr)[0] = ext - } - } - next.Ptr = as!VulkanStructHeader*(next.Ptr)[0].PNext - } - } + GetImageMemoryRequirements2(device, + as!const VkImageMemoryRequirementsInfo2*(pInfo), + as!VkMemoryRequirements2*(pMemoryRequirements)) } @extension("VK_KHR_get_memory_requirements2") @@ -127,49 +96,9 @@ cmd void vkGetBufferMemoryRequirements2KHR( VkDevice device, const VkBufferMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements) { - if !(device in Devices) { vkErrorInvalidDevice(device) } - info := pInfo[0] - // TODO: handle pNext - - memReqs := pMemoryRequirements[0] - if memReqs.pNext != null { - nPNext := numberOfPNext(as!const void*(memReqs.pNext)) - next := MutableVoidPtr(as!void*(memReqs.pNext)) - for i in (0 .. nPNext) { - _ = as!const VkStructureType*(next.Ptr)[0] - next.Ptr = as!VulkanStructHeader*(next.Ptr)[0].PNext - } - } - - fence - - if pMemoryRequirements == null { vkErrorNullPointer("VkMemoryRequirements2KHR") } - pMemoryRequirements[0] = ? - // TODO: handle pNext for 'memReq' - memReq := pMemoryRequirements[0] - if !(info.buffer in Buffers) { vkErrorInvalidBuffer(info.buffer) } - // TODO: Do the touch of the buffer object once we extract the memory - // requirement info out of the buffer objectd. - Buffers[info.buffer].MemoryRequirements = memReq.memoryRequirements - - if memReq.pNext != null { - numPNext := numberOfPNext(as!const void*(memReq.pNext)) - next := MutableVoidPtr(as!void*(memReq.pNext)) - for i in (0 .. numPNext) { - sType := as!const VkStructureType*(next.Ptr)[0] - switch sType { - case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR: { - ext := as!VkMemoryDedicatedRequirementsKHR(?) - Buffers[info.buffer].DedicatedRequirementsKHR = new!DedicatedRequirementsKHR( - PrefersDedicatedAllocation: ext.prefersDedicatedAllocation, - RequiresDedicatedAllocation: ext.requiresDedicatedAllocation, - ) - as!VkMemoryDedicatedRequirementsKHR*(next.Ptr)[0] = ext - } - } - next.Ptr = as!VulkanStructHeader*(next.Ptr)[0].PNext - } - } + GetBufferMemoryRequirements2(device, + as!const VkBufferMemoryRequirementsInfo2*(pInfo), + as!VkMemoryRequirements2*(pMemoryRequirements)) } @extension("VK_KHR_get_memory_requirements2") @@ -179,38 +108,8 @@ cmd void vkGetImageSparseMemoryRequirements2KHR( const VkImageSparseMemoryRequirementsInfo2KHR* pInfo, u32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2KHR* pSparseMemoryRequirements) { - if !(device in Devices) { vkErrorInvalidDevice(device) } - info := pInfo[0] - image := info.image - if !(image in Images) { vkErrorInvalidImage(image) } - // handle pNext - if info.pNext != null { - numPNext := numberOfPNext(info.pNext) - next := MutableVoidPtr(as!void*(info.pNext)) - for i in (0 .. numPNext) { - sType := as!const VkStructureType*(next.Ptr)[0:1][0] - _ = sType - // TODO: handle extensions for VkImageSparseMemoryRequirementsInfo2KHR - next.Ptr = as!VulkanStructHeader*(next.Ptr)[0:1][0].PNext - } - } - if pSparseMemoryRequirementCount == null { vkErrorNullPointer("uint32_t") } - read(pSparseMemoryRequirementCount[0:1]) - - fence - - if pSparseMemoryRequirements == null { - pSparseMemoryRequirementCount[0] = ? - } else { - count := as!u32(?) - requirements := pSparseMemoryRequirements[0:count] - for i in (0 .. count) { - requirements[i] = ? - // TODO: handle pNext for 'requirements[i]' - aspect := requirements[i].memoryRequirements.formatProperties.aspectMask - // TODO: Drop the touch of the image object. - Images[image].SparseMemoryRequirements[as!u32(aspect)] = requirements[i].memoryRequirements - } - pSparseMemoryRequirementCount[0] = count - } + GetImageSparseMemoryRequirements2(device, + as!const VkImageSparseMemoryRequirementsInfo2*(pInfo), + pSparseMemoryRequirementCount, + as!VkSparseImageMemoryRequirements2*(pSparseMemoryRequirements)) } diff --git a/gapis/api/vulkan/extensions/khr_get_physical_device_properties2.api b/gapis/api/vulkan/extensions/khr_get_physical_device_properties2.api index dcf2341c41..68fed47dfb 100644 --- a/gapis/api/vulkan/extensions/khr_get_physical_device_properties2.api +++ b/gapis/api/vulkan/extensions/khr_get_physical_device_properties2.api @@ -36,6 +36,10 @@ // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE // MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +///////////// +// Structs // +///////////// + @extension("VK_KHR_get_physical_device_properties2") class VkPhysicalDeviceFeatures2KHR { VkStructureType sType @@ -107,16 +111,18 @@ class VkPhysicalDeviceSparseImageFormatInfo2KHR { VkImageTiling tiling } +////////////// +// Commands // +////////////// + @threadSafety("system") @indirect("VkPhysicalDevice", "VkInstance") @extension("VK_KHR_get_physical_device_properties2") cmd void vkGetPhysicalDeviceFeatures2KHR( VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2KHR* pFeatures) { - if !(physicalDevice in PhysicalDevices) { vkErrorInvalidPhysicalDevice(physicalDevice) } - if pFeatures == null { vkErrorNullPointer("VkPhysicalDeviceFeatures2KHR") } - pFeatures[0] = ? - // TODO: handle pNext + GetPhysicalDeviceFeatures2(physicalDevice, + as!VkPhysicalDeviceFeatures2*(pFeatures)) } @threadSafety("system") @@ -125,11 +131,8 @@ cmd void vkGetPhysicalDeviceFeatures2KHR( cmd void vkGetPhysicalDeviceProperties2KHR( VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2KHR* pProperties) { - if !(physicalDevice in PhysicalDevices) { vkErrorInvalidPhysicalDevice(physicalDevice) } - if pProperties == null { vkErrorNullPointer("VkPhysicalDeviceProperties2KHR") } - pProperties[0] = ? - // TODO: handle pNext - PhysicalDevices[physicalDevice].PhysicalDeviceProperties = pProperties[0].properties + GetPhysicalDeviceProperties2(physicalDevice, + as!VkPhysicalDeviceProperties2*(pProperties)) } @threadSafety("system") @@ -139,10 +142,8 @@ cmd void vkGetPhysicalDeviceFormatProperties2KHR( VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2KHR* pFormatProperties) { - if !(physicalDevice in PhysicalDevices) { vkErrorInvalidPhysicalDevice(physicalDevice) } - if pFormatProperties == null { vkErrorNullPointer("VkFormatProperties2KHR") } - pFormatProperties[0] = ? - // TODO: handle pNext + GetPhysicalDeviceFormatProperties2(physicalDevice, format, + as!VkFormatProperties2*(pFormatProperties)) } @threadSafety("system") @@ -152,23 +153,9 @@ cmd VkResult vkGetPhysicalDeviceImageFormatProperties2KHR( VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2KHR* pImageFormatInfo, VkImageFormatProperties2KHR* pImageFormatProperties) { - if !(physicalDevice in PhysicalDevices) { vkErrorInvalidPhysicalDevice(physicalDevice) } - if pImageFormatInfo == null { vkErrorNullPointer("const VkPhysicalDeviceImageFormatInfo2KHR") } - if pImageFormatProperties == null { vkErrorNullPointer("VkImageFormatProperties2KHR") } - info := pImageFormatInfo[0] - // handle pNext - if info.pNext != null { - numPNext := numberOfPNext(info.pNext) - next := MutableVoidPtr(as!void*(info.pNext)) - for i in (0 .. numPNext) { - sType := as!const VkStructureType*(next.Ptr)[0:1][0] - _ = sType - // TODO: handle extensions for VkPhysicalDeviceImageFormatInfo2KHR - next.Ptr = as!VulkanStructHeader*(next.Ptr)[0:1][0].PNext - } - } - pImageFormatProperties[0] = ? - // TODO: handle pNext + GetPhysicalDeviceImageFormatProperties2(physicalDevice, + as!const VkPhysicalDeviceImageFormatInfo2*(pImageFormatInfo), + as!VkImageFormatProperties2*(pImageFormatProperties)) return ? } @@ -208,13 +195,8 @@ cmd void vkGetPhysicalDeviceQueueFamilyProperties2KHR( cmd void vkGetPhysicalDeviceMemoryProperties2KHR( VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2KHR* pMemoryProperties) { - if pMemoryProperties == null { vkErrorNullPointer("VkPhysicalDeviceMemoryProperties2KHR") } - fence - pMemoryProperties[0] = ? - memoryProperties := pMemoryProperties[0] - - if !(physicalDevice in PhysicalDevices) { vkErrorInvalidPhysicalDevice(physicalDevice) } - PhysicalDevices[physicalDevice].MemoryProperties = memoryProperties.memoryProperties + GetPhysicalDeviceMemoryProperties2(physicalDevice, + as!VkPhysicalDeviceMemoryProperties2*(pMemoryProperties)) } @threadSafety("system") @@ -225,31 +207,8 @@ cmd void vkGetPhysicalDeviceSparseImageFormatProperties2KHR( const VkPhysicalDeviceSparseImageFormatInfo2KHR* pFormatInfo, u32* pPropertyCount, VkSparseImageFormatProperties2KHR* pProperties) { - if !(physicalDevice in PhysicalDevices) { vkErrorInvalidPhysicalDevice(physicalDevice) } - if pPropertyCount == null { vkErrorNullPointer("uint32_t") } - info := pFormatInfo[0] - // handle pNext - if info.pNext != null { - numPNext := numberOfPNext(info.pNext) - next := MutableVoidPtr(as!void*(info.pNext)) - for i in (0 .. numPNext) { - sType := as!const VkStructureType*(next.Ptr)[0:1][0] - _ = sType - // TODO: handle extensions for VkPhysicalDeviceSparseImageFormatInfo2KHR - next.Ptr = as!VulkanStructHeader*(next.Ptr)[0:1][0].PNext - } - } - - _ = pPropertyCount[0] - - if pProperties == null { - pPropertyCount[0] = ? - } else { - count := as!u32(?) - properties := pProperties[0:count] - for i in (0 .. count) { - properties[i] = ? - } - pPropertyCount[0] = count - } + GetPhysicalDeviceSparseImageFormatProperties2(physicalDevice, + as!const VkPhysicalDeviceSparseImageFormatInfo2*(pFormatInfo), + pPropertyCount, + as!VkSparseImageFormatProperties2*(pProperties)) } diff --git a/gapis/api/vulkan/extensions/khr_get_surface_capabilities2.api b/gapis/api/vulkan/extensions/khr_get_surface_capabilities2.api index ccfdec3ab4..e7893847c1 100644 --- a/gapis/api/vulkan/extensions/khr_get_surface_capabilities2.api +++ b/gapis/api/vulkan/extensions/khr_get_surface_capabilities2.api @@ -36,6 +36,10 @@ // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE // MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +///////////// +// Structs // +///////////// + @extension("VK_KHR_get_surface_capabilities2") class VkPhysicalDeviceSurfaceInfo2KHR { VkStructureType sType @@ -57,6 +61,10 @@ class VkSurfaceFormat2KHR { VkSurfaceFormatKHR surfaceFormat } +////////////// +// Commands // +////////////// + @threadSafety("system") @indirect("VkPhysicalDevice", "VkInstance") @extension("VK_KHR_get_surface_capabilities2") diff --git a/gapis/api/vulkan/extensions/nv_dedicated_allocation.api b/gapis/api/vulkan/extensions/nv_dedicated_allocation.api index 3b9ce31903..05e531bb4c 100644 --- a/gapis/api/vulkan/extensions/nv_dedicated_allocation.api +++ b/gapis/api/vulkan/extensions/nv_dedicated_allocation.api @@ -36,6 +36,10 @@ // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE // MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +///////////// +// Structs // +///////////// + @unused @extension("VK_NV_dedicated_allocation") bitfield VkExternalMemoryHandleTypeFlagBitsNV {