Mesa (main): anv: unify some draw state vertex constant emission
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Jun 25 17:29:29 UTC 2021
Module: Mesa
Branch: main
Commit: 1e39f2c1994abb7183ebc05de29e11561c388eb5
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1e39f2c1994abb7183ebc05de29e11561c388eb5
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Tue Jun 22 14:42:48 2021 -0400
anv: unify some draw state vertex constant emission
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11531>
---
src/intel/vulkan/genX_cmd_buffer.c | 47 ++++++++++++++++++++++----------------
1 file changed, 27 insertions(+), 20 deletions(-)
diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c
index 47aba611b1f..b2aedf7c87a 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.
More information about the mesa-commit
mailing list