panfrost: Make sure a clear does not re-use a pre-existing batch
authorBoris Brezillon <boris.brezillon@collabora.com>
Thu, 19 Sep 2019 13:52:02 +0000 (15:52 +0200)
committerBoris Brezillon <boris.brezillon@collabora.com>
Tue, 8 Oct 2019 08:07:54 +0000 (10:07 +0200)
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 <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
.gitlab-ci/deqp-panfrost-t760-fails.txt
.gitlab-ci/deqp-panfrost-t860-fails.txt
src/gallium/drivers/panfrost/pan_context.c
src/gallium/drivers/panfrost/pan_job.c
src/gallium/drivers/panfrost/pan_job.h

index 6304ebf8112a7a7cd484c2419b16f7e46a53497a..8ce1e4246807653b6f91b5cc6bf498396193438c 100644 (file)
@@ -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
index 7e7dbd62307ba785ae727e7c50302d43f94701f4..fbafe8eedc9891733c2875d14b268024c2f4d220 100644 (file)
@@ -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
index a8fda5dcee64e79a518d5e7a3af5f621fe537783..b8edf302803b5e21d23978f820b5c624b9e3e9a0 100644 (file)
@@ -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);
index a56f4044fda01b1f5d65373bf5eaa28dd8eddf89..ae482a9a7a602f1c6319dc7a387073bfe271d6f1 100644 (file)
@@ -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)
 {
index 25905b516739e139edafda01e13dd8a81c42ec4e..1da5d57aec1533db637e45831f654ee66ae64b95 100644 (file)
@@ -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);