summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2024-07-05 15:05:52 +0800
committerGitHub <noreply@github.com>2024-07-05 15:05:52 +0800
commit40a4022670c9b6a53c31ba4841eaf744d6402bf2 (patch)
tree0ab5e9b4412a88600a9e3b1b7c93fa308612b55a /source
parent42a9fce6dacae9d8ce94283337b215d3bdead388 (diff)
Add specializations for 1 vectors in functions using the $N glsl intrinsic placement (#4534)
Closes #4533 Fixes part of #4531
Diffstat (limited to 'source')
-rw-r--r--source/slang/hlsl.meta.slang10
1 files changed, 10 insertions, 0 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index d83059b00..b282dca2a 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -5575,6 +5575,8 @@ __generic<T : __BuiltinType, let N : int>
[require(cpp_cuda_glsl_hlsl_metal_spirv)]
bool all(vector<T,N> x)
{
+ if(N == 1)
+ return all(x[0]);
__target_switch
{
case hlsl:
@@ -5710,6 +5712,8 @@ __generic<T : __BuiltinType, let N : int>
[require(cpp_cuda_glsl_hlsl_metal_spirv)]
bool any(vector<T, N> x)
{
+ if(N == 1)
+ return any(x[0]);
__target_switch
{
case hlsl:
@@ -6066,6 +6070,8 @@ __generic<let N : int>
[require(cpp_cuda_glsl_hlsl_metal_spirv, shader5_sm_4_0)]
vector<int, N> asint(vector<uint, N> x)
{
+ if(N == 1)
+ return vector<int, N>(asint(x[0]));
__target_switch
{
case glsl: __intrinsic_asm "ivec$N0($0)";
@@ -6207,6 +6213,8 @@ __generic<let N : int>
[require(cpp_cuda_glsl_hlsl_metal_spirv, shader5_sm_4_0)]
vector<uint, N> asuint(vector<int, N> x)
{
+ if(N == 1)
+ return vector<uint, N>(asuint(x[0]));
__target_switch
{
case glsl: __intrinsic_asm "uvec$N0($0)";
@@ -12054,6 +12062,8 @@ __generic<T : __BuiltinSignedArithmeticType, let N : int>
[__readNone]
vector<int, N> sign(vector<T, N> x)
{
+ if(N == 1)
+ return vector<int, N>(sign(x[0]));
__target_switch
{
case hlsl: __intrinsic_asm "sign";