r600g: don't allocate separate depth and stencil for transfer textures on EG
authorMarek Olšák <maraeo@gmail.com>
Fri, 19 Aug 2011 20:57:56 +0000 (22:57 +0200)
committerMarek Olšák <maraeo@gmail.com>
Fri, 19 Aug 2011 21:12:15 +0000 (23:12 +0200)
The state tracker expects depth and stencil pixels interleaved.
Evergreen can bind an interleaved depth-stencil resource as a colorbuffer,
but not as a zbuffer.

The hardware can do the interleaving for us when decompressing.

src/gallium/drivers/r600/r600_texture.c

index 5681dd88e509d911c83ca765ab3ce33d4db1b04d..e41fe11ac97f71c40287e44086761860e1f0bd4e 100644 (file)
@@ -394,7 +394,8 @@ r600_texture_create_object(struct pipe_screen *screen,
        rtex->real_format = base->format;
 
        /* We must split depth and stencil into two separate buffers on Evergreen. */
-       if (r600_get_family_class(((struct r600_screen*)screen)->radeon) >= EVERGREEN &&
+       if (!(base->flags & R600_RESOURCE_FLAG_TRANSFER) &&
+           r600_get_family_class(((struct r600_screen*)screen)->radeon) >= EVERGREEN &&
            util_format_is_depth_and_stencil(base->format)) {
                struct pipe_resource stencil;
                unsigned stencil_pitch_override = 0;