mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-18 14:40:40 +02:00
mesa/st: Tie depth_clamp code into other shaders (GS and TES)
v2: Use file scope defined depth_range_state in common
v3: - don't use the one_shader_variant property, as this is
not correct (Marek)
- also use tests on available shader stages to enable
depth_clamp lowering
v4: Don't use key.st, use st directly (Marek)
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
d81ba38b02
commit
57361d89fa
3 changed files with 36 additions and 1 deletions
|
|
@ -251,6 +251,17 @@ st_update_common_program(struct st_context *st, struct gl_program *prog,
|
|||
VARYING_SLOT_COL1 |
|
||||
VARYING_SLOT_BFC0 |
|
||||
VARYING_SLOT_BFC1));
|
||||
|
||||
key.lower_depth_clamp =
|
||||
(pipe_shader == PIPE_SHADER_GEOMETRY || !st->gp) &&
|
||||
st->clamp_frag_depth_in_shader &&
|
||||
(st->ctx->Transform.DepthClampNear ||
|
||||
st->ctx->Transform.DepthClampFar);
|
||||
|
||||
if (key.lower_depth_clamp)
|
||||
key.clip_negative_one_to_one =
|
||||
st->ctx->Transform.ClipDepthMode == GL_NEGATIVE_ONE_TO_ONE;
|
||||
|
||||
}
|
||||
|
||||
return st_get_basic_variant(st, pipe_shader, stp, &key)->driver_shader;
|
||||
|
|
|
|||
|
|
@ -1697,8 +1697,27 @@ st_get_basic_variant(struct st_context *st,
|
|||
NIR_PASS_V(tgsi.ir.nir, nir_lower_clamp_color_outputs);
|
||||
|
||||
tgsi.stream_output = prog->tgsi.stream_output;
|
||||
} else
|
||||
} else {
|
||||
if (key->lower_depth_clamp) {
|
||||
struct gl_program_parameter_list *params = prog->Base.Parameters;
|
||||
|
||||
unsigned depth_range_const =
|
||||
_mesa_add_state_reference(params, depth_range_state);
|
||||
|
||||
const struct tgsi_token *tokens;
|
||||
tokens =
|
||||
st_tgsi_lower_depth_clamp(prog->tgsi.tokens,
|
||||
depth_range_const,
|
||||
key->clip_negative_one_to_one);
|
||||
|
||||
if (tokens != prog->tgsi.tokens)
|
||||
tgsi_free_tokens(prog->tgsi.tokens);
|
||||
|
||||
prog->tgsi.tokens = tokens;
|
||||
prog->num_tgsi_tokens = tgsi_num_tokens(tokens);
|
||||
}
|
||||
tgsi = prog->tgsi;
|
||||
}
|
||||
/* fill in new variant */
|
||||
switch (pipe_shader) {
|
||||
case PIPE_SHADER_TESS_CTRL:
|
||||
|
|
|
|||
|
|
@ -269,6 +269,11 @@ struct st_basic_variant_key
|
|||
|
||||
/** For compat profile */
|
||||
bool clamp_color;
|
||||
|
||||
/** both for ARB_depth_clamp */
|
||||
bool lower_depth_clamp;
|
||||
bool clip_negative_one_to_one;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue