diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2023-06-26 18:15:36 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-06-26 15:15:36 -0700 |
| commit | 4eef0424a657e19f51f2734ba0199b69ee7354bd (patch) | |
| tree | 1179cc7c49d50f707f5f7342ad0c061e819d2636 /tests/bugs | |
| parent | 7175f647f576a4d613928a87dc7140280df4217f (diff) | |
Handling SV_ClipDistance system semantic on GLSL/VK (#2942)
* Small fixes and improvements around reflection tool.
* Make PrettyWriter printing a class.
* WIP support for gl_ClipDistance
* Working but doesn't have layout.
* Check out param works with gl_ClipDistance.
* Test clip distance works with out parameters.
* Enable file check.
* Add a test that splits clip distance writing.
---------
Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'tests/bugs')
| -rw-r--r-- | tests/bugs/sv-clip-distance-array.slang | 19 | ||||
| -rw-r--r-- | tests/bugs/sv-clip-distance-out-param.slang | 28 | ||||
| -rw-r--r-- | tests/bugs/sv-clip-distance-split.slang | 35 | ||||
| -rw-r--r-- | tests/bugs/sv-clip-distance.slang | 32 |
4 files changed, 114 insertions, 0 deletions
diff --git a/tests/bugs/sv-clip-distance-array.slang b/tests/bugs/sv-clip-distance-array.slang new file mode 100644 index 000000000..f0c6c9acc --- /dev/null +++ b/tests/bugs/sv-clip-distance-array.slang @@ -0,0 +1,19 @@ +// sv-clip-distance.slang + +//TEST:SIMPLE(filecheck=CHECK): -profile sm_5_0 -stage vertex -entry mainVertex -target glsl + +//CHECK: out float gl_ClipDistance[2]; +//CHECK: gl_ClipDistance = + +struct VertexInput +{ + float3 position : POSITION; +}; + +void mainVertex(VertexInput vi, out float4 outPosition : SV_Position, out float outClips[2] : SV_ClipDistance) +{ + outPosition = float4(vi.position, 1); + outClips[0] = vi.position.x / 10; + outClips[1] = vi.position.z * 2; +} + diff --git a/tests/bugs/sv-clip-distance-out-param.slang b/tests/bugs/sv-clip-distance-out-param.slang new file mode 100644 index 000000000..776cd0c84 --- /dev/null +++ b/tests/bugs/sv-clip-distance-out-param.slang @@ -0,0 +1,28 @@ +// sv-clip-distance-out-param.slang + +//TEST:SIMPLE(filecheck=CHECK): -profile sm_5_0 -stage vertex -entry mainVertex -target glsl + +//CHECK: out float gl_ClipDistance[2]; +//CHECK: gl_ClipDistance[0] = +//CHECK: gl_ClipDistance[1] = + +struct VertexInput +{ + float3 position : POSITION; +}; + +struct VertexOutput +{ + float4 position : SV_Position; + + float clip0 : SV_ClipDistance0; + float clip1 : SV_ClipDistance1; +}; + +void mainVertex(VertexInput vi, out VertexOutput vo) +{ + vo.position = float4(vi.position, 1); + vo.clip0 = vi.position.x / 10; + vo.clip1 = vi.position.z * 2; +} + diff --git a/tests/bugs/sv-clip-distance-split.slang b/tests/bugs/sv-clip-distance-split.slang new file mode 100644 index 000000000..99adf4f31 --- /dev/null +++ b/tests/bugs/sv-clip-distance-split.slang @@ -0,0 +1,35 @@ +// sv-clip-distance-split.slang + +//TEST:SIMPLE(filecheck=CHECK): -profile sm_5_0 -stage vertex -entry mainVertex -target glsl + +//CHECK: out float gl_ClipDistance[3]; +//CHECK: gl_ClipDistance[0] = +//CHECK: gl_ClipDistance[1] = +//CHECK: gl_ClipDistance[2] = + +struct VertexInput +{ + float3 position : POSITION; +}; + +struct VertexOutput +{ + float4 position : SV_Position; + + float clip0 : SV_ClipDistance0; + float clip1 : SV_ClipDistance1; +}; + +VertexOutput mainVertex(VertexInput vi, out float outClip : SV_ClipDistance2) +{ + VertexOutput vo; + + vo.position = float4(vi.position, 1); + vo.clip0 = vi.position.x / 10; + vo.clip1 = vi.position.z * 2; + + outClip = vi.position.y + 1; + + return vo; +} + diff --git a/tests/bugs/sv-clip-distance.slang b/tests/bugs/sv-clip-distance.slang new file mode 100644 index 000000000..ccfafad85 --- /dev/null +++ b/tests/bugs/sv-clip-distance.slang @@ -0,0 +1,32 @@ +// sv-clip-distance.slang + +//TEST:SIMPLE(filecheck=CHECK): -profile sm_5_0 -stage vertex -entry mainVertex -target glsl + +//CHECK: out float gl_ClipDistance[2]; +//CHECK: gl_ClipDistance[0] = +//CHECK: gl_ClipDistance[1] = + +struct VertexInput +{ + float3 position : POSITION; +}; + +struct VertexOutput +{ + float4 position : SV_Position; + + float clip0 : SV_ClipDistance0; + float clip1 : SV_ClipDistance1; +}; + +VertexOutput mainVertex(VertexInput vi) +{ + VertexOutput vo; + + vo.position = float4(vi.position, 1); + vo.clip0 = vi.position.x / 10; + vo.clip1 = vi.position.z * 2; + + return vo; +} + |
