summaryrefslogtreecommitdiff
path: root/source/slang/hlsl.meta.slang
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-06-11 00:01:12 -0700
committerGitHub <noreply@github.com>2024-06-11 00:01:12 -0700
commit6d5ef9b650a9db35f7774ca09d9225d0c30849e4 (patch)
treed8f812a52d937709efa23b17c1e36c51ee1b66f4 /source/slang/hlsl.meta.slang
parent21bbebb19dfdbbee107b9fd9830e18d5fb6a573a (diff)
Fix `GetAttributeAtVertex` for spirv and glsl targets. (#4334)
Diffstat (limited to 'source/slang/hlsl.meta.slang')
-rw-r--r--source/slang/hlsl.meta.slang12
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];
}
}