Module: Mesa Branch: main Commit: 08fd259b5b79f09ba1db45c57fda983976bc722b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=08fd259b5b79f09ba1db45c57fda983976bc722b
Author: Francisco Jerez <curroje...@riseup.net> Date: Fri Oct 20 14:22:36 2023 -0700 anv/xehp+: Enable TBIMR in generated draw calls. Reviewed-by: Lionel Landwerlin <lionel.g.landwer...@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25493> --- src/intel/vulkan/genX_cmd_draw_generated_indirect.h | 4 +++- src/intel/vulkan/shaders/common_generated_draws.glsl | 2 ++ src/intel/vulkan/shaders/generated_draws.glsl | 3 +++ src/intel/vulkan/shaders/interface.h | 2 ++ 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/intel/vulkan/genX_cmd_draw_generated_indirect.h b/src/intel/vulkan/genX_cmd_draw_generated_indirect.h index 7eb19307d56..acd768890f4 100644 --- a/src/intel/vulkan/genX_cmd_draw_generated_indirect.h +++ b/src/intel/vulkan/genX_cmd_draw_generated_indirect.h @@ -64,6 +64,7 @@ genX(cmd_buffer_emit_generate_draws)(struct anv_cmd_buffer *cmd_buffer, struct anv_graphics_pipeline *pipeline = cmd_buffer->state.gfx.pipeline; const struct brw_vs_prog_data *vs_prog_data = get_vs_prog_data(pipeline); + const bool use_tbimr = cmd_buffer->state.gfx.dyn_state.use_tbimr; struct anv_address draw_count_addr; if (anv_address_is_null(count_addr)) { @@ -80,7 +81,8 @@ genX(cmd_buffer_emit_generate_draws)(struct anv_cmd_buffer *cmd_buffer, .draw_id_addr = anv_address_physical(draw_id_addr), .indirect_data_addr = anv_address_physical(indirect_data_addr), .indirect_data_stride = indirect_data_stride, - .flags = (indexed ? ANV_GENERATED_FLAG_INDEXED : 0) | + .flags = (use_tbimr ? ANV_GENERATED_FLAG_TBIMR : 0) | + (indexed ? ANV_GENERATED_FLAG_INDEXED : 0) | (cmd_buffer->state.conditional_render_enabled ? ANV_GENERATED_FLAG_PREDICATED : 0) | ((vs_prog_data->uses_firstvertex || diff --git a/src/intel/vulkan/shaders/common_generated_draws.glsl b/src/intel/vulkan/shaders/common_generated_draws.glsl index 9754c8fd3f5..9316a065c34 100644 --- a/src/intel/vulkan/shaders/common_generated_draws.glsl +++ b/src/intel/vulkan/shaders/common_generated_draws.glsl @@ -95,6 +95,7 @@ void write_3DPRIMITIVE(uint write_offset, void write_3DPRIMITIVE_EXTENDED(uint write_offset, bool is_predicated, bool is_indexed, + bool use_tbimr, uint vertex_count_per_instance, uint start_vertex_location, uint instance_count, @@ -107,6 +108,7 @@ void write_3DPRIMITIVE_EXTENDED(uint write_offset, commands[write_offset + 0] = (3 << 29 | /* Command Type */ 3 << 27 | /* Command SubType */ 3 << 24 | /* 3D Command Opcode */ + uint(use_tbimr) << 13 | 1 << 11 | /* Extended Parameter Enable */ uint(is_predicated) << 8 | 8 << 0); /* DWord Length */ diff --git a/src/intel/vulkan/shaders/generated_draws.glsl b/src/intel/vulkan/shaders/generated_draws.glsl index 148f286b52d..cb4593df84b 100644 --- a/src/intel/vulkan/shaders/generated_draws.glsl +++ b/src/intel/vulkan/shaders/generated_draws.glsl @@ -31,6 +31,7 @@ void gfx11_write_draw(uint item_idx, uint cmd_idx, uint draw_id) { bool is_indexed = (params.flags & ANV_GENERATED_FLAG_INDEXED) != 0; bool is_predicated = (params.flags & ANV_GENERATED_FLAG_PREDICATED) != 0; + bool use_tbimr = (params.flags & ANV_GENERATED_FLAG_TBIMR) != 0; uint indirect_data_offset = draw_id * params.indirect_data_stride / 4; if (is_indexed) { @@ -44,6 +45,7 @@ void gfx11_write_draw(uint item_idx, uint cmd_idx, uint draw_id) write_3DPRIMITIVE_EXTENDED(cmd_idx, is_predicated, is_indexed, + use_tbimr, index_count, first_index, instance_count, @@ -62,6 +64,7 @@ void gfx11_write_draw(uint item_idx, uint cmd_idx, uint draw_id) write_3DPRIMITIVE_EXTENDED(cmd_idx, is_predicated, is_indexed, + use_tbimr, vertex_count, first_vertex, instance_count, diff --git a/src/intel/vulkan/shaders/interface.h b/src/intel/vulkan/shaders/interface.h index 58968cf94d4..0d6a82ca31b 100644 --- a/src/intel/vulkan/shaders/interface.h +++ b/src/intel/vulkan/shaders/interface.h @@ -47,6 +47,8 @@ #define ANV_GENERATED_FLAG_COUNT BITFIELD_BIT(4) /* Whether the generation shader writes to the ring buffer */ #define ANV_GENERATED_FLAG_RING_MODE BITFIELD_BIT(5) +/* Whether TBIMR tile-based rendering shall be enabled. */ +#define ANV_GENERATED_FLAG_TBIMR BITFIELD_BIT(6) struct PACKED anv_generated_indirect_draw_params { /* Draw ID buffer address (only used on Gfx9) */