From 61c9eb3a9117b6227cf40d970e57cf3d746b3926 Mon Sep 17 00:00:00 2001 From: "James Helferty (NVIDIA)" Date: Mon, 30 Jun 2025 11:59:14 -0400 Subject: 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 --- source/slang/core.meta.slang | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'source') 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 s) { return __mul(this, __realCast(s)); } + [__unsafeForceInlineEarly] This scale(T s) { return __mul(this, __realCast(s)); } typedef $(kBaseTypes[tt].name) Differential; [__unsafeForceInlineEarly] @@ -2020,7 +2020,7 @@ extension vector : 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 s); + [__unsafeForceInlineEarly] This scale(T1 s) { return this.mul(__realCast(s)); } [__unsafeForceInlineEarly] float toFloat() { return __realCast(this[0]); } [OverloadRank(-1)] @@ -2088,8 +2088,7 @@ extension matrix : 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 s); - [TreatAsDifferentiable][__unsafeForceInlineEarly] This scale(T1 s); + [TreatAsDifferentiable][__unsafeForceInlineEarly] This scale(T1 s) { return this.mul(__realCast(s)); } [TreatAsDifferentiable][__unsafeForceInlineEarly] float toFloat() { return __realCast(this[0][0]); } [OverloadRank(-1)] -- cgit v1.2.3