From: Mike Blumenkrantz Date: Tue, 22 Jun 2021 18:42:48 +0000 (-0400) Subject: anv: unify some draw state vertex constant emission X-Git-Tag: upstream/21.2.3~1259 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1e39f2c1994abb7183ebc05de29e11561c388eb5;p=platform%2Fupstream%2Fmesa.git anv: unify some draw state vertex constant emission Reviewed-by: Jason Ekstrand Part-of: --- diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 47aba61..b2aedf7 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -3884,6 +3884,31 @@ update_dirty_vbs_for_gfx8_vb_flush(struct anv_cmd_buffer *cmd_buffer, vb_used); } +ALWAYS_INLINE static void +cmd_buffer_emit_vertex_constants_and_flush(struct anv_cmd_buffer *cmd_buffer, + const struct brw_vs_prog_data *vs_prog_data, + uint32_t base_vertex, + uint32_t base_instance, + uint32_t draw_id, + bool force_flush) +{ + bool emitted = false; + if (vs_prog_data->uses_firstvertex || + vs_prog_data->uses_baseinstance) { + emit_base_vertex_instance(cmd_buffer, base_vertex, base_instance); + emitted = true; + } + if (vs_prog_data->uses_drawid) { + emit_draw_index(cmd_buffer, draw_id); + emitted = true; + } + /* Emitting draw index or vertex index BOs may result in needing + * additional VF cache flushes. + */ + if (emitted || force_flush) + genX(cmd_buffer_apply_pipe_flushes)(cmd_buffer); +} + void genX(CmdDraw)( VkCommandBuffer commandBuffer, uint32_t vertexCount, @@ -3911,16 +3936,7 @@ void genX(CmdDraw)( if (cmd_buffer->state.conditional_render_enabled) genX(cmd_emit_conditional_render_predicate)(cmd_buffer); - if (vs_prog_data->uses_firstvertex || - vs_prog_data->uses_baseinstance) - emit_base_vertex_instance(cmd_buffer, firstVertex, firstInstance); - if (vs_prog_data->uses_drawid) - emit_draw_index(cmd_buffer, 0); - - /* Emitting draw index or vertex index BOs may result in needing - * additional VF cache flushes. - */ - genX(cmd_buffer_apply_pipe_flushes)(cmd_buffer); + cmd_buffer_emit_vertex_constants_and_flush(cmd_buffer, vs_prog_data, firstVertex, firstInstance, 0, true); /* Our implementation of VK_KHR_multiview uses instancing to draw the * different views. We need to multiply instanceCount by the view count. @@ -3971,16 +3987,7 @@ void genX(CmdDrawIndexed)( if (cmd_buffer->state.conditional_render_enabled) genX(cmd_emit_conditional_render_predicate)(cmd_buffer); - if (vs_prog_data->uses_firstvertex || - vs_prog_data->uses_baseinstance) - emit_base_vertex_instance(cmd_buffer, vertexOffset, firstInstance); - if (vs_prog_data->uses_drawid) - emit_draw_index(cmd_buffer, 0); - - /* Emitting draw index or vertex index BOs may result in needing - * additional VF cache flushes. - */ - genX(cmd_buffer_apply_pipe_flushes)(cmd_buffer); + cmd_buffer_emit_vertex_constants_and_flush(cmd_buffer, vs_prog_data, vertexOffset, firstInstance, 0, true); /* Our implementation of VK_KHR_multiview uses instancing to draw the * different views. We need to multiply instanceCount by the view count.