diff --git a/src/panfrost/ci/deqp-panfrost-g52-vk.toml b/src/panfrost/ci/deqp-panfrost-g52-vk.toml index dc96016a30d..76f92d81647 100644 --- a/src/panfrost/ci/deqp-panfrost-g52-vk.toml +++ b/src/panfrost/ci/deqp-panfrost-g52-vk.toml @@ -33,6 +33,7 @@ include = [ "dEQP-VK.pipeline.stencil.*", "dEQP-VK.rasterization.interpolation.*", "dEQP-VK.rasterization.primitive_size.*", + "dEQP-VK.robustness.buffer_access.*", "dEQP-VK.spirv_assembly.instruction.compute.opquantize.*", "dEQP-VK.spirv_assembly.instruction.compute.shader_default_output.*", "dEQP-VK.spirv_assembly.instruction.compute.workgroup_memory.*", diff --git a/src/panfrost/vulkan/panvk_device.c b/src/panfrost/vulkan/panvk_device.c index e1514f18b00..94b28d7e3a8 100644 --- a/src/panfrost/vulkan/panvk_device.c +++ b/src/panfrost/vulkan/panvk_device.c @@ -475,6 +475,7 @@ panvk_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2 *pFeatures) { pFeatures->features = (VkPhysicalDeviceFeatures) { + .robustBufferAccess = true, .fullDrawIndexUint32 = true, .independentBlend = true, .logicOp = true, diff --git a/src/panfrost/vulkan/panvk_vX_nir_lower_descriptors.c b/src/panfrost/vulkan/panvk_vX_nir_lower_descriptors.c index 1a2785dbdf0..b118edcfaea 100644 --- a/src/panfrost/vulkan/panvk_vX_nir_lower_descriptors.c +++ b/src/panfrost/vulkan/panvk_vX_nir_lower_descriptors.c @@ -486,7 +486,9 @@ panvk_per_arch(nir_lower_descriptors)(nir_shader *nir, .layout = layout, .desc_addr_format = nir_address_format_32bit_index_offset, .ubo_addr_format = nir_address_format_32bit_index_offset, - .ssbo_addr_format = nir_address_format_64bit_global_32bit_offset, + .ssbo_addr_format = dev->vk.enabled_features.robustBufferAccess ? + nir_address_format_64bit_bounded_global : + nir_address_format_64bit_global_32bit_offset, }; bool progress = nir_shader_instructions_pass(nir, lower_descriptors_instr, diff --git a/src/panfrost/vulkan/panvk_vX_shader.c b/src/panfrost/vulkan/panvk_vX_shader.c index f78bf6e655f..6aaec727a5f 100644 --- a/src/panfrost/vulkan/panvk_vX_shader.c +++ b/src/panfrost/vulkan/panvk_vX_shader.c @@ -342,7 +342,9 @@ panvk_per_arch(shader_create)(struct panvk_device *dev, const struct spirv_to_nir_options spirv_options = { .caps = { false }, .ubo_addr_format = nir_address_format_32bit_index_offset, - .ssbo_addr_format = nir_address_format_64bit_global_32bit_offset, + .ssbo_addr_format = dev->vk.enabled_features.robustBufferAccess ? + nir_address_format_64bit_bounded_global : + nir_address_format_64bit_global_32bit_offset, }; nir_shader *nir;