After wglMakeCurrent(NULL, NULL); wglSwapBuffers(HDC) actually swaps buffers for the device context. That works on Windows and basically with Wine glx (as glxSwapBuffers also works on drawable and doesn't need GLX context). But that doesn't work for child window rendering: first because of NULL ctx dereference (checked for NULL elsewhere) and next because of GLX_OML_sync_control path.
Fixes Black Desert Online launcher being black screen. The launcher does the following for drawing a frame (while drawing on the child window):
```
wglMakeCurrent(hdc, valid context);
<gl drawing>
wglMakeCurrent(NULL, NULL);
wglSwapBuffers(hdc);
```
--
v3: winex11.drv: Fix wglSwapBuffers() with NULL current context with child window rendering.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4912
--
v3: vkd3d-shader/spirv: Handle the ISINF and ISNAN instructions in spirv_compiler_emit_alu_instruction().
vkd3d-shader/spirv: Implement the ISFINITE instruction.
tests/shader-runner: Add tests for floating point special values.
vkd3d-shader/dxil: Handle floating point special value comparisons in sm6_parser_emit_dx_unary().
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/584
Unlike previous vkd3d-utils interfaces, ID3D12ShaderReflection is rather more
large and complex, and will probably end up needing several new individual
scan interfaces from vkd3d-shader, which are themselves not exactly trivial to
design.
Therefore, instead of implementing everything in vkd3d-shader and then hooking
up the vkd3d-utils interfaces on top of that, this patch series copies the
existing implementation of reflection and then begins the process of moving its
implementation to vkd3d-shader.
The primary motivation here is to add reflection crosstests (primarily for the
benefit of the HLSL compiler) without being blocked on API design. Part 2 of
this patch series does this.
--
v7: tests: Test signature reflection via D3DReflect().
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/561
Recap:
My previous proposals to extend the shader_runner to SM1 were focusing on separating compilation tests ([shader] directives) from execution tests ([test] directives), and let the generic shader_runner.c:compile_shader() in charge of the former.
However, Henri was more inclined to aim for making the parser agnostic to the language of the tests so we can potentially extend the shader_runner tests to other languages such as d3d-asm. This means, removing the burden of compilation from the parser altogether, and moving it to the runners, probably through a runner->compile function pointer (even if most of them end up doing the same thing, compiling with vkd3d-shader or the native compiler, depending on availability).
Agreeing with going in this general direction, this MR contains patches to do SM1 compilation calling run_shader_tests() for SM1 profiles from the Vulkan runner (skipping execution for now), and some improvements to the qualifiers syntax.
Despite this, there are parallel discussions on:
- Whether to name the shader models individually in the [require] directives or expressing the range of shader models where the test should pass. In the latter case, whether to run for all shader models, only the lowest one in the SM1, SM4, and SM6 groups, or to allow the runner to select a shader model within the range (I feel strongly against this now, I think the runner should just retrieve a boolean in runner->check_requirements).
- Where to do the iteration across different shader models, if in run_shader_tests() or expect each runner to call run_shader_tests() several times as we do now.
But there is no need to settle on something for these yet.
---
Now, what may be the most noisy part of this MR is that even though we are calling run_shader_tests() through the Vulkan runner, this will result in calling shader_runner.c:compile_shader() instead of shader_runner_vulkan.c:compile_shader(), but if we follow the "making the parser agnostic" plan, we eventually should get rid of shader_runner.c:compile_shader() and introduce the runner->compile pointer instead.
--
v17: tests: Use the vulkan runner to run SM1 compilation tests.
vkd3d-shader/ir: Lower texkill instructions to discard_nz.
vkd3d-shader/d3dbc: Emit fixme for HLSL_RESOURCE_SAMPLE_LOD.
tests/shader-runner: Call each runner only once.
tests/shader-runner: Support reading multiple model range args for qualifiers.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/514
This allows to declare SRV buffers in the shader tests using `[buffer srv n]` blocks, and passing them to the different backends.
Also, 1/2 includes a missing bit required to parse `Buffer<>` types in the HLSL compiler.
This is a step towards supporting StructuredBuffer types in further patches.
--
v3: tests/shader_runner: Support SRV buffers.
tests/shader-runner: Override resource types of the same category.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/569
--
v4: imm32: Complete the composition string when the IME is closed.
imm32/tests: Test the effect of CPS_CANCEL and CPS_COMPLETE.
win32u: Also pass WM_KEYUP messages to ImmProcessKey.
imm32/tests: Test that WM_KEYUP are passed to ImeProcessKey.
imm32: Mask the scancode before passing it to ImeToAsciiEx.
imm32/tests: Adjust todo_wine for the new Wine CJK keyboard layouts.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4887
--
v3: imm32: Complete the composition string when the IME is closed.
imm32/tests: Test the effect of CPS_CANCEL and CPS_COMPLETE.
win32u: Also pass WM_KEYUP messages to ImmProcessKey.
imm32/tests: Test that WM_KEYUP are passed to ImeProcessKey.
imm32: Mask the scancode before passing it to ImeToAsciiEx.
imm32/tests: Adjust todo_wine for the new Wine CJK keyboard layouts.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4887