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 @@ + + + + + +