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:
committed by
Marge Bot
parent
d6acb56f11
commit
672d41d22a
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user