Mesa (master): r600g: init_flushed_depth_texture should be able to report errors

Marek Olšák mareko at kemper.freedesktop.org
Tue Jul 17 22:23:25 UTC 2012


Module: Mesa
Branch: master
Commit: 611dd529425281d73f1f0ad2000362d4a5525a25
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=611dd529425281d73f1f0ad2000362d4a5525a25

Author: Marek Olšák <maraeo at gmail.com>
Date:   Wed Jul 18 00:05:14 2012 +0200

r600g: init_flushed_depth_texture should be able to report errors

---

 src/gallium/drivers/r600/evergreen_state.c |    5 ++---
 src/gallium/drivers/r600/r600_resource.h   |    2 +-
 src/gallium/drivers/r600/r600_state.c      |    5 ++---
 src/gallium/drivers/r600/r600_texture.c    |   17 ++++++-----------
 4 files changed, 11 insertions(+), 18 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c
index 5486a96..3efc85e 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 0046ce7..8e5225e 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 e14aeac..899d139 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 cbb9e5a..5a6d755 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);




More information about the mesa-commit mailing list