diff --git a/src/amd/vulkan/radv_instance.c b/src/amd/vulkan/radv_instance.c index e2431e0b789..ebd2787fd24 100644 --- a/src/amd/vulkan/radv_instance.c +++ b/src/amd/vulkan/radv_instance.c @@ -144,6 +144,7 @@ static const driOptionDescription radv_dri_options[] = { DRI_CONF_RADV_ENABLE_UNIFIED_HEAP_ON_APU(false) DRI_CONF_RADV_TEX_NON_UNIFORM(false) DRI_CONF_RADV_RT(false) + DRI_CONF_RADV_FLUSH_BEFORE_TIMESTAMP_WRITE(false) DRI_CONF_RADV_APP_LAYER() DRI_CONF_SECTION_END }; @@ -202,6 +203,9 @@ radv_init_dri_options(struct radv_instance *instance) instance->tex_non_uniform = driQueryOptionb(&instance->dri_options, "radv_tex_non_uniform"); instance->app_layer = driQueryOptionstr(&instance->dri_options, "radv_app_layer"); + + instance->flush_before_timestamp_write = + driQueryOptionb(&instance->dri_options, "radv_flush_before_timestamp_write"); } static const struct vk_instance_extension_table radv_instance_extensions_supported = { diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 4d36407e18a..fb4a6a347eb 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -413,6 +413,7 @@ struct radv_instance { bool flush_before_query_copy; bool enable_unified_heap_on_apu; bool tex_non_uniform; + bool flush_before_timestamp_write; char *app_layer; }; diff --git a/src/amd/vulkan/radv_query.c b/src/amd/vulkan/radv_query.c index 801f958a108..144b4a0c5af 100644 --- a/src/amd/vulkan/radv_query.c +++ b/src/amd/vulkan/radv_query.c @@ -2145,6 +2145,11 @@ radv_CmdWriteTimestamp2(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 sta radv_cs_add_buffer(cmd_buffer->device->ws, cs, pool->bo); + if (cmd_buffer->device->instance->flush_before_timestamp_write) { + /* Make sure previously launched waves have finished */ + cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_PS_PARTIAL_FLUSH | RADV_CMD_FLAG_CS_PARTIAL_FLUSH; + } + si_emit_cache_flush(cmd_buffer); int num_queries = 1; diff --git a/src/util/00-radv-defaults.conf b/src/util/00-radv-defaults.conf index b7cf2c23217..f127955f515 100644 --- a/src/util/00-radv-defaults.conf +++ b/src/util/00-radv-defaults.conf @@ -54,6 +54,7 @@ Application bugs worked around in this file: diff --git a/src/util/driconf.h b/src/util/driconf.h index f1d0a890d90..ea8976a224c 100644 --- a/src/util/driconf.h +++ b/src/util/driconf.h @@ -627,6 +627,10 @@ DRI_CONF_OPT_B(radv_rt, def, \ "Expose support for VK_KHR_ray_tracing_pipeline") +#define DRI_CONF_RADV_FLUSH_BEFORE_TIMESTAMP_WRITE(def) \ + DRI_CONF_OPT_B(radv_flush_before_timestamp_write, def, \ + "Wait for previous commands to finish before writing timestamps") + #define DRI_CONF_RADV_APP_LAYER() DRI_CONF_OPT_S_NODEF(radv_app_layer, "Select an application layer.") /**