diff options
| author | Darren Wihandi <65404740+fairywreath@users.noreply.github.com> | 2025-05-19 14:21:25 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-19 11:21:25 -0700 |
| commit | 634e3960c2bc322bbd51fccc7ff395d9f24e35dc (patch) | |
| tree | d7cc501d74a1e4e5fb7fa7d5dcf6c6d515603678 /source/slang/glsl.meta.slang | |
| parent | 31d80c767865d360afba39e5248ab709c587792f (diff) | |
Map `SV_VertexID` to `gl_VertexIndex-gl_BaseVertex`, add `SV_Vulkan*ID` semantics (#7150)
* Map SV_VertexID to `gl_VertexIndex - gl_BaseVertex`, provide SV_Vulkan* SV semantics
* Fix docs
* Regenerate toc
* Fix affected pointer-2 test
* Add tests
---------
Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'source/slang/glsl.meta.slang')
| -rw-r--r-- | source/slang/glsl.meta.slang | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/source/slang/glsl.meta.slang b/source/slang/glsl.meta.slang index 2d9078855..588396251 100644 --- a/source/slang/glsl.meta.slang +++ b/source/slang/glsl.meta.slang @@ -159,6 +159,9 @@ public property uint3 gl_WorkGroupSize public in int gl_InvocationID : SV_GSInstanceID; internal in int __sv_InstanceIndex : SV_InstanceID; +internal in int __sv_VertexIndex : SV_VertexID; +internal in int __sv_VulkanInstanceIndex : SV_VulkanInstanceID; +internal in int __sv_VulkanVertexIndex : SV_VulkanVertexID; // SPIRV InstanceIndex builtin for vertex shader public property int gl_InstanceIndex @@ -168,24 +171,42 @@ public property int gl_InstanceIndex { __target_switch { + case glsl: + case spirv: + case metal: + case wgsl: + return __sv_VulkanInstanceIndex; default: return __sv_InstanceIndex; + } + } +} + +// SPIRV VertexIndex builtin for vertex shader +public property int gl_VertexIndex +{ + [require(vertex)] + get + { + __target_switch + { case glsl: - __intrinsic_asm "gl_InstanceIndex"; case spirv: - return spirv_asm { - result:$$int = OpLoad builtin(InstanceIndex:int); - }; + case metal: + case wgsl: + return __sv_VulkanVertexIndex; + default: + return __sv_VertexIndex; } } } + public in bool gl_FrontFacing : SV_IsFrontFace; // TODO: define overload for geometry stage. public in int gl_Layer : SV_RenderTargetArrayIndex; public in int gl_SampleID : SV_SampleIndex; -public in int gl_VertexIndex : SV_VertexID; public in int gl_ViewIndex : SV_ViewID; public in int gl_ViewportIndex : SV_ViewportArrayIndex; public in int gl_BaseVertex : SV_StartVertexLocation; |
