mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-12-15 08:03:30 -08:00
tests/hlsl: Add more TGSM tests.
This commit is contained in:
Notes:
Henri Verbeet
2025-12-08 17:48:57 +01:00
Approved-by: Francisco Casas (@fcasas) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1836
@@ -48,6 +48,31 @@ void main(uint local_idx : SV_GroupIndex)
|
|||||||
[require]
|
[require]
|
||||||
shader model >= 4.0
|
shader model >= 4.0
|
||||||
|
|
||||||
|
% The type of a groupshared variable must not contain objects.
|
||||||
|
[compute shader fail(sm<6) todo]
|
||||||
|
struct data
|
||||||
|
{
|
||||||
|
Texture2D tex;
|
||||||
|
uint u;
|
||||||
|
};
|
||||||
|
|
||||||
|
groupshared data m[4];
|
||||||
|
|
||||||
|
[numthreads(4, 1, 1)]
|
||||||
|
void main(uint local_idx : SV_GroupIndex)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
% Even though the 'groupshared' attribute is ignored in non-compute shaders,
|
||||||
|
% native still checks whether the type of the variable contains objects or not.
|
||||||
|
[pixel shader fail(sm<6) todo]
|
||||||
|
groupshared Texture2D m[4];
|
||||||
|
|
||||||
|
float4 main() : SV_Target
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
[uav 0]
|
[uav 0]
|
||||||
format r32-typeless
|
format r32-typeless
|
||||||
size (raw_buffer, 4)
|
size (raw_buffer, 4)
|
||||||
@@ -73,6 +98,28 @@ probe uav 0 (1) u32(0xcafef00d)
|
|||||||
probe uav 0 (2) u32(0xcafef00d)
|
probe uav 0 (2) u32(0xcafef00d)
|
||||||
probe uav 0 (3) u32(0xcafef00d)
|
probe uav 0 (3) u32(0xcafef00d)
|
||||||
|
|
||||||
|
[compute shader todo]
|
||||||
|
RWByteAddressBuffer u : register(u0);
|
||||||
|
groupshared uint m[4][2];
|
||||||
|
|
||||||
|
[numthreads(4, 1, 1)]
|
||||||
|
void main(uint local_idx : SV_GroupIndex)
|
||||||
|
{
|
||||||
|
m[local_idx][0] = 0xcafef00d;
|
||||||
|
m[local_idx][1] = 0xdeadbeef;
|
||||||
|
GroupMemoryBarrierWithGroupSync();
|
||||||
|
|
||||||
|
uint m_copy[4][2] = m;
|
||||||
|
u.Store(4 * local_idx, m_copy[local_idx][0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
[test]
|
||||||
|
todo(sm<6 | msl) dispatch 1 1 1
|
||||||
|
probe uav 0 (0) u32(0xcafef00d)
|
||||||
|
probe uav 0 (1) u32(0xcafef00d)
|
||||||
|
probe uav 0 (2) u32(0xcafef00d)
|
||||||
|
probe uav 0 (3) u32(0xcafef00d)
|
||||||
|
|
||||||
[require]
|
[require]
|
||||||
shader model >= 5.0
|
shader model >= 5.0
|
||||||
|
|
||||||
@@ -209,6 +256,69 @@ probe uav 2 (5) i32(6)
|
|||||||
probe uav 2 (6) i32(3)
|
probe uav 2 (6) i32(3)
|
||||||
probe uav 2 (7) i32(4)
|
probe uav 2 (7) i32(4)
|
||||||
|
|
||||||
|
[uav 1]
|
||||||
|
format r32-float
|
||||||
|
size (buffer, 8)
|
||||||
|
|
||||||
|
1 1 1 1 0 0 0 0
|
||||||
|
|
||||||
|
[uav 2]
|
||||||
|
format r32-sint
|
||||||
|
size (buffer, 8)
|
||||||
|
|
||||||
|
1 1 1 1 0 0 0 0
|
||||||
|
|
||||||
|
[compute shader todo]
|
||||||
|
uniform uint idx;
|
||||||
|
|
||||||
|
#define GROUP_SIZE 4
|
||||||
|
|
||||||
|
struct data
|
||||||
|
{
|
||||||
|
float f;
|
||||||
|
uint u;
|
||||||
|
};
|
||||||
|
|
||||||
|
RWBuffer<float> u : register(u1);
|
||||||
|
RWBuffer<uint> u2 : register(u2);
|
||||||
|
groupshared data m[GROUP_SIZE][2];
|
||||||
|
|
||||||
|
[numthreads(GROUP_SIZE, 1, 1)]
|
||||||
|
void main(uint local_idx : SV_GroupIndex, uint group_id : SV_GroupID,
|
||||||
|
uint thread_id : SV_DispatchThreadID)
|
||||||
|
{
|
||||||
|
uint val = local_idx * 10 + group_id;
|
||||||
|
m[local_idx][group_id].f = val;
|
||||||
|
m[local_idx][group_id].u = val;
|
||||||
|
GroupMemoryBarrierWithGroupSync();
|
||||||
|
InterlockedAdd(m[0][group_id].u, 2 * group_id);
|
||||||
|
InterlockedAdd(m[idx][group_id].u, group_id);
|
||||||
|
GroupMemoryBarrierWithGroupSync();
|
||||||
|
|
||||||
|
data m_copy[GROUP_SIZE][2] = m;
|
||||||
|
u[thread_id] = m_copy[local_idx][group_id].f;
|
||||||
|
u2[thread_id] = m_copy[local_idx][group_id].u;
|
||||||
|
}
|
||||||
|
|
||||||
|
[test]
|
||||||
|
uniform 0 uint 1
|
||||||
|
todo(sm<6 | msl) dispatch 2 1 1
|
||||||
|
probe uav 1 (0) f32(0.0)
|
||||||
|
probe uav 1 (1) f32(10.0)
|
||||||
|
probe uav 1 (2) f32(20.0)
|
||||||
|
probe uav 1 (3) f32(30.0)
|
||||||
|
probe uav 1 (4) f32(1.0)
|
||||||
|
probe uav 1 (5) f32(11.0)
|
||||||
|
probe uav 1 (6) f32(21.0)
|
||||||
|
probe uav 1 (7) f32(31.0)
|
||||||
|
probe uav 2 (0) i32(0)
|
||||||
|
probe uav 2 (1) i32(10)
|
||||||
|
probe uav 2 (2) i32(20)
|
||||||
|
probe uav 2 (3) i32(30)
|
||||||
|
probe uav 2 (4) i32(9)
|
||||||
|
probe uav 2 (5) i32(15)
|
||||||
|
probe uav 2 (6) i32(21)
|
||||||
|
probe uav 2 (7) i32(31)
|
||||||
|
|
||||||
[uav 1]
|
[uav 1]
|
||||||
format r32-typeless
|
format r32-typeless
|
||||||
@@ -280,6 +390,38 @@ size (raw_buffer, 8)
|
|||||||
0xf000f 0xf000f 0xf000f 0xf000f
|
0xf000f 0xf000f 0xf000f 0xf000f
|
||||||
0xf000f 0xf000f 0xf000f 0xf000f
|
0xf000f 0xf000f 0xf000f 0xf000f
|
||||||
|
|
||||||
|
[compute shader todo]
|
||||||
|
RWByteAddressBuffer u : register(u0);
|
||||||
|
groupshared uint4x2 m;
|
||||||
|
|
||||||
|
[numthreads(4, 1, 1)]
|
||||||
|
void main(uint local_idx : SV_GroupIndex, uint group_id : SV_GroupID)
|
||||||
|
{
|
||||||
|
m[local_idx][group_id] = group_id + 8 * (local_idx + 1);
|
||||||
|
GroupMemoryBarrierWithGroupSync();
|
||||||
|
m[local_idx] += m[local_idx ^ 1];
|
||||||
|
GroupMemoryBarrierWithGroupSync();
|
||||||
|
u.Store(16 * group_id + 4 * local_idx, m[local_idx][group_id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
[test]
|
||||||
|
todo(sm<6 | msl) dispatch 2 1 1
|
||||||
|
probe uav 0 (0) u32(0x18)
|
||||||
|
probe uav 0 (1) u32(0x18)
|
||||||
|
probe uav 0 (2) u32(0x38)
|
||||||
|
probe uav 0 (3) u32(0x38)
|
||||||
|
probe uav 0 (4) u32(0x1a)
|
||||||
|
probe uav 0 (5) u32(0x1a)
|
||||||
|
probe uav 0 (6) u32(0x3a)
|
||||||
|
probe uav 0 (7) u32(0x3a)
|
||||||
|
|
||||||
|
[uav 0]
|
||||||
|
format r32-typeless
|
||||||
|
size (raw_buffer, 8)
|
||||||
|
|
||||||
|
0xf000f 0xf000f 0xf000f 0xf000f
|
||||||
|
0xf000f 0xf000f 0xf000f 0xf000f
|
||||||
|
|
||||||
[compute shader]
|
[compute shader]
|
||||||
RWByteAddressBuffer u : register(u0);
|
RWByteAddressBuffer u : register(u0);
|
||||||
groupshared min16uint m;
|
groupshared min16uint m;
|
||||||
|
|||||||
Reference in New Issue
Block a user