=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: wined3d: Translate ld_{raw, structured} instructions more carefully.

Alexandre Julliard julliard at winehq.org
Tue Jul 18 13:58:54 CDT 2017


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

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Tue Jul 18 00:17:18 2017 +0200

wined3d: Translate ld_{raw, structured} instructions more carefully.

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 | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index ac4dfda..f96f48d 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -5569,6 +5569,14 @@ static void shader_glsl_ld_raw_structured(const struct wined3d_shader_instructio
     shader_addline(address, "%s / 4", offset.param_str);
 
     dst = ins->dst[0];
+    if (shader_glsl_get_write_mask_size(dst.write_mask) > 1)
+    {
+        /* The instruction is split into multiple lines. The first lines may
+         * overwrite source parameters of the following lines. */
+        shader_addline(buffer, "tmp0.x = intBitsToFloat(%s);\n", address->buffer);
+        string_buffer_sprintf(address, "floatBitsToInt(tmp0.x)");
+    }
+
     for (i = 0; i < 4; ++i)
     {
         dst.write_mask = ins->dst[0].write_mask & (WINED3DSP_WRITEMASK_0 << i);




More information about the wine-cvs mailing list