diff options
| author | James Helferty (NVIDIA) <jhelferty@nvidia.com> | 2025-06-30 11:59:14 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-30 15:59:14 +0000 |
| commit | 61c9eb3a9117b6227cf40d970e57cf3d746b3926 (patch) | |
| tree | 740b42289cbdf1baa76f841c8debc4fa14c8b045 /source | |
| parent | 67af8c718ce5e3f95a25e5188840f63b41a33ecc (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.slang | 7 |
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)] |
