zink: add a renderpass flag for mixed zs layout
this indicates that the layout requires reading from the depth aspect and writing to the stencil aspect Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15716>
This commit is contained in:
parent
f24b966d27
commit
7781a75229
|
@ -1998,9 +1998,14 @@ get_render_pass(struct zink_context *ctx)
|
||||||
clears |= PIPE_CLEAR_STENCIL;
|
clears |= PIPE_CLEAR_STENCIL;
|
||||||
const uint64_t outputs_written = ctx->gfx_stages[PIPE_SHADER_FRAGMENT] ?
|
const uint64_t outputs_written = ctx->gfx_stages[PIPE_SHADER_FRAGMENT] ?
|
||||||
ctx->gfx_stages[PIPE_SHADER_FRAGMENT]->nir->info.outputs_written : 0;
|
ctx->gfx_stages[PIPE_SHADER_FRAGMENT]->nir->info.outputs_written : 0;
|
||||||
bool needs_write = (ctx->dsa_state && ctx->dsa_state->hw_state.depth_write) ||
|
bool needs_write_z = (ctx->dsa_state && ctx->dsa_state->hw_state.depth_write) ||
|
||||||
outputs_written & (BITFIELD64_BIT(FRAG_RESULT_DEPTH) | BITFIELD64_BIT(FRAG_RESULT_STENCIL));
|
outputs_written & BITFIELD64_BIT(FRAG_RESULT_DEPTH);
|
||||||
state.rts[fb->nr_cbufs].needs_write = needs_write || state.num_zsresolves || state.rts[fb->nr_cbufs].clear_color || state.rts[fb->nr_cbufs].clear_stencil;
|
needs_write_z |= state.num_zsresolves || state.rts[fb->nr_cbufs].clear_color;
|
||||||
|
|
||||||
|
bool needs_write_s = state.rts[fb->nr_cbufs].clear_stencil || outputs_written & BITFIELD64_BIT(FRAG_RESULT_STENCIL);
|
||||||
|
if (!needs_write_z && (!ctx->dsa_state || !ctx->dsa_state->base.depth_enabled))
|
||||||
|
state.rts[fb->nr_cbufs].mixed_zs = needs_write_s && zsbuf->bind_count[0];
|
||||||
|
state.rts[fb->nr_cbufs].needs_write = needs_write_z | needs_write_s;
|
||||||
state.num_rts++;
|
state.num_rts++;
|
||||||
}
|
}
|
||||||
state.have_zsbuf = fb->zsbuf != NULL;
|
state.have_zsbuf = fb->zsbuf != NULL;
|
||||||
|
|
|
@ -44,6 +44,7 @@ struct zink_rt_attrib {
|
||||||
bool needs_write;
|
bool needs_write;
|
||||||
};
|
};
|
||||||
bool resolve;
|
bool resolve;
|
||||||
|
bool mixed_zs;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct zink_render_pass_state {
|
struct zink_render_pass_state {
|
||||||
|
|
Loading…
Reference in New Issue