=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: wined3d: Implement SV_IsFrontFace input sysval semantic.

Alexandre Julliard julliard at winehq.org
Thu Jul 28 09:38:54 CDT 2016


Module: wine
Branch: master
Commit: a5852dec9c81ae28b02f7f4f8c3b2997677bfa37
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a5852dec9c81ae28b02f7f4f8c3b2997677bfa37

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Wed Jul 27 23:33:43 2016 +0200

wined3d: Implement SV_IsFrontFace input sysval semantic.

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wined3d/glsl_shader.c |  4 ++++
 dlls/wined3d/shader.c      | 10 +++++++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index dba3460..498c41c 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -5310,6 +5310,10 @@ static void shader_glsl_input_pack(const struct wined3d_shader *shader, struct w
                         shader->u.ps.input_reg_map[input->register_idx], reg_mask, reg_mask);
             else if (args->pointsprite && shader_match_semantic(semantic_name, WINED3D_DECL_USAGE_TEXCOORD))
                 shader_addline(buffer, "ps_in[%u] = vec4(gl_PointCoord.xy, 0.0, 0.0);\n", input->register_idx);
+            else if (input->sysval_semantic == WINED3D_SV_IS_FRONT_FACE)
+                shader_addline(buffer, "ps_in[%u] = vec4("
+                        "uintBitsToFloat(gl_FrontFacing ? 0xffffffffu : 0u), 0.0, 0.0, 0.0);\n",
+                        input->register_idx);
             else
                 shader_addline(buffer, "ps_in[%u]%s = ps_link[%u]%s;\n",
                         shader->u.ps.input_reg_map[input->register_idx], reg_mask,
diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c
index f1940c6..28d5972 100644
--- a/dlls/wined3d/shader.c
+++ b/dlls/wined3d/shader.c
@@ -1311,9 +1311,13 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st
         for (i = 0; i < input_signature->element_count; ++i)
         {
             reg_maps->input_registers |= 1u << input_signature->elements[i].register_idx;
-            if (shader_version.type == WINED3D_SHADER_TYPE_PIXEL
-                    && input_signature->elements[i].sysval_semantic == WINED3D_SV_POSITION)
-                reg_maps->vpos = 1;
+            if (shader_version.type == WINED3D_SHADER_TYPE_PIXEL)
+            {
+                if (input_signature->elements[i].sysval_semantic == WINED3D_SV_POSITION)
+                    reg_maps->vpos = 1;
+                else if (input_signature->elements[i].sysval_semantic == WINED3D_SV_IS_FRONT_FACE)
+                    reg_maps->usesfacing = 1;
+            }
         }
     }
     else if (!input_signature->elements && reg_maps->input_registers)




More information about the wine-cvs mailing list