From 62df89cebdd771fe0050ba8072c626ae84669fbf Mon Sep 17 00:00:00 2001 From: Qining Lu Date: Thu, 27 Dec 2018 12:15:51 -0500 Subject: [PATCH] Vulkan: support of VK_KHR_maintenance3 extension --- gapis/api/vulkan/api/descriptor.api | 36 ++++++++++++++++--- gapis/api/vulkan/api/enums.api | 4 +++ gapis/api/vulkan/api/physical_device.api | 6 ++++ .../api/properties_features_requirements.api | 10 ++++++ gapis/api/vulkan/vulkan.api | 1 + 5 files changed, 53 insertions(+), 4 deletions(-) diff --git a/gapis/api/vulkan/api/descriptor.api b/gapis/api/vulkan/api/descriptor.api index 3605bdab9c..3384c17d0c 100644 --- a/gapis/api/vulkan/api/descriptor.api +++ b/gapis/api/vulkan/api/descriptor.api @@ -1038,8 +1038,7 @@ sub void registerDescriptorUser!T(ref!T user, VkDescriptorSet descSet, u32 bindi // Descriptor set layout // /////////////////////////// -@indirect("VkDevice") -cmd void vkGetDescriptorSetLayoutSupport( +sub void GetDescriptorSetLayoutSupport( VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport) { @@ -1047,9 +1046,38 @@ cmd void vkGetDescriptorSetLayoutSupport( if pCreateInfo == null { vkErrorNullPointer("VkDescriptorSetLayoutCreateInfo") } info := pCreateInfo[0] _ = info.pBindings[0:info.bindingCount] - // TODO: pNext pointer - + // handle pNext pointer + if info.pNext != null { + numPNext := numberOfPNext( + as!const void*(info.pNext)) + next := MutableVoidPtr(as!void*(info.pNext)) + for i in (0 .. numPNext) { + sType := as!const VkStructureType*(next.Ptr)[0:1][0] + _ = sType + next.Ptr = as!VulkanStructHeader*(next.Ptr)[0:1][0].PNext + } + } + fence support := ? if pSupport == null { vkErrorNullPointer("VkDescriptorSetLayoutSupport") } pSupport[0] = support + // handle pNext pointer + if support.pNext != null { + numPNext := numberOfPNext( + as!const void*(support.pNext)) + next := MutableVoidPtr(as!void*(support.pNext)) + for i in (0 .. numPNext) { + sType := as!const VkStructureType*(next.Ptr)[0:1][0] + _ = sType + next.Ptr = as!VulkanStructHeader*(next.Ptr)[0:1][0].PNext + } + } +} + +@indirect("VkDevice") +cmd void vkGetDescriptorSetLayoutSupport( + VkDevice device, + const VkDescriptorSetLayoutCreateInfo* pCreateInfo, + VkDescriptorSetLayoutSupport* pSupport) { + GetDescriptorSetLayoutSupport(device, pCreateInfo, pSupport) } diff --git a/gapis/api/vulkan/api/enums.api b/gapis/api/vulkan/api/enums.api index dd48d1004d..fd2c548582 100644 --- a/gapis/api/vulkan/api/enums.api +++ b/gapis/api/vulkan/api/enums.api @@ -235,6 +235,10 @@ enum VkStructureType { VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR = 1000117002, VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR = 1000117003, + //@extension("VK_KHR_maintenance3") + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR = 1000168000, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR = 1000168001, + // Vulkan 1.1 core VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES = 1000094000, VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO = 1000157000, diff --git a/gapis/api/vulkan/api/physical_device.api b/gapis/api/vulkan/api/physical_device.api index ac8a04471a..86c6922464 100644 --- a/gapis/api/vulkan/api/physical_device.api +++ b/gapis/api/vulkan/api/physical_device.api @@ -49,6 +49,7 @@ // Vulkan 1.1 core @unused ref!PointClippingProperties PointClippingProperties + @unused ref!Maintenance3Properties Maintenance3Properties } @internal class PhysicalDevicesAndProperties { @@ -121,4 +122,9 @@ cmd VkResult vkEnumeratePhysicalDevices( @internal class PointClippingProperties { VkPointClippingBehavior PointClippingBehavior +} + +@internal class Maintenance3Properties { + u32 MaxPerSetDescriptors + VkDeviceSize MaxMemoryAllocationSize } \ No newline at end of file diff --git a/gapis/api/vulkan/api/properties_features_requirements.api b/gapis/api/vulkan/api/properties_features_requirements.api index 8d450dcdb9..d4cff47095 100644 --- a/gapis/api/vulkan/api/properties_features_requirements.api +++ b/gapis/api/vulkan/api/properties_features_requirements.api @@ -450,6 +450,9 @@ sub void GetPhysicalDeviceProperties2( case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: { _ = as!VkPhysicalDevicePointClippingProperties*(next.Ptr)[0] } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: { + _ = as!VkPhysicalDeviceMaintenance3Properties*(next.Ptr)[0] + } } next.Ptr = as!VulkanStructHeader*(next.Ptr)[0:1][0].PNext } @@ -477,6 +480,13 @@ sub void GetPhysicalDeviceProperties2( PointClippingBehavior: ext.pointClippingBehavior ) } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: { + ext := as!VkPhysicalDeviceMaintenance3Properties*(next.Ptr)[0] + phyDev.Maintenance3Properties = new!Maintenance3Properties( + MaxPerSetDescriptors: ext.maxPerSetDescriptors, + MaxMemoryAllocationSize: ext.maxMemoryAllocationSize, + ) + } } next.Ptr = as!VulkanStructHeader*(next.Ptr)[0:1][0].PNext } diff --git a/gapis/api/vulkan/vulkan.api b/gapis/api/vulkan/vulkan.api index 937886a905..d9f0e314c4 100644 --- a/gapis/api/vulkan/vulkan.api +++ b/gapis/api/vulkan/vulkan.api @@ -213,6 +213,7 @@ sub ref!ExtensionSet supportedDeviceExtensions() { supported.ExtensionNames["VK_KHR_16bit_storage"] = true supported.ExtensionNames["VK_KHR_maintenance1"] = true supported.ExtensionNames["VK_KHR_maintenance2"] = true + supported.ExtensionNames["VK_KHR_maintenance3"] = true return supported }