summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/vc5/vc5_resource.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/vc5/vc5_resource.c')
-rw-r--r--src/gallium/drivers/vc5/vc5_resource.c28
1 files changed, 10 insertions, 18 deletions
diff --git a/src/gallium/drivers/vc5/vc5_resource.c b/src/gallium/drivers/vc5/vc5_resource.c
index a9cc27127f..9ecd083b05 100644
--- a/src/gallium/drivers/vc5/vc5_resource.c
+++ b/src/gallium/drivers/vc5/vc5_resource.c
@@ -654,10 +654,6 @@ vc5_create_surface(struct pipe_context *pctx,
unsigned level = surf_tmpl->u.tex.level;
struct vc5_resource_slice *slice = &rsc->slices[level];
- struct vc5_resource_slice *separate_stencil_slice = NULL;
- if (rsc->separate_stencil)
- separate_stencil_slice = &rsc->separate_stencil->slices[level];
-
pipe_reference_init(&psurf->reference, 1);
pipe_resource_reference(&psurf->texture, ptex);
@@ -672,14 +668,6 @@ vc5_create_surface(struct pipe_context *pctx,
surface->offset = (slice->offset +
psurf->u.tex.first_layer * rsc->cube_map_stride);
surface->tiling = slice->tiling;
- if (separate_stencil_slice) {
- surface->separate_stencil_offset =
- (separate_stencil_slice->offset +
- psurf->u.tex.first_layer *
- rsc->separate_stencil->cube_map_stride);
- surface->separate_stencil_tiling =
- separate_stencil_slice->tiling;
- }
surface->format = vc5_get_rt_format(&screen->devinfo, psurf->format);
@@ -709,13 +697,12 @@ vc5_create_surface(struct pipe_context *pctx,
surface->padded_height_of_output_image_in_uif_blocks =
((slice->size / slice->stride) /
(2 * vc5_utile_height(rsc->cpp)));
+ }
- if (separate_stencil_slice) {
- surface->separate_stencil_padded_height_of_output_image_in_uif_blocks =
- ((separate_stencil_slice->size /
- separate_stencil_slice->stride) /
- (2 * vc5_utile_height(rsc->separate_stencil->cpp)));
- }
+ if (rsc->separate_stencil) {
+ surface->separate_stencil =
+ vc5_create_surface(pctx, &rsc->separate_stencil->base,
+ surf_tmpl);
}
return &surface->base;
@@ -724,6 +711,11 @@ vc5_create_surface(struct pipe_context *pctx,
static void
vc5_surface_destroy(struct pipe_context *pctx, struct pipe_surface *psurf)
{
+ struct vc5_surface *surf = vc5_surface(psurf);
+
+ if (surf->separate_stencil)
+ pipe_surface_reference(&surf->separate_stencil, NULL);
+
pipe_resource_reference(&psurf->texture, NULL);
FREE(psurf);
}