panfrost: Adjust the draw descriptor definition
Add missing fields, and rename some of the existing fields.
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6980>
diff --git a/src/gallium/drivers/panfrost/pan_compute.c b/src/gallium/drivers/panfrost/pan_compute.c
index 7498699..3b5e633 100644
--- a/src/gallium/drivers/panfrost/pan_compute.c
+++ b/src/gallium/drivers/panfrost/pan_compute.c
@@ -141,9 +141,11 @@
}
pan_section_pack(t.cpu, COMPUTE_JOB, DRAW, cfg) {
- cfg.unknown_1 = (dev->quirks & IS_BIFROST) ? 0x2 : 0x6;
+ cfg.draw_descriptor_is_64b = true;
+ if (!(dev->quirks & IS_BIFROST))
+ cfg.texture_descriptor_is_64b = true;
cfg.state = panfrost_emit_compute_shader_meta(batch, PIPE_SHADER_COMPUTE);
- cfg.shared = panfrost_emit_shared_memory(batch, info);
+ cfg.thread_storage = panfrost_emit_shared_memory(batch, info);
cfg.uniform_buffers = panfrost_emit_const_buf(batch,
PIPE_SHADER_COMPUTE, &cfg.push_uniforms);
cfg.textures = panfrost_emit_texture_descriptors(batch,
diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c
index 07c54d4..2b7ce4b 100644
--- a/src/gallium/drivers/panfrost/pan_context.c
+++ b/src/gallium/drivers/panfrost/pan_context.c
@@ -258,8 +258,8 @@
struct MALI_DRAW *d, enum pipe_shader_type st)
{
d->offset_start = batch->ctx->offset_start;
- d->instances = batch->ctx->instance_count > 1 ?
- batch->ctx->padded_count : 1;
+ d->instance_size = batch->ctx->instance_count > 1 ?
+ batch->ctx->padded_count : 1;
d->uniform_buffers = panfrost_emit_const_buf(batch, st, &d->push_uniforms);
d->textures = panfrost_emit_texture_descriptors(batch, st);
@@ -296,12 +296,14 @@
}
pan_section_pack(job, COMPUTE_JOB, DRAW, cfg) {
- cfg.unknown_1 = (device->quirks & IS_BIFROST) ? 0x2 : 0x6;
+ cfg.draw_descriptor_is_64b = true;
+ if (!(device->quirks & IS_BIFROST))
+ cfg.texture_descriptor_is_64b = true;
cfg.state = panfrost_emit_compute_shader_meta(batch, PIPE_SHADER_VERTEX);
cfg.attributes = panfrost_emit_vertex_data(batch, &cfg.attribute_buffers);
cfg.varyings = vs_vary;
cfg.varying_buffers = varyings;
- cfg.shared = shared_mem;
+ cfg.thread_storage = shared_mem;
pan_emit_draw_descs(batch, &cfg, PIPE_SHADER_VERTEX);
}
}
@@ -381,7 +383,10 @@
pan_section_ptr(job, BIFROST_TILER_JOB, DRAW) :
pan_section_ptr(job, MIDGARD_TILER_JOB, DRAW);
pan_pack(section, DRAW, cfg) {
- cfg.unknown_1 = (device->quirks & IS_BIFROST) ? 0x3 : 0x7;
+ cfg.four_components_per_vertex = true;
+ cfg.draw_descriptor_is_64b = true;
+ if (!(device->quirks & IS_BIFROST))
+ cfg.texture_descriptor_is_64b = true;
cfg.front_face_ccw = rast->front_ccw;
cfg.cull_front_face = rast->cull_face & PIPE_FACE_FRONT;
cfg.cull_back_face = rast->cull_face & PIPE_FACE_BACK;
@@ -390,7 +395,7 @@
cfg.viewport = panfrost_emit_viewport(batch);
cfg.varyings = fs_vary;
cfg.varying_buffers = varyings;
- cfg.shared = shared_mem;
+ cfg.thread_storage = shared_mem;
pan_emit_draw_descs(batch, &cfg, PIPE_SHADER_FRAGMENT);
diff --git a/src/panfrost/bifrost/test/bi_submit.c b/src/panfrost/bifrost/test/bi_submit.c
index 62572a3..99f1ba2 100644
--- a/src/panfrost/bifrost/test/bi_submit.c
+++ b/src/panfrost/bifrost/test/bi_submit.c
@@ -195,8 +195,8 @@
}
pan_section_pack(&job, COMPUTE_JOB, DRAW, cfg) {
- cfg.unknown_1 = 0x2;
- cfg.shared = shmem->gpu;
+ cfg.draw_descriptor_is_64b = true;
+ cfg.thread_storage = shmem->gpu;
cfg.state = shader_desc->gpu;
cfg.push_uniforms = ubo->gpu + 1024;
cfg.uniform_buffers = ubo->gpu;
diff --git a/src/panfrost/lib/decode.c b/src/panfrost/lib/decode.c
index 51e0a3f..a556fd7 100644
--- a/src/panfrost/lib/decode.c
+++ b/src/panfrost/lib/decode.c
@@ -1124,14 +1124,14 @@
};
if (is_bifrost)
- pandecode_compute_fbd(p->shared & ~1, job_no);
- else if (p->shared & MALI_FBD_TAG_IS_MFBD)
- fbd_info = pandecode_mfbd_bfr((u64) ((uintptr_t) p->shared) & ~MALI_FBD_TAG_MASK,
+ pandecode_compute_fbd(p->fbd & ~1, job_no);
+ else if (p->fbd & MALI_FBD_TAG_IS_MFBD)
+ fbd_info = pandecode_mfbd_bfr((u64) ((uintptr_t) p->fbd) & ~MALI_FBD_TAG_MASK,
job_no, false, job_type == MALI_JOB_TYPE_COMPUTE, is_bifrost, gpu_id);
else if (job_type == MALI_JOB_TYPE_COMPUTE)
- pandecode_compute_fbd((u64) (uintptr_t) p->shared, job_no);
+ pandecode_compute_fbd((u64) (uintptr_t) p->fbd, job_no);
else
- fbd_info = pandecode_sfbd((u64) (uintptr_t) p->shared, job_no, false, gpu_id);
+ fbd_info = pandecode_sfbd((u64) (uintptr_t) p->fbd, job_no, false, gpu_id);
int varying_count = 0, attribute_count = 0, uniform_count = 0, uniform_buffer_count = 0;
int texture_count = 0, sampler_count = 0;
@@ -1224,7 +1224,7 @@
* per-RT descriptors */
if (job_type == MALI_JOB_TYPE_TILER &&
- (is_bifrost || p->shared & MALI_FBD_TAG_IS_MFBD)) {
+ (is_bifrost || p->fbd & MALI_FBD_TAG_IS_MFBD)) {
void* blend_base = ((void *) cl) + MALI_STATE_LENGTH;
for (unsigned i = 0; i < fbd_info.rt_count; i++) {
diff --git a/src/panfrost/lib/midgard.xml b/src/panfrost/lib/midgard.xml
index 4e5d976..74dcc38 100644
--- a/src/panfrost/lib/midgard.xml
+++ b/src/panfrost/lib/midgard.xml
@@ -342,16 +342,21 @@
</struct>
<struct name="Draw" size="30">
- <field name="Unknown 1" size="3" start="0:0" type="uint"/>
+ <field name="Four Components Per Vertex" size="1" start="0:0" type="bool"/>
+ <field name="Draw Descriptor Is 64b" size="1" start="0:1" type="bool"/>
+ <field name="Texture Descriptor Is 64b" size="1" start="0:2" type="bool"/>
<field name="Occlusion query" size="2" start="0:3" type="Occlusion Mode" default="Disabled"/>
<field name="Front face CCW" size="1" start="0:5" type="bool"/>
<field name="Cull front face" size="1" start="0:6" type="bool"/>
<field name="Cull back face" size="1" start="0:7" type="bool"/>
- <!-- TODO 0:7-0:15 -->
- <field name="Instances" size="8" start="0:16" type="padded" default="1"/>
- <!-- TODO: 0:16-0:24 -->
+ <field name="Flat Shading Vertex" size="1" start="0:8" type="uint"/>
+ <field name="Exclude Filtered Perf Counters" size="1" start="0:9" type="bool"/>
+ <field name="Primitive Barrier" size="1" start="0:10" type="bool"/>
+ <field name="Clean Fragment Write" size="1" start="0:11" type="bool"/>
+ <field name="Instance Size" size="8" start="0:16" type="padded" default="1"/>
+ <field name="Instance Primitive Size" size="8" start="0:24" type="padded" default="1"/>
<field name="Offset start" size="32" start="1:0" type="uint"/>
- <!-- TODO: 2-3 -->
+ <field name="Primitive Index Base" size="32" start="2:0" type="uint"/>
<field name="Position" size="64" start="4:0" type="address"/>
<field name="Uniform buffers" size="64" start="6:0" type="address"/>
<field name="Textures" size="64" start="8:0" type="address"/>
@@ -364,7 +369,8 @@
<field name="Varyings" size="64" start="22:0" type="address"/>
<field name="Viewport" size="64" start="24:0" type="address"/>
<field name="Occlusion" size="64" start="26:0" type="address"/>
- <field name="Shared" size="64" start="28:0" type="address"/>
+ <field name="Thread Storage" size="64" start="28:0" type="address"/>
+ <field name="FBD" size="64" start="28:0" type="address"/>
</struct>
<struct name="Midgard Sampler">
diff --git a/src/panfrost/lib/pan_blit.c b/src/panfrost/lib/pan_blit.c
index 26c5608..eac5061 100644
--- a/src/panfrost/lib/pan_blit.c
+++ b/src/panfrost/lib/pan_blit.c
@@ -346,7 +346,9 @@
panfrost_pool_alloc_aligned(pool, MALI_MIDGARD_TILER_JOB_LENGTH, 64);
pan_section_pack(t.cpu, MIDGARD_TILER_JOB, DRAW, cfg) {
- cfg.unknown_1 = 0x7;
+ cfg.four_components_per_vertex = true;
+ cfg.draw_descriptor_is_64b = true;
+ cfg.texture_descriptor_is_64b = true;
cfg.position = coordinates;
cfg.textures = panfrost_pool_upload(pool, &texture_t.gpu, sizeof(texture_t.gpu));
cfg.samplers = sampler.gpu;
@@ -354,7 +356,7 @@
cfg.varying_buffers = varying_buffer.gpu;
cfg.varyings = varying.gpu;
cfg.viewport = viewport.gpu;
- cfg.shared = fbd;
+ cfg.fbd = fbd;
}
pan_section_pack(t.cpu, MIDGARD_TILER_JOB, PRIMITIVE, cfg) {