summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorJames Helferty (NVIDIA) <jhelferty@nvidia.com>2025-06-30 11:59:14 -0400
committerGitHub <noreply@github.com>2025-06-30 15:59:14 +0000
commit61c9eb3a9117b6227cf40d970e57cf3d746b3926 (patch)
tree740b42289cbdf1baa76f841c8debc4fa14c8b045 /source
parent67af8c718ce5e3f95a25e5188840f63b41a33ecc (diff)
Implement IFloat.scale for vectors, matrices (#7545)
* Test for IFloat.scale usage Test that using IFloat.scale doesn't cause an internal compiler error. * Generic implementation of IFloat.scale() Fixes #7156 * Implement IFloat.scale for matrix Adds matrix implementation and test coverage. * Avoid explicitly constructing a matrix * Remove intrinsicOp from IFloat.scale impls Updates IFloat.scale implementations: - Remove __intrinsic_op($(kIROp_Mul)) since we're providing an implementation - Add [__unsafeForceInlineEarly] where missing
Diffstat (limited to 'source')
-rw-r--r--source/slang/core.meta.slang7
1 files changed, 3 insertions, 4 deletions
diff --git a/source/slang/core.meta.slang b/source/slang/core.meta.slang
index 51e2f326e..deaeae439 100644
--- a/source/slang/core.meta.slang
+++ b/source/slang/core.meta.slang
@@ -1185,7 +1185,7 @@ ${{{{
__intrinsic_op($(kIROp_FRem)) This mod(This other);
__intrinsic_op($(kIROp_Neg)) This neg();
__intrinsic_op($(kIROp_FloatCast)) float toFloat();
- __intrinsic_op($(kIROp_Mul)) This scale<T:__BuiltinFloatingPointType>(T s) { return __mul(this, __realCast<This>(s)); }
+ [__unsafeForceInlineEarly] This scale<T:__BuiltinFloatingPointType>(T s) { return __mul(this, __realCast<This>(s)); }
typedef $(kBaseTypes[tt].name) Differential;
[__unsafeForceInlineEarly]
@@ -2020,7 +2020,7 @@ extension vector<T,N> : IFloat
__intrinsic_op($(kIROp_Div)) This div(This other);
__intrinsic_op($(kIROp_FRem)) This mod(This other);
__intrinsic_op($(kIROp_Neg)) This neg();
- __intrinsic_op($(kIROp_Mul)) This scale<T1:__BuiltinFloatingPointType>(T1 s);
+ [__unsafeForceInlineEarly] This scale<T1:__BuiltinFloatingPointType>(T1 s) { return this.mul(__realCast<T>(s)); }
[__unsafeForceInlineEarly] float toFloat() { return __realCast<float>(this[0]); }
[OverloadRank(-1)]
@@ -2088,8 +2088,7 @@ extension matrix<T,N,M,L> : IFloat
[TreatAsDifferentiable] __intrinsic_op($(kIROp_Div)) This div(This other);
[TreatAsDifferentiable] __intrinsic_op($(kIROp_FRem)) This mod(This other);
[TreatAsDifferentiable] __intrinsic_op($(kIROp_Neg)) This neg();
- [TreatAsDifferentiable] __intrinsic_op($(kIROp_Mul)) This scale<T1:__BuiltinFloatingPointType>(T1 s);
- [TreatAsDifferentiable][__unsafeForceInlineEarly] This scale<T1:__BuiltinFloatingPointType>(T1 s);
+ [TreatAsDifferentiable][__unsafeForceInlineEarly] This scale<T1:__BuiltinFloatingPointType>(T1 s) { return this.mul(__realCast<T>(s)); }
[TreatAsDifferentiable][__unsafeForceInlineEarly] float toFloat() { return __realCast<float>(this[0][0]); }
[OverloadRank(-1)]