mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d-shader/hlsl: Lower non-constant array loads for SM1.
This is achieved by means of creating a variable storing zero, loading every array element, comparing if the non-constant index matches the index of that element at runtime, and in that case store the corresponding element in the variable. This seems to be the same strategy that the native compiler uses.
This commit is contained in:
committed by
Henri Verbeet
parent
e0cfd8f86a
commit
9f515a9daa
Notes:
Henri Verbeet
2024-08-08 23:47:10 +02:00
Approved-by: Elizabeth Figura (@zfigura) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/936
@@ -1,4 +1,4 @@
|
||||
[pixel shader todo(sm<4)]
|
||||
[pixel shader]
|
||||
uniform float4 f[3];
|
||||
uniform float2 i;
|
||||
|
||||
@@ -12,16 +12,16 @@ uniform 0 float4 1.0 2.0 3.0 4.0
|
||||
uniform 4 float4 5.0 6.0 7.0 8.0
|
||||
uniform 8 float4 9.0 10.0 11.0 12.0
|
||||
uniform 12 float4 0 0 0 0
|
||||
todo(sm<4 | glsl) draw quad
|
||||
todo(glsl) draw quad
|
||||
probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
|
||||
uniform 12 float4 1 0 0 0
|
||||
todo(sm<4 | glsl) draw quad
|
||||
todo(glsl) draw quad
|
||||
probe (0, 0) rgba (5.0, 6.0, 7.0, 8.0)
|
||||
uniform 12 float4 0 1 0 0
|
||||
todo(sm<4 | glsl) draw quad
|
||||
todo(glsl) draw quad
|
||||
probe (0, 0) rgba (5.0, 6.0, 7.0, 8.0)
|
||||
uniform 12 float4 1 1 0 0
|
||||
todo(sm<4 | glsl) draw quad
|
||||
todo(glsl) draw quad
|
||||
probe (0, 0) rgba (9.0, 10.0, 11.0, 12.0)
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ todo(glsl) draw quad
|
||||
probe (0, 0) rgba (14.0, 14.0, 14.0, 14.0)
|
||||
|
||||
|
||||
[pixel shader todo(sm<4)]
|
||||
[pixel shader]
|
||||
float i;
|
||||
|
||||
float4 main() : sv_target
|
||||
@@ -61,7 +61,7 @@ float4 main() : sv_target
|
||||
|
||||
[test]
|
||||
uniform 0 float 2.3
|
||||
todo(sm<4 | glsl) draw quad
|
||||
todo(glsl) draw quad
|
||||
probe (0, 0) rgba (3, 3, 3, 3)
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ todo(sm<4 | glsl) draw quad
|
||||
probe (0, 0) rgba (24.0, 0.0, 21.0, 1.0)
|
||||
|
||||
|
||||
[pixel shader todo(sm<4)]
|
||||
[pixel shader]
|
||||
uniform float2 i;
|
||||
|
||||
float4 main() : sv_target
|
||||
@@ -102,20 +102,20 @@ float4 main() : sv_target
|
||||
|
||||
[test]
|
||||
uniform 0 float4 0 0 0 0
|
||||
todo(sm<4 | glsl) draw quad
|
||||
todo(glsl) draw quad
|
||||
probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
|
||||
uniform 0 float4 1 0 0 0
|
||||
todo(sm<4 | glsl) draw quad
|
||||
todo(glsl) draw quad
|
||||
probe (0, 0) rgba (5.0, 6.0, 7.0, 8.0)
|
||||
uniform 0 float4 0 1 0 0
|
||||
todo(sm<4 | glsl) draw quad
|
||||
todo(glsl) draw quad
|
||||
probe (0, 0) rgba (5.0, 6.0, 7.0, 8.0)
|
||||
uniform 0 float4 1 1 0 0
|
||||
todo(sm<4 | glsl) draw quad
|
||||
todo(glsl) draw quad
|
||||
probe (0, 0) rgba (9.0, 10.0, 11.0, 12.0)
|
||||
|
||||
|
||||
[pixel shader todo(sm<4)]
|
||||
[pixel shader]
|
||||
float4 a;
|
||||
|
||||
float4 main() : sv_target
|
||||
@@ -130,11 +130,11 @@ float4 main() : sv_target
|
||||
|
||||
[test]
|
||||
uniform 0 float4 0 0 2.4 0
|
||||
todo(sm<4 | glsl) draw quad
|
||||
todo(glsl) draw quad
|
||||
probe (0, 0) rgba (1.0, 120.0, 90.0, 4.0)
|
||||
|
||||
|
||||
[pixel shader todo(sm<4)]
|
||||
[pixel shader]
|
||||
float i, j;
|
||||
|
||||
float4 main() : sv_target
|
||||
@@ -148,16 +148,16 @@ float4 main() : sv_target
|
||||
if(sm<4) uniform 0 float 3
|
||||
if(sm<4) uniform 4 float 1
|
||||
if(sm>=4) uniform 0 float4 3 1 0 0
|
||||
todo(sm<4 | glsl) draw quad
|
||||
todo(glsl) draw quad
|
||||
probe (0, 0) rgba (7, 7, 7, 7)
|
||||
if(sm<4) uniform 0 float 5
|
||||
if(sm<4) uniform 4 float 0
|
||||
if(sm>=4) uniform 0 float4 5 0 0 0
|
||||
todo(sm<4 | glsl) draw quad
|
||||
todo(glsl) draw quad
|
||||
probe (0, 0) rgba (10, 10, 10, 10)
|
||||
|
||||
|
||||
[pixel shader todo(sm<4)]
|
||||
[pixel shader]
|
||||
float i, j;
|
||||
float k;
|
||||
|
||||
@@ -186,17 +186,17 @@ if(sm<4) uniform 0 float 2
|
||||
if(sm<4) uniform 4 float 1
|
||||
if(sm<4) uniform 8 float -1
|
||||
if(sm>=4) uniform 0 float4 2 1 -1 0
|
||||
todo(sm<4 | glsl) draw quad
|
||||
todo(glsl) draw quad
|
||||
probe (0, 0) rgba (30, 31, 32, 33)
|
||||
if(sm<4) uniform 0 float 1
|
||||
if(sm<4) uniform 4 float 0
|
||||
if(sm<4) uniform 8 float 1
|
||||
if(sm>=4) uniform 0 float4 1 0 1 0
|
||||
todo(sm<4 | glsl) draw quad
|
||||
todo(glsl) draw quad
|
||||
probe (0, 0) rgba (70, 71, 72, 73)
|
||||
|
||||
|
||||
[pixel shader todo(sm<4)]
|
||||
[pixel shader]
|
||||
float i, j;
|
||||
|
||||
float4 main() : sv_target
|
||||
@@ -214,12 +214,12 @@ float4 main() : sv_target
|
||||
if(sm<4) uniform 0 float 11
|
||||
if(sm<4) uniform 4 float 12
|
||||
if(sm>=4) uniform 0 float4 11 12 0 0
|
||||
todo(sm<4 | glsl) draw quad
|
||||
todo(glsl) draw quad
|
||||
probe (0, 0) rgba (5, 5, 5, 5)
|
||||
if(sm<4) uniform 0 float 13
|
||||
if(sm<4) uniform 4 float 10
|
||||
if(sm>=4) uniform 0 float4 13 10 0 0
|
||||
todo(sm<4 | glsl) draw quad
|
||||
todo(glsl) draw quad
|
||||
probe (0, 0) rgba (9, 9, 9, 9)
|
||||
|
||||
|
||||
@@ -309,7 +309,7 @@ probe (0, 0) rgba (1, 5, 3, 4)
|
||||
% reset requirements
|
||||
|
||||
|
||||
[pixel shader todo(sm<4)]
|
||||
[pixel shader]
|
||||
uniform float4 f[4];
|
||||
uniform uint4 u;
|
||||
uniform uint4 v;
|
||||
@@ -332,7 +332,7 @@ uniform 8 float 3.0
|
||||
uniform 12 float 4.0
|
||||
uniform 16 uint4 3 1 0 2
|
||||
uniform 20 uint4 0 3 1 2
|
||||
todo(sm<4 | glsl) draw quad
|
||||
if(sm<4) todo probe (0,0) rgba (1.0, 1.0, 1.0, 1.0)
|
||||
todo(glsl) draw quad
|
||||
if(sm<4) probe (0,0) rgba (1.0, 1.0, 1.0, 1.0)
|
||||
if(sm>=4 & sm<6) todo probe (0,0) rgba (4.0, 4.0, 4.0, 4.0)
|
||||
if(sm>=6) probe (0,0) rgba (4.0, 3.0, 2.0, 1.0)
|
||||
|
@@ -375,7 +375,7 @@ draw quad
|
||||
probe (0, 0) rgba (6, 1, 0, 0)
|
||||
|
||||
|
||||
[pixel shader todo]
|
||||
[pixel shader]
|
||||
// Relative addressing extends the allocation size only up to the array's size.
|
||||
float idx;
|
||||
|
||||
@@ -405,8 +405,8 @@ uniform 8 float 2
|
||||
uniform 12 float 3
|
||||
uniform 16 float 4
|
||||
uniform 20 float 3
|
||||
todo draw quad
|
||||
draw quad
|
||||
probe (0, 0) rgba (3, 3, 3, 3)
|
||||
uniform 20 float 1
|
||||
todo draw quad
|
||||
draw quad
|
||||
probe (0, 0) rgba (1, 1, 1, 1)
|
||||
|
Reference in New Issue
Block a user