From: Marek Olšák Date: Tue, 17 Jul 2012 22:05:14 +0000 (+0200) Subject: r600g: init_flushed_depth_texture should be able to report errors X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=611dd529425281d73f1f0ad2000362d4a5525a25;p=mesa.git r600g: init_flushed_depth_texture should be able to report errors --- diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c index 5486a96ed92..3efc85e6750 100644 --- a/src/gallium/drivers/r600/evergreen_state.c +++ b/src/gallium/drivers/r600/evergreen_state.c @@ -989,12 +989,11 @@ static struct pipe_sampler_view *evergreen_create_sampler_view(struct pipe_conte } if (tmp->is_depth && !tmp->is_flushing_texture) { - r600_init_flushed_depth_texture(ctx, texture, NULL); - tmp = tmp->flushed_depth_texture; - if (!tmp) { + if (!r600_init_flushed_depth_texture(ctx, texture, NULL)) { FREE(view); return NULL; } + tmp = tmp->flushed_depth_texture; } endian = r600_colorformat_endian_swap(format); diff --git a/src/gallium/drivers/r600/r600_resource.h b/src/gallium/drivers/r600/r600_resource.h index 0046ce78b83..8e5225e2c6f 100644 --- a/src/gallium/drivers/r600/r600_resource.h +++ b/src/gallium/drivers/r600/r600_resource.h @@ -89,7 +89,7 @@ static INLINE struct r600_resource *r600_resource(struct pipe_resource *r) return (struct r600_resource*)r; } -void r600_init_flushed_depth_texture(struct pipe_context *ctx, +bool r600_init_flushed_depth_texture(struct pipe_context *ctx, struct pipe_resource *texture, struct r600_resource_texture **staging); void r600_texture_depth_flush(struct pipe_context *ctx, diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c index e14aeacc781..899d13949d7 100644 --- a/src/gallium/drivers/r600/r600_state.c +++ b/src/gallium/drivers/r600/r600_state.c @@ -1006,12 +1006,11 @@ static struct pipe_sampler_view *r600_create_sampler_view(struct pipe_context *c } if (tmp->is_depth && !tmp->is_flushing_texture) { - r600_init_flushed_depth_texture(ctx, texture, NULL); - tmp = tmp->flushed_depth_texture; - if (!tmp) { + if (!r600_init_flushed_depth_texture(ctx, texture, NULL)) { FREE(view); return NULL; } + tmp = tmp->flushed_depth_texture; } endian = r600_colorformat_endian_swap(format); diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c index cbb9e5a9f48..5a6d755e109 100644 --- a/src/gallium/drivers/r600/r600_texture.c +++ b/src/gallium/drivers/r600/r600_texture.c @@ -738,7 +738,7 @@ struct pipe_resource *r600_texture_from_handle(struct pipe_screen *screen, stride, 0, buf, FALSE, &surface); } -void r600_init_flushed_depth_texture(struct pipe_context *ctx, +bool r600_init_flushed_depth_texture(struct pipe_context *ctx, struct pipe_resource *texture, struct r600_resource_texture **staging) { @@ -748,7 +748,7 @@ void r600_init_flushed_depth_texture(struct pipe_context *ctx, staging : &rtex->flushed_depth_texture; if (!staging && rtex->flushed_depth_texture) - return; /* it's ready */ + return true; /* it's ready */ resource.target = texture->target; resource.format = texture->format; @@ -768,11 +768,11 @@ void r600_init_flushed_depth_texture(struct pipe_context *ctx, *flushed_depth_texture = (struct r600_resource_texture *)ctx->screen->resource_create(ctx->screen, &resource); if (*flushed_depth_texture == NULL) { R600_ERR("failed to create temporary texture to hold flushed depth\n"); - return; + return false; } (*flushed_depth_texture)->is_flushing_texture = TRUE; - + return true; } void r600_texture_depth_flush(struct pipe_context *ctx, @@ -783,19 +783,14 @@ void r600_texture_depth_flush(struct pipe_context *ctx, { struct r600_resource_texture *rtex = (struct r600_resource_texture*)texture; - r600_init_flushed_depth_texture(ctx, texture, staging); + if (!r600_init_flushed_depth_texture(ctx, texture, staging)) + return; if (staging) { - if (!*staging) - return; /* error */ - r600_blit_uncompress_depth(ctx, rtex, *staging, first_level, last_level, first_layer, last_layer); } else { - if (!rtex->flushed_depth_texture) - return; /* error */ - r600_blit_uncompress_depth(ctx, rtex, NULL, first_level, last_level, first_layer, last_layer);