diff options
author | Roland Scheidegger <sroland@vmware.com> | 2013-06-14 19:48:57 +0200 |
---|---|---|
committer | Roland Scheidegger <sroland@vmware.com> | 2013-06-18 18:01:24 +0200 |
commit | 793e8e3d7ed816cc9a066245dde798afdcf8b581 (patch) | |
tree | b71d5597d0d8669df8ed896b989bc519c82659d2 /src/gallium/auxiliary/util | |
parent | 443dc15cf77edcaa7804c4277f0cce5d7c1d6b25 (diff) | |
download | external_mesa3d-793e8e3d7ed816cc9a066245dde798afdcf8b581.zip external_mesa3d-793e8e3d7ed816cc9a066245dde798afdcf8b581.tar.gz external_mesa3d-793e8e3d7ed816cc9a066245dde798afdcf8b581.tar.bz2 |
gallium: add condition parameter to render_condition
For conditional rendering this makes it possible to skip rendering
if either the predicate is true or false, as supported by d3d10
(in fact previously it was sort of implied skip rendering if predicate
is false for occlusion predicate, and true for so_overflow predicate).
There's no cap bit for this as presumably all drivers could do it trivially
(but this patch does not implement it for the drivers using true
hw predicates, nvxx, r600, radeonsi, no change is expected for OpenGL
functionality).
Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
Diffstat (limited to 'src/gallium/auxiliary/util')
-rw-r--r-- | src/gallium/auxiliary/util/u_blit.c | 2 | ||||
-rw-r--r-- | src/gallium/auxiliary/util/u_blitter.c | 3 | ||||
-rw-r--r-- | src/gallium/auxiliary/util/u_blitter.h | 3 | ||||
-rw-r--r-- | src/gallium/auxiliary/util/u_gen_mipmap.c | 2 |
4 files changed, 7 insertions, 3 deletions
diff --git a/src/gallium/auxiliary/util/u_blit.c b/src/gallium/auxiliary/util/u_blit.c index cda66d1..07418be 100644 --- a/src/gallium/auxiliary/util/u_blit.c +++ b/src/gallium/auxiliary/util/u_blit.c @@ -679,7 +679,7 @@ util_blit_pixels(struct blit_state *ctx, cso_set_rasterizer(ctx->cso, &ctx->rasterizer); cso_set_vertex_elements(ctx->cso, 2, ctx->velem); cso_set_stream_outputs(ctx->cso, 0, NULL, 0); - cso_set_render_condition(ctx->cso, NULL, 0); + cso_set_render_condition(ctx->cso, NULL, FALSE, 0); /* default sampler state */ ctx->sampler.normalized_coords = normalized; diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c index e9ac170..be839d4 100644 --- a/src/gallium/auxiliary/util/u_blitter.c +++ b/src/gallium/auxiliary/util/u_blitter.c @@ -492,7 +492,7 @@ static void blitter_disable_render_cond(struct blitter_context_priv *ctx) struct pipe_context *pipe = ctx->base.pipe; if (ctx->base.saved_render_cond_query) { - pipe->render_condition(pipe, NULL, 0); + pipe->render_condition(pipe, NULL, FALSE, 0); } } @@ -502,6 +502,7 @@ static void blitter_restore_render_cond(struct blitter_context_priv *ctx) if (ctx->base.saved_render_cond_query) { pipe->render_condition(pipe, ctx->base.saved_render_cond_query, + ctx->base.saved_render_cond_cond, ctx->base.saved_render_cond_mode); ctx->base.saved_render_cond_query = NULL; } diff --git a/src/gallium/auxiliary/util/u_blitter.h b/src/gallium/auxiliary/util/u_blitter.h index e52d5ac..d9cefde 100644 --- a/src/gallium/auxiliary/util/u_blitter.h +++ b/src/gallium/auxiliary/util/u_blitter.h @@ -125,6 +125,7 @@ struct blitter_context struct pipe_query *saved_render_cond_query; uint saved_render_cond_mode; + boolean saved_render_cond_cond; }; /** @@ -515,10 +516,12 @@ util_blitter_save_sample_mask(struct blitter_context *blitter, static INLINE void util_blitter_save_render_condition(struct blitter_context *blitter, struct pipe_query *query, + boolean condition, uint mode) { blitter->saved_render_cond_query = query; blitter->saved_render_cond_mode = mode; + blitter->saved_render_cond_cond = condition; } #ifdef __cplusplus diff --git a/src/gallium/auxiliary/util/u_gen_mipmap.c b/src/gallium/auxiliary/util/u_gen_mipmap.c index 7974b1d..a885f2b 100644 --- a/src/gallium/auxiliary/util/u_gen_mipmap.c +++ b/src/gallium/auxiliary/util/u_gen_mipmap.c @@ -1578,7 +1578,7 @@ util_gen_mipmap(struct gen_mipmap_state *ctx, cso_set_sample_mask(ctx->cso, ~0); cso_set_vertex_elements(ctx->cso, 2, ctx->velem); cso_set_stream_outputs(ctx->cso, 0, NULL, 0); - cso_set_render_condition(ctx->cso, NULL, 0); + cso_set_render_condition(ctx->cso, NULL, FALSE, 0); set_fragment_shader(ctx, type, is_depth); set_vertex_shader(ctx); |