Skip to content
This repository was archived by the owner on Aug 25, 2025. It is now read-only.

Commit 7c3ed56

Browse files
committed
[Test] Add test coverage for struct in cbuffer
1 parent d969a7e commit 7c3ed56

File tree

6 files changed

+59
-29
lines changed

6 files changed

+59
-29
lines changed

Source/Tests/Data/Expected/Fluid_CS.300.glsl

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@
33
#extension GL_ARB_separate_shader_objects : require
44
layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in;
55

6+
struct Scene
7+
{
8+
float wallStiffness;
9+
vec4 gravity;
10+
vec3 planes[4];
11+
};
12+
613
struct Particle
714
{
815
vec2 position;
@@ -17,9 +24,7 @@ struct ParticleForces
1724
layout(std140) uniform type_cbSimulationConstants
1825
{
1926
float timeStep;
20-
float wallStiffness;
21-
vec4 gravity;
22-
vec3 planes[4];
27+
Scene scene;
2328
} cbSimulationConstants;
2429

2530
layout(std430) buffer type_RWStructuredBuffer_Particle
@@ -43,8 +48,8 @@ void main()
4348
vec2 _54 = particlesRO._m0[gl_GlobalInvocationID.x].velocity;
4449
vec2 _56 = particlesForcesRO._m0[gl_GlobalInvocationID.x].acceleration;
4550
vec3 _59 = vec3(_52, 1.0);
46-
float _67 = -cbSimulationConstants.wallStiffness;
47-
vec2 _102 = _54 + ((((((_56 + (cbSimulationConstants.planes[0u].xy * (min(dot(_59, cbSimulationConstants.planes[0u]), 0.0) * _67))) + (cbSimulationConstants.planes[1u].xy * (min(dot(_59, cbSimulationConstants.planes[1u]), 0.0) * _67))) + (cbSimulationConstants.planes[2u].xy * (min(dot(_59, cbSimulationConstants.planes[2u]), 0.0) * _67))) + (cbSimulationConstants.planes[3u].xy * (min(dot(_59, cbSimulationConstants.planes[3u]), 0.0) * _67))) + cbSimulationConstants.gravity.xy) * cbSimulationConstants.timeStep);
51+
float _67 = -cbSimulationConstants.scene.wallStiffness;
52+
vec2 _102 = _54 + ((((((_56 + (cbSimulationConstants.scene.planes[0u].xy * (min(dot(_59, cbSimulationConstants.scene.planes[0u]), 0.0) * _67))) + (cbSimulationConstants.scene.planes[1u].xy * (min(dot(_59, cbSimulationConstants.scene.planes[1u]), 0.0) * _67))) + (cbSimulationConstants.scene.planes[2u].xy * (min(dot(_59, cbSimulationConstants.scene.planes[2u]), 0.0) * _67))) + (cbSimulationConstants.scene.planes[3u].xy * (min(dot(_59, cbSimulationConstants.scene.planes[3u]), 0.0) * _67))) + cbSimulationConstants.scene.gravity.xy) * cbSimulationConstants.timeStep);
4853
particlesRW._m0[gl_GlobalInvocationID.x].position = _52 + (_102 * cbSimulationConstants.timeStep);
4954
particlesRW._m0[gl_GlobalInvocationID.x].velocity = _102;
5055
}

Source/Tests/Data/Expected/Fluid_CS.310.essl

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
#version 310 es
22
layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in;
33

4+
struct Scene
5+
{
6+
float wallStiffness;
7+
vec4 gravity;
8+
vec3 planes[4];
9+
};
10+
411
struct Particle
512
{
613
vec2 position;
@@ -15,9 +22,7 @@ struct ParticleForces
1522
layout(binding = 0, std140) uniform type_cbSimulationConstants
1623
{
1724
float timeStep;
18-
float wallStiffness;
19-
vec4 gravity;
20-
vec3 planes[4];
25+
Scene scene;
2126
} cbSimulationConstants;
2227

2328
layout(binding = 0, std430) buffer type_RWStructuredBuffer_Particle
@@ -41,8 +46,8 @@ void main()
4146
vec2 _54 = particlesRO._m0[gl_GlobalInvocationID.x].velocity;
4247
vec2 _56 = particlesForcesRO._m0[gl_GlobalInvocationID.x].acceleration;
4348
vec3 _59 = vec3(_52, 1.0);
44-
float _67 = -cbSimulationConstants.wallStiffness;
45-
vec2 _102 = _54 + ((((((_56 + (cbSimulationConstants.planes[0u].xy * (min(dot(_59, cbSimulationConstants.planes[0u]), 0.0) * _67))) + (cbSimulationConstants.planes[1u].xy * (min(dot(_59, cbSimulationConstants.planes[1u]), 0.0) * _67))) + (cbSimulationConstants.planes[2u].xy * (min(dot(_59, cbSimulationConstants.planes[2u]), 0.0) * _67))) + (cbSimulationConstants.planes[3u].xy * (min(dot(_59, cbSimulationConstants.planes[3u]), 0.0) * _67))) + cbSimulationConstants.gravity.xy) * cbSimulationConstants.timeStep);
49+
float _67 = -cbSimulationConstants.scene.wallStiffness;
50+
vec2 _102 = _54 + ((((((_56 + (cbSimulationConstants.scene.planes[0u].xy * (min(dot(_59, cbSimulationConstants.scene.planes[0u]), 0.0) * _67))) + (cbSimulationConstants.scene.planes[1u].xy * (min(dot(_59, cbSimulationConstants.scene.planes[1u]), 0.0) * _67))) + (cbSimulationConstants.scene.planes[2u].xy * (min(dot(_59, cbSimulationConstants.scene.planes[2u]), 0.0) * _67))) + (cbSimulationConstants.scene.planes[3u].xy * (min(dot(_59, cbSimulationConstants.scene.planes[3u]), 0.0) * _67))) + cbSimulationConstants.scene.gravity.xy) * cbSimulationConstants.timeStep);
4651
particlesRW._m0[gl_GlobalInvocationID.x].position = _52 + (_102 * cbSimulationConstants.timeStep);
4752
particlesRW._m0[gl_GlobalInvocationID.x].velocity = _102;
4853
}

Source/Tests/Data/Expected/Fluid_CS.410.glsl

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22
#extension GL_ARB_compute_shader : require
33
layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in;
44

5+
struct Scene
6+
{
7+
float wallStiffness;
8+
vec4 gravity;
9+
vec3 planes[4];
10+
};
11+
512
struct Particle
613
{
714
vec2 position;
@@ -16,9 +23,7 @@ struct ParticleForces
1623
layout(std140) uniform type_cbSimulationConstants
1724
{
1825
float timeStep;
19-
float wallStiffness;
20-
vec4 gravity;
21-
vec3 planes[4];
26+
Scene scene;
2227
} cbSimulationConstants;
2328

2429
layout(std430) buffer type_RWStructuredBuffer_Particle
@@ -42,8 +47,8 @@ void main()
4247
vec2 _54 = particlesRO._m0[gl_GlobalInvocationID.x].velocity;
4348
vec2 _56 = particlesForcesRO._m0[gl_GlobalInvocationID.x].acceleration;
4449
vec3 _59 = vec3(_52, 1.0);
45-
float _67 = -cbSimulationConstants.wallStiffness;
46-
vec2 _102 = _54 + ((((((_56 + (cbSimulationConstants.planes[0u].xy * (min(dot(_59, cbSimulationConstants.planes[0u]), 0.0) * _67))) + (cbSimulationConstants.planes[1u].xy * (min(dot(_59, cbSimulationConstants.planes[1u]), 0.0) * _67))) + (cbSimulationConstants.planes[2u].xy * (min(dot(_59, cbSimulationConstants.planes[2u]), 0.0) * _67))) + (cbSimulationConstants.planes[3u].xy * (min(dot(_59, cbSimulationConstants.planes[3u]), 0.0) * _67))) + cbSimulationConstants.gravity.xy) * cbSimulationConstants.timeStep);
50+
float _67 = -cbSimulationConstants.scene.wallStiffness;
51+
vec2 _102 = _54 + ((((((_56 + (cbSimulationConstants.scene.planes[0u].xy * (min(dot(_59, cbSimulationConstants.scene.planes[0u]), 0.0) * _67))) + (cbSimulationConstants.scene.planes[1u].xy * (min(dot(_59, cbSimulationConstants.scene.planes[1u]), 0.0) * _67))) + (cbSimulationConstants.scene.planes[2u].xy * (min(dot(_59, cbSimulationConstants.scene.planes[2u]), 0.0) * _67))) + (cbSimulationConstants.scene.planes[3u].xy * (min(dot(_59, cbSimulationConstants.scene.planes[3u]), 0.0) * _67))) + cbSimulationConstants.scene.gravity.xy) * cbSimulationConstants.timeStep);
4752
particlesRW._m0[gl_GlobalInvocationID.x].position = _52 + (_102 * cbSimulationConstants.timeStep);
4853
particlesRW._m0[gl_GlobalInvocationID.x].velocity = _102;
4954
}

Source/Tests/Data/Expected/Fluid_CS.50.hlsl

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
struct Scene
2+
{
3+
float wallStiffness;
4+
float4 gravity;
5+
float3 planes[4];
6+
};
7+
18
struct Particle
29
{
310
float2 position;
@@ -12,9 +19,7 @@ struct ParticleForces
1219
cbuffer type_cbSimulationConstants : register(b0)
1320
{
1421
float cbSimulationConstants_timeStep : packoffset(c0);
15-
float cbSimulationConstants_wallStiffness : packoffset(c0.y);
16-
float4 cbSimulationConstants_gravity : packoffset(c1);
17-
float3 cbSimulationConstants_planes[4] : packoffset(c2);
22+
Scene cbSimulationConstants_scene : packoffset(c1);
1823
};
1924

2025
RWByteAddressBuffer particlesRW : register(u0);
@@ -33,8 +38,8 @@ void comp_main()
3338
float2 _54 = asfloat(particlesRO.Load2(gl_GlobalInvocationID.x * 16 + 8));
3439
float2 _56 = asfloat(particlesForcesRO.Load2(gl_GlobalInvocationID.x * 8 + 0));
3540
float3 _59 = float3(_52, 1.0f);
36-
float _67 = -cbSimulationConstants_wallStiffness;
37-
float2 _102 = _54 + ((((((_56 + (cbSimulationConstants_planes[0u].xy * (min(dot(_59, cbSimulationConstants_planes[0u]), 0.0f) * _67))) + (cbSimulationConstants_planes[1u].xy * (min(dot(_59, cbSimulationConstants_planes[1u]), 0.0f) * _67))) + (cbSimulationConstants_planes[2u].xy * (min(dot(_59, cbSimulationConstants_planes[2u]), 0.0f) * _67))) + (cbSimulationConstants_planes[3u].xy * (min(dot(_59, cbSimulationConstants_planes[3u]), 0.0f) * _67))) + cbSimulationConstants_gravity.xy) * cbSimulationConstants_timeStep);
41+
float _67 = -cbSimulationConstants_scene.wallStiffness;
42+
float2 _102 = _54 + ((((((_56 + (cbSimulationConstants_scene.planes[0u].xy * (min(dot(_59, cbSimulationConstants_scene.planes[0u]), 0.0f) * _67))) + (cbSimulationConstants_scene.planes[1u].xy * (min(dot(_59, cbSimulationConstants_scene.planes[1u]), 0.0f) * _67))) + (cbSimulationConstants_scene.planes[2u].xy * (min(dot(_59, cbSimulationConstants_scene.planes[2u]), 0.0f) * _67))) + (cbSimulationConstants_scene.planes[3u].xy * (min(dot(_59, cbSimulationConstants_scene.planes[3u]), 0.0f) * _67))) + cbSimulationConstants_scene.gravity.xy) * cbSimulationConstants_timeStep);
3843
particlesRW.Store2(gl_GlobalInvocationID.x * 16 + 0, asuint(_52 + (_102 * cbSimulationConstants_timeStep)));
3944
particlesRW.Store2(gl_GlobalInvocationID.x * 16 + 8, asuint(_102));
4045
}

Source/Tests/Data/Expected/Fluid_CS.msl

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,19 @@
33

44
using namespace metal;
55

6-
struct type_cbSimulationConstants
6+
struct Scene
77
{
8-
float timeStep;
98
float wallStiffness;
109
float4 gravity;
1110
float3 planes[4];
1211
};
1312

13+
struct type_cbSimulationConstants
14+
{
15+
float timeStep;
16+
Scene scene;
17+
};
18+
1419
struct Particle
1520
{
1621
float2 position;
@@ -43,8 +48,8 @@ kernel void main0(constant type_cbSimulationConstants& cbSimulationConstants [[b
4348
float2 _54 = particlesRO._m0[gl_GlobalInvocationID.x].velocity;
4449
float2 _56 = particlesForcesRO._m0[gl_GlobalInvocationID.x].acceleration;
4550
float3 _59 = float3(_52, 1.0);
46-
float _67 = -cbSimulationConstants.wallStiffness;
47-
float2 _102 = _54 + ((((((_56 + (cbSimulationConstants.planes[0u].xy * (fast::min(dot(_59, cbSimulationConstants.planes[0u]), 0.0) * _67))) + (cbSimulationConstants.planes[1u].xy * (fast::min(dot(_59, cbSimulationConstants.planes[1u]), 0.0) * _67))) + (cbSimulationConstants.planes[2u].xy * (fast::min(dot(_59, cbSimulationConstants.planes[2u]), 0.0) * _67))) + (cbSimulationConstants.planes[3u].xy * (fast::min(dot(_59, cbSimulationConstants.planes[3u]), 0.0) * _67))) + cbSimulationConstants.gravity.xy) * cbSimulationConstants.timeStep);
51+
float _67 = -cbSimulationConstants.scene.wallStiffness;
52+
float2 _102 = _54 + ((((((_56 + (cbSimulationConstants.scene.planes[0u].xy * (fast::min(dot(_59, cbSimulationConstants.scene.planes[0u]), 0.0) * _67))) + (cbSimulationConstants.scene.planes[1u].xy * (fast::min(dot(_59, cbSimulationConstants.scene.planes[1u]), 0.0) * _67))) + (cbSimulationConstants.scene.planes[2u].xy * (fast::min(dot(_59, cbSimulationConstants.scene.planes[2u]), 0.0) * _67))) + (cbSimulationConstants.scene.planes[3u].xy * (fast::min(dot(_59, cbSimulationConstants.scene.planes[3u]), 0.0) * _67))) + cbSimulationConstants.scene.gravity.xy) * cbSimulationConstants.timeStep);
4853
particlesRW._m0[gl_GlobalInvocationID.x].position = _52 + (_102 * cbSimulationConstants.timeStep);
4954
particlesRW._m0[gl_GlobalInvocationID.x].velocity = _102;
5055
}

Source/Tests/Data/Input/Fluid_CS.hlsl

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,20 @@ struct ParticleForces
1212
float2 acceleration;
1313
};
1414

15-
cbuffer cbSimulationConstants : register(b0)
15+
struct Scene
1616
{
17-
float timeStep;
1817
float wallStiffness;
1918

2019
float4 gravity;
2120
float3 planes[4];
2221
};
2322

23+
cbuffer cbSimulationConstants : register(b0)
24+
{
25+
float timeStep;
26+
Scene scene;
27+
};
28+
2429
RWStructuredBuffer<Particle> particlesRW : register(u0);
2530
StructuredBuffer<Particle> particlesRO : register(t0);
2631

@@ -38,11 +43,11 @@ void main(uint3 dtid : SV_DispatchThreadID, uint gi : SV_GroupIndex)
3843
[unroll]
3944
for (uint i = 0 ; i < 4 ; ++i)
4045
{
41-
float dist = dot(float3(position, 1), planes[i]);
42-
acceleration += min(dist, 0) * -wallStiffness * planes[i].xy;
46+
float dist = dot(float3(position, 1), scene.planes[i]);
47+
acceleration += min(dist, 0) * -scene.wallStiffness * scene.planes[i].xy;
4348
}
4449

45-
acceleration += gravity.xy;
50+
acceleration += scene.gravity.xy;
4651

4752
velocity += timeStep * acceleration;
4853
position += timeStep * velocity;

0 commit comments

Comments
 (0)