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