diff options
-rw-r--r-- | src/amd/vulkan/radv_device.c | 16 | ||||
-rw-r--r-- | src/amd/vulkan/radv_entrypoints_gen.py | 1 | ||||
-rw-r--r-- | src/amd/vulkan/radv_pipeline.c | 1 |
3 files changed, 18 insertions, 0 deletions
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index e3655dabe3a..d87be66da8b 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -157,6 +157,10 @@ static const VkExtensionProperties common_device_extensions[] = { .extensionName = VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME, .specVersion = 1, }, + { + .extensionName = VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, + .specVersion = 1, + }, }; static VkResult @@ -589,6 +593,18 @@ void radv_GetPhysicalDeviceFeatures2KHR( VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2KHR *pFeatures) { + vk_foreach_struct(ext, pFeatures->pNext) { + switch (ext->sType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR: { + VkPhysicalDeviceVariablePointerFeaturesKHR *features = (void *)ext; + features->variablePointersStorageBuffer = true; + features->variablePointers = false; + break; + } + default: + break; + } + } return radv_GetPhysicalDeviceFeatures(physicalDevice, &pFeatures->features); } diff --git a/src/amd/vulkan/radv_entrypoints_gen.py b/src/amd/vulkan/radv_entrypoints_gen.py index ec798157f94..61b23281501 100644 --- a/src/amd/vulkan/radv_entrypoints_gen.py +++ b/src/amd/vulkan/radv_entrypoints_gen.py @@ -48,6 +48,7 @@ supported_extensions = [ 'VK_KHR_external_memory', 'VK_KHR_external_memory_fd', 'VK_KHR_storage_buffer_storage_class', + 'VK_KHR_variable_pointers', ] # We generate a static hash table for entry point lookup diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 90cd716047a..c920cc35be1 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -230,6 +230,7 @@ radv_shader_compile_to_nir(struct radv_device *device, .image_write_without_format = true, .tessellation = true, .int64 = true, + .variable_pointers = true, }; entry_point = spirv_to_nir(spirv, module->size / 4, spec_entries, num_spec_entries, |