[PATCH v3 3/3] wined3d: Do not zero 'w' with zero norm for 'nrm' opcode in GLSL backend.

Paul Gofman gofmanp at gmail.com
Thu Jun 13 05:17:26 CDT 2019


Signed-off-by: Paul Gofman <gofmanp at gmail.com>
---
v3:
    - output 'w' component unchanged in case of zero norm.

 dlls/wined3d/glsl_shader.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index f2fa18dba8..45272a05bc 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -4268,7 +4268,12 @@ static void shader_glsl_nrm(const struct wined3d_shader_instruction *ins)
                 src_param.param_str, src_param.param_str);
     shader_glsl_append_dst(buffer, ins);
 
-    if (mask_size > 1)
+    if (mask_size == 4)
+    {
+        shader_addline(buffer, "tmp0.x == 0.0 ? vec4(vec3(0.0), %s[3]) : (%s * inversesqrt(tmp0.x)));\n",
+                src_param.param_str, src_param.param_str);
+    }
+    else if (mask_size > 1)
     {
         shader_addline(buffer, "tmp0.x == 0.0 ? vec%u(0.0) : (%s * inversesqrt(tmp0.x)));\n",
                 mask_size, src_param.param_str);
-- 
2.21.0




More information about the wine-devel mailing list