[Mesa-dev] [PATCH 1/2] gallium: add pipe_depth_state::disable_occlusion_queries
Marek Olšák
maraeo at gmail.com
Thu Apr 7 01:00:40 UTC 2016
From: Marek Olšák <marek.olsak at amd.com>
Since occlusion queries count Z passes, the depth state seems to be
the best place.
---
src/gallium/auxiliary/hud/hud_context.c | 2 ++
src/gallium/auxiliary/postprocess/pp_mlaa.c | 1 +
src/gallium/auxiliary/postprocess/pp_program.c | 1 +
src/gallium/auxiliary/util/u_blit.c | 1 +
src/gallium/auxiliary/util/u_blitter.c | 1 +
src/gallium/include/pipe/p_state.h | 1 +
src/mesa/state_tracker/st_cb_clear.c | 2 ++
src/mesa/state_tracker/st_cb_texture.c | 1 +
8 files changed, 10 insertions(+)
diff --git a/src/gallium/auxiliary/hud/hud_context.c b/src/gallium/auxiliary/hud/hud_context.c
index 4673458..2b2fabb 100644
--- a/src/gallium/auxiliary/hud/hud_context.c
+++ b/src/gallium/auxiliary/hud/hud_context.c
@@ -1178,6 +1178,8 @@ hud_create(struct pipe_context *pipe, struct cso_context *cso)
hud->alpha_blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ZERO;
hud->alpha_blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ONE;
+ hud->dsa.depth.disable_occlusion_queries = 1;
+
/* fragment shader */
hud->fs_color =
util_make_fragment_passthrough_shader(pipe,
diff --git a/src/gallium/auxiliary/postprocess/pp_mlaa.c b/src/gallium/auxiliary/postprocess/pp_mlaa.c
index a3f58b5..2640340 100644
--- a/src/gallium/auxiliary/postprocess/pp_mlaa.c
+++ b/src/gallium/auxiliary/postprocess/pp_mlaa.c
@@ -124,6 +124,7 @@ pp_jimenezmlaa_run(struct pp_queue_t *ppq, struct pipe_resource *in,
mstencil.stencil[0].fail_op = PIPE_STENCIL_OP_KEEP;
mstencil.stencil[0].zfail_op = PIPE_STENCIL_OP_KEEP;
mstencil.stencil[0].zpass_op = PIPE_STENCIL_OP_REPLACE;
+ mstencil.depth.disable_occlusion_queries = 1;
p->framebuffer.zsbuf = ppq->stencils;
diff --git a/src/gallium/auxiliary/postprocess/pp_program.c b/src/gallium/auxiliary/postprocess/pp_program.c
index 811f1fb..8b468eb 100644
--- a/src/gallium/auxiliary/postprocess/pp_program.c
+++ b/src/gallium/auxiliary/postprocess/pp_program.c
@@ -56,6 +56,7 @@ pp_init_prog(struct pp_queue_t *ppq, struct pipe_context *pipe,
p->screen = pipe->screen;
p->pipe = pipe;
p->cso = cso;
+ p->depthstencil.depth.disable_occlusion_queries = 1;
{
static const float verts[4][2][4] = {
diff --git a/src/gallium/auxiliary/util/u_blit.c b/src/gallium/auxiliary/util/u_blit.c
index 22c40d1..2711899 100644
--- a/src/gallium/auxiliary/util/u_blit.c
+++ b/src/gallium/auxiliary/util/u_blit.c
@@ -93,6 +93,7 @@ util_create_blit(struct pipe_context *pipe, struct cso_context *cso)
/* disabled blending/masking */
ctx->blend_write_color.rt[0].colormask = PIPE_MASK_RGBA;
+ ctx->dsa_keep_depthstencil.depth.disable_occlusion_queries = 1;
/* rasterizer */
ctx->rasterizer.cull_face = PIPE_FACE_NONE;
diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c
index 43fbd8e..790562a 100644
--- a/src/gallium/auxiliary/util/u_blitter.c
+++ b/src/gallium/auxiliary/util/u_blitter.c
@@ -226,6 +226,7 @@ struct blitter_context *util_blitter_create(struct pipe_context *pipe)
/* depth stencil alpha state objects */
memset(&dsa, 0, sizeof(dsa));
+ dsa.depth.disable_occlusion_queries = 1;
ctx->dsa_keep_depth_stencil =
pipe->create_depth_stencil_alpha_state(pipe, &dsa);
diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
index 5ab5372..681e6ec 100644
--- a/src/gallium/include/pipe/p_state.h
+++ b/src/gallium/include/pipe/p_state.h
@@ -225,6 +225,7 @@ struct pipe_depth_state
unsigned writemask:1; /**< allow depth buffer writes? */
unsigned func:3; /**< depth test func (PIPE_FUNC_x) */
unsigned bounds_test:1; /**< depth bounds test enabled? */
+ unsigned disable_occlusion_queries:1; /**< force off occlusion queries */
float bounds_min; /**< minimum depth bound */
float bounds_max; /**< maximum depth bound */
};
diff --git a/src/mesa/state_tracker/st_cb_clear.c b/src/mesa/state_tracker/st_cb_clear.c
index 5580146..6216eab 100644
--- a/src/mesa/state_tracker/st_cb_clear.c
+++ b/src/mesa/state_tracker/st_cb_clear.c
@@ -243,6 +243,8 @@ clear_with_quad(struct gl_context *ctx, unsigned clear_buffers)
{
struct pipe_depth_stencil_alpha_state depth_stencil;
memset(&depth_stencil, 0, sizeof(depth_stencil));
+ depth_stencil.depth.disable_occlusion_queries = 1;
+
if (clear_buffers & PIPE_CLEAR_DEPTH) {
depth_stencil.depth.enabled = 1;
depth_stencil.depth.writemask = 1;
diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
index 3980f5d..1802cde 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -1492,6 +1492,7 @@ try_pbo_upload_common(struct gl_context *ctx,
{
struct pipe_depth_stencil_alpha_state dsa;
memset(&dsa, 0, sizeof(dsa));
+ dsa.depth.disable_occlusion_queries = 1;
cso_set_depth_stencil_alpha(cso, &dsa);
}
--
2.5.0
More information about the mesa-dev
mailing list