diff --git a/src/gallium/drivers/panfrost/pan_blit.c b/src/gallium/drivers/panfrost/pan_blit.c
index ab8c26d1d2d..a8710e1cc04 100644
--- a/src/gallium/drivers/panfrost/pan_blit.c
+++ b/src/gallium/drivers/panfrost/pan_blit.c
@@ -25,7 +25,7 @@ panfrost_blitter_draw_rectangle(struct blitter_context *blitter,
struct panfrost_context *pctx = pan_context(ctx);
struct panfrost_screen *scr = pan_screen(ctx->screen);
- if (scr->dev.arch <= 8 || scr->dev.arch >= 11 || depth != 0.0f ||
+ if (scr->dev.arch <= 8 || scr->dev.arch >= 13 || depth != 0.0f ||
num_instances > 1)
goto fallback;
diff --git a/src/gallium/drivers/panfrost/pan_csf.c b/src/gallium/drivers/panfrost/pan_csf.c
index fabc3a4e4be..d060b349f9e 100644
--- a/src/gallium/drivers/panfrost/pan_csf.c
+++ b/src/gallium/drivers/panfrost/pan_csf.c
@@ -1476,7 +1476,7 @@ GENX(csf_launch_draw_indirect)(struct panfrost_batch *batch,
}
}
-#if PAN_ARCH == 10
+#if PAN_ARCH <= 12
static struct pan_ptr
csf_emit_fullscreen_dcd(struct panfrost_batch *batch,
struct pan_ptr vertex_array, uint64_t resources)
@@ -1496,22 +1496,36 @@ csf_emit_fullscreen_dcd(struct panfrost_batch *batch,
/* Vertex descriptor */
if (vertex_array.cpu) {
+#if PAN_ARCH >= 12
+ cfg.vertex_pointer = vertex_array.gpu;
+#else
cfg.vertex_array.packet = true;
cfg.vertex_array.pointer = vertex_array.gpu;
cfg.vertex_array.vertex_packet_stride =
PAN_RUN_FULLSCREEN_PACKET_STRIDE;
cfg.vertex_array.vertex_attribute_stride =
PAN_RUN_FULLSCREEN_ATTRIB_STRIDE;
+#endif
}
/* Depth/stencil and blend descriptor */
+#if PAN_ARCH == 10
cfg.minimum_z = batch->minimum_z;
cfg.maximum_z = batch->maximum_z;
+#endif
cfg.depth_stencil = batch->depth_stencil;
cfg.blend_count = MAX2(batch->key.nr_cbufs, 1);
cfg.blend = batch->blend;
/* Shader environment */
+#if PAN_ARCH >= 12
+ cfg.fragment_fau.count = DIV_ROUND_UP(
+ batch->nr_push_uniforms[MESA_SHADER_FRAGMENT], 2);
+ cfg.fragment_resources = resources;
+ cfg.fragment_shader = batch->rsd[MESA_SHADER_FRAGMENT];
+ cfg.thread_storage = batch->tls.gpu;
+ cfg.fragment_fau.pointer = batch->push_uniforms[MESA_SHADER_FRAGMENT];
+#else
cfg.shader.attribute_offset = 0;
cfg.shader.fau_count = DIV_ROUND_UP(
batch->nr_push_uniforms[MESA_SHADER_FRAGMENT], 2);
@@ -1519,6 +1533,7 @@ csf_emit_fullscreen_dcd(struct panfrost_batch *batch,
cfg.shader.shader = batch->rsd[MESA_SHADER_FRAGMENT];
cfg.shader.thread_storage = batch->tls.gpu;
cfg.shader.fau = batch->push_uniforms[MESA_SHADER_FRAGMENT];
+#endif
}
return dcd;
@@ -1530,7 +1545,7 @@ GENX(csf_launch_draw_fullscreen)(struct panfrost_batch *batch,
enum blitter_attrib_type type,
const struct blitter_attrib *attrib)
{
-#if PAN_ARCH == 10
+#if PAN_ARCH <= 12
PAN_TRACE_FUNC(PAN_TRACE_GL_CSF);
struct cs_builder *b = batch->csf.cs.builder;
diff --git a/src/panfrost/genxml/v12.xml b/src/panfrost/genxml/v12.xml
index 0d651f01b0d..80f7bf95227 100644
--- a/src/panfrost/genxml/v12.xml
+++ b/src/panfrost/genxml/v12.xml
@@ -1155,6 +1155,12 @@
+
+
+
+
+
+