panfrost: Split the indexed and !indexed indirect draw info structs
Some fields are overlapping, so let's just split those structs to avoid confusion. Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Acked-by: Alyssa Rosenzweig <alyssa@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10417>
This commit is contained in:
parent
5d6608ef78
commit
0e74598e36
|
@ -105,6 +105,13 @@ struct indirect_draw_shader_builder {
|
|||
/* Describes an indirect draw (see glDrawArraysIndirect()) */
|
||||
|
||||
struct indirect_draw_info {
|
||||
uint32_t count;
|
||||
uint32_t instance_count;
|
||||
uint32_t start;
|
||||
uint32_t start_instance;
|
||||
};
|
||||
|
||||
struct indirect_indexed_draw_info {
|
||||
uint32_t count;
|
||||
uint32_t instance_count;
|
||||
uint32_t start;
|
||||
|
@ -280,6 +287,12 @@ update_max(struct indirect_draw_shader_builder *builder, nir_ssa_def *val)
|
|||
offsetof(struct indirect_draw_info, field)), \
|
||||
1, sizeof(((struct indirect_draw_info *)0)->field) * 8)
|
||||
|
||||
#define get_indexed_draw_field(b, draw_ptr, field) \
|
||||
load_global(b, \
|
||||
get_address_imm(b, draw_ptr, \
|
||||
offsetof(struct indirect_indexed_draw_info, field)), \
|
||||
1, sizeof(((struct indirect_indexed_draw_info *)0)->field) * 8)
|
||||
|
||||
static void
|
||||
extract_inputs(struct indirect_draw_shader_builder *builder)
|
||||
{
|
||||
|
@ -869,16 +882,20 @@ patch(struct indirect_draw_shader_builder *builder)
|
|||
|
||||
nir_ssa_def *draw_ptr = builder->draw.draw_buf;
|
||||
|
||||
builder->draw.vertex_count = get_draw_field(b, draw_ptr, count);
|
||||
assert(builder->draw.vertex_count->num_components);
|
||||
builder->draw.instance_count =
|
||||
get_draw_field(b, draw_ptr, instance_count);
|
||||
builder->draw.vertex_start = get_draw_field(b, draw_ptr, start);
|
||||
if (index_size) {
|
||||
builder->draw.index_bias =
|
||||
get_draw_field(b, draw_ptr, index_bias);
|
||||
builder->draw.vertex_count = get_indexed_draw_field(b, draw_ptr, count);
|
||||
builder->draw.instance_count =
|
||||
get_indexed_draw_field(b, draw_ptr, instance_count);
|
||||
builder->draw.vertex_start = get_indexed_draw_field(b, draw_ptr, start);
|
||||
builder->draw.index_bias = get_indexed_draw_field(b, draw_ptr, index_bias);
|
||||
} else {
|
||||
builder->draw.vertex_count = get_draw_field(b, draw_ptr, count);
|
||||
builder->draw.instance_count = get_draw_field(b, draw_ptr, instance_count);
|
||||
builder->draw.vertex_start = get_draw_field(b, draw_ptr, start);
|
||||
}
|
||||
|
||||
assert(builder->draw.vertex_count->num_components);
|
||||
|
||||
get_instance_size(builder);
|
||||
|
||||
builder->instance_size.padded =
|
||||
|
|
Loading…
Reference in New Issue