freedreno/a4xx: fix for sparse-samplers
authorRob Clark <robclark@freedesktop.org>
Fri, 26 Jun 2015 17:55:49 +0000 (13:55 -0400)
committerRob Clark <robclark@freedesktop.org>
Tue, 30 Jun 2015 16:13:44 +0000 (12:13 -0400)
Some piglit tests, like arb_fragment_program-sparse-samplers, result in
having a null samp#0 but valid samp#1.

TODO: a3xx probably needs similar fix

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

index 4b6eb64..6cd2cd7 100644 (file)
@@ -223,15 +223,19 @@ emit_textures(struct fd_context *ctx, struct fd_ringbuffer *ring,
                        const struct fd4_pipe_sampler_view *view = tex->textures[i] ?
                                        fd4_pipe_sampler_view(tex->textures[i]) :
                                        &dummy_view;
-                       struct fd_resource *rsc = fd_resource(view->base.texture);
                        unsigned start = view->base.u.tex.first_level;
-                       uint32_t offset = fd_resource_offset(rsc, start, 0);
 
                        OUT_RING(ring, view->texconst0);
                        OUT_RING(ring, view->texconst1);
                        OUT_RING(ring, view->texconst2);
                        OUT_RING(ring, view->texconst3);
-                       OUT_RELOC(ring, rsc->bo, offset, view->textconst4, 0);
+                       if (view->base.texture) {
+                               struct fd_resource *rsc = fd_resource(view->base.texture);
+                               uint32_t offset = fd_resource_offset(rsc, start, 0);
+                               OUT_RELOC(ring, rsc->bo, offset, view->textconst4, 0);
+                       } else {
+                               OUT_RING(ring, 0x00000000);
+                       }
                        OUT_RING(ring, 0x00000000);
                        OUT_RING(ring, 0x00000000);
                        OUT_RING(ring, 0x00000000);