mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
11e7265815
This codepath path is currently triggered when transpiling d3dbc shaders that use vPos (or other of these special registers). While vPos gets added to the input signature and gets assigned an INPUT register, the registers in the shader instructions are still of VKD3DSPR_MISCTYPE type and are not propperly mapped yet. This gives invalid results. Some SM1 tests must be set back to "todo" but they only work because, by coincidence, we are assigning vPos the input register with index 0. Propper mapping of these registers is still required.
84 lines
2.5 KiB
Plaintext
84 lines
2.5 KiB
Plaintext
[require]
|
|
shader model >= 3.0
|
|
|
|
[pixel shader]
|
|
float4 main(float4 pos : sv_position) : sv_target
|
|
{
|
|
return float4(ddx(pos.x), ddy(pos.y), 0, 0);
|
|
}
|
|
|
|
[test]
|
|
todo(sm<4 | glsl) draw quad
|
|
probe all rgba (1.0, 1.0, 0.0, 0.0)
|
|
|
|
|
|
[pixel shader]
|
|
float4 main(float4 pos : sv_position) : sv_target
|
|
{
|
|
// Shader models < 4 don't add 0.5 to sv_position, so this adjustment is required to get the
|
|
// same outputs.
|
|
pos.x = floor(pos.x) + 0.5;
|
|
pos.y = floor(pos.y) + 0.5;
|
|
|
|
pos /= 10.0;
|
|
float nonlinear = pos.x * pos.y - pos.x * (pos.x + 0.5);
|
|
float4 res = float4(nonlinear, ddx(nonlinear), ddy(nonlinear), 0.0);
|
|
|
|
// Each device may use either the coarse or the fine derivate, so use quantization.
|
|
return round(30 * res);
|
|
}
|
|
|
|
[test]
|
|
todo(sm<4 | glsl) draw quad
|
|
todo(sm<4) probe (10, 10) rgba (-16.0, -5.0, 3.0, 0.0)
|
|
todo(sm<4) probe (11, 10) rgba (-21.0, -5.0, 3.0, 0.0)
|
|
todo(sm<4) probe (10, 11) rgba (-13.0, -5.0, 3.0, 0.0)
|
|
todo(sm<4) probe (11, 11) rgba (-17.0, -5.0, 3.0, 0.0)
|
|
todo(sm<4) probe (12, 10) rgba (-26.0, -6.0, 4.0, 0.0)
|
|
todo(sm<4) probe (16, 16) rgba (-25.0, -7.0, 5.0, 0.0)
|
|
todo(sm<4) probe (150, 150) rgba (-226.0, -47.0, 45.0, 0.0)
|
|
|
|
|
|
[require]
|
|
shader model >= 5.0
|
|
|
|
|
|
[pixel shader]
|
|
float4 main(float4 pos : sv_position) : sv_target
|
|
{
|
|
pos /= 10.0;
|
|
float nonlinear = pos.x * pos.y - pos.x * (pos.x + 0.5);
|
|
float4 res = float4(nonlinear, ddx_coarse(nonlinear), ddy_coarse(nonlinear), 0.0);
|
|
|
|
// Each device may use either the coarse or the fine derivate, so use quantization.
|
|
return round(30 * res);
|
|
}
|
|
|
|
[test]
|
|
todo(glsl) draw quad
|
|
probe (10, 10) rgba (-16.0, -5.0, 3.0, 0.0)
|
|
probe (11, 10) rgba (-21.0, -5.0, 3.0, 0.0)
|
|
probe (10, 11) rgba (-13.0, -5.0, 3.0, 0.0)
|
|
probe (11, 11) rgba (-17.0, -5.0, 3.0, 0.0)
|
|
probe (12, 10) rgba (-26.0, -6.0, 4.0, 0.0)
|
|
probe (16, 16) rgba (-25.0, -7.0, 5.0, 0.0)
|
|
probe (150, 150) rgba (-226.0, -47.0, 45.0, 0.0)
|
|
|
|
|
|
[pixel shader]
|
|
float4 main(float4 pos : sv_position) : sv_target
|
|
{
|
|
pos /= 10.0;
|
|
float nonlinear = pos.x * pos.y - pos.x * (pos.x + 0.5);
|
|
return float4(nonlinear, ddx_fine(nonlinear), ddy_fine(nonlinear), 0.0);
|
|
}
|
|
|
|
[test]
|
|
todo(glsl) draw quad
|
|
probe (10, 10) rgba (-0.524999976, -0.164999843, 0.104999900, 0.0) 16
|
|
probe (11, 10) rgba (-0.689999819, -0.164999843, 0.114999890, 0.0) 32
|
|
probe (10, 11) rgba (-0.420000076, -0.154999852, 0.104999900, 0.0) 32
|
|
probe (11, 11) rgba (-0.574999928, -0.154999852, 0.114999890, 0.0) 32
|
|
probe (12, 10) rgba (-0.874999881, -0.205000162, 0.124999881, 0.0) 24
|
|
probe (150, 150) rgba (-7.52500916, -1.56500244, 1.50500488, 0.0) 128
|