aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJerome Glisse <[email protected]>2012-11-13 17:41:59 +0100
committerMichel Dänzer <[email protected]>2012-11-28 13:35:16 +0100
commit3c024624fd3b5c4c43471ad06120cb988c045196 (patch)
treeb3c8673b6bf80a43b5577253c98dbca875c65ba7
parentffc318a97accae1f337eec75841a6778c2f4b547 (diff)
radeonsi: Fix z/stencil texture creation.
Signed-off-by: Jerome Glisse <[email protected]> [ Cherry-picked from r600g commit b4f0ab0b22625ac1bb3cf16342039557c086ebae ]
-rw-r--r--src/gallium/drivers/radeonsi/r600_texture.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/src/gallium/drivers/radeonsi/r600_texture.c b/src/gallium/drivers/radeonsi/r600_texture.c
index 8fae79200b6..183827bfd04 100644
--- a/src/gallium/drivers/radeonsi/r600_texture.c
+++ b/src/gallium/drivers/radeonsi/r600_texture.c
@@ -75,7 +75,7 @@ static unsigned r600_texture_get_offset(struct r600_resource_texture *rtex,
static int r600_init_surface(struct radeon_surface *surface,
const struct pipe_resource *ptex,
- unsigned array_mode)
+ unsigned array_mode, bool is_transfer)
{
surface->npix_x = ptex->width0;
surface->npix_y = ptex->height0;
@@ -136,7 +136,7 @@ static int r600_init_surface(struct radeon_surface *surface,
if (ptex->bind & PIPE_BIND_SCANOUT) {
surface->flags |= RADEON_SURF_SCANOUT;
}
- if (util_format_is_depth_and_stencil(ptex->format)) {
+ if (util_format_is_depth_and_stencil(ptex->format) && !is_transfer) {
surface->flags |= RADEON_SURF_ZBUFFER;
surface->flags |= RADEON_SURF_SBUFFER;
}
@@ -152,11 +152,6 @@ static int r600_setup_surface(struct pipe_screen *screen,
struct r600_screen *rscreen = (struct r600_screen*)screen;
int r;
- if (util_format_is_depth_or_stencil(rtex->real_format)) {
- rtex->surface.flags |= RADEON_SURF_ZBUFFER;
- rtex->surface.flags |= RADEON_SURF_SBUFFER;
- }
-
r = rscreen->ws->surface_init(rscreen->ws, &rtex->surface);
if (r) {
return r;
@@ -514,7 +509,8 @@ struct pipe_resource *si_texture_create(struct pipe_screen *screen,
}
#endif
- r = r600_init_surface(&surface, templ, array_mode);
+ r = r600_init_surface(&surface, templ, array_mode,
+ templ->flags & R600_RESOURCE_FLAG_TRANSFER);
if (r) {
return NULL;
}
@@ -595,7 +591,7 @@ struct pipe_resource *si_texture_from_handle(struct pipe_screen *screen,
else
array_mode = V_009910_ARRAY_LINEAR_ALIGNED;
- r = r600_init_surface(&surface, templ, array_mode);
+ r = r600_init_surface(&surface, templ, array_mode, 0);
if (r) {
return NULL;
}