mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-03 11:30:21 +01:00
nv50,nvc0: disable render condition around clear_* functions
Only the regular "clear" call is supposed to respect the render condition. The rest should ignore it. Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
parent
d2f089ba17
commit
ff17b3ccf4
4 changed files with 32 additions and 0 deletions
|
|
@ -152,6 +152,7 @@ nv50_init_query_functions(struct nv50_context *nv50)
|
|||
pipe->end_query = nv50_end_query;
|
||||
pipe->get_query_result = nv50_get_query_result;
|
||||
pipe->render_condition = nv50_render_condition;
|
||||
nv50->cond_condmode = NV50_3D_COND_MODE_ALWAYS;
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
|||
|
|
@ -339,12 +339,18 @@ nv50_clear_render_target(struct pipe_context *pipe,
|
|||
PUSH_DATA (push, (width << 16) | dstx);
|
||||
PUSH_DATA (push, (height << 16) | dsty);
|
||||
|
||||
BEGIN_NV04(push, NV50_3D(COND_MODE), 1);
|
||||
PUSH_DATA (push, NV50_3D_COND_MODE_ALWAYS);
|
||||
|
||||
BEGIN_NI04(push, NV50_3D(CLEAR_BUFFERS), sf->depth);
|
||||
for (z = 0; z < sf->depth; ++z) {
|
||||
PUSH_DATA (push, 0x3c |
|
||||
(z << NV50_3D_CLEAR_BUFFERS_LAYER__SHIFT));
|
||||
}
|
||||
|
||||
BEGIN_NV04(push, NV50_3D(COND_MODE), 1);
|
||||
PUSH_DATA (push, nv50->cond_condmode);
|
||||
|
||||
nv50->dirty |= NV50_NEW_FRAMEBUFFER | NV50_NEW_SCISSOR;
|
||||
}
|
||||
|
||||
|
|
@ -415,12 +421,18 @@ nv50_clear_depth_stencil(struct pipe_context *pipe,
|
|||
PUSH_DATA (push, (width << 16) | dstx);
|
||||
PUSH_DATA (push, (height << 16) | dsty);
|
||||
|
||||
BEGIN_NV04(push, NV50_3D(COND_MODE), 1);
|
||||
PUSH_DATA (push, NV50_3D_COND_MODE_ALWAYS);
|
||||
|
||||
BEGIN_NI04(push, NV50_3D(CLEAR_BUFFERS), sf->depth);
|
||||
for (z = 0; z < sf->depth; ++z) {
|
||||
PUSH_DATA (push, mode |
|
||||
(z << NV50_3D_CLEAR_BUFFERS_LAYER__SHIFT));
|
||||
}
|
||||
|
||||
BEGIN_NV04(push, NV50_3D(COND_MODE), 1);
|
||||
PUSH_DATA (push, nv50->cond_condmode);
|
||||
|
||||
nv50->dirty |= NV50_NEW_FRAMEBUFFER | NV50_NEW_SCISSOR;
|
||||
}
|
||||
|
||||
|
|
@ -673,6 +685,9 @@ nv50_clear_buffer(struct pipe_context *pipe,
|
|||
PUSH_DATA (push, (width << 16));
|
||||
PUSH_DATA (push, (height << 16));
|
||||
|
||||
BEGIN_NV04(push, NV50_3D(COND_MODE), 1);
|
||||
PUSH_DATA (push, NV50_3D_COND_MODE_ALWAYS);
|
||||
|
||||
BEGIN_NI04(push, NV50_3D(CLEAR_BUFFERS), 1);
|
||||
PUSH_DATA (push, 0x3c);
|
||||
|
||||
|
|
@ -690,6 +705,9 @@ nv50_clear_buffer(struct pipe_context *pipe,
|
|||
PUSH_DATA (push, 0x3c);
|
||||
}
|
||||
|
||||
BEGIN_NV04(push, NV50_3D(COND_MODE), 1);
|
||||
PUSH_DATA (push, nv50->cond_condmode);
|
||||
|
||||
nouveau_fence_ref(nv50->screen->base.fence.current, &buf->fence);
|
||||
nouveau_fence_ref(nv50->screen->base.fence.current, &buf->fence_wr);
|
||||
|
||||
|
|
|
|||
|
|
@ -260,4 +260,5 @@ nvc0_init_query_functions(struct nvc0_context *nvc0)
|
|||
pipe->end_query = nvc0_end_query;
|
||||
pipe->get_query_result = nvc0_get_query_result;
|
||||
pipe->render_condition = nvc0_render_condition;
|
||||
nvc0->cond_condmode = NVC0_3D_COND_MODE_ALWAYS;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -341,12 +341,16 @@ nvc0_clear_render_target(struct pipe_context *pipe,
|
|||
nvc0_resource_fence(res, NOUVEAU_BO_WR);
|
||||
}
|
||||
|
||||
IMMED_NVC0(push, NVC0_3D(COND_MODE), NVC0_3D_COND_MODE_ALWAYS);
|
||||
|
||||
BEGIN_NIC0(push, NVC0_3D(CLEAR_BUFFERS), sf->depth);
|
||||
for (z = 0; z < sf->depth; ++z) {
|
||||
PUSH_DATA (push, 0x3c |
|
||||
(z << NVC0_3D_CLEAR_BUFFERS_LAYER__SHIFT));
|
||||
}
|
||||
|
||||
IMMED_NVC0(push, NVC0_3D(COND_MODE), nvc0->cond_condmode);
|
||||
|
||||
nvc0->dirty |= NVC0_NEW_FRAMEBUFFER;
|
||||
}
|
||||
|
||||
|
|
@ -470,6 +474,8 @@ nvc0_clear_buffer(struct pipe_context *pipe,
|
|||
IMMED_NVC0(push, NVC0_3D(ZETA_ENABLE), 0);
|
||||
IMMED_NVC0(push, NVC0_3D(MULTISAMPLE_MODE), 0);
|
||||
|
||||
IMMED_NVC0(push, NVC0_3D(COND_MODE), NVC0_3D_COND_MODE_ALWAYS);
|
||||
|
||||
IMMED_NVC0(push, NVC0_3D(CLEAR_BUFFERS), 0x3c);
|
||||
|
||||
if (width * height != elements) {
|
||||
|
|
@ -486,6 +492,8 @@ nvc0_clear_buffer(struct pipe_context *pipe,
|
|||
IMMED_NVC0(push, NVC0_3D(CLEAR_BUFFERS), 0x3c);
|
||||
}
|
||||
|
||||
IMMED_NVC0(push, NVC0_3D(COND_MODE), nvc0->cond_condmode);
|
||||
|
||||
nouveau_fence_ref(nvc0->screen->base.fence.current, &buf->fence);
|
||||
nouveau_fence_ref(nvc0->screen->base.fence.current, &buf->fence_wr);
|
||||
nvc0->dirty |= NVC0_NEW_FRAMEBUFFER;
|
||||
|
|
@ -545,12 +553,16 @@ nvc0_clear_depth_stencil(struct pipe_context *pipe,
|
|||
PUSH_DATA (push, dst->u.tex.first_layer);
|
||||
IMMED_NVC0(push, NVC0_3D(MULTISAMPLE_MODE), mt->ms_mode);
|
||||
|
||||
IMMED_NVC0(push, NVC0_3D(COND_MODE), NVC0_3D_COND_MODE_ALWAYS);
|
||||
|
||||
BEGIN_NIC0(push, NVC0_3D(CLEAR_BUFFERS), sf->depth);
|
||||
for (z = 0; z < sf->depth; ++z) {
|
||||
PUSH_DATA (push, mode |
|
||||
(z << NVC0_3D_CLEAR_BUFFERS_LAYER__SHIFT));
|
||||
}
|
||||
|
||||
IMMED_NVC0(push, NVC0_3D(COND_MODE), nvc0->cond_condmode);
|
||||
|
||||
nvc0->dirty |= NVC0_NEW_FRAMEBUFFER;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue