diff options
author | Marek Olšák <[email protected]> | 2011-02-10 11:21:27 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2011-02-10 11:27:34 +0100 |
commit | ac366af9fdb6853ccb172a3dd52a88063e5136e7 (patch) | |
tree | ef505ad5604cdf4e5e234aaf02319964a56f787e | |
parent | fc9170d0cf1c7a7dcd580e9da17742a6ab68bd1b (diff) |
u_blitter: let the driver check whether there's a recursion
-rw-r--r-- | src/gallium/auxiliary/util/u_blitter.c | 12 | ||||
-rw-r--r-- | src/gallium/auxiliary/util/u_blitter.h | 3 |
2 files changed, 9 insertions, 6 deletions
diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c index 079dce76ad8..7e0cdfd0854 100644 --- a/src/gallium/auxiliary/util/u_blitter.c +++ b/src/gallium/auxiliary/util/u_blitter.c @@ -104,8 +104,6 @@ struct blitter_context_priv /* Destination surface dimensions. */ unsigned dst_width; unsigned dst_height; - - boolean running; }; static void blitter_draw_rectangle(struct blitter_context *blitter, @@ -269,11 +267,11 @@ void util_blitter_destroy(struct blitter_context *blitter) static void blitter_check_saved_CSOs(struct blitter_context_priv *ctx) { - if (ctx->running) { + if (ctx->base.running) { _debug_printf("u_blitter: Caught recursion on save. " "This is a driver bug.\n"); } - ctx->running = TRUE; + ctx->base.running = TRUE; /* make sure these CSOs have been saved */ assert(ctx->base.saved_blend_state != INVALID_PTR && @@ -349,11 +347,11 @@ static void blitter_restore_CSOs(struct blitter_context_priv *ctx) ctx->base.saved_num_vertex_buffers = ~0; } - if (!ctx->running) { + if (!ctx->base.running) { _debug_printf("u_blitter: Caught recursion on restore. " "This is a driver bug.\n"); } - ctx->running = FALSE; + ctx->base.running = FALSE; } static void blitter_set_rectangle(struct blitter_context_priv *ctx, @@ -775,8 +773,10 @@ void util_blitter_copy_region(struct blitter_context *blitter, dst->nr_samples, bind, 0) || !screen->is_format_supported(screen, src->format, src->target, src->nr_samples, PIPE_BIND_SAMPLER_VIEW, 0)) { + ctx->base.running = TRUE; util_resource_copy_region(pipe, dst, dstlevel, dstx, dsty, dstz, src, srclevel, srcbox); + ctx->base.running = FALSE; return; } diff --git a/src/gallium/auxiliary/util/u_blitter.h b/src/gallium/auxiliary/util/u_blitter.h index 47494c94110..41470d92bba 100644 --- a/src/gallium/auxiliary/util/u_blitter.h +++ b/src/gallium/auxiliary/util/u_blitter.h @@ -79,6 +79,9 @@ struct blitter_context enum blitter_attrib_type type, const float attrib[4]); + /* Whether the blitter is running. */ + boolean running; + /* Private members, really. */ struct pipe_context *pipe; /**< pipe context */ |