diff options
| author | Yong He <yonghe@outlook.com> | 2024-06-11 00:01:12 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-11 00:01:12 -0700 |
| commit | 6d5ef9b650a9db35f7774ca09d9225d0c30849e4 (patch) | |
| tree | d8f812a52d937709efa23b17c1e36c51ee1b66f4 /source/slang/hlsl.meta.slang | |
| parent | 21bbebb19dfdbbee107b9fd9830e18d5fb6a573a (diff) | |
Fix `GetAttributeAtVertex` for spirv and glsl targets. (#4334)
Diffstat (limited to 'source/slang/hlsl.meta.slang')
| -rw-r--r-- | source/slang/hlsl.meta.slang | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index e215fd93b..abc178317 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -8243,6 +8243,9 @@ matrix<T, N, M> fwidth(matrix<T, N, M> x) } } +__intrinsic_op($(kIROp_GetPerVertexInputArray)) +Array<T, 3> __GetPerVertexInputArray<T>(T attribute); + /// Get the value of a vertex attribute at a specific vertex. /// /// The `GetAttributeAtVertex()` function can be used in a fragment shader @@ -8260,6 +8263,8 @@ __generic<T : __BuiltinType> __glsl_version(450) __glsl_extension(GL_EXT_fragment_shader_barycentric) [require(glsl_hlsl_spirv, getattributeatvertex)] +[KnownBuiltin("GetAttributeAtVertex")] +[__unsafeForceInlineEarly] T GetAttributeAtVertex(T attribute, uint vertexIndex) { __target_switch @@ -8267,13 +8272,8 @@ T GetAttributeAtVertex(T attribute, uint vertexIndex) case hlsl: __intrinsic_asm "GetAttributeAtVertex"; case glsl: - __intrinsic_asm "$0[$1]"; case spirv: - return spirv_asm { - %_ptr_Input_T = OpTypePointer Input $$T; - %addr = OpAccessChain %_ptr_Input_T $attribute $vertexIndex; - result:$$T = OpLoad %addr; - }; + return __GetPerVertexInputArray(attribute)[vertexIndex]; } } |
