diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index b5db5d64d59..179f39571aa 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -1134,10 +1134,6 @@ radv_CreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCr device->vk.enabled_extensions.KHR_acceleration_structure || device->vk.enabled_extensions.VALVE_descriptor_set_host_mapping; - device->buffer_robustness = device->vk.enabled_features.robustBufferAccess2 ? RADV_BUFFER_ROBUSTNESS_2 - : device->vk.enabled_features.robustBufferAccess ? RADV_BUFFER_ROBUSTNESS_1 - : RADV_BUFFER_ROBUSTNESS_DISABLED; - radv_init_shader_arenas(device); device->overallocation_disallowed = overallocation_disallowed; diff --git a/src/amd/vulkan/radv_device.h b/src/amd/vulkan/radv_device.h index 06017bed94c..5fa7fb2ffae 100644 --- a/src/amd/vulkan/radv_device.h +++ b/src/amd/vulkan/radv_device.h @@ -52,12 +52,6 @@ struct radv_layer_dispatch_tables { struct vk_device_dispatch_table ctx_roll; }; -enum radv_buffer_robustness { - RADV_BUFFER_ROBUSTNESS_DISABLED, - RADV_BUFFER_ROBUSTNESS_1, /* robustBufferAccess */ - RADV_BUFFER_ROBUSTNESS_2, /* robustBufferAccess2 */ -}; - struct radv_device_cache_key { uint32_t disable_trunc_coord : 1; uint32_t image_2d_view_of_3d : 1; @@ -448,9 +442,6 @@ struct radv_device { /* Whether to DMA shaders to invisible VRAM or to upload directly through BAR. */ bool shader_use_invisible_vram; - /* Whether the app has enabled the robustBufferAccess/robustBufferAccess2 features. */ - enum radv_buffer_robustness buffer_robustness; - /* Whether to inline the compute dispatch size in user sgprs. */ bool load_grid_size_from_user_sgpr; diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 07bba089175..e0ff7d9e372 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -117,23 +117,6 @@ radv_DestroyPipeline(VkDevice _device, VkPipeline _pipeline, const VkAllocationC radv_pipeline_destroy(device, pipeline, pAllocator); } -static enum radv_buffer_robustness -radv_convert_buffer_robustness(const struct radv_device *device, VkPipelineRobustnessBufferBehaviorEXT behaviour) -{ - switch (behaviour) { - case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT: - return device->buffer_robustness; - case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT: - return RADV_BUFFER_ROBUSTNESS_DISABLED; - case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT: - return RADV_BUFFER_ROBUSTNESS_1; - case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT: - return RADV_BUFFER_ROBUSTNESS_2; - default: - unreachable("Invalid pipeline robustness behavior"); - } -} - struct radv_shader_stage_key radv_pipeline_get_shader_key(const struct radv_device *device, const VkPipelineShaderStageCreateInfo *stage, VkPipelineCreateFlags2KHR flags, const void *pNext) @@ -141,6 +124,7 @@ radv_pipeline_get_shader_key(const struct radv_device *device, const VkPipelineS const struct radv_physical_device *pdev = radv_device_physical(device); const struct radv_instance *instance = radv_physical_device_instance(pdev); gl_shader_stage s = vk_to_mesa_shader_stage(stage->stage); + struct vk_pipeline_robustness_state rs; struct radv_shader_stage_key key = {0}; key.keep_statistic_info = radv_pipeline_capture_shader_stats(device, flags); @@ -163,29 +147,15 @@ radv_pipeline_get_shader_key(const struct radv_device *device, const VkPipelineS key.version = instance->drirc.override_compute_shader_version; } - const VkPipelineRobustnessCreateInfoEXT *pipeline_robust_info = - vk_find_struct_const(pNext, PIPELINE_ROBUSTNESS_CREATE_INFO_EXT); + vk_pipeline_robustness_state_fill(&device->vk, &rs, pNext, stage->pNext); - const VkPipelineRobustnessCreateInfoEXT *stage_robust_info = - vk_find_struct_const(stage->pNext, PIPELINE_ROBUSTNESS_CREATE_INFO_EXT); - - enum radv_buffer_robustness storage_robustness = device->buffer_robustness; - enum radv_buffer_robustness uniform_robustness = device->buffer_robustness; - enum radv_buffer_robustness vertex_robustness = device->buffer_robustness; - - const VkPipelineRobustnessCreateInfoEXT *robust_info = stage_robust_info ? stage_robust_info : pipeline_robust_info; - - if (robust_info) { - storage_robustness = radv_convert_buffer_robustness(device, robust_info->storageBuffers); - uniform_robustness = radv_convert_buffer_robustness(device, robust_info->uniformBuffers); - vertex_robustness = radv_convert_buffer_robustness(device, robust_info->vertexInputs); - } - - if (storage_robustness >= RADV_BUFFER_ROBUSTNESS_2) + if (rs.storage_buffers == VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT) key.storage_robustness2 = 1; - if (uniform_robustness >= RADV_BUFFER_ROBUSTNESS_2) + if (rs.uniform_buffers == VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT) key.uniform_robustness2 = 1; - if (s == MESA_SHADER_VERTEX && vertex_robustness >= RADV_BUFFER_ROBUSTNESS_1) + if (s == MESA_SHADER_VERTEX && + (rs.vertex_inputs == VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT || + rs.vertex_inputs == VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT)) key.vertex_robustness1 = 1u; const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *const subgroup_size = diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 73a574dbdf9..aca005b7222 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -2783,7 +2783,8 @@ radv_fill_nir_compiler_options(struct radv_nir_compiler_options *options, struct const struct radv_instance *instance = radv_physical_device_instance(pdev); /* robust_buffer_access_llvm here used by LLVM only, pipeline robustness is not exposed there. */ - options->robust_buffer_access_llvm = device->buffer_robustness >= RADV_BUFFER_ROBUSTNESS_1; + options->robust_buffer_access_llvm = + (device->vk.enabled_features.robustBufferAccess2 || device->vk.enabled_features.robustBufferAccess); options->wgp_mode = should_use_wgp; options->info = &pdev->info; options->dump_shader = can_dump_shader;