From a909210131494a6a131855d7d344b61b81fbf40e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Tue, 9 Aug 2016 00:37:39 +0200 Subject: [PATCH] gallium: add render_condition_enable param to clear_render_target/depth_stencil MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-by: Roland Scheidegger Reviewed-by: Nicolai Hähnle --- src/gallium/auxiliary/util/u_clear.h | 5 +++-- src/gallium/auxiliary/vl/vl_bicubic_filter.c | 2 +- src/gallium/auxiliary/vl/vl_compositor.c | 2 +- src/gallium/docs/source/context.rst | 7 ++++--- src/gallium/drivers/ddebug/dd_draw.c | 12 ++++++++---- src/gallium/drivers/freedreno/freedreno_draw.c | 6 ++++-- src/gallium/drivers/i915/i915_surface.c | 12 ++++++++---- src/gallium/drivers/ilo/ilo_blit.c | 6 ++++-- src/gallium/drivers/llvmpipe/lp_surface.c | 6 ++++-- src/gallium/drivers/noop/noop_pipe.c | 6 ++++-- src/gallium/drivers/nouveau/nv30/nv30_clear.c | 6 ++++-- src/gallium/drivers/nouveau/nv50/nv50_surface.c | 10 ++++++---- src/gallium/drivers/nouveau/nv50/nv84_video.c | 6 +++--- src/gallium/drivers/nouveau/nvc0/nvc0_surface.c | 6 ++++-- src/gallium/drivers/r300/r300_blit.c | 6 ++++-- src/gallium/drivers/r600/r600_blit.c | 6 ++++-- src/gallium/drivers/radeonsi/si_blit.c | 6 ++++-- src/gallium/drivers/rbug/rbug_context.c | 12 ++++++++---- src/gallium/drivers/softpipe/sp_surface.c | 6 ++++-- src/gallium/drivers/swr/swr_clear.cpp | 6 ++++-- src/gallium/drivers/trace/tr_context.c | 14 ++++++++++---- src/gallium/drivers/vc4/vc4_draw.c | 6 ++++-- src/gallium/include/pipe/p_context.h | 6 ++++-- src/gallium/state_trackers/nine/device9.c | 6 +++--- src/gallium/state_trackers/nine/surface9.c | 2 +- src/gallium/state_trackers/vdpau/surface.c | 2 +- 26 files changed, 109 insertions(+), 61 deletions(-) diff --git a/src/gallium/auxiliary/util/u_clear.h b/src/gallium/auxiliary/util/u_clear.h index 864d130..6413530 100644 --- a/src/gallium/auxiliary/util/u_clear.h +++ b/src/gallium/auxiliary/util/u_clear.h @@ -49,7 +49,8 @@ util_clear(struct pipe_context *pipe, struct pipe_surface *ps = framebuffer->cbufs[i]; if (ps) { - pipe->clear_render_target(pipe, ps, color, 0, 0, ps->width, ps->height); + pipe->clear_render_target(pipe, ps, color, 0, 0, ps->width, + ps->height, true); } } } @@ -58,6 +59,6 @@ util_clear(struct pipe_context *pipe, struct pipe_surface *ps = framebuffer->zsbuf; pipe->clear_depth_stencil(pipe, ps, buffers & PIPE_CLEAR_DEPTHSTENCIL, depth, stencil, - 0, 0, ps->width, ps->height); + 0, 0, ps->width, ps->height, true); } } diff --git a/src/gallium/auxiliary/vl/vl_bicubic_filter.c b/src/gallium/auxiliary/vl/vl_bicubic_filter.c index 51a0019..0364d43 100644 --- a/src/gallium/auxiliary/vl/vl_bicubic_filter.c +++ b/src/gallium/auxiliary/vl/vl_bicubic_filter.c @@ -440,7 +440,7 @@ vl_bicubic_filter_render(struct vl_bicubic_filter *filter, filter->pipe->set_scissor_states(filter->pipe, 0, 1, &scissor); filter->pipe->clear_render_target(filter->pipe, dst, &clear_color, - 0, 0, dst->width, dst->height); + 0, 0, dst->width, dst->height, false); pipe_set_constant_buffer(filter->pipe, PIPE_SHADER_FRAGMENT, 0, surface_size); filter->pipe->bind_rasterizer_state(filter->pipe, filter->rs_state); filter->pipe->bind_blend_state(filter->pipe, filter->blend); diff --git a/src/gallium/auxiliary/vl/vl_compositor.c b/src/gallium/auxiliary/vl/vl_compositor.c index f7517f3..03a0a64 100644 --- a/src/gallium/auxiliary/vl/vl_compositor.c +++ b/src/gallium/auxiliary/vl/vl_compositor.c @@ -1168,7 +1168,7 @@ vl_compositor_render(struct vl_compositor_state *s, (dirty_area->x0 < dirty_area->x1 || dirty_area->y0 < dirty_area->y1)) { c->pipe->clear_render_target(c->pipe, dst_surface, &s->clear_color, - 0, 0, dst_surface->width, dst_surface->height); + 0, 0, dst_surface->width, dst_surface->height, false); dirty_area->x0 = dirty_area->y0 = MAX_DIRTY; dirty_area->x1 = dirty_area->y1 = MIN_DIRTY; } diff --git a/src/gallium/docs/source/context.rst b/src/gallium/docs/source/context.rst index e646ea0..7fddabf 100644 --- a/src/gallium/docs/source/context.rst +++ b/src/gallium/docs/source/context.rst @@ -428,9 +428,10 @@ A drawing command can be skipped depending on the outcome of a query (typically an occlusion query, or streamout overflow predicate). The ``render_condition`` function specifies the query which should be checked prior to rendering anything. Functions always honoring render_condition include -(and are limited to) draw_vbo, clear, clear_render_target, clear_depth_stencil. -The blit function (but not resource_copy_region, which seems inconsistent) -can also optionally honor the current render condition. +(and are limited to) draw_vbo and clear. +The blit, clear_render_target and clear_depth_stencil functions (but +not resource_copy_region, which seems inconsistent) can also optionally honor +the current render condition. If ``render_condition`` is called with ``query`` = NULL, conditional rendering is disabled and drawing takes place normally. diff --git a/src/gallium/drivers/ddebug/dd_draw.c b/src/gallium/drivers/ddebug/dd_draw.c index e2005ed..7abcf87 100644 --- a/src/gallium/drivers/ddebug/dd_draw.c +++ b/src/gallium/drivers/ddebug/dd_draw.c @@ -1255,7 +1255,8 @@ dd_context_clear_render_target(struct pipe_context *_pipe, struct pipe_surface *dst, const union pipe_color_union *color, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct dd_context *dctx = dd_context(_pipe); struct pipe_context *pipe = dctx->pipe; @@ -1264,7 +1265,8 @@ dd_context_clear_render_target(struct pipe_context *_pipe, call.type = CALL_CLEAR_RENDER_TARGET; dd_before_draw(dctx); - pipe->clear_render_target(pipe, dst, color, dstx, dsty, width, height); + pipe->clear_render_target(pipe, dst, color, dstx, dsty, width, height, + render_condition_enabled); dd_after_draw(dctx, &call); } @@ -1272,7 +1274,8 @@ static void dd_context_clear_depth_stencil(struct pipe_context *_pipe, struct pipe_surface *dst, unsigned clear_flags, double depth, unsigned stencil, unsigned dstx, - unsigned dsty, unsigned width, unsigned height) + unsigned dsty, unsigned width, unsigned height, + bool render_condition_enabled) { struct dd_context *dctx = dd_context(_pipe); struct pipe_context *pipe = dctx->pipe; @@ -1282,7 +1285,8 @@ dd_context_clear_depth_stencil(struct pipe_context *_pipe, dd_before_draw(dctx); pipe->clear_depth_stencil(pipe, dst, clear_flags, depth, stencil, - dstx, dsty, width, height); + dstx, dsty, width, height, + render_condition_enabled); dd_after_draw(dctx, &call); } diff --git a/src/gallium/drivers/freedreno/freedreno_draw.c b/src/gallium/drivers/freedreno/freedreno_draw.c index ca42cf7..715ad21 100644 --- a/src/gallium/drivers/freedreno/freedreno_draw.c +++ b/src/gallium/drivers/freedreno/freedreno_draw.c @@ -294,7 +294,8 @@ fd_clear(struct pipe_context *pctx, unsigned buffers, static void fd_clear_render_target(struct pipe_context *pctx, struct pipe_surface *ps, const union pipe_color_union *color, - unsigned x, unsigned y, unsigned w, unsigned h) + unsigned x, unsigned y, unsigned w, unsigned h, + bool render_condition_enabled) { DBG("TODO: x=%u, y=%u, w=%u, h=%u", x, y, w, h); } @@ -302,7 +303,8 @@ fd_clear_render_target(struct pipe_context *pctx, struct pipe_surface *ps, static void fd_clear_depth_stencil(struct pipe_context *pctx, struct pipe_surface *ps, unsigned buffers, double depth, unsigned stencil, - unsigned x, unsigned y, unsigned w, unsigned h) + unsigned x, unsigned y, unsigned w, unsigned h, + bool render_condition_enabled) { DBG("TODO: buffers=%u, depth=%f, stencil=%u, x=%u, y=%u, w=%u, h=%u", buffers, depth, stencil, x, y, w, h); diff --git a/src/gallium/drivers/i915/i915_surface.c b/src/gallium/drivers/i915/i915_surface.c index b2a639c..27b0d9e 100644 --- a/src/gallium/drivers/i915/i915_surface.c +++ b/src/gallium/drivers/i915/i915_surface.c @@ -134,7 +134,8 @@ i915_clear_render_target_render(struct pipe_context *pipe, struct pipe_surface *dst, const union pipe_color_union *color, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct i915_context *i915 = i915_context(pipe); struct pipe_framebuffer_state fb_state; @@ -166,7 +167,8 @@ i915_clear_depth_stencil_render(struct pipe_context *pipe, double depth, unsigned stencil, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct i915_context *i915 = i915_context(pipe); struct pipe_framebuffer_state fb_state; @@ -281,7 +283,8 @@ i915_clear_render_target_blitter(struct pipe_context *pipe, struct pipe_surface *dst, const union pipe_color_union *color, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct i915_texture *tex = i915_texture(dst->texture); struct pipe_resource *pt = &tex->b.b; @@ -309,7 +312,8 @@ i915_clear_depth_stencil_blitter(struct pipe_context *pipe, double depth, unsigned stencil, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct i915_texture *tex = i915_texture(dst->texture); struct pipe_resource *pt = &tex->b.b; diff --git a/src/gallium/drivers/ilo/ilo_blit.c b/src/gallium/drivers/ilo/ilo_blit.c index f88f1e8..e2ba6aa 100644 --- a/src/gallium/drivers/ilo/ilo_blit.c +++ b/src/gallium/drivers/ilo/ilo_blit.c @@ -83,7 +83,8 @@ ilo_clear_render_target(struct pipe_context *pipe, struct pipe_surface *dst, const union pipe_color_union *color, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct ilo_context *ilo = ilo_context(pipe); @@ -110,7 +111,8 @@ ilo_clear_depth_stencil(struct pipe_context *pipe, double depth, unsigned stencil, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct ilo_context *ilo = ilo_context(pipe); diff --git a/src/gallium/drivers/llvmpipe/lp_surface.c b/src/gallium/drivers/llvmpipe/lp_surface.c index dd1c446..643c416 100644 --- a/src/gallium/drivers/llvmpipe/lp_surface.c +++ b/src/gallium/drivers/llvmpipe/lp_surface.c @@ -190,7 +190,8 @@ llvmpipe_clear_render_target(struct pipe_context *pipe, struct pipe_surface *dst, const union pipe_color_union *color, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct llvmpipe_context *llvmpipe = llvmpipe_context(pipe); @@ -209,7 +210,8 @@ llvmpipe_clear_depth_stencil(struct pipe_context *pipe, double depth, unsigned stencil, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct llvmpipe_context *llvmpipe = llvmpipe_context(pipe); diff --git a/src/gallium/drivers/noop/noop_pipe.c b/src/gallium/drivers/noop/noop_pipe.c index 097ff21..cf20681 100644 --- a/src/gallium/drivers/noop/noop_pipe.c +++ b/src/gallium/drivers/noop/noop_pipe.c @@ -223,7 +223,8 @@ static void noop_clear_render_target(struct pipe_context *ctx, struct pipe_surface *dst, const union pipe_color_union *color, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { } @@ -233,7 +234,8 @@ static void noop_clear_depth_stencil(struct pipe_context *ctx, double depth, unsigned stencil, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { } diff --git a/src/gallium/drivers/nouveau/nv30/nv30_clear.c b/src/gallium/drivers/nouveau/nv30/nv30_clear.c index c8fa38e..4217bca 100644 --- a/src/gallium/drivers/nouveau/nv30/nv30_clear.c +++ b/src/gallium/drivers/nouveau/nv30/nv30_clear.c @@ -101,7 +101,8 @@ nv30_clear(struct pipe_context *pipe, unsigned buffers, static void nv30_clear_render_target(struct pipe_context *pipe, struct pipe_surface *ps, const union pipe_color_union *color, - unsigned x, unsigned y, unsigned w, unsigned h) + unsigned x, unsigned y, unsigned w, unsigned h, + bool render_condition_enabled) { struct nv30_context *nv30 = nv30_context(pipe); struct nv30_surface *sf = nv30_surface(ps); @@ -160,7 +161,8 @@ nv30_clear_render_target(struct pipe_context *pipe, struct pipe_surface *ps, static void nv30_clear_depth_stencil(struct pipe_context *pipe, struct pipe_surface *ps, unsigned buffers, double depth, unsigned stencil, - unsigned x, unsigned y, unsigned w, unsigned h) + unsigned x, unsigned y, unsigned w, unsigned h, + bool render_condition_enabled) { struct nv30_context *nv30 = nv30_context(pipe); struct nv30_surface *sf = nv30_surface(ps); diff --git a/src/gallium/drivers/nouveau/nv50/nv50_surface.c b/src/gallium/drivers/nouveau/nv50/nv50_surface.c index fbb5129..52e8907 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_surface.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_surface.c @@ -277,7 +277,8 @@ nv50_clear_render_target(struct pipe_context *pipe, struct pipe_surface *dst, const union pipe_color_union *color, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct nv50_context *nv50 = nv50_context(pipe); struct nouveau_pushbuf *push = nv50->base.pushbuf; @@ -363,7 +364,8 @@ nv50_clear_depth_stencil(struct pipe_context *pipe, double depth, unsigned stencil, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct nv50_context *nv50 = nv50_context(pipe); struct nouveau_pushbuf *push = nv50->base.pushbuf; @@ -472,7 +474,7 @@ nv50_clear_texture(struct pipe_context *pipe, desc->unpack_s_8uint(&stencil, 0, data, 0, 1, 1); } pipe->clear_depth_stencil(pipe, sf, clear, depth, stencil, - box->x, box->y, box->width, box->height); + box->x, box->y, box->width, box->height, false); } else { union pipe_color_union color; @@ -508,7 +510,7 @@ nv50_clear_texture(struct pipe_context *pipe, } pipe->clear_render_target(pipe, sf, &color, - box->x, box->y, box->width, box->height); + box->x, box->y, box->width, box->height, false); } pipe->surface_destroy(pipe, sf); } diff --git a/src/gallium/drivers/nouveau/nv50/nv84_video.c b/src/gallium/drivers/nouveau/nv50/nv84_video.c index 1b1f31a..409c40d 100644 --- a/src/gallium/drivers/nouveau/nv50/nv84_video.c +++ b/src/gallium/drivers/nouveau/nv50/nv84_video.c @@ -482,16 +482,16 @@ nv84_create_decoder(struct pipe_context *context, mip.base.domain = NOUVEAU_BO_VRAM; mip.base.bo = dec->mbring; mip.base.address = dec->mbring->offset; - context->clear_render_target(context, &surf.base, &color, 0, 0, 64, 4760); + context->clear_render_target(context, &surf.base, &color, 0, 0, 64, 4760, false); surf.offset = dec->vpring->size / 2 - 0x1000; surf.width = 1024; surf.height = 1; mip.level[0].pitch = surf.width * 4; mip.base.bo = dec->vpring; mip.base.address = dec->vpring->offset; - context->clear_render_target(context, &surf.base, &color, 0, 0, 1024, 1); + context->clear_render_target(context, &surf.base, &color, 0, 0, 1024, 1, false); surf.offset = dec->vpring->size - 0x1000; - context->clear_render_target(context, &surf.base, &color, 0, 0, 1024, 1); + context->clear_render_target(context, &surf.base, &color, 0, 0, 1024, 1, false); PUSH_SPACE(screen->pushbuf, 5); PUSH_REFN(screen->pushbuf, dec->fence, NOUVEAU_BO_VRAM | NOUVEAU_BO_RDWR); diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_surface.c b/src/gallium/drivers/nouveau/nvc0/nvc0_surface.c index 7556e71..a6ca6fb 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_surface.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_surface.c @@ -280,7 +280,8 @@ nvc0_clear_render_target(struct pipe_context *pipe, struct pipe_surface *dst, const union pipe_color_union *color, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct nvc0_context *nvc0 = nvc0_context(pipe); struct nouveau_pushbuf *push = nvc0->base.pushbuf; @@ -619,7 +620,8 @@ nvc0_clear_depth_stencil(struct pipe_context *pipe, double depth, unsigned stencil, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct nvc0_context *nvc0 = nvc0_context(pipe); struct nouveau_pushbuf *push = nvc0->base.pushbuf; diff --git a/src/gallium/drivers/r300/r300_blit.c b/src/gallium/drivers/r300/r300_blit.c index 2ee9b54..cfb3f6d 100644 --- a/src/gallium/drivers/r300/r300_blit.c +++ b/src/gallium/drivers/r300/r300_blit.c @@ -430,7 +430,8 @@ static void r300_clear_render_target(struct pipe_context *pipe, struct pipe_surface *dst, const union pipe_color_union *color, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct r300_context *r300 = r300_context(pipe); @@ -447,7 +448,8 @@ static void r300_clear_depth_stencil(struct pipe_context *pipe, double depth, unsigned stencil, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct r300_context *r300 = r300_context(pipe); struct pipe_framebuffer_state *fb = diff --git a/src/gallium/drivers/r600/r600_blit.c b/src/gallium/drivers/r600/r600_blit.c index a6c5b44..327efc2 100644 --- a/src/gallium/drivers/r600/r600_blit.c +++ b/src/gallium/drivers/r600/r600_blit.c @@ -473,7 +473,8 @@ static void r600_clear_render_target(struct pipe_context *ctx, struct pipe_surface *dst, const union pipe_color_union *color, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct r600_context *rctx = (struct r600_context *)ctx; @@ -489,7 +490,8 @@ static void r600_clear_depth_stencil(struct pipe_context *ctx, double depth, unsigned stencil, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct r600_context *rctx = (struct r600_context *)ctx; diff --git a/src/gallium/drivers/radeonsi/si_blit.c b/src/gallium/drivers/radeonsi/si_blit.c index 38a19d5..ce13e97 100644 --- a/src/gallium/drivers/radeonsi/si_blit.c +++ b/src/gallium/drivers/radeonsi/si_blit.c @@ -759,7 +759,8 @@ static void si_clear_render_target(struct pipe_context *ctx, struct pipe_surface *dst, const union pipe_color_union *color, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct si_context *sctx = (struct si_context *)ctx; @@ -775,7 +776,8 @@ static void si_clear_depth_stencil(struct pipe_context *ctx, double depth, unsigned stencil, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct si_context *sctx = (struct si_context *)ctx; diff --git a/src/gallium/drivers/rbug/rbug_context.c b/src/gallium/drivers/rbug/rbug_context.c index 83914d3..3c2dc69 100644 --- a/src/gallium/drivers/rbug/rbug_context.c +++ b/src/gallium/drivers/rbug/rbug_context.c @@ -952,7 +952,8 @@ rbug_clear_render_target(struct pipe_context *_pipe, struct pipe_surface *_dst, const union pipe_color_union *color, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct rbug_context *rb_pipe = rbug_context(_pipe); struct rbug_surface *rb_surface_dst = rbug_surface(_dst); @@ -966,7 +967,8 @@ rbug_clear_render_target(struct pipe_context *_pipe, dstx, dsty, width, - height); + height, + render_condition_enabled); pipe_mutex_unlock(rb_pipe->call_mutex); } @@ -977,7 +979,8 @@ rbug_clear_depth_stencil(struct pipe_context *_pipe, double depth, unsigned stencil, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct rbug_context *rb_pipe = rbug_context(_pipe); struct rbug_surface *rb_surface_dst = rbug_surface(_dst); @@ -993,7 +996,8 @@ rbug_clear_depth_stencil(struct pipe_context *_pipe, dstx, dsty, width, - height); + height, + render_condition_enabled); pipe_mutex_unlock(rb_pipe->call_mutex); } diff --git a/src/gallium/drivers/softpipe/sp_surface.c b/src/gallium/drivers/softpipe/sp_surface.c index e2ecbdf..643b060 100644 --- a/src/gallium/drivers/softpipe/sp_surface.c +++ b/src/gallium/drivers/softpipe/sp_surface.c @@ -97,7 +97,8 @@ softpipe_clear_render_target(struct pipe_context *pipe, struct pipe_surface *dst, const union pipe_color_union *color, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct softpipe_context *softpipe = softpipe_context(pipe); @@ -116,7 +117,8 @@ softpipe_clear_depth_stencil(struct pipe_context *pipe, double depth, unsigned stencil, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct softpipe_context *softpipe = softpipe_context(pipe); diff --git a/src/gallium/drivers/swr/swr_clear.cpp b/src/gallium/drivers/swr/swr_clear.cpp index 103bca9..4b02dd1 100644 --- a/src/gallium/drivers/swr/swr_clear.cpp +++ b/src/gallium/drivers/swr/swr_clear.cpp @@ -86,7 +86,8 @@ swr_clear(struct pipe_context *pipe, static void swr_clear_render_target(struct pipe_context *pipe, struct pipe_surface *ps, const union pipe_color_union *color, - unsigned x, unsigned y, unsigned w, unsigned h) + unsigned x, unsigned y, unsigned w, unsigned h, + bool render_condition_enabled) { struct swr_context *ctx = swr_context(pipe); fprintf(stderr, "SWR swr_clear_render_target!\n"); @@ -97,7 +98,8 @@ swr_clear_render_target(struct pipe_context *pipe, struct pipe_surface *ps, static void swr_clear_depth_stencil(struct pipe_context *pipe, struct pipe_surface *ps, unsigned buffers, double depth, unsigned stencil, - unsigned x, unsigned y, unsigned w, unsigned h) + unsigned x, unsigned y, unsigned w, unsigned h, + bool render_condition_enabled) { struct swr_context *ctx = swr_context(pipe); fprintf(stderr, "SWR swr_clear_depth_stencil!\n"); diff --git a/src/gallium/drivers/trace/tr_context.c b/src/gallium/drivers/trace/tr_context.c index 65d7f4e..ef36f5f 100644 --- a/src/gallium/drivers/trace/tr_context.c +++ b/src/gallium/drivers/trace/tr_context.c @@ -1291,7 +1291,8 @@ trace_context_clear_render_target(struct pipe_context *_pipe, struct pipe_surface *dst, const union pipe_color_union *color, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct trace_context *tr_ctx = trace_context(_pipe); struct pipe_context *pipe = tr_ctx->pipe; @@ -1307,8 +1308,10 @@ trace_context_clear_render_target(struct pipe_context *_pipe, trace_dump_arg(uint, dsty); trace_dump_arg(uint, width); trace_dump_arg(uint, height); + trace_dump_arg(bool, render_condition_enabled); - pipe->clear_render_target(pipe, dst, color, dstx, dsty, width, height); + pipe->clear_render_target(pipe, dst, color, dstx, dsty, width, height, + render_condition_enabled); trace_dump_call_end(); } @@ -1320,7 +1323,8 @@ trace_context_clear_depth_stencil(struct pipe_context *_pipe, double depth, unsigned stencil, unsigned dstx, unsigned dsty, - unsigned width, unsigned height) + unsigned width, unsigned height, + bool render_condition_enabled) { struct trace_context *tr_ctx = trace_context(_pipe); struct pipe_context *pipe = tr_ctx->pipe; @@ -1338,9 +1342,11 @@ trace_context_clear_depth_stencil(struct pipe_context *_pipe, trace_dump_arg(uint, dsty); trace_dump_arg(uint, width); trace_dump_arg(uint, height); + trace_dump_arg(bool, render_condition_enabled); pipe->clear_depth_stencil(pipe, dst, clear_flags, depth, stencil, - dstx, dsty, width, height); + dstx, dsty, width, height, + render_condition_enabled); trace_dump_call_end(); } diff --git a/src/gallium/drivers/vc4/vc4_draw.c b/src/gallium/drivers/vc4/vc4_draw.c index cf3f5e0..773caf7 100644 --- a/src/gallium/drivers/vc4/vc4_draw.c +++ b/src/gallium/drivers/vc4/vc4_draw.c @@ -497,7 +497,8 @@ vc4_clear(struct pipe_context *pctx, unsigned buffers, static void vc4_clear_render_target(struct pipe_context *pctx, struct pipe_surface *ps, const union pipe_color_union *color, - unsigned x, unsigned y, unsigned w, unsigned h) + unsigned x, unsigned y, unsigned w, unsigned h, + bool render_condition_enabled) { fprintf(stderr, "unimpl: clear RT\n"); } @@ -505,7 +506,8 @@ vc4_clear_render_target(struct pipe_context *pctx, struct pipe_surface *ps, static void vc4_clear_depth_stencil(struct pipe_context *pctx, struct pipe_surface *ps, unsigned buffers, double depth, unsigned stencil, - unsigned x, unsigned y, unsigned w, unsigned h) + unsigned x, unsigned y, unsigned w, unsigned h, + bool render_condition_enabled) { fprintf(stderr, "unimpl: clear DS\n"); } diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h index f1de189..5359164 100644 --- a/src/gallium/include/pipe/p_context.h +++ b/src/gallium/include/pipe/p_context.h @@ -416,7 +416,8 @@ struct pipe_context { struct pipe_surface *dst, const union pipe_color_union *color, unsigned dstx, unsigned dsty, - unsigned width, unsigned height); + unsigned width, unsigned height, + bool render_condition_enabled); /** * Clear a depth-stencil surface. @@ -430,7 +431,8 @@ struct pipe_context { double depth, unsigned stencil, unsigned dstx, unsigned dsty, - unsigned width, unsigned height); + unsigned width, unsigned height, + bool render_condition_enabled); /** * Clear the texture with the specified texel. Not guaranteed to be a diff --git a/src/gallium/state_trackers/nine/device9.c b/src/gallium/state_trackers/nine/device9.c index b4ce3c8..d233304 100644 --- a/src/gallium/state_trackers/nine/device9.c +++ b/src/gallium/state_trackers/nine/device9.c @@ -1752,7 +1752,7 @@ NineDevice9_ColorFill( struct NineDevice9 *This, } if (!fallback) { - pipe->clear_render_target(pipe, psurf, &rgba, x, y, w, h); + pipe->clear_render_target(pipe, psurf, &rgba, x, y, w, h, false); } else { D3DLOCKED_RECT lock; union util_color uc; @@ -2037,7 +2037,7 @@ NineDevice9_Clear( struct NineDevice9 *This, DBG("Clearing (%u..%u)x(%u..%u)\n", x1, x2, y1, y2); pipe->clear_render_target(pipe, cbuf, &rgba, - x1, y1, x2 - x1, y2 - y1); + x1, y1, x2 - x1, y2 - y1, false); } } if (!(bufs & PIPE_CLEAR_DEPTHSTENCIL)) @@ -2064,7 +2064,7 @@ NineDevice9_Clear( struct NineDevice9 *This, zsbuf = NineSurface9_GetSurface(zsbuf_surf, 0); assert(zsbuf); pipe->clear_depth_stencil(pipe, zsbuf, bufs, Z, Stencil, - x1, y1, x2 - x1, y2 - y1); + x1, y1, x2 - x1, y2 - y1, false); } return D3D_OK; } diff --git a/src/gallium/state_trackers/nine/surface9.c b/src/gallium/state_trackers/nine/surface9.c index 6a4a0d9..0cedd4e 100644 --- a/src/gallium/state_trackers/nine/surface9.c +++ b/src/gallium/state_trackers/nine/surface9.c @@ -164,7 +164,7 @@ NineSurface9_ctor( struct NineSurface9 *This, /* TODO: investigate what else exactly needs to be cleared */ if (This->base.resource && (pDesc->Usage & D3DUSAGE_RENDERTARGET)) { surf = NineSurface9_GetSurface(This, 0); - pipe->clear_render_target(pipe, surf, &rgba, 0, 0, pDesc->Width, pDesc->Height); + pipe->clear_render_target(pipe, surf, &rgba, 0, 0, pDesc->Width, pDesc->Height, false); } NineSurface9_Dump(This); diff --git a/src/gallium/state_trackers/vdpau/surface.c b/src/gallium/state_trackers/vdpau/surface.c index 6dc479a..177483e 100644 --- a/src/gallium/state_trackers/vdpau/surface.c +++ b/src/gallium/state_trackers/vdpau/surface.c @@ -395,7 +395,7 @@ vlVdpVideoSurfaceClear(vlVdpSurface *vlsurf) c.f[0] = c.f[1] = c.f[2] = c.f[3] = 0.5f; pipe->clear_render_target(pipe, surfaces[i], &c, 0, 0, - surfaces[i]->width, surfaces[i]->height); + surfaces[i]->width, surfaces[i]->height, false); } pipe->flush(pipe, NULL, 0); } -- 2.7.4