freedreno/a6xx: Copy stencil as R8_UINT
authorKristian H. Kristensen <hoegsberg@chromium.org>
Fri, 15 Feb 2019 07:34:09 +0000 (23:34 -0800)
committerKristian H. Kristensen <hoegsberg@chromium.org>
Wed, 20 Feb 2019 16:56:21 +0000 (08:56 -0800)
Blitter does support it after all. Previous attempt to use R8_UINT
failed because we overwrote the a6xx format in emit_blit_texture(),
but some of the later setup still looked at the gallium format.

If we overwrite it in the pipe_blit_info before we even call into
emit_blit_texture() it works properly.

Signed-off-by: Kristian H. Kristensen <hoegsberg@chromium.org>
src/gallium/drivers/freedreno/a6xx/fd6_blitter.c

index 2ae59ce62f4035bba30485a1e87349ce65d13c65..c54d34d729a192d90dd861c8c2713393a7466015 100644 (file)
@@ -521,12 +521,22 @@ rewrite_zs_blit(struct fd_ringbuffer *ring, const struct pipe_blit_info *info)
 {
        struct pipe_blit_info separate = *info;
 
+       if (DEBUG_BLIT_FALLBACK) {
+               fprintf(stderr, "---- rewrite_separate_zs_blit: ");
+               util_dump_blit_info(stderr, info);
+               fprintf(stderr, "\ndst resource: ");
+               util_dump_resource(stderr, info->dst.resource);
+               fprintf(stderr, "\nsrc resource: ");
+               util_dump_resource(stderr, info->src.resource);
+               fprintf(stderr, "\n\n");
+       }
+
        switch (info->src.format) {
        case PIPE_FORMAT_S8_UINT:
                debug_assert(info->mask == PIPE_MASK_S);
                separate.mask = PIPE_MASK_R;
-               separate.src.format = PIPE_FORMAT_R8_UNORM;
-               separate.dst.format = PIPE_FORMAT_R8_UNORM;
+               separate.src.format = PIPE_FORMAT_R8_UINT;
+               separate.dst.format = PIPE_FORMAT_R8_UINT;
                emit_blit_texture(ring, &separate);
                break;
 
@@ -539,8 +549,8 @@ rewrite_zs_blit(struct fd_ringbuffer *ring, const struct pipe_blit_info *info)
                }
                if (info->mask & PIPE_MASK_S) {
                        separate.mask = PIPE_MASK_R;
-                       separate.src.format = PIPE_FORMAT_R8_UNORM;
-                       separate.dst.format = PIPE_FORMAT_R8_UNORM;
+                       separate.src.format = PIPE_FORMAT_R8_UINT;
+                       separate.dst.format = PIPE_FORMAT_R8_UINT;
                        separate.src.resource = &fd_resource(info->src.resource)->stencil->base;
                        separate.dst.resource = &fd_resource(info->dst.resource)->stencil->base;
                        emit_blit_texture(ring, &separate);