summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/drivers/panfrost/ci/expected-failures.txt72
-rw-r--r--src/gallium/drivers/panfrost/include/panfrost-job.h14
-rw-r--r--src/gallium/drivers/panfrost/pan_context.c12
-rw-r--r--src/gallium/drivers/panfrost/pandecode/decode.c3
4 files changed, 25 insertions, 76 deletions
diff --git a/src/gallium/drivers/panfrost/ci/expected-failures.txt b/src/gallium/drivers/panfrost/ci/expected-failures.txt
index c5386966554..8bfe988e99c 100644
--- a/src/gallium/drivers/panfrost/ci/expected-failures.txt
+++ b/src/gallium/drivers/panfrost/ci/expected-failures.txt
@@ -361,44 +361,6 @@ dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_nearest_nearest_repeat_
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_nearest_nearest_repeat_rgb888
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_nearest_nearest_repeat_rgba4444
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_nearest_nearest_repeat_rgba8888
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_etc1
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_l8_npot
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_l8_pot
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_rgb888_npot
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_rgb888_pot
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_rgba4444_npot
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_rgba4444_pot
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_rgba8888_npot
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_rgba8888_pot
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_mirror_etc1
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_mirror_l8_pot
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_mirror_rgb888_pot
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_mirror_rgba4444_pot
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_mirror_rgba8888_pot
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_repeat_etc1
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_repeat_l8_pot
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_repeat_rgb888_pot
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_repeat_rgba4444_pot
-dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_repeat_rgba8888_pot
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_etc1
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_l8_npot
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_l8_pot
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_rgb888_npot
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_rgb888_pot
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_rgba4444_npot
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_rgba4444_pot
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_rgba8888_npot
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_rgba8888_pot
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_mirror_etc1
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_mirror_l8_pot
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_mirror_rgb888_pot
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_mirror_rgba4444_pot
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_mirror_rgba8888_pot
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_repeat_etc1
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_repeat_l8_pot
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_repeat_rgb888_pot
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_repeat_rgba4444_pot
-dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_repeat_rgba8888_pot
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_clamp_etc1
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_clamp_rgba8888
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_mirror_etc1
@@ -429,40 +391,6 @@ dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_nearest_nearest_repeat
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_nearest_nearest_repeat_rgb888
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_nearest_nearest_repeat_rgba4444
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_nearest_nearest_repeat_rgba8888
-dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_etc1
-dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_l8_npot
-dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_l8_pot
-dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_rgb888_npot
-dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_rgb888_pot
-dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_rgba4444_npot
-dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_rgba4444_pot
-dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_rgba8888_npot
-dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_rgba8888_pot
-dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_mirror_l8_pot
-dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_mirror_rgb888_pot
-dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_mirror_rgba4444_pot
-dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_mirror_rgba8888_pot
-dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_repeat_l8_pot
-dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_repeat_rgb888_pot
-dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_repeat_rgba4444_pot
-dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_repeat_rgba8888_pot
-dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_etc1
-dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_l8_npot
-dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_l8_pot
-dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_rgb888_npot
-dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_rgb888_pot
-dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_rgba4444_npot
-dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_rgba4444_pot
-dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_rgba8888_npot
-dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_rgba8888_pot
-dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_mirror_l8_pot
-dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_mirror_rgb888_pot
-dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_mirror_rgba4444_pot
-dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_mirror_rgba8888_pot
-dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_repeat_l8_pot
-dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_repeat_rgb888_pot
-dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_repeat_rgba4444_pot
-dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_repeat_rgba8888_pot
dEQP-GLES2.functional.texture.filtering.cube.nearest_mipmap_linear_linear_clamp_etc1
dEQP-GLES2.functional.texture.filtering.cube.nearest_mipmap_linear_linear_clamp_rgba8888
dEQP-GLES2.functional.texture.filtering.cube.nearest_mipmap_linear_linear_mirror_rgba8888
diff --git a/src/gallium/drivers/panfrost/include/panfrost-job.h b/src/gallium/drivers/panfrost/include/panfrost-job.h
index e320785542b..4b8272fd959 100644
--- a/src/gallium/drivers/panfrost/include/panfrost-job.h
+++ b/src/gallium/drivers/panfrost/include/panfrost-job.h
@@ -403,7 +403,19 @@ enum mali_format {
#define MALI_GET_ALPHA_COVERAGE(nibble) ((float) nibble / 15.0f)
/* Applies to unknown1 */
-#define MALI_NO_ALPHA_TO_COVERAGE (1 << 10)
+
+/* Should the hardware perform early-Z testing? Normally should be set
+ * for performance reasons. Clear if you use: discard,
+ * alpha-to-coverage... * It's also possible this disables
+ * forward-pixel kill; we're not quite sure which bit is which yet.
+ * TODO: How does this interact with blending?*/
+
+#define MALI_EARLY_Z (1 << 10)
+
+/* Should the hardware calculate derivatives (via helper invocations)? Set in a
+ * fragment shader that uses texturing or derivative functions */
+
+#define MALI_HELPER_INVOCATIONS (1 << 11)
/* Flags denoting the fragment shader's use of tilebuffer readback. If the
* shader might read any part of the tilebuffer, set MALI_READS_TILEBUFFER. If
diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c
index 8dbdc84209d..7004fb14cac 100644
--- a/src/gallium/drivers/panfrost/pan_context.c
+++ b/src/gallium/drivers/panfrost/pan_context.c
@@ -1088,7 +1088,15 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data)
/* Set late due to depending on render state */
/* The one at the end seems to mean "1 UBO" */
- ctx->fragment_shader_core.midgard1.unknown1 = MALI_NO_ALPHA_TO_COVERAGE | 0x200 | 0x2201;
+ unsigned flags = MALI_EARLY_Z | 0x200 | 0x2000 | 0x1;
+
+ /* Any time texturing is used, derivatives are implicitly
+ * calculated, so we need to enable helper invocations */
+
+ if (ctx->sampler_view_count[PIPE_SHADER_FRAGMENT])
+ flags |= MALI_HELPER_INVOCATIONS;
+
+ ctx->fragment_shader_core.midgard1.unknown1 = flags;
/* Assign texture/sample count right before upload */
ctx->fragment_shader_core.texture_count = ctx->sampler_view_count[PIPE_SHADER_FRAGMENT];
@@ -1107,7 +1115,7 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data)
if (variant->can_discard) {
ctx->fragment_shader_core.unknown2_3 |= MALI_CAN_DISCARD;
- ctx->fragment_shader_core.midgard1.unknown1 &= ~MALI_NO_ALPHA_TO_COVERAGE;
+ ctx->fragment_shader_core.midgard1.unknown1 &= ~MALI_EARLY_Z;
ctx->fragment_shader_core.midgard1.unknown1 |= 0x4000;
ctx->fragment_shader_core.midgard1.unknown1 = 0x4200;
}
diff --git a/src/gallium/drivers/panfrost/pandecode/decode.c b/src/gallium/drivers/panfrost/pandecode/decode.c
index fdb820a37f4..90b2579a436 100644
--- a/src/gallium/drivers/panfrost/pandecode/decode.c
+++ b/src/gallium/drivers/panfrost/pandecode/decode.c
@@ -223,7 +223,8 @@ static const struct pandecode_flag_info mfbd_extra_flag_info[] = {
#define FLAG_INFO(flag) { MALI_##flag, "MALI_" #flag }
static const struct pandecode_flag_info shader_unknown1_flag_info [] = {
- FLAG_INFO(NO_ALPHA_TO_COVERAGE),
+ FLAG_INFO(EARLY_Z),
+ FLAG_INFO(HELPER_INVOCATIONS),
FLAG_INFO(READS_TILEBUFFER),
FLAG_INFO(READS_ZS),
{}