diff --git a/src/gallium/drivers/panfrost/pan_compute.c b/src/gallium/drivers/panfrost/pan_compute.c
index 74986992e98..3b5e6332cc9 100644
--- a/src/gallium/drivers/panfrost/pan_compute.c
+++ b/src/gallium/drivers/panfrost/pan_compute.c
@@ -141,9 +141,11 @@ panfrost_launch_grid(struct pipe_context *pipe,
}
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 07c54d4e04a..2b7ce4b6c64 100644
--- a/src/gallium/drivers/panfrost/pan_context.c
+++ b/src/gallium/drivers/panfrost/pan_context.c
@@ -258,8 +258,8 @@ pan_emit_draw_descs(struct panfrost_batch *batch,
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 @@ panfrost_draw_emit_vertex(struct panfrost_batch *batch,
}
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 @@ panfrost_draw_emit_tiler(struct panfrost_batch *batch,
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 @@ panfrost_draw_emit_tiler(struct panfrost_batch *batch,
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 62572a32a4d..99f1ba267f9 100644
--- a/src/panfrost/bifrost/test/bi_submit.c
+++ b/src/panfrost/bifrost/test/bi_submit.c
@@ -195,8 +195,8 @@ bit_vertex(struct panfrost_device *dev, panfrost_program prog,
}
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 51e0a3f52f3..a556fd7e0dc 100644
--- a/src/panfrost/lib/decode.c
+++ b/src/panfrost/lib/decode.c
@@ -1124,14 +1124,14 @@ pandecode_vertex_tiler_postfix_pre(
};
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 @@ pandecode_vertex_tiler_postfix_pre(
* 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 4e5d97667a7..74dcc38b785 100644
--- a/src/panfrost/lib/midgard.xml
+++ b/src/panfrost/lib/midgard.xml
@@ -342,16 +342,21 @@
-
+
+
+
-
-
-
+
+
+
+
+
+
-
+
@@ -364,7 +369,8 @@
-
+
+
diff --git a/src/panfrost/lib/pan_blit.c b/src/panfrost/lib/pan_blit.c
index 26c56086b53..eac50619781 100644
--- a/src/panfrost/lib/pan_blit.c
+++ b/src/panfrost/lib/pan_blit.c
@@ -346,7 +346,9 @@ panfrost_load_midg(
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 @@ panfrost_load_midg(
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) {