anv: split generated draw flags from mocs/dword-count

We'll add more flags.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Ivan Briano <ivan.briano@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32059>
This commit is contained in:
Lionel Landwerlin
2024-11-08 13:04:46 +02:00
committed by Marge Bot
parent d6acb56f11
commit 672d41d22a
5 changed files with 35 additions and 24 deletions
+5 -5
View File
@@ -8,10 +8,9 @@ static void end_generated_draws(global void *dst_ptr,
uint32_t item_idx,
uint32_t draw_id, uint32_t draw_count,
uint32_t ring_count, uint32_t max_draw_count,
uint32_t flags,
uint32_t flags, uint32_t _3dprim_size_B,
uint64_t gen_addr, uint64_t end_addr)
{
uint32_t _3dprim_size_B = ((flags >> 16) & 0xff) * 4;
bool indirect_count = (flags & ANV_GENERATED_FLAG_COUNT) != 0;
bool ring_mode = (flags & ANV_GENERATED_FLAG_RING_MODE) != 0;
/* We can have an indirect draw count = 0. */
@@ -44,12 +43,13 @@ genX(libanv_write_draw)(global void *dst_base,
uint32_t instance_multiplier,
uint32_t max_draw_count,
uint32_t flags,
uint32_t mocs,
uint32_t _3dprim_size_B,
uint32_t ring_count,
uint64_t gen_addr,
uint64_t end_addr,
uint32_t item_idx)
{
uint32_t _3dprim_size_B = ((flags >> 16) & 0xff) * 4;
uint32_t draw_id = draw_base + item_idx;
uint32_t draw_count = *_draw_count;
global void *dst_ptr = dst_base + item_idx * _3dprim_size_B;
@@ -62,7 +62,6 @@ genX(libanv_write_draw)(global void *dst_base,
bool uses_tbimr = (flags & ANV_GENERATED_FLAG_TBIMR) != 0;
bool uses_base = (flags & ANV_GENERATED_FLAG_BASE) != 0;
bool uses_drawid = (flags & ANV_GENERATED_FLAG_DRAWID) != 0;
uint32_t mocs = (flags >> 8) & 0xff;
genX(write_draw)(dst_ptr, indirect_ptr, draw_id_ptr,
draw_id, instance_multiplier,
@@ -72,6 +71,7 @@ genX(libanv_write_draw)(global void *dst_base,
}
end_generated_draws(dst_ptr, item_idx, draw_id, draw_count,
ring_count, max_draw_count, flags,
ring_count, max_draw_count,
flags, _3dprim_size_B,
gen_addr, end_addr);
}
+16 -14
View File
@@ -46,20 +46,22 @@ typedef struct VkDrawIndirectCommand {
/**
* Flags for generated_draws.cl
*/
#define ANV_GENERATED_FLAG_INDEXED BITFIELD_BIT(0)
#define ANV_GENERATED_FLAG_PREDICATED BITFIELD_BIT(1)
/* Only used on Gfx9, means the pipeline is using gl_DrawID */
#define ANV_GENERATED_FLAG_DRAWID BITFIELD_BIT(2)
/* Only used on Gfx9, means the pipeline is using gl_BaseVertex or
* gl_BaseInstance
*/
#define ANV_GENERATED_FLAG_BASE BITFIELD_BIT(3)
/* Whether the count is indirect */
#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)
enum anv_generated_draw_flags {
ANV_GENERATED_FLAG_INDEXED = BITFIELD_BIT(0),
ANV_GENERATED_FLAG_PREDICATED = BITFIELD_BIT(1),
/* Only used on Gfx9, means the pipeline is using gl_DrawID */
ANV_GENERATED_FLAG_DRAWID = BITFIELD_BIT(2),
/* Only used on Gfx9, means the pipeline is using gl_BaseVertex or
* gl_BaseInstance
*/
ANV_GENERATED_FLAG_BASE = BITFIELD_BIT(3),
/* Whether the count is indirect */
ANV_GENERATED_FLAG_COUNT = BITFIELD_BIT(4),
/* Whether the generation shader writes to the ring buffer */
ANV_GENERATED_FLAG_RING_MODE = BITFIELD_BIT(5),
/* Whether TBIMR tile-based rendering shall be enabled. */
ANV_GENERATED_FLAG_TBIMR = BITFIELD_BIT(6),
};
/**
* Flags for query_copy.cl
+8 -1
View File
@@ -36,7 +36,14 @@ struct PACKED anv_gen_indirect_params {
/* Stride between each elements of the indirect data buffer */
uint32_t indirect_data_stride;
uint32_t flags; /* 0-7: bits, 8-15: mocs, 16-23: cmd_dws */
/* Bitfield of ANV_GENERATED_FLAG_* */
uint32_t flags;
/* MOCS to use for VERTEX_BUFFER_STATE (only used on Gfx9) */
uint32_t mocs;
/* 3DPRIMITIVE instruction size (in bytes) */
uint32_t cmd_primitive_size;
/* Base number of the draw ID, it is added to the index computed from the
* gl_FragCoord
@@ -91,12 +91,12 @@ genX(cmd_buffer_emit_generate_draws)(struct anv_cmd_buffer *cmd_buffer,
vs_prog_data->uses_baseinstance) ?
ANV_GENERATED_FLAG_BASE : 0) |
(vs_prog_data->uses_drawid ? ANV_GENERATED_FLAG_DRAWID : 0) |
(anv_mocs(device, indirect_data_addr.bo,
ISL_SURF_USAGE_VERTEX_BUFFER_BIT) << 8) |
(!anv_address_is_null(count_addr) ?
ANV_GENERATED_FLAG_COUNT : 0) |
(ring_count != 0 ? ANV_GENERATED_FLAG_RING_MODE : 0) |
((generated_cmd_stride / 4) << 16),
(ring_count != 0 ? ANV_GENERATED_FLAG_RING_MODE : 0),
.mocs = anv_mocs(device, indirect_data_addr.bo,
ISL_SURF_USAGE_VERTEX_BUFFER_BIT),
.cmd_primitive_size = generated_cmd_stride,
.draw_base = item_base,
.max_draw_count = max_count,
.ring_count = ring_count,
+2
View File
@@ -74,6 +74,8 @@ genX(call_internal_shader)(nir_builder *b, enum anv_internal_kernel_name shader_
load_param(b, 32, struct anv_gen_indirect_params, instance_multiplier),
load_param(b, 32, struct anv_gen_indirect_params, max_draw_count),
load_param(b, 32, struct anv_gen_indirect_params, flags),
load_param(b, 32, struct anv_gen_indirect_params, mocs),
load_param(b, 32, struct anv_gen_indirect_params, cmd_primitive_size),
load_param(b, 32, struct anv_gen_indirect_params, ring_count),
load_param(b, 64, struct anv_gen_indirect_params, gen_addr),
load_param(b, 64, struct anv_gen_indirect_params, end_addr),