diff --git a/.pick_status.json b/.pick_status.json index 697bd5b9c2d..ad723279ad3 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -464,7 +464,7 @@ "description": "radv,driconf: Add radv_force_64k_sparse_alignment config", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/amd/vulkan/radv_buffer.c b/src/amd/vulkan/radv_buffer.c index 3ae483a0381..cfcf553dc57 100644 --- a/src/amd/vulkan/radv_buffer.c +++ b/src/amd/vulkan/radv_buffer.c @@ -191,6 +191,7 @@ radv_get_buffer_memory_requirements(struct radv_device *device, VkDeviceSize siz VkBufferUsageFlags2 usage, VkMemoryRequirements2 *pMemoryRequirements) { const struct radv_physical_device *pdev = radv_device_physical(device); + const struct radv_instance *instance = radv_physical_device_instance(pdev); pMemoryRequirements->memoryRequirements.memoryTypeBits = ((1u << pdev->memory_properties.memoryTypeCount) - 1u) & ~pdev->memory_types_32bit; @@ -203,7 +204,10 @@ radv_get_buffer_memory_requirements(struct radv_device *device, VkDeviceSize siz pMemoryRequirements->memoryRequirements.memoryTypeBits = pdev->memory_types_32bit; if (flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT) { - pMemoryRequirements->memoryRequirements.alignment = 4096; + if (instance->drirc.force_64k_sparse_alignment) + pMemoryRequirements->memoryRequirements.alignment = 65536; + else + pMemoryRequirements->memoryRequirements.alignment = 4096; } else { if (usage & VK_BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT) pMemoryRequirements->memoryRequirements.alignment = radv_dgc_get_buffer_alignment(device); diff --git a/src/amd/vulkan/radv_instance.c b/src/amd/vulkan/radv_instance.c index fc56d1db08f..ef3d1938682 100644 --- a/src/amd/vulkan/radv_instance.c +++ b/src/amd/vulkan/radv_instance.c @@ -192,6 +192,7 @@ static const driOptionDescription radv_dri_options[] = { DRI_CONF_RADV_SSBO_NON_UNIFORM(false) DRI_CONF_RADV_LOWER_TERMINATE_TO_DISCARD(false) DRI_CONF_RADV_APP_LAYER() + DRI_CONF_RADV_FORCE_64K_SPARSE_ALIGNMENT(false) DRI_CONF_SECTION_END }; // clang-format on @@ -288,6 +289,8 @@ radv_init_dri_options(struct radv_instance *instance) instance->drirc.lower_terminate_to_discard = driQueryOptionb(&instance->drirc.options, "radv_lower_terminate_to_discard"); + + instance->drirc.force_64k_sparse_alignment = driQueryOptionb(&instance->drirc.options, "radv_force_64k_sparse_alignment"); } static const struct vk_instance_extension_table radv_instance_extensions_supported = { diff --git a/src/amd/vulkan/radv_instance.h b/src/amd/vulkan/radv_instance.h index a3b6c29fce7..3688812816c 100644 --- a/src/amd/vulkan/radv_instance.h +++ b/src/amd/vulkan/radv_instance.h @@ -74,6 +74,7 @@ struct radv_instance { bool disable_dcc_mips; bool disable_dcc_stores; bool lower_terminate_to_discard; + bool force_64k_sparse_alignment; char *app_layer; uint8_t override_graphics_shader_version; uint8_t override_compute_shader_version; diff --git a/src/util/driconf.h b/src/util/driconf.h index bfc74fdb81c..8cc3591157c 100644 --- a/src/util/driconf.h +++ b/src/util/driconf.h @@ -785,6 +785,10 @@ #define DRI_CONF_RADV_DISABLE_NGG_GS(def) \ DRI_CONF_OPT_B(radv_disable_ngg_gs, def, "Disable NGG GS on GFX10/GFX10.3.") +#define DRI_CONF_RADV_FORCE_64K_SPARSE_ALIGNMENT(def) \ + DRI_CONF_OPT_B(radv_force_64k_sparse_alignment, def, \ + "Force the alignment of sparse buffers to 64KiB") + /** * \brief ANV specific configuration options */