[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