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) {