mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
736f3ae2df
This preempts us from replacing a swizzle incorrectly, as in the following example: 1: A.x = 1.0 2: A 3: A.x = 2.0 4: @2.x were @4 ends up being 2.0 instead of 1.0, because that's the value stored in A.x at time 4, and we should be querying it at time 2. This also helps us to avoid replacing a swizzle with itself in copy-prop which can result in infinite loops, as with the included tests this commit. Consider the following sequence of instructions: 1 : A 2 : B = @1 3 : B 4 : A = @3 5 : @1.x Current copy-prop would replace 5 so it points to @3 now: 1 : A 2 : B = @1 3 : B 4 : A = @3 5 : @3.x But in the next iteration it would make it point back to @1, keeping it spinning infinitively. The solution is to index the instructions and don't replace the swizzle if the new load happens after the current load. |
||
---|---|---|
.. | ||
hlsl | ||
.gitignore | ||
d3d12_crosstest.h | ||
d3d12_invalid_usage.c | ||
d3d12_test_utils.h | ||
d3d12.c | ||
driver.c | ||
dxcompiler.idl | ||
hlsl_d3d12.c | ||
preproc-if-expr.shader_test | ||
preproc-if.shader_test | ||
preproc-ifdef.shader_test | ||
preproc-invalid.shader_test | ||
preproc-macro.shader_test | ||
preproc-misc.shader_test | ||
shader_runner_d3d9.c | ||
shader_runner_d3d11.c | ||
shader_runner_d3d12.c | ||
shader_runner_gl.c | ||
shader_runner_vulkan.c | ||
shader_runner.c | ||
shader_runner.h | ||
utils.h | ||
vkd3d_api.c | ||
vkd3d_common.c | ||
vkd3d_shader_api.c | ||
vulkan_procs.h |