Stefan Dösinger (@stefan) commented about dlls/d3d9/tests/visual.c:
+ goto done; + } + + hr = IDirect3DDevice9_CreateVertexShader(device, vertex_shader_code1, &vertex_shader[1]); + ok(SUCCEEDED(hr), "CreateVertexShader failed, hr %#lx.\n", hr); + hr = IDirect3DDevice9_CreatePixelShader(device, pixel_shader_code1, &pixel_shader[1]); + ok(SUCCEEDED(hr), "CreatePixelShader failed, hr %#lx.\n", hr); + hr = IDirect3DDevice9_CreatePixelShader(device, pixel_shader_code2, &pixel_shader[2]); + ok(SUCCEEDED(hr), "CreatePixelShader failed, hr %#lx.\n", hr); + hr = IDirect3DDevice9_SetRenderState(device, D3DRS_LIGHTING, FALSE); + ok(SUCCEEDED(hr), "Failed to set render state, hr %#lx.\n", hr); + hr = IDirect3DDevice9_SetRenderState(device, D3DRS_FOGENABLE, TRUE); + ok(SUCCEEDED(hr), "Failed to set render state, hr %#lx.\n", hr); + hr = IDirect3DDevice9_SetRenderState(device, D3DRS_FOGCOLOR, 0x0000ff00); + ok(SUCCEEDED(hr), "Failed to set render state, hr %#lx.\n", hr); + hr = IDirect3DDevice9_SetRenderState(device, D3DRS_FOGSTART, *(DWORD*)(&start)); I know we are using this kind of float-to-DWORD cast in a few other places, but technically speaking it violates the C strict aliasing rule. Better use a union, like e.g. in fog_with_shader_test().
(Actually, I see you already have the conv union for depth bias, just reuse it here) -- https://gitlab.winehq.org/wine/wine/-/merge_requests/2657#note_30204