freedreno/a4xx: fix bogus offset for f32x24s8 stencil restore
authorRob Clark <robclark@freedesktop.org>
Tue, 3 May 2016 19:21:15 +0000 (15:21 -0400)
committerRob Clark <robclark@freedesktop.org>
Wed, 4 May 2016 15:25:55 +0000 (11:25 -0400)
fixes: $piglit/bin/fbo-clear-formats GL_ARB_depth_buffer_float

Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/gallium/drivers/freedreno/a4xx/fd4_emit.c

index 0144ba4..459494c 100644 (file)
@@ -284,10 +284,6 @@ fd4_emit_gmem_restore_tex(struct fd_ringbuffer *ring, unsigned nr_bufs,
        for (i = 0; i < nr_bufs; i++) {
                if (bufs[i]) {
                        struct fd_resource *rsc = fd_resource(bufs[i]->texture);
-                       /* note: PIPE_BUFFER disallowed for surfaces */
-                       unsigned lvl = bufs[i]->u.tex.level;
-                       struct fd_resource_slice *slice = fd_resource_slice(rsc, lvl);
-                       uint32_t offset = fd_resource_offset(rsc, lvl, bufs[i]->u.tex.first_layer);
                        enum pipe_format format = fd4_gmem_restore_format(bufs[i]->format);
 
                        /* The restore blit_zs shader expects stencil in sampler 0,
@@ -298,6 +294,11 @@ fd4_emit_gmem_restore_tex(struct fd_ringbuffer *ring, unsigned nr_bufs,
                                format = fd4_gmem_restore_format(rsc->base.b.format);
                        }
 
+                       /* note: PIPE_BUFFER disallowed for surfaces */
+                       unsigned lvl = bufs[i]->u.tex.level;
+                       struct fd_resource_slice *slice = fd_resource_slice(rsc, lvl);
+                       unsigned offset = fd_resource_offset(rsc, lvl, bufs[i]->u.tex.first_layer);
+
                        /* z32 restore is accomplished using depth write.  If there is
                         * no stencil component (ie. PIPE_FORMAT_Z32_FLOAT_S8X24_UINT)
                         * then no render target: