radv: Correctly detect changed shaders for vertex descriptors.
As they were emitted after the new pipeline, the changed pipeline
detection was not working anymore.
Fixes: 341529dbee 'radv: use optimal packet order for draws'
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
This commit is contained in:
@@ -1719,11 +1719,11 @@ radv_flush_constants(struct radv_cmd_buffer *cmd_buffer,
|
||||
}
|
||||
|
||||
static bool
|
||||
radv_cmd_buffer_update_vertex_descriptors(struct radv_cmd_buffer *cmd_buffer)
|
||||
radv_cmd_buffer_update_vertex_descriptors(struct radv_cmd_buffer *cmd_buffer, bool pipeline_is_dirty)
|
||||
{
|
||||
struct radv_device *device = cmd_buffer->device;
|
||||
|
||||
if ((cmd_buffer->state.pipeline != cmd_buffer->state.emitted_pipeline || cmd_buffer->state.vb_dirty) &&
|
||||
if ((pipeline_is_dirty || cmd_buffer->state.vb_dirty) &&
|
||||
cmd_buffer->state.pipeline->vertex_elements.count &&
|
||||
radv_get_vertex_shader(cmd_buffer->state.pipeline)->info.info.vs.has_vertex_buffers) {
|
||||
struct radv_vertex_elements_info *velems = &cmd_buffer->state.pipeline->vertex_elements;
|
||||
@@ -1771,9 +1771,9 @@ radv_cmd_buffer_update_vertex_descriptors(struct radv_cmd_buffer *cmd_buffer)
|
||||
}
|
||||
|
||||
static bool
|
||||
radv_upload_graphics_shader_descriptors(struct radv_cmd_buffer *cmd_buffer)
|
||||
radv_upload_graphics_shader_descriptors(struct radv_cmd_buffer *cmd_buffer, bool pipeline_is_dirty)
|
||||
{
|
||||
if (!radv_cmd_buffer_update_vertex_descriptors(cmd_buffer))
|
||||
if (!radv_cmd_buffer_update_vertex_descriptors(cmd_buffer, pipeline_is_dirty))
|
||||
return false;
|
||||
|
||||
radv_flush_descriptors(cmd_buffer, VK_SHADER_STAGE_ALL_GRAPHICS);
|
||||
@@ -3186,7 +3186,7 @@ radv_draw(struct radv_cmd_buffer *cmd_buffer,
|
||||
si_emit_cache_flush(cmd_buffer);
|
||||
/* <-- CUs are idle here --> */
|
||||
|
||||
if (!radv_upload_graphics_shader_descriptors(cmd_buffer))
|
||||
if (!radv_upload_graphics_shader_descriptors(cmd_buffer, pipeline_is_dirty))
|
||||
return;
|
||||
|
||||
radv_emit_draw_packets(cmd_buffer, info);
|
||||
@@ -3211,7 +3211,7 @@ radv_draw(struct radv_cmd_buffer *cmd_buffer,
|
||||
cmd_buffer->state.pipeline);
|
||||
}
|
||||
|
||||
if (!radv_upload_graphics_shader_descriptors(cmd_buffer))
|
||||
if (!radv_upload_graphics_shader_descriptors(cmd_buffer, pipeline_is_dirty))
|
||||
return;
|
||||
|
||||
radv_emit_all_graphics_states(cmd_buffer, info);
|
||||
|
||||
Reference in New Issue
Block a user