[Mesa-dev] [PATCH 3/4] glsl_to_tgsi: fix the value of gl_FrontFacing with native integers
Roland Scheidegger
sroland at vmware.com
Thu Oct 16 13:02:06 PDT 2014
Looks correct to me. I agree a boolean face var would be nice. Last time
looking at it it seemed a bit non trivial (because the face var isn't
just used in glsl fragment shaders).
Roland
On 10/16/2014 08:33 AM, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> We must convert it to boolean from the DX9 float encoding that Gallium
> specifies.
>
> Later, we should probably define that FACE should be 0 or ~0 if native
> integers are supported.
>
> Cc: 10.2 10.3 <mesa-stable at lists.freedesktop.org>
> ---
> src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 14 +++++++++-----
> 1 file changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> index a0da9f6..21f4cb8 100644
> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> @@ -4781,15 +4781,19 @@ emit_wpos(struct st_context *st,
> * saturating the value to [0,1] does the job.
> */
> static void
> -emit_face_var(struct st_translate *t)
> +emit_face_var(struct gl_context *ctx, struct st_translate *t)
> {
> struct ureg_program *ureg = t->ureg;
> struct ureg_dst face_temp = ureg_DECL_temporary(ureg);
> struct ureg_src face_input = t->inputs[t->inputMapping[VARYING_SLOT_FACE]];
>
> - /* MOV_SAT face_temp, input[face] */
> - face_temp = ureg_saturate(face_temp);
> - ureg_MOV(ureg, face_temp, face_input);
> + if (ctx->Const.NativeIntegers) {
> + ureg_FSGE(ureg, face_temp, face_input, ureg_imm1f(ureg, 0));
> + }
> + else {
> + /* MOV_SAT face_temp, input[face] */
> + ureg_MOV(ureg, ureg_saturate(face_temp), face_input);
> + }
>
> /* Use face_temp as face input from here on: */
> t->inputs[t->inputMapping[VARYING_SLOT_FACE]] = ureg_src(face_temp);
> @@ -4909,7 +4913,7 @@ st_translate_program(
> }
>
> if (proginfo->InputsRead & VARYING_BIT_FACE)
> - emit_face_var(t);
> + emit_face_var(ctx, t);
>
> /*
> * Declare output attributes.
>
More information about the mesa-dev
mailing list