vkd3d-shader/ir: Reset instruction pointers after shader_instruction_array_insert_at().
Every call to shader_instruction_array_insert_at() means a possible reallocation of all vsir instructions in the program. This means that all previous pointers are potentially no longer valid.
We are currently using these potentially invalid pointers in some cases, usually in the form of "ins->location". This commit fixes these.
I moved all pointer changes to right after the call to shader_instruction_array_insert_at() to make this more evident.
I could make some these cases surface and be detected by valgrind by modifying vkd3d_array_reserve() to increase capacity by 1 instead of duplicating it, to increase the number of reallocations.
The affected tests are:
discard.shader_test
fog.shader_test
alpha-test.shader_test
clip-planes.shader_test
An example valgrind output:
==887168== Invalid read of size 16
==887168== at 0x493D585: UnknownInlinedFun (ir.c:367)
==887168== by 0x493D585: vsir_instruction_init_with_params (ir.c:375)
==887168== by 0x4948F09: UnknownInlinedFun (ir.c:6250)
==887168== by 0x4948F09: vsir_program_insert_clip_planes.lto_priv.0 (ir.c:6372)
==887168== by 0x494DF5B: UnknownInlinedFun (ir.c:9753)
==887168== by 0x494DF5B: vsir_program_transform (ir.c:9845)
==887168== by 0x4974A8A: UnknownInlinedFun (spirv.c:11360)
==887168== by 0x4974A8A: vsir_program_compile (vkd3d_shader_main.c:1745)
==887168== by 0x4978C29: vkd3d_shader_compile.part.0 (vkd3d_shader_main.c:1817)
==887168== by 0x122226: compile_d3d_code (shader_runner_vulkan.c:556)
==887168== by 0x122460: create_shader_stage (shader_runner_vulkan.c:573)
==887168== by 0x122769: create_graphics_pipeline (shader_runner_vulkan.c:703)
==887168== by 0x12306D: vulkan_runner_draw (shader_runner_vulkan.c:1321)
==887168== by 0x11050E: parse_test_directive (shader_runner.c:1084)
==887168== by 0x11363F: run_shader_tests (shader_runner.c:2531)
==887168== by 0x11DD1D: run_shader_tests_vulkan (shader_runner_vulkan.c:1872)
==887168== Address 0x17abcb28 is 1,240 bytes inside a block of size 1,736 free'd
==887168== at 0x484DCD3: realloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==887168== by 0x49979E5: UnknownInlinedFun (vkd3d_memory.h:38)
==887168== by 0x49979E5: vkd3d_array_reserve (memory.c:41)
==887168== by 0x4978432: UnknownInlinedFun (vkd3d_shader_main.c:2211)
==887168== by 0x4978432: shader_instruction_array_insert_at (vkd3d_shader_main.c:2225)
==887168== by 0x4948D21: UnknownInlinedFun (ir.c:6222)
==887168== by 0x4948D21: vsir_program_insert_clip_planes.lto_priv.0 (ir.c:6372)
==887168== by 0x494DF5B: UnknownInlinedFun (ir.c:9753)
==887168== by 0x494DF5B: vsir_program_transform (ir.c:9845)
==887168== by 0x4974A8A: UnknownInlinedFun (spirv.c:11360)
==887168== by 0x4974A8A: vsir_program_compile (vkd3d_shader_main.c:1745)
==887168== by 0x4978C29: vkd3d_shader_compile.part.0 (vkd3d_shader_main.c:1817)
==887168== by 0x122226: compile_d3d_code (shader_runner_vulkan.c:556)
==887168== by 0x122460: create_shader_stage (shader_runner_vulkan.c:573)
==887168== by 0x122769: create_graphics_pipeline (shader_runner_vulkan.c:703)
==887168== by 0x12306D: vulkan_runner_draw (shader_runner_vulkan.c:1321)
==887168== by 0x11050E: parse_test_directive (shader_runner.c:1084)
==887168== Block was alloc'd at
==887168== at 0x48487A9: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==887168== by 0x49979E5: UnknownInlinedFun (vkd3d_memory.h:38)
==887168== by 0x49979E5: vkd3d_array_reserve (memory.c:41)
==887168== by 0x493F734: UnknownInlinedFun (ir.c:2712)
==887168== by 0x493F734: UnknownInlinedFun (ir.c:2925)
==887168== by 0x493F734: vsir_program_flatten_control_flow_constructs.lto_priv.0 (ir.c:3267)
==887168== by 0x494E9CF: UnknownInlinedFun (ir.c:9753)
==887168== by 0x494E9CF: vsir_program_transform (ir.c:9840)
==887168== by 0x4974A8A: UnknownInlinedFun (spirv.c:11360)
==887168== by 0x4974A8A: vsir_program_compile (vkd3d_shader_main.c:1745)
==887168== by 0x4978C29: vkd3d_shader_compile.part.0 (vkd3d_shader_main.c:1817)
==887168== by 0x122226: compile_d3d_code (shader_runner_vulkan.c:556)
==887168== by 0x122460: create_shader_stage (shader_runner_vulkan.c:573)
==887168== by 0x122769: create_graphics_pipeline (shader_runner_vulkan.c:703)
==887168== by 0x12306D: vulkan_runner_draw (shader_runner_vulkan.c:1321)
==887168== by 0x11050E: parse_test_directive (shader_runner.c:1084)
==887168== by 0x11363F: run_shader_tests (shader_runner.c:2531)