From daa9c5924b189244cef2e9117c1edaa1af954d14 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Wed, 11 Sep 2024 13:15:23 -0500 Subject: [PATCH 1/3] Also check Vulkan 1.4 features for indexTypeUint8 --- src/vulkan/device.cc | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/vulkan/device.cc b/src/vulkan/device.cc index 0aebd7c5..ed8f1f68 100644 --- a/src/vulkan/device.cc +++ b/src/vulkan/device.cc @@ -483,6 +483,7 @@ Result Device::Initialize( VkPhysicalDeviceVulkan11Features* vulkan11_ptrs = nullptr; VkPhysicalDeviceVulkan12Features* vulkan12_ptrs = nullptr; VkPhysicalDeviceVulkan13Features* vulkan13_ptrs = nullptr; + VkPhysicalDeviceVulkan14Features* vulkan14_ptrs = nullptr; VkPhysicalDeviceSubgroupSizeControlFeaturesEXT* subgroup_size_control_features = nullptr; VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* @@ -550,6 +551,9 @@ Result Device::Initialize( case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES: vulkan13_ptrs = static_cast(ptr); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES: + vulkan14_ptrs = static_cast(ptr); + break; default: break; } @@ -603,12 +607,6 @@ Result Device::Initialize( return amber::Result( "Subgroup extended types requested but feature not returned"); } - if (feature == kIndexTypeUint8 && - (index_type_uint8_ptrs == nullptr || - index_type_uint8_ptrs->indexTypeUint8 != VK_TRUE)) { - return amber::Result( - "Index type uint8_t requested but feature not returned"); - } if (feature == kAccelerationStructure && acceleration_structure_ptrs == nullptr) { return amber::Result( @@ -767,6 +765,22 @@ Result Device::Initialize( return amber::Result("Missing compute full subgroups feature"); } } + + // If Vulkan 1.4 structure exists the features are set there. + if (vulkan14_ptrs) { + if (feature == kIndexTypeUint8 && + vulkan14_ptrs->indexTypeUint8 != VK_TRUE) { + return amber::Result( + "Index type uint8_t requested but feature not returned"); + } + } else { + if (feature == kIndexTypeUint8 && + (index_type_uint8_ptrs == nullptr || + index_type_uint8_ptrs->indexTypeUint8 != VK_TRUE)) { + return amber::Result( + "Index type uint8_t requested but feature not returned"); + } + } } if (!AreAllExtensionsSupported(available_extensions, From 6f0251977e51c26609a5ceed3339537639741abf Mon Sep 17 00:00:00 2001 From: Boris Zanin Date: Wed, 25 Sep 2024 14:37:02 +0200 Subject: [PATCH 2/3] Make extention functions to be optional --- src/vulkan/device.cc | 48 ++++++++++++++++++++++++++++++------- src/vulkan/vk-funcs-1-1.inc | 18 +++++++------- tools/update_vk_wrappers.py | 29 ++++++++++++++++------ 3 files changed, 71 insertions(+), 24 deletions(-) diff --git a/src/vulkan/device.cc b/src/vulkan/device.cc index ed8f1f68..de440608 100644 --- a/src/vulkan/device.cc +++ b/src/vulkan/device.cc @@ -607,20 +607,52 @@ Result Device::Initialize( return amber::Result( "Subgroup extended types requested but feature not returned"); } - if (feature == kAccelerationStructure && - acceleration_structure_ptrs == nullptr) { - return amber::Result( - "Acceleration structure requested but feature not returned"); + if (feature == kAccelerationStructure) { + if (acceleration_structure_ptrs == nullptr) + return amber::Result( + "Acceleration structure requested but feature not returned"); + if (ptrs_.vkCreateAccelerationStructureKHR == nullptr) + return amber::Result( + "vkCreateAccelerationStructureKHR is required, but not provided"); + if (ptrs_.vkDestroyAccelerationStructureKHR == nullptr) + return amber::Result( + "vkDestroyAccelerationStructureKHR is required, but not provided"); + if (ptrs_.vkGetAccelerationStructureBuildSizesKHR == nullptr) + return amber::Result( + "vkGetAccelerationStructureBuildSizesKHR is required, but not " + "provided"); + if (ptrs_.vkBuildAccelerationStructuresKHR == nullptr) + return amber::Result( + "vkBuildAccelerationStructuresKHR is required, but not " + "provided"); + if (ptrs_.vkCmdBuildAccelerationStructuresKHR == nullptr) + return amber::Result( + "vkCmdBuildAccelerationStructuresKHR is required, but not " + "provided"); + if (ptrs_.vkGetAccelerationStructureDeviceAddressKHR == nullptr) + return amber::Result( + "vkGetAccelerationStructureDeviceAddressKHR is required, but not " + "provided"); } if (feature == kBufferDeviceAddress && bda_ptrs == nullptr && vulkan12_ptrs == nullptr) { return amber::Result( "Buffer device address requested but feature not returned"); } - if (feature == kRayTracingPipeline && - ray_tracing_pipeline_ptrs == nullptr) { - return amber::Result( - "Ray tracing pipeline requested but feature not returned"); + if (feature == kRayTracingPipeline) { + if (ray_tracing_pipeline_ptrs == nullptr) + return amber::Result( + "Ray tracing pipeline requested but feature not returned"); + if (ptrs_.vkCreateRayTracingPipelinesKHR == nullptr) + return amber::Result( + "vkCreateRayTracingPipelinesKHR is required, but not provided"); + if (ptrs_.vkCmdTraceRaysKHR == nullptr) + return amber::Result( + "vkCmdTraceRaysKHR is required, but not provided"); + if (ptrs_.vkGetRayTracingShaderGroupHandlesKHR == nullptr) + return amber::Result( + "vkGetRayTracingShaderGroupHandlesKHR is required, but not " + "provided"); } // Next check the fields of the feature structures. diff --git a/src/vulkan/vk-funcs-1-1.inc b/src/vulkan/vk-funcs-1-1.inc index db3b2c54..a116864a 100644 --- a/src/vulkan/vk-funcs-1-1.inc +++ b/src/vulkan/vk-funcs-1-1.inc @@ -1,10 +1,10 @@ AMBER_VK_FUNC(vkGetPhysicalDeviceProperties2) -AMBER_VK_FUNC(vkCreateRayTracingPipelinesKHR) -AMBER_VK_FUNC(vkCreateAccelerationStructureKHR) -AMBER_VK_FUNC(vkDestroyAccelerationStructureKHR) -AMBER_VK_FUNC(vkGetAccelerationStructureBuildSizesKHR) -AMBER_VK_FUNC(vkBuildAccelerationStructuresKHR) -AMBER_VK_FUNC(vkCmdBuildAccelerationStructuresKHR) -AMBER_VK_FUNC(vkGetAccelerationStructureDeviceAddressKHR) -AMBER_VK_FUNC(vkCmdTraceRaysKHR) -AMBER_VK_FUNC(vkGetRayTracingShaderGroupHandlesKHR) \ No newline at end of file +OPTIONAL AMBER_VK_FUNC(vkCreateRayTracingPipelinesKHR) +OPTIONAL AMBER_VK_FUNC(vkCreateAccelerationStructureKHR) +OPTIONAL AMBER_VK_FUNC(vkDestroyAccelerationStructureKHR) +OPTIONAL AMBER_VK_FUNC(vkGetAccelerationStructureBuildSizesKHR) +OPTIONAL AMBER_VK_FUNC(vkBuildAccelerationStructuresKHR) +OPTIONAL AMBER_VK_FUNC(vkCmdBuildAccelerationStructuresKHR) +OPTIONAL AMBER_VK_FUNC(vkGetAccelerationStructureDeviceAddressKHR) +OPTIONAL AMBER_VK_FUNC(vkCmdTraceRaysKHR) +OPTIONAL AMBER_VK_FUNC(vkGetRayTracingShaderGroupHandlesKHR) \ No newline at end of file diff --git a/tools/update_vk_wrappers.py b/tools/update_vk_wrappers.py index 0fc9f872..d91115b0 100755 --- a/tools/update_vk_wrappers.py +++ b/tools/update_vk_wrappers.py @@ -26,14 +26,18 @@ def read_inc(file): methods = [] - pattern = re.compile(r"AMBER_VK_FUNC\((\w+)\)") + pattern = re.compile(r"(|OPTIONAL )AMBER_VK_FUNC\((\w+)\)") with open(file, 'r') as f: for line in f: match = pattern.search(line) if match == None: raise Exception("FAILED TO MATCH PATTERN"); - methods.append(match.group(1)) + b = False + if match.group(1) != None and match.group(1) == "OPTIONAL ": + b = True + methods.append((match.group(2), b)) + return methods @@ -69,7 +73,8 @@ def read_vk(file): def gen_wrappers(methods, xml): content = "" - for method in methods: + for method_ in methods: + method = method_[0] data = xml[method] if data == None: raise Exception("Failed to find {}".format(method)) @@ -137,7 +142,8 @@ def gen_wrappers(methods, xml): def gen_headers(methods, xml): content = "" - for method in methods: + for method_ in methods: + method = method_[0] data = xml[method] if data == None: raise Exception("Failed to find {}".format(method)) @@ -161,17 +167,26 @@ def gen_direct(methods): if (!(ptrs_.${method} = reinterpret_cast(getInstanceProcAddr(instance_, "${method}")))) { return Result("Vulkan: Unable to load ${method} pointer"); } +''') + template_optional = Template(R''' +ptrs_.${method} = reinterpret_cast(getInstanceProcAddr(instance_, "${method}")); ''') - for method in methods: - content += template.substitute(method=method) + for method_ in methods: + method = method_[0] + optional = method_[1] + if (optional): + content += template_optional.substitute(method=method) + else: + content += template.substitute(method=method) return content def gen_direct_headers(methods): content = "" - for method in methods: + for method_ in methods: + method = method_[0] content += "PFN_{} {};\n".format(method, method); return content From 9b7362eec9fb120780c12bbbf7121ddf4fd8125e Mon Sep 17 00:00:00 2001 From: Lorenzo Dal Col Date: Tue, 3 Dec 2024 16:25:26 +0100 Subject: [PATCH 3/3] Update Vulkan headers, SPIRV and Vulkan validation refs --- DEPS | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/DEPS b/DEPS index e83ad0df..c5a16b77 100644 --- a/DEPS +++ b/DEPS @@ -21,13 +21,13 @@ vars = { 'json_revision': '4f8fba14066156b73f1189a2b8bd568bde5284c5', 'lodepng_revision': '5601b8272a6850b7c5d693dd0c0e16da50be8d8d', 'shaderc_revision': 'f59f0d11b80fd622383199c867137ededf89d43b', - 'spirv_headers_revision': '5e3ad389ee56fca27c9705d093ae5387ce404df4', - 'spirv_tools_revision': '9241a58a8028c49510bc174b6c970e3c2b4b8e51', + 'spirv_headers_revision': '36d5e2ddaa54c70d2f29081510c66f4fc98e5e53', + 'spirv_tools_revision': '3fb52548bc8a68d349d31e21bd4e80e3d953e87c', 'swiftshader_revision': 'da334852e70510d259bfa8cbaa7c5412966b2f41', - 'vulkan_headers_revision': '4bc77c26ff9ce89cf4a4f79e1c24a44604132d53', - 'vulkan_loader_revision': 'e69a59a96b241038f24a0e425445d001ea099b2c', - 'vulkan_utility_libraries_revision': '358a107a6ff284906dcccbabe5b0183c03fd85b6', - 'vulkan_validationlayers_revision': '23455c903e2ab21db2b4497331d80d610841cae1', + 'vulkan_headers_revision': '49af1bfe467dd5a9efc22f7867d95fdde50e2b00', + 'vulkan_loader_revision': 'ce2d68b24b66a91ed798d870ca205f899ee6e79d', + 'vulkan_utility_libraries_revision': 'b538fb5b08513aa78346cd414ad5e576a2a3e920', + 'vulkan_validationlayers_revision': '902f3cf8d51e76be0c0deb4be39c6223abebbae2', } deps = {