Module: wine Branch: master Commit: a5852dec9c81ae28b02f7f4f8c3b2997677bfa37 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a5852dec9c81ae28b02f7f4f8c...
Author: Józef Kucia jkucia@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@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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)