diff options
-rw-r--r-- | src/gallium/drivers/panfrost/ci/expected-failures.txt | 72 | ||||
-rw-r--r-- | src/gallium/drivers/panfrost/include/panfrost-job.h | 14 | ||||
-rw-r--r-- | src/gallium/drivers/panfrost/pan_context.c | 12 | ||||
-rw-r--r-- | src/gallium/drivers/panfrost/pandecode/decode.c | 3 |
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), {} |