From c138ca80d2390ce0d0fe640bc74aab2d2d0cb80d Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Thu, 19 Sep 2019 15:52:02 +0200 Subject: [PATCH] panfrost: Make sure a clear does not re-use a pre-existing batch glClear()s are expected to be the first thing GL apps do before drawing new things. If there's already an existing batch targetting the same FBO that has draws attached to it, we should make sure the new clear gets a new batch assigned to guaranteed that the FB content is actually cleared with the requested color/depth/stencil values. We create a panfrost_get_fresh_batch_for_fbo() helper for that and call it from panfrost_clear(). Signed-off-by: Boris Brezillon Reviewed-by: Alyssa Rosenzweig --- .gitlab-ci/deqp-panfrost-t760-fails.txt | 118 ---------------- .gitlab-ci/deqp-panfrost-t860-fails.txt | 152 --------------------- src/gallium/drivers/panfrost/pan_context.c | 9 +- src/gallium/drivers/panfrost/pan_job.c | 21 +++ src/gallium/drivers/panfrost/pan_job.h | 3 + 5 files changed, 32 insertions(+), 271 deletions(-) diff --git a/.gitlab-ci/deqp-panfrost-t760-fails.txt b/.gitlab-ci/deqp-panfrost-t760-fails.txt index 6304ebf8112..8ce1e424680 100644 --- a/.gitlab-ci/deqp-panfrost-t760-fails.txt +++ b/.gitlab-ci/deqp-panfrost-t760-fails.txt @@ -1,10 +1,3 @@ -dEQP-GLES2.functional.color_clear.masked_rgba Fail -dEQP-GLES2.functional.color_clear.masked_rgb Fail -dEQP-GLES2.functional.color_clear.masked_scissored_rgba Fail -dEQP-GLES2.functional.color_clear.masked_scissored_rgb Fail -dEQP-GLES2.functional.color_clear.scissored_rgba Fail -dEQP-GLES2.functional.color_clear.scissored_rgb Fail -dEQP-GLES2.functional.color_clear.short_scissored_rgb Fail dEQP-GLES2.functional.depth_range.write.0_8_to_third Fail dEQP-GLES2.functional.depth_range.write.clamp_both Fail dEQP-GLES2.functional.depth_range.write.clamp_far Fail @@ -859,198 +852,87 @@ dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.both Fail dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.depth Fail dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.stencil Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.0 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.10 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.11 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.12 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.13 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.15 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.16 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.17 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.18 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.19 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.1 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.20 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.21 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.22 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.23 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.24 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.25 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.26 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.28 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.29 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.30 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.31 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.32 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.33 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.34 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.35 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.36 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.37 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.38 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.39 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.3 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.40 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.41 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.42 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.43 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.44 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.46 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.47 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.48 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.49 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.50 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.51 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.52 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.53 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.54 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.55 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.56 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.57 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.58 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.59 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.5 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.60 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.61 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.62 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.63 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.64 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.65 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.66 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.67 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.68 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.69 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.6 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.70 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.71 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.72 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.73 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.74 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.75 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.76 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.77 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.78 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.79 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.7 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.80 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.81 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.82 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.83 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.84 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.85 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.86 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.87 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.88 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.89 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.8 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.90 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.91 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.92 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.93 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.94 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.95 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.96 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.97 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.98 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.99 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.9 Fail dEQP-GLES2.functional.fragment_ops.random.0 Fail dEQP-GLES2.functional.fragment_ops.random.10 Fail dEQP-GLES2.functional.fragment_ops.random.11 Fail -dEQP-GLES2.functional.fragment_ops.random.12 Fail -dEQP-GLES2.functional.fragment_ops.random.13 Fail -dEQP-GLES2.functional.fragment_ops.random.14 Fail dEQP-GLES2.functional.fragment_ops.random.15 Fail -dEQP-GLES2.functional.fragment_ops.random.16 Fail -dEQP-GLES2.functional.fragment_ops.random.17 Fail -dEQP-GLES2.functional.fragment_ops.random.18 Fail dEQP-GLES2.functional.fragment_ops.random.19 Fail -dEQP-GLES2.functional.fragment_ops.random.1 Fail dEQP-GLES2.functional.fragment_ops.random.20 Fail -dEQP-GLES2.functional.fragment_ops.random.21 Fail -dEQP-GLES2.functional.fragment_ops.random.22 Fail -dEQP-GLES2.functional.fragment_ops.random.23 Fail dEQP-GLES2.functional.fragment_ops.random.24 Fail dEQP-GLES2.functional.fragment_ops.random.25 Fail -dEQP-GLES2.functional.fragment_ops.random.26 Fail -dEQP-GLES2.functional.fragment_ops.random.27 Fail -dEQP-GLES2.functional.fragment_ops.random.28 Fail -dEQP-GLES2.functional.fragment_ops.random.29 Fail -dEQP-GLES2.functional.fragment_ops.random.2 Fail dEQP-GLES2.functional.fragment_ops.random.30 Fail -dEQP-GLES2.functional.fragment_ops.random.31 Fail dEQP-GLES2.functional.fragment_ops.random.32 Fail -dEQP-GLES2.functional.fragment_ops.random.33 Fail -dEQP-GLES2.functional.fragment_ops.random.34 Fail -dEQP-GLES2.functional.fragment_ops.random.35 Fail -dEQP-GLES2.functional.fragment_ops.random.36 Fail dEQP-GLES2.functional.fragment_ops.random.37 Fail dEQP-GLES2.functional.fragment_ops.random.38 Fail dEQP-GLES2.functional.fragment_ops.random.39 Fail dEQP-GLES2.functional.fragment_ops.random.3 Fail dEQP-GLES2.functional.fragment_ops.random.40 Fail -dEQP-GLES2.functional.fragment_ops.random.41 Fail -dEQP-GLES2.functional.fragment_ops.random.42 Fail -dEQP-GLES2.functional.fragment_ops.random.43 Fail -dEQP-GLES2.functional.fragment_ops.random.44 Fail dEQP-GLES2.functional.fragment_ops.random.45 Fail -dEQP-GLES2.functional.fragment_ops.random.46 Fail -dEQP-GLES2.functional.fragment_ops.random.47 Fail dEQP-GLES2.functional.fragment_ops.random.48 Fail -dEQP-GLES2.functional.fragment_ops.random.49 Fail dEQP-GLES2.functional.fragment_ops.random.4 Fail -dEQP-GLES2.functional.fragment_ops.random.50 Fail -dEQP-GLES2.functional.fragment_ops.random.51 Fail -dEQP-GLES2.functional.fragment_ops.random.52 Fail dEQP-GLES2.functional.fragment_ops.random.53 Fail dEQP-GLES2.functional.fragment_ops.random.54 Fail -dEQP-GLES2.functional.fragment_ops.random.55 Fail dEQP-GLES2.functional.fragment_ops.random.56 Fail dEQP-GLES2.functional.fragment_ops.random.57 Fail dEQP-GLES2.functional.fragment_ops.random.58 Fail dEQP-GLES2.functional.fragment_ops.random.59 Fail -dEQP-GLES2.functional.fragment_ops.random.5 Fail dEQP-GLES2.functional.fragment_ops.random.60 Fail -dEQP-GLES2.functional.fragment_ops.random.61 Fail -dEQP-GLES2.functional.fragment_ops.random.62 Fail dEQP-GLES2.functional.fragment_ops.random.63 Fail -dEQP-GLES2.functional.fragment_ops.random.64 Fail dEQP-GLES2.functional.fragment_ops.random.65 Fail dEQP-GLES2.functional.fragment_ops.random.66 Fail dEQP-GLES2.functional.fragment_ops.random.67 Fail dEQP-GLES2.functional.fragment_ops.random.68 Fail -dEQP-GLES2.functional.fragment_ops.random.69 Fail dEQP-GLES2.functional.fragment_ops.random.6 Fail -dEQP-GLES2.functional.fragment_ops.random.70 Fail dEQP-GLES2.functional.fragment_ops.random.71 Fail dEQP-GLES2.functional.fragment_ops.random.72 Fail -dEQP-GLES2.functional.fragment_ops.random.73 Fail -dEQP-GLES2.functional.fragment_ops.random.74 Fail dEQP-GLES2.functional.fragment_ops.random.75 Fail -dEQP-GLES2.functional.fragment_ops.random.76 Fail dEQP-GLES2.functional.fragment_ops.random.77 Fail -dEQP-GLES2.functional.fragment_ops.random.78 Fail -dEQP-GLES2.functional.fragment_ops.random.79 Fail -dEQP-GLES2.functional.fragment_ops.random.7 Fail -dEQP-GLES2.functional.fragment_ops.random.80 Fail dEQP-GLES2.functional.fragment_ops.random.81 Fail -dEQP-GLES2.functional.fragment_ops.random.82 Fail -dEQP-GLES2.functional.fragment_ops.random.83 Fail -dEQP-GLES2.functional.fragment_ops.random.84 Fail dEQP-GLES2.functional.fragment_ops.random.85 Fail -dEQP-GLES2.functional.fragment_ops.random.86 Fail dEQP-GLES2.functional.fragment_ops.random.87 Fail -dEQP-GLES2.functional.fragment_ops.random.88 Fail -dEQP-GLES2.functional.fragment_ops.random.89 Fail -dEQP-GLES2.functional.fragment_ops.random.8 Fail dEQP-GLES2.functional.fragment_ops.random.90 Fail -dEQP-GLES2.functional.fragment_ops.random.91 Fail dEQP-GLES2.functional.fragment_ops.random.92 Fail -dEQP-GLES2.functional.fragment_ops.random.93 Fail -dEQP-GLES2.functional.fragment_ops.random.94 Fail -dEQP-GLES2.functional.fragment_ops.random.95 Fail dEQP-GLES2.functional.fragment_ops.random.96 Fail -dEQP-GLES2.functional.fragment_ops.random.97 Fail -dEQP-GLES2.functional.fragment_ops.random.98 Fail dEQP-GLES2.functional.fragment_ops.random.99 Fail dEQP-GLES2.functional.fragment_ops.random.9 Fail dEQP-GLES2.functional.polygon_offset.default_factor_1_slope Fail diff --git a/.gitlab-ci/deqp-panfrost-t860-fails.txt b/.gitlab-ci/deqp-panfrost-t860-fails.txt index 7e7dbd62307..fbafe8eedc9 100644 --- a/.gitlab-ci/deqp-panfrost-t860-fails.txt +++ b/.gitlab-ci/deqp-panfrost-t860-fails.txt @@ -1,10 +1,3 @@ -dEQP-GLES2.functional.color_clear.masked_rgba Fail -dEQP-GLES2.functional.color_clear.masked_rgb Fail -dEQP-GLES2.functional.color_clear.masked_scissored_rgba Fail -dEQP-GLES2.functional.color_clear.masked_scissored_rgb Fail -dEQP-GLES2.functional.color_clear.scissored_rgba Fail -dEQP-GLES2.functional.color_clear.scissored_rgb Fail -dEQP-GLES2.functional.color_clear.short_scissored_rgb Fail dEQP-GLES2.functional.depth_range.write.0_8_to_third Fail dEQP-GLES2.functional.depth_range.write.clamp_both Fail dEQP-GLES2.functional.depth_range.write.clamp_far Fail @@ -672,200 +665,55 @@ dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_zero Fail dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.both Fail dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.depth Fail dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.stencil Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.0 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.10 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.11 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.12 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.13 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.15 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.16 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.17 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.18 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.19 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.1 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.20 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.21 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.22 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.23 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.24 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.25 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.26 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.29 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.30 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.31 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.32 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.33 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.34 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.35 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.36 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.37 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.38 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.39 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.3 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.40 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.41 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.42 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.43 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.44 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.46 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.47 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.48 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.49 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.50 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.51 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.52 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.53 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.54 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.55 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.56 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.57 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.58 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.59 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.5 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.60 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.61 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.62 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.63 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.64 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.65 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.66 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.67 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.68 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.69 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.6 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.70 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.71 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.72 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.73 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.74 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.75 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.76 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.77 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.78 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.79 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.7 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.80 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.81 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.82 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.83 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.84 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.85 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.86 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.87 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.88 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.89 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.8 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.90 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.91 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.92 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.93 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.94 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.95 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.96 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.97 Fail dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.98 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.99 Fail -dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.9 Fail dEQP-GLES2.functional.fragment_ops.random.0 Fail -dEQP-GLES2.functional.fragment_ops.random.10 Fail dEQP-GLES2.functional.fragment_ops.random.11 Fail -dEQP-GLES2.functional.fragment_ops.random.12 Fail -dEQP-GLES2.functional.fragment_ops.random.13 Fail -dEQP-GLES2.functional.fragment_ops.random.14 Fail -dEQP-GLES2.functional.fragment_ops.random.15 Fail -dEQP-GLES2.functional.fragment_ops.random.16 Fail -dEQP-GLES2.functional.fragment_ops.random.17 Fail -dEQP-GLES2.functional.fragment_ops.random.18 Fail dEQP-GLES2.functional.fragment_ops.random.19 Fail -dEQP-GLES2.functional.fragment_ops.random.1 Fail -dEQP-GLES2.functional.fragment_ops.random.20 Fail -dEQP-GLES2.functional.fragment_ops.random.21 Fail -dEQP-GLES2.functional.fragment_ops.random.22 Fail -dEQP-GLES2.functional.fragment_ops.random.23 Fail dEQP-GLES2.functional.fragment_ops.random.24 Fail dEQP-GLES2.functional.fragment_ops.random.25 Fail -dEQP-GLES2.functional.fragment_ops.random.26 Fail -dEQP-GLES2.functional.fragment_ops.random.27 Fail -dEQP-GLES2.functional.fragment_ops.random.28 Fail -dEQP-GLES2.functional.fragment_ops.random.29 Fail -dEQP-GLES2.functional.fragment_ops.random.2 Fail -dEQP-GLES2.functional.fragment_ops.random.30 Fail -dEQP-GLES2.functional.fragment_ops.random.31 Fail dEQP-GLES2.functional.fragment_ops.random.32 Fail -dEQP-GLES2.functional.fragment_ops.random.33 Fail -dEQP-GLES2.functional.fragment_ops.random.34 Fail -dEQP-GLES2.functional.fragment_ops.random.35 Fail -dEQP-GLES2.functional.fragment_ops.random.36 Fail dEQP-GLES2.functional.fragment_ops.random.37 Fail -dEQP-GLES2.functional.fragment_ops.random.38 Fail -dEQP-GLES2.functional.fragment_ops.random.39 Fail dEQP-GLES2.functional.fragment_ops.random.3 Fail -dEQP-GLES2.functional.fragment_ops.random.40 Fail -dEQP-GLES2.functional.fragment_ops.random.41 Fail -dEQP-GLES2.functional.fragment_ops.random.42 Fail -dEQP-GLES2.functional.fragment_ops.random.43 Fail -dEQP-GLES2.functional.fragment_ops.random.44 Fail dEQP-GLES2.functional.fragment_ops.random.45 Fail -dEQP-GLES2.functional.fragment_ops.random.46 Fail -dEQP-GLES2.functional.fragment_ops.random.47 Fail dEQP-GLES2.functional.fragment_ops.random.48 Fail -dEQP-GLES2.functional.fragment_ops.random.49 Fail -dEQP-GLES2.functional.fragment_ops.random.4 Fail -dEQP-GLES2.functional.fragment_ops.random.50 Fail -dEQP-GLES2.functional.fragment_ops.random.51 Fail -dEQP-GLES2.functional.fragment_ops.random.52 Fail dEQP-GLES2.functional.fragment_ops.random.53 Fail -dEQP-GLES2.functional.fragment_ops.random.54 Fail -dEQP-GLES2.functional.fragment_ops.random.55 Fail dEQP-GLES2.functional.fragment_ops.random.56 Fail -dEQP-GLES2.functional.fragment_ops.random.57 Fail -dEQP-GLES2.functional.fragment_ops.random.58 Fail -dEQP-GLES2.functional.fragment_ops.random.59 Fail -dEQP-GLES2.functional.fragment_ops.random.5 Fail -dEQP-GLES2.functional.fragment_ops.random.60 Fail -dEQP-GLES2.functional.fragment_ops.random.61 Fail -dEQP-GLES2.functional.fragment_ops.random.62 Fail dEQP-GLES2.functional.fragment_ops.random.63 Fail -dEQP-GLES2.functional.fragment_ops.random.64 Fail dEQP-GLES2.functional.fragment_ops.random.65 Fail dEQP-GLES2.functional.fragment_ops.random.66 Fail dEQP-GLES2.functional.fragment_ops.random.67 Fail dEQP-GLES2.functional.fragment_ops.random.68 Fail -dEQP-GLES2.functional.fragment_ops.random.69 Fail dEQP-GLES2.functional.fragment_ops.random.6 Fail -dEQP-GLES2.functional.fragment_ops.random.70 Fail -dEQP-GLES2.functional.fragment_ops.random.71 Fail dEQP-GLES2.functional.fragment_ops.random.72 Fail -dEQP-GLES2.functional.fragment_ops.random.73 Fail -dEQP-GLES2.functional.fragment_ops.random.74 Fail dEQP-GLES2.functional.fragment_ops.random.75 Fail -dEQP-GLES2.functional.fragment_ops.random.76 Fail -dEQP-GLES2.functional.fragment_ops.random.77 Fail -dEQP-GLES2.functional.fragment_ops.random.78 Fail -dEQP-GLES2.functional.fragment_ops.random.79 Fail -dEQP-GLES2.functional.fragment_ops.random.7 Fail -dEQP-GLES2.functional.fragment_ops.random.80 Fail dEQP-GLES2.functional.fragment_ops.random.81 Fail -dEQP-GLES2.functional.fragment_ops.random.82 Fail -dEQP-GLES2.functional.fragment_ops.random.83 Fail -dEQP-GLES2.functional.fragment_ops.random.84 Fail -dEQP-GLES2.functional.fragment_ops.random.85 Fail -dEQP-GLES2.functional.fragment_ops.random.86 Fail dEQP-GLES2.functional.fragment_ops.random.87 Fail -dEQP-GLES2.functional.fragment_ops.random.88 Fail -dEQP-GLES2.functional.fragment_ops.random.89 Fail -dEQP-GLES2.functional.fragment_ops.random.8 Fail -dEQP-GLES2.functional.fragment_ops.random.90 Fail -dEQP-GLES2.functional.fragment_ops.random.91 Fail -dEQP-GLES2.functional.fragment_ops.random.92 Fail -dEQP-GLES2.functional.fragment_ops.random.93 Fail -dEQP-GLES2.functional.fragment_ops.random.94 Fail -dEQP-GLES2.functional.fragment_ops.random.95 Fail dEQP-GLES2.functional.fragment_ops.random.96 Fail -dEQP-GLES2.functional.fragment_ops.random.97 Fail -dEQP-GLES2.functional.fragment_ops.random.98 Fail -dEQP-GLES2.functional.fragment_ops.random.99 Fail -dEQP-GLES2.functional.fragment_ops.random.9 Fail dEQP-GLES2.functional.polygon_offset.default_factor_1_slope Fail dEQP-GLES2.functional.polygon_offset.default_render_with_units Fail dEQP-GLES2.functional.polygon_offset.fixed16_factor_1_slope Fail diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index a8fda5dcee6..b8edf302803 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -162,7 +162,14 @@ panfrost_clear( double depth, unsigned stencil) { struct panfrost_context *ctx = pan_context(pipe); - struct panfrost_batch *batch = panfrost_get_batch_for_fbo(ctx); + + /* TODO: panfrost_get_fresh_batch_for_fbo() instantiates a new batch if + * the existing batch targeting this FBO has draws. We could probably + * avoid that by replacing plain clears by quad-draws with a specific + * color/depth/stencil value, thus avoiding the generation of extra + * fragment/set_value jobs. + */ + struct panfrost_batch *batch = panfrost_get_fresh_batch_for_fbo(ctx); panfrost_batch_add_fbo_bos(batch); panfrost_batch_clear(batch, buffers, color, depth, stencil); diff --git a/src/gallium/drivers/panfrost/pan_job.c b/src/gallium/drivers/panfrost/pan_job.c index a56f4044fda..ae482a9a7a6 100644 --- a/src/gallium/drivers/panfrost/pan_job.c +++ b/src/gallium/drivers/panfrost/pan_job.c @@ -293,6 +293,27 @@ panfrost_get_batch_for_fbo(struct panfrost_context *ctx) return batch; } +struct panfrost_batch * +panfrost_get_fresh_batch_for_fbo(struct panfrost_context *ctx) +{ + struct panfrost_batch *batch; + + batch = panfrost_get_batch(ctx, &ctx->pipe_framebuffer); + + /* The batch has no draw/clear queued, let's return it directly. + * Note that it's perfectly fine to re-use a batch with an + * existing clear, we'll just update it with the new clear request. + */ + if (!batch->last_job.gpu) + return batch; + + /* Otherwise, we need to freeze the existing one and instantiate a new + * one. + */ + panfrost_freeze_batch(batch); + return panfrost_get_batch(ctx, &ctx->pipe_framebuffer); +} + static bool panfrost_batch_fence_is_signaled(struct panfrost_batch_fence *fence) { diff --git a/src/gallium/drivers/panfrost/pan_job.h b/src/gallium/drivers/panfrost/pan_job.h index 25905b51673..1da5d57aec1 100644 --- a/src/gallium/drivers/panfrost/pan_job.h +++ b/src/gallium/drivers/panfrost/pan_job.h @@ -169,6 +169,9 @@ panfrost_batch_fence_reference(struct panfrost_batch_fence *batch); struct panfrost_batch * panfrost_get_batch_for_fbo(struct panfrost_context *ctx); +struct panfrost_batch * +panfrost_get_fresh_batch_for_fbo(struct panfrost_context *ctx); + void panfrost_batch_init(struct panfrost_context *ctx); -- 2.30.2