Mesa (main): freedreno/blitter: Flush before self-blits

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jun 17 19:52:06 UTC 2021


Module: Mesa
Branch: main
Commit: 70d571e558cb6e32e8631ca51f98920d4dfaeeba
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=70d571e558cb6e32e8631ca51f98920d4dfaeeba

Author: Rob Clark <robdclark at chromium.org>
Date:   Wed Jun 16 10:05:45 2021 -0700

freedreno/blitter: Flush before self-blits

In paths where we are handling blits on the 3d pipe, if src==dst we need
to flush to ensure what gets sampled by the blit shader reflects the
results of any previous blits.

Signed-off-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11402>

---

 .../freedreno/ci/piglit-freedreno-a630-fails.txt   | 112 ---------------------
 src/gallium/drivers/freedreno/freedreno_blitter.c  |   8 ++
 2 files changed, 8 insertions(+), 112 deletions(-)

diff --git a/src/gallium/drivers/freedreno/ci/piglit-freedreno-a630-fails.txt b/src/gallium/drivers/freedreno/ci/piglit-freedreno-a630-fails.txt
index 62b342b55c8..b9f53eb752e 100644
--- a/src/gallium/drivers/freedreno/ci/piglit-freedreno-a630-fails.txt
+++ b/src/gallium/drivers/freedreno/ci/piglit-freedreno-a630-fails.txt
@@ -1,6 +1,5 @@
 glx at glx_arb_create_context_es2_profile@invalid opengl es version,Fail
 glx at glx_arb_create_context_robustness@invalid reset notification strategy,Fail
-glx at glx-copy-sub-buffer samples=2,Fail
 glx at glx_ext_import_context@free context,Fail
 glx at glx_ext_import_context@get context id,Fail
 glx at glx_ext_import_context@get current display,Fail
@@ -594,117 +593,6 @@ spec at nv_copy_depth_to_color@nv_copy_depth_to_color 0 0x76356278,Crash
 spec at nv_copy_depth_to_color@nv_copy_depth_to_color 1 0x223344ff,Crash
 spec at nv_copy_depth_to_color@nv_copy_depth_to_color 1 0x76356278,Crash
 spec at nv_copy_depth_to_color@nv_copy_depth_to_color,Crash
-spec at nv_copy_image@nv_copy_image-formats,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_ALPHA8/Destination: GL_ALPHA8,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_ALPHA/Destination: GL_ALPHA,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_LUMINANCE8_ALPHA8/Destination: GL_LUMINANCE8_ALPHA8,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_LUMINANCE8/Destination: GL_LUMINANCE8,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_LUMINANCE_ALPHA/Destination: GL_LUMINANCE_ALPHA,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_LUMINANCE/Destination: GL_LUMINANCE,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_R16/Destination: GL_R16,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_R16I/Destination: GL_R16I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_R16_SNORM/Destination: GL_R16_SNORM,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_R16UI/Destination: GL_R16UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_R32F/Destination: GL_R32F,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_R8/Destination: GL_R8,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_R8I/Destination: GL_R8I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_R8_SNORM/Destination: GL_R8_SNORM,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_R8UI/Destination: GL_R8UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RED/Destination: GL_RED,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RG16/Destination: GL_RG16,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RG16I/Destination: GL_RG16I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RG16_SNORM/Destination: GL_RG16_SNORM,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RG16UI/Destination: GL_RG16UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RG32F/Destination: GL_RG32F,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RG32I/Destination: GL_RG32I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RG32UI/Destination: GL_RG32UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RG8/Destination: GL_RG8,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RG8I/Destination: GL_RG8I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RG8_SNORM/Destination: GL_RG8_SNORM,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RG8UI/Destination: GL_RG8UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGB16/Destination: GL_RGB16,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGB16I/Destination: GL_RGB16I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGB16_SNORM/Destination: GL_RGB16_SNORM,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGB16UI/Destination: GL_RGB16UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGB32F/Destination: GL_RGB32F,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGB32I/Destination: GL_RGB32I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGB32UI/Destination: GL_RGB32UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGB8/Destination: GL_RGB8,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGB8I/Destination: GL_RGB8I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGB8_SNORM/Destination: GL_RGB8_SNORM,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGB8UI/Destination: GL_RGB8UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGBA16/Destination: GL_RGBA16,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGBA16I/Destination: GL_RGBA16I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGBA16_SNORM/Destination: GL_RGBA16_SNORM,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGBA16UI/Destination: GL_RGBA16UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGBA32F/Destination: GL_RGBA32F,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGBA32I/Destination: GL_RGBA32I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGBA32UI/Destination: GL_RGBA32UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGBA8/Destination: GL_RGBA8,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGBA8I/Destination: GL_RGBA8I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGBA8_SNORM/Destination: GL_RGBA8_SNORM,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGBA8UI/Destination: GL_RGBA8UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGBA/Destination: GL_RGBA,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RGB/Destination: GL_RGB,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=2 at Source: GL_RG/Destination: GL_RG,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_ALPHA8/Destination: GL_ALPHA8,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_ALPHA/Destination: GL_ALPHA,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_LUMINANCE8_ALPHA8/Destination: GL_LUMINANCE8_ALPHA8,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_LUMINANCE8/Destination: GL_LUMINANCE8,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_LUMINANCE_ALPHA/Destination: GL_LUMINANCE_ALPHA,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_LUMINANCE/Destination: GL_LUMINANCE,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_R16/Destination: GL_R16,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_R16I/Destination: GL_R16I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_R16_SNORM/Destination: GL_R16_SNORM,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_R16UI/Destination: GL_R16UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_R32F/Destination: GL_R32F,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_R8/Destination: GL_R8,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_R8I/Destination: GL_R8I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_R8_SNORM/Destination: GL_R8_SNORM,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_R8UI/Destination: GL_R8UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RED/Destination: GL_RED,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RG16/Destination: GL_RG16,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RG16I/Destination: GL_RG16I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RG16_SNORM/Destination: GL_RG16_SNORM,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RG16UI/Destination: GL_RG16UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RG32F/Destination: GL_RG32F,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RG32I/Destination: GL_RG32I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RG32UI/Destination: GL_RG32UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RG8/Destination: GL_RG8,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RG8I/Destination: GL_RG8I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RG8_SNORM/Destination: GL_RG8_SNORM,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RG8UI/Destination: GL_RG8UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGB16/Destination: GL_RGB16,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGB16I/Destination: GL_RGB16I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGB16_SNORM/Destination: GL_RGB16_SNORM,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGB16UI/Destination: GL_RGB16UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGB32F/Destination: GL_RGB32F,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGB32I/Destination: GL_RGB32I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGB32UI/Destination: GL_RGB32UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGB8/Destination: GL_RGB8,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGB8I/Destination: GL_RGB8I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGB8_SNORM/Destination: GL_RGB8_SNORM,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGB8UI/Destination: GL_RGB8UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGBA16/Destination: GL_RGBA16,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGBA16I/Destination: GL_RGBA16I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGBA16_SNORM/Destination: GL_RGBA16_SNORM,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGBA16UI/Destination: GL_RGBA16UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGBA32F/Destination: GL_RGBA32F,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGBA32I/Destination: GL_RGBA32I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGBA32UI/Destination: GL_RGBA32UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGBA8/Destination: GL_RGBA8,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGBA8I/Destination: GL_RGBA8I,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGBA8_SNORM/Destination: GL_RGBA8_SNORM,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGBA8UI/Destination: GL_RGBA8UI,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGBA/Destination: GL_RGBA,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RGB/Destination: GL_RGB,Fail
-spec at nv_copy_image@nv_copy_image-formats --samples=4 at Source: GL_RG/Destination: GL_RG,Fail
-spec at nv_copy_image@nv_copy_image-formats at Source: GL_DEPTH_COMPONENT24/Destination: GL_DEPTH_COMPONENT24,Fail
-spec at nv_copy_image@nv_copy_image-formats at Source: GL_DEPTH_COMPONENT32/Destination: GL_DEPTH_COMPONENT32,Fail
-spec at nv_copy_image@nv_copy_image-formats at Source: GL_DEPTH_STENCIL/Destination: GL_DEPTH_STENCIL,Fail
-spec at nv_copy_image@nv_copy_image-formats at Source: GL_STENCIL_INDEX8/Destination: GL_STENCIL_INDEX8,Fail
 spec at nv_primitive_restart@primitive-restart-draw-mode-polygon,Fail
 spec at nv_primitive_restart@primitive-restart-draw-mode-quads,Fail
 spec at nv_primitive_restart@primitive-restart-draw-mode-quad_strip,Fail
diff --git a/src/gallium/drivers/freedreno/freedreno_blitter.c b/src/gallium/drivers/freedreno/freedreno_blitter.c
index f9271e7fa45..e1eb343864a 100644
--- a/src/gallium/drivers/freedreno/freedreno_blitter.c
+++ b/src/gallium/drivers/freedreno/freedreno_blitter.c
@@ -142,6 +142,9 @@ fd_blitter_blit(struct fd_context *ctx, const struct pipe_blit_info *info)
       ctx->validate_format(ctx, fd_resource(src), info->src.format);
    }
 
+   if (src == dst)
+      pipe->flush(pipe, NULL, 0);
+
    if (!info->scissor_enable && !info->alpha_blend) {
       discard = util_texrange_covers_whole_level(
          info->dst.resource, info->dst.level, info->dst.box.x, info->dst.box.y,
@@ -320,6 +323,11 @@ fd_blitter_pipe_copy_region(struct fd_context *ctx, struct pipe_resource *dst,
    if (!util_blitter_is_copy_supported(ctx->blitter, dst, src))
       return false;
 
+   if (src == dst) {
+      struct pipe_context *pctx = &ctx->base;
+      pctx->flush(pctx, NULL, 0);
+   }
+
    /* TODO we could discard if dst box covers dst level fully.. */
    fd_blitter_pipe_begin(ctx, false, false);
    util_blitter_copy_texture(ctx->blitter, dst, dst_level, dstx, dsty, dstz,



More information about the mesa-commit mailing list