mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-31 14:10:09 +01:00
st/program: use nir_lower_clip_disable instead of nir_lower_clip_vs conditionally
if the shader already outputs gl_ClipDistance, nir_lower_clip_vs will create duplicate variables when what we want is to just change the existing values Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5529>
This commit is contained in:
parent
fb2fe802f6
commit
a79ca675f3
1 changed files with 23 additions and 17 deletions
|
|
@ -716,24 +716,30 @@ st_create_vp_variant(struct st_context *st,
|
|||
PIPE_CAP_NIR_COMPACT_ARRAYS);
|
||||
|
||||
bool use_eye = st->ctx->_Shader->CurrentProgram[MESA_SHADER_VERTEX] != NULL;
|
||||
gl_state_index16 clipplane_state[MAX_CLIP_PLANES][STATE_LENGTH];
|
||||
for (int i = 0; i < MAX_CLIP_PLANES; ++i) {
|
||||
if (use_eye) {
|
||||
clipplane_state[i][0] = STATE_CLIPPLANE;
|
||||
clipplane_state[i][1] = i;
|
||||
} else {
|
||||
clipplane_state[i][0] = STATE_INTERNAL;
|
||||
clipplane_state[i][1] = STATE_CLIP_INTERNAL;
|
||||
clipplane_state[i][2] = i;
|
||||
}
|
||||
_mesa_add_state_reference(params, clipplane_state[i]);
|
||||
}
|
||||
struct nir_shader *nir = state.ir.nir;
|
||||
|
||||
NIR_PASS_V(state.ir.nir, nir_lower_clip_vs, key->lower_ucp,
|
||||
true, can_compact, clipplane_state);
|
||||
NIR_PASS_V(state.ir.nir, nir_lower_io_to_temporaries,
|
||||
nir_shader_get_entrypoint(state.ir.nir), true, false);
|
||||
NIR_PASS_V(state.ir.nir, nir_lower_global_vars_to_local);
|
||||
if (nir->info.outputs_written & VARYING_BIT_CLIP_DIST0)
|
||||
NIR_PASS_V(state.ir.nir, nir_lower_clip_disable, key->lower_ucp);
|
||||
else {
|
||||
gl_state_index16 clipplane_state[MAX_CLIP_PLANES][STATE_LENGTH];
|
||||
for (int i = 0; i < MAX_CLIP_PLANES; ++i) {
|
||||
if (use_eye) {
|
||||
clipplane_state[i][0] = STATE_CLIPPLANE;
|
||||
clipplane_state[i][1] = i;
|
||||
} else {
|
||||
clipplane_state[i][0] = STATE_INTERNAL;
|
||||
clipplane_state[i][1] = STATE_CLIP_INTERNAL;
|
||||
clipplane_state[i][2] = i;
|
||||
}
|
||||
_mesa_add_state_reference(params, clipplane_state[i]);
|
||||
}
|
||||
|
||||
NIR_PASS_V(state.ir.nir, nir_lower_clip_vs, key->lower_ucp,
|
||||
true, can_compact, clipplane_state);
|
||||
NIR_PASS_V(state.ir.nir, nir_lower_io_to_temporaries,
|
||||
nir_shader_get_entrypoint(state.ir.nir), true, false);
|
||||
NIR_PASS_V(state.ir.nir, nir_lower_global_vars_to_local);
|
||||
}
|
||||
finalize = true;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue