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

Author: Marek Olšák <mar...@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);

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to