diff --git a/src/gallium/drivers/panfrost/pan_fb_preload.c b/src/gallium/drivers/panfrost/pan_fb_preload.c
index 5cba9a821f1..391194a0f79 100644
--- a/src/gallium/drivers/panfrost/pan_fb_preload.c
+++ b/src/gallium/drivers/panfrost/pan_fb_preload.c
@@ -1185,27 +1185,27 @@ pan_preload_emit_dcd(struct pan_fb_preload_cache *cache, struct pan_pool *pool,
pan_pack(out, DRAW, cfg) {
if (zs) {
/* ZS_EMIT requires late update/kill */
- cfg.zs_update_operation = MALI_PIXEL_KILL_FORCE_LATE;
- cfg.pixel_kill_operation = MALI_PIXEL_KILL_FORCE_LATE;
+ cfg.flags_0.zs_update_operation = MALI_PIXEL_KILL_FORCE_LATE;
+ cfg.flags_0.pixel_kill_operation = MALI_PIXEL_KILL_FORCE_LATE;
cfg.blend_count = 0;
} else {
/* Skipping ATEST requires forcing Z/S */
- cfg.zs_update_operation = MALI_PIXEL_KILL_FORCE_EARLY;
- cfg.pixel_kill_operation = MALI_PIXEL_KILL_FORCE_EARLY;
+ cfg.flags_0.zs_update_operation = MALI_PIXEL_KILL_FORCE_EARLY;
+ cfg.flags_0.pixel_kill_operation = MALI_PIXEL_KILL_FORCE_EARLY;
cfg.blend = blend.gpu;
cfg.blend_count = bd_count;
- cfg.render_target_mask = 0x1;
+ cfg.flags_1.render_target_mask = 0x1;
}
- cfg.allow_forward_pixel_to_kill = !zs;
- cfg.allow_forward_pixel_to_be_killed = true;
+ cfg.flags_0.allow_forward_pixel_to_kill = !zs;
+ cfg.flags_0.allow_forward_pixel_to_be_killed = true;
cfg.depth_stencil = pan_preload_emit_zs(pool, z, s);
- cfg.sample_mask = 0xFFFF;
- cfg.multisample_enable = ms;
- cfg.evaluate_per_sample = ms;
+ cfg.flags_1.sample_mask = 0xFFFF;
+ cfg.flags_0.multisample_enable = ms;
+ cfg.flags_0.evaluate_per_sample = ms;
cfg.maximum_z = 1.0;
- cfg.clean_fragment_write = clean_fragment_write;
+ cfg.flags_0.clean_fragment_write = clean_fragment_write;
cfg.shader.resources = T.gpu | nr_tables;
cfg.shader.shader = spd.gpu;
cfg.shader.thread_storage = tsd;
diff --git a/src/gallium/drivers/panfrost/pan_jm.c b/src/gallium/drivers/panfrost/pan_jm.c
index db6aa20f6e5..9d329f3bef2 100644
--- a/src/gallium/drivers/panfrost/pan_jm.c
+++ b/src/gallium/drivers/panfrost/pan_jm.c
@@ -519,15 +519,28 @@ jm_emit_tiler_draw(struct mali_draw_packed *out, struct panfrost_batch *batch,
* The hardware does not take primitive type into account when
* culling, so we need to do that check ourselves.
*/
+#if PAN_ARCH == 9
+ cfg.flags_0.cull_front_face = polygon && (rast->cull_face & PIPE_FACE_FRONT);
+ cfg.flags_0.cull_back_face = polygon && (rast->cull_face & PIPE_FACE_BACK);
+ cfg.flags_0.front_face_ccw = rast->front_ccw;
+#else
cfg.cull_front_face = polygon && (rast->cull_face & PIPE_FACE_FRONT);
cfg.cull_back_face = polygon && (rast->cull_face & PIPE_FACE_BACK);
cfg.front_face_ccw = rast->front_ccw;
+#endif
if (ctx->occlusion_query && ctx->active_queries) {
+#if PAN_ARCH == 9
+ if (ctx->occlusion_query->type == PIPE_QUERY_OCCLUSION_COUNTER)
+ cfg.flags_0.occlusion_query = MALI_OCCLUSION_MODE_COUNTER;
+ else
+ cfg.flags_0.occlusion_query = MALI_OCCLUSION_MODE_PREDICATE;
+#else
if (ctx->occlusion_query->type == PIPE_QUERY_OCCLUSION_COUNTER)
cfg.occlusion_query = MALI_OCCLUSION_MODE_COUNTER;
else
cfg.occlusion_query = MALI_OCCLUSION_MODE_PREDICATE;
+#endif
struct panfrost_resource *rsrc =
pan_resource(ctx->occlusion_query->rsrc);
@@ -538,19 +551,19 @@ jm_emit_tiler_draw(struct mali_draw_packed *out, struct panfrost_batch *batch,
#if PAN_ARCH >= 9
struct panfrost_compiled_shader *fs = ctx->prog[PIPE_SHADER_FRAGMENT];
- cfg.multisample_enable = rast->multisample;
- cfg.sample_mask = rast->multisample ? ctx->sample_mask : 0xFFFF;
+ cfg.flags_0.multisample_enable = rast->multisample;
+ cfg.flags_1.sample_mask = rast->multisample ? ctx->sample_mask : 0xFFFF;
/* Use per-sample shading if required by API Also use it when a
* blend shader is used with multisampling, as this is handled
* by a single ST_TILE in the blend shader with the current
* sample ID, requiring per-sample shading.
*/
- cfg.evaluate_per_sample =
+ cfg.flags_0.evaluate_per_sample =
(rast->multisample &&
((ctx->min_samples > 1) || ctx->valhall_has_blend_shader));
- cfg.single_sampled_lines = !rast->multisample;
+ cfg.flags_0.single_sampled_lines = !rast->multisample;
cfg.vertex_array.packet = true;
@@ -560,8 +573,8 @@ jm_emit_tiler_draw(struct mali_draw_packed *out, struct panfrost_batch *batch,
cfg.depth_stencil = batch->depth_stencil;
if (prim == MESA_PRIM_LINES && rast->line_smooth) {
- cfg.multisample_enable = true;
- cfg.single_sampled_lines = false;
+ cfg.flags_0.multisample_enable = true;
+ cfg.flags_0.single_sampled_lines = false;
}
if (fs_required) {
@@ -572,12 +585,12 @@ jm_emit_tiler_draw(struct mali_draw_packed *out, struct panfrost_batch *batch,
ctx->blend->base.alpha_to_coverage,
ctx->depth_stencil->zs_always_passes);
- cfg.pixel_kill_operation = earlyzs.kill;
- cfg.zs_update_operation = earlyzs.update;
+ cfg.flags_0.pixel_kill_operation = earlyzs.kill;
+ cfg.flags_0.zs_update_operation = earlyzs.update;
- cfg.allow_forward_pixel_to_kill =
+ cfg.flags_0.allow_forward_pixel_to_kill =
pan_allow_forward_pixel_to_kill(ctx, fs);
- cfg.allow_forward_pixel_to_be_killed = !fs->info.writes_global;
+ cfg.flags_0.allow_forward_pixel_to_be_killed = !fs->info.writes_global;
/* Mask of render targets that may be written. A render
* target may be written if the fragment shader writes
@@ -588,20 +601,20 @@ jm_emit_tiler_draw(struct mali_draw_packed *out, struct panfrost_batch *batch,
* Only set when there is a fragment shader, since
* otherwise no colour updates are possible.
*/
- cfg.render_target_mask =
+ cfg.flags_1.render_target_mask =
(fs->info.outputs_written >> FRAG_RESULT_DATA0) & ctx->fb_rt_mask;
/* Also use per-sample shading if required by the shader
*/
- cfg.evaluate_per_sample |=
+ cfg.flags_0.evaluate_per_sample |=
(fs->info.fs.sample_shading && rast->multisample);
/* Unlike Bifrost, alpha-to-coverage must be included in
* this identically-named flag. Confusing, isn't it?
*/
- cfg.shader_modifies_coverage = fs->info.fs.writes_coverage ||
- fs->info.fs.can_discard ||
- ctx->blend->base.alpha_to_coverage;
+ cfg.flags_0.shader_modifies_coverage =
+ fs->info.fs.writes_coverage || fs->info.fs.can_discard ||
+ ctx->blend->base.alpha_to_coverage;
/* Blend descriptors are only accessed by a BLEND
* instruction on Valhall. It follows that if the
@@ -610,10 +623,10 @@ jm_emit_tiler_draw(struct mali_draw_packed *out, struct panfrost_batch *batch,
*/
cfg.blend = batch->blend;
cfg.blend_count = MAX2(batch->key.nr_cbufs, 1);
- cfg.alpha_to_coverage = ctx->blend->base.alpha_to_coverage;
+ cfg.flags_0.alpha_to_coverage = ctx->blend->base.alpha_to_coverage;
- cfg.overdraw_alpha0 = panfrost_overdraw_alpha(ctx, 0);
- cfg.overdraw_alpha1 = panfrost_overdraw_alpha(ctx, 1);
+ cfg.flags_0.overdraw_alpha0 = panfrost_overdraw_alpha(ctx, 0);
+ cfg.flags_0.overdraw_alpha1 = panfrost_overdraw_alpha(ctx, 1);
jm_emit_shader_env(batch, &cfg.shader, PIPE_SHADER_FRAGMENT,
batch->rsd[PIPE_SHADER_FRAGMENT]);
@@ -621,22 +634,22 @@ jm_emit_tiler_draw(struct mali_draw_packed *out, struct panfrost_batch *batch,
/* These operations need to be FORCE to benefit from the
* depth-only pass optimizations.
*/
- cfg.pixel_kill_operation = MALI_PIXEL_KILL_FORCE_EARLY;
- cfg.zs_update_operation = MALI_PIXEL_KILL_FORCE_EARLY;
+ cfg.flags_0.pixel_kill_operation = MALI_PIXEL_KILL_FORCE_EARLY;
+ cfg.flags_0.zs_update_operation = MALI_PIXEL_KILL_FORCE_EARLY;
/* No shader and no blend => no shader or blend
* reasons to disable FPK. The only FPK-related state
* not covered is alpha-to-coverage which we don't set
* without blend.
*/
- cfg.allow_forward_pixel_to_kill = true;
+ cfg.flags_0.allow_forward_pixel_to_kill = true;
/* No shader => no shader side effects */
- cfg.allow_forward_pixel_to_be_killed = true;
+ cfg.flags_0.allow_forward_pixel_to_be_killed = true;
/* Alpha isn't written so these are vacuous */
- cfg.overdraw_alpha0 = true;
- cfg.overdraw_alpha1 = true;
+ cfg.flags_0.overdraw_alpha0 = true;
+ cfg.flags_0.overdraw_alpha1 = true;
}
#else
cfg.position = batch->varyings.pos;
diff --git a/src/panfrost/lib/genxml/v10.xml b/src/panfrost/lib/genxml/v10.xml
index 52c144e78c8..c95ddf41b4b 100644
--- a/src/panfrost/lib/genxml/v10.xml
+++ b/src/panfrost/lib/genxml/v10.xml
@@ -1903,30 +1903,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/src/panfrost/lib/genxml/v9.xml b/src/panfrost/lib/genxml/v9.xml
index c3ad25b14b9..421c4518740 100644
--- a/src/panfrost/lib/genxml/v9.xml
+++ b/src/panfrost/lib/genxml/v9.xml
@@ -1397,29 +1397,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/src/panfrost/vulkan/panvk_vX_cmd_fb_preload.c b/src/panfrost/vulkan/panvk_vX_cmd_fb_preload.c
index 6302f1c240a..3150cfd7569 100644
--- a/src/panfrost/vulkan/panvk_vX_cmd_fb_preload.c
+++ b/src/panfrost/vulkan/panvk_vX_cmd_fb_preload.c
@@ -620,29 +620,30 @@ cmd_emit_dcd(struct panvk_cmd_buffer *cmdbuf, struct pan_fb_info *fbinfo,
pan_pack(&dcds[dcd_idx], DRAW, cfg) {
if (key->aspects == VK_IMAGE_ASPECT_COLOR_BIT) {
/* Skipping ATEST requires forcing Z/S */
- cfg.zs_update_operation = MALI_PIXEL_KILL_FORCE_EARLY;
- cfg.pixel_kill_operation = MALI_PIXEL_KILL_FORCE_EARLY;
+ cfg.flags_0.zs_update_operation = MALI_PIXEL_KILL_FORCE_EARLY;
+ cfg.flags_0.pixel_kill_operation = MALI_PIXEL_KILL_FORCE_EARLY;
cfg.blend = bds.gpu;
cfg.blend_count = bd_count;
- cfg.render_target_mask = cmdbuf->state.gfx.render.bound_attachments &
- MESA_VK_RP_ATTACHMENT_ANY_COLOR_BITS;
+ cfg.flags_1.render_target_mask =
+ cmdbuf->state.gfx.render.bound_attachments &
+ MESA_VK_RP_ATTACHMENT_ANY_COLOR_BITS;
} else {
/* ZS_EMIT requires late update/kill */
- cfg.zs_update_operation = MALI_PIXEL_KILL_FORCE_LATE;
- cfg.pixel_kill_operation = MALI_PIXEL_KILL_FORCE_LATE;
+ cfg.flags_0.zs_update_operation = MALI_PIXEL_KILL_FORCE_LATE;
+ cfg.flags_0.pixel_kill_operation = MALI_PIXEL_KILL_FORCE_LATE;
cfg.blend_count = 0;
}
- cfg.allow_forward_pixel_to_kill =
+ cfg.flags_0.allow_forward_pixel_to_kill =
key->aspects == VK_IMAGE_ASPECT_COLOR_BIT;
- cfg.allow_forward_pixel_to_be_killed = true;
+ cfg.flags_0.allow_forward_pixel_to_be_killed = true;
cfg.depth_stencil = zsd.gpu;
- cfg.sample_mask = 0xFFFF;
- cfg.multisample_enable = key->samples > 1;
- cfg.evaluate_per_sample = key->samples > 1;
+ cfg.flags_1.sample_mask = 0xFFFF;
+ cfg.flags_0.multisample_enable = key->samples > 1;
+ cfg.flags_0.evaluate_per_sample = key->samples > 1;
cfg.maximum_z = 1.0;
- cfg.clean_fragment_write = true;
+ cfg.flags_0.clean_fragment_write = true;
cfg.shader.resources = res_table.gpu | 1;
cfg.shader.shader = panvk_priv_mem_dev_addr(shader->spd);
cfg.shader.thread_storage = cmdbuf->state.gfx.tsd;