mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 17:30:12 +01:00
radv: invalidate compute/rt descriptors at pipeline bind time
No need to delay this. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36355>
This commit is contained in:
parent
9ea55d12f6
commit
40ceece75f
1 changed files with 10 additions and 24 deletions
|
|
@ -7826,6 +7826,7 @@ radv_CmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipeline
|
|||
if (cmd_buffer->state.compute_pipeline == compute_pipeline)
|
||||
return;
|
||||
radv_mark_descriptor_sets_dirty(cmd_buffer, pipelineBindPoint);
|
||||
radv_mark_descriptor_sets_dirty(cmd_buffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
|
||||
|
||||
radv_bind_shader(cmd_buffer, compute_pipeline->base.shaders[MESA_SHADER_COMPUTE], MESA_SHADER_COMPUTE);
|
||||
|
||||
|
|
@ -7840,6 +7841,15 @@ radv_CmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipeline
|
|||
return;
|
||||
radv_mark_descriptor_sets_dirty(cmd_buffer, pipelineBindPoint);
|
||||
|
||||
/* Raytracing uses compute shaders but has separate bind points and pipelines.
|
||||
* So if we set compute userdata & shader registers we should dirty the raytracing
|
||||
* ones and the other way around.
|
||||
*
|
||||
* We only need to do this when the pipeline is dirty because when we switch between
|
||||
* the two we always need to switch pipelines.
|
||||
*/
|
||||
radv_mark_descriptor_sets_dirty(cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE);
|
||||
|
||||
radv_bind_shader(cmd_buffer, rt_pipeline->base.base.shaders[MESA_SHADER_INTERSECTION], MESA_SHADER_INTERSECTION);
|
||||
radv_bind_rt_prolog(cmd_buffer, rt_pipeline->prolog);
|
||||
|
||||
|
|
@ -12581,19 +12591,6 @@ radv_dispatch(struct radv_cmd_buffer *cmd_buffer, const struct radv_dispatch_inf
|
|||
radv_emit_dispatch_packets(cmd_buffer, compute_shader, info);
|
||||
}
|
||||
|
||||
if (pipeline_is_dirty) {
|
||||
/* Raytracing uses compute shaders but has separate bind points and pipelines.
|
||||
* So if we set compute userdata & shader registers we should dirty the raytracing
|
||||
* ones and the other way around.
|
||||
*
|
||||
* We only need to do this when the pipeline is dirty because when we switch between
|
||||
* the two we always need to switch pipelines.
|
||||
*/
|
||||
radv_mark_descriptor_sets_dirty(cmd_buffer, bind_point == VK_PIPELINE_BIND_POINT_COMPUTE
|
||||
? VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR
|
||||
: VK_PIPELINE_BIND_POINT_COMPUTE);
|
||||
}
|
||||
|
||||
if (compute_shader->info.cs.regalloc_hang_bug)
|
||||
cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_CS_PARTIAL_FLUSH;
|
||||
|
||||
|
|
@ -12633,17 +12630,6 @@ radv_dgc_before_dispatch(struct radv_cmd_buffer *cmd_buffer, VkPipelineBindPoint
|
|||
|
||||
if (has_prefetch)
|
||||
radv_emit_shader_prefetch(cmd_buffer, compute_shader);
|
||||
|
||||
/* Raytracing uses compute shaders but has separate bind points and pipelines.
|
||||
* So if we set compute userdata & shader registers we should dirty the raytracing
|
||||
* ones and the other way around.
|
||||
*
|
||||
* We only need to do this when the pipeline is dirty because when we switch between
|
||||
* the two we always need to switch pipelines.
|
||||
*/
|
||||
radv_mark_descriptor_sets_dirty(cmd_buffer, bind_point == VK_PIPELINE_BIND_POINT_COMPUTE
|
||||
? VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR
|
||||
: VK_PIPELINE_BIND_POINT_COMPUTE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue