[PATCH 2/4] wined3d: Translate ld_{raw, structured} instructions more carefully.

Józef Kucia jkucia at codeweavers.com
Mon Jul 17 17:17:18 CDT 2017


Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
 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 ac4dfdaf88..f96f48d97d 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);
-- 
2.13.0




More information about the wine-patches mailing list