summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/slang/hlsl.meta.slang2
-rw-r--r--tests/hlsl-intrinsic/matrix-int-mul.slang18
2 files changed, 20 insertions, 0 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index 489bcbab6..ff2762b23 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -12190,6 +12190,7 @@ vector<T, M> mul(vector<T, N> left, matrix<T, N, M> right)
}
__generic<T : __BuiltinLogicalType, let N : int, let M : int>
[__readNone]
+[OverloadRank(-1)]
[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)]
vector<T, M> mul(vector<T, N> left, matrix<T, N, M> right)
{
@@ -12353,6 +12354,7 @@ matrix<T,R,C> mul(matrix<T,R,N> left, matrix<T,N,C> right)
}
__generic<T : __BuiltinLogicalType, let R : int, let N : int, let C : int>
[__readNone]
+[OverloadRank(-1)]
[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)]
matrix<T,R,C> mul(matrix<T,R,N> left, matrix<T,N,C> right)
{
diff --git a/tests/hlsl-intrinsic/matrix-int-mul.slang b/tests/hlsl-intrinsic/matrix-int-mul.slang
new file mode 100644
index 000000000..d78a486a9
--- /dev/null
+++ b/tests/hlsl-intrinsic/matrix-int-mul.slang
@@ -0,0 +1,18 @@
+//TEST:SIMPLE(filecheck=CHECK):-target hlsl -entry main -stage compute
+
+//CHECK-NOT: error 39999: ambiguous call to 'mul'
+
+[shader("compute")]
+void main() {
+ int2x2 matrixA = {
+ 1, 2,
+ 3, 4
+ };
+ int2 vecA = {
+ 1, 2
+ };
+
+ int2x2 matrixB = mul(matrixA, matrixA); // M * M
+ int2 vecB = mul(vecA, matrixA); // V * M
+ int2 vecC = mul(matrixA, vecA); // M * V
+}