Mesa (master): radv: Correctly detect changed shaders for vertex descriptors.

Bas Nieuwenhuizen bnieuwenhuizen at kemper.freedesktop.org
Sat Oct 21 18:02:46 UTC 2017


Module: Mesa
Branch: master
Commit: fb55477990e417f3a5e80d91e9e0dbb7bf2f71a6
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=fb55477990e417f3a5e80d91e9e0dbb7bf2f71a6

Author: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Date:   Sat Oct 21 18:16:15 2017 +0200

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: 341529dbee5 'radv: use optimal packet order for draws'
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>

---

 src/amd/vulkan/radv_cmd_buffer.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index d511659d02..887b789df8 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -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);




More information about the mesa-commit mailing list