From 8ac4452754292b74fa6bf2713dd9f1458ce5243d Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Wed, 27 Feb 2019 12:15:02 -0500 Subject: Use kIRPseudoOp_Pos for identity asuint/asint/asfloat casts. (#865) * * Add 'identity' version of bit casts (asint, asuint, asfloat) for scalar and vector * Added identity bit casts for matrix (cos no op). We don't support matrix asint on glsl targets * Added tests in bit-cast.slang * Use kIRPseudoOp_Pos for identity asuint/asint/asfloat casts. --- source/slang/hlsl.meta.slang | 48 +++++++++++---------------- source/slang/hlsl.meta.slang.h | 75 ++++++++++++++++++++++++++---------------- 2 files changed, 65 insertions(+), 58 deletions(-) (limited to 'source') diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index e51016a53..a8fd37243 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -380,32 +380,30 @@ __target_intrinsic(glsl, "intBitsToFloat") float asfloat(int x); __target_intrinsic(glsl, "uintBitsToFloat") float asfloat(uint x); -__target_intrinsic(glsl, "$0") -float asfloat(float x); // GLSL Vector __generic -__target_intrinsic(glsl, "$0") -vector asfloat(vector x); -__generic __target_intrinsic(glsl, "intBitsToFloat") vector asfloat(vector< int,N> x); __generic __target_intrinsic(glsl, "uintBitsToFloat") vector asfloat(vector x); -// GLSL Matrix (only identity for now) +// No op +__intrinsic_op($(kIRPseudoOp_Pos)) +float asfloat(float x); +__generic +__intrinsic_op($(kIRPseudoOp_Pos)) +vector asfloat(vector x); __generic -__target_intrinsic(glsl, "$0") +__intrinsic_op($(kIRPseudoOp_Pos)) matrix asfloat(matrix x); // Pass thru to HLSL -float asfloat(float x); float asfloat(uint x); float asfloat(int x); __generic matrix asfloat(matrix< int,N,M> x); __generic matrix asfloat(matrix x); -__generic matrix asfloat(matrix x); // Inverse sine (HLSL SM 1.0) __generic T asin(T x); @@ -419,8 +417,6 @@ __target_intrinsic(glsl, "floatBitsToInt") int asint(float x); __target_intrinsic(glsl, "int($0)") int asint(uint x); -__target_intrinsic(glsl, "$0") -int asint(int x); // GLSL Vector __generic @@ -429,27 +425,25 @@ vector asint(vector x); __generic __target_intrinsic(glsl, "ivec$N0($0)") vector asint(vector x); + +// No op +__intrinsic_op($(kIRPseudoOp_Pos)) +int asint(int x); __generic -__target_intrinsic(glsl, "$0") +__intrinsic_op($(kIRPseudoOp_Pos)) vector asint(vector x); - -// GLSL Matrix (just identity for now) - __generic -__target_intrinsic(glsl, "$0") +__intrinsic_op($(kIRPseudoOp_Pos)) matrix asint(matrix x); // Pass thru HLSL int asint(float x); -int asint(int x); int asint(uint x); __generic vector asint(vector x); -__generic vector asint(vector x); __generic matrix asint(matrix x); __generic matrix asint(matrix x); -__generic matrix asint(matrix x); // Reinterpret bits of double as a uint (HLSL SM 5.0) @@ -466,8 +460,6 @@ __target_intrinsic(glsl, "floatBitsToUint") uint asuint(float x); __target_intrinsic(glsl, "uint($0)") uint asuint(int x); -__target_intrinsic(glsl, "$0") -uint asuint(uint x); // GLSL Vector __generic @@ -476,28 +468,26 @@ vector asuint(vector x); __generic __target_intrinsic(glsl, "uvec$N0($0)") vector asuint(vector x); + +// No op +__intrinsic_op($(kIRPseudoOp_Pos)) +uint asuint(uint x); __generic -__target_intrinsic(glsl, "$0") +__intrinsic_op($(kIRPseudoOp_Pos)) vector asuint(vector x); - -// GLSL Matrix (Identity only for now) __generic -__target_intrinsic(glsl, "$0") +__intrinsic_op($(kIRPseudoOp_Pos)) matrix asuint(matrix x); // Pass thru HLSL - uint asuint(float x); uint asuint(int x); -uint asuint(uint x); __generic vector asuint(vector x); __generic vector asuint(vector x); -__generic vector asuint(vector x); __generic matrix asuint(matrix x); __generic matrix asuint(matrix x); -__generic matrix asuint(matrix x); // Inverse tangent (HLSL SM 1.0) __generic T atan(T x); diff --git a/source/slang/hlsl.meta.slang.h b/source/slang/hlsl.meta.slang.h index 5132fbc29..e26269c3c 100644 --- a/source/slang/hlsl.meta.slang.h +++ b/source/slang/hlsl.meta.slang.h @@ -425,32 +425,39 @@ SLANG_RAW("__target_intrinsic(glsl, \"intBitsToFloat\")\n") SLANG_RAW("float asfloat(int x);\n") SLANG_RAW("__target_intrinsic(glsl, \"uintBitsToFloat\")\n") SLANG_RAW("float asfloat(uint x);\n") -SLANG_RAW("__target_intrinsic(glsl, \"$0\")\n") -SLANG_RAW("float asfloat(float x);\n") SLANG_RAW("\n") SLANG_RAW("// GLSL Vector\n") SLANG_RAW("__generic\n") -SLANG_RAW("__target_intrinsic(glsl, \"$0\")\n") -SLANG_RAW("vector asfloat(vector x);\n") -SLANG_RAW("__generic\n") SLANG_RAW("__target_intrinsic(glsl, \"intBitsToFloat\")\n") SLANG_RAW("vector asfloat(vector< int,N> x);\n") SLANG_RAW("__generic\n") SLANG_RAW("__target_intrinsic(glsl, \"uintBitsToFloat\")\n") SLANG_RAW("vector asfloat(vector x);\n") SLANG_RAW("\n") -SLANG_RAW("// GLSL Matrix (only identity for now)\n") +SLANG_RAW("// No op\n") +SLANG_RAW("__intrinsic_op(") +SLANG_SPLICE(kIRPseudoOp_Pos +) +SLANG_RAW(")\n") +SLANG_RAW("float asfloat(float x);\n") +SLANG_RAW("__generic\n") +SLANG_RAW("__intrinsic_op(") +SLANG_SPLICE(kIRPseudoOp_Pos +) +SLANG_RAW(")\n") +SLANG_RAW("vector asfloat(vector x);\n") SLANG_RAW("__generic\n") -SLANG_RAW("__target_intrinsic(glsl, \"$0\")\n") +SLANG_RAW("__intrinsic_op(") +SLANG_SPLICE(kIRPseudoOp_Pos +) +SLANG_RAW(")\n") SLANG_RAW("matrix asfloat(matrix x);\n") SLANG_RAW("\n") SLANG_RAW("// Pass thru to HLSL\n") -SLANG_RAW("float asfloat(float x);\n") SLANG_RAW("float asfloat(uint x);\n") SLANG_RAW("float asfloat(int x);\n") SLANG_RAW("__generic matrix asfloat(matrix< int,N,M> x);\n") SLANG_RAW("__generic matrix asfloat(matrix x);\n") -SLANG_RAW("__generic matrix asfloat(matrix x);\n") SLANG_RAW("\n") SLANG_RAW("// Inverse sine (HLSL SM 1.0)\n") SLANG_RAW("__generic T asin(T x);\n") @@ -464,8 +471,6 @@ SLANG_RAW("__target_intrinsic(glsl, \"floatBitsToInt\")\n") SLANG_RAW("int asint(float x);\n") SLANG_RAW("__target_intrinsic(glsl, \"int($0)\")\n") SLANG_RAW("int asint(uint x);\n") -SLANG_RAW("__target_intrinsic(glsl, \"$0\")\n") -SLANG_RAW("int asint(int x);\n") SLANG_RAW("\n") SLANG_RAW("// GLSL Vector\n") SLANG_RAW("__generic\n") @@ -474,27 +479,34 @@ SLANG_RAW("vector asint(vector x);\n") SLANG_RAW("__generic\n") SLANG_RAW("__target_intrinsic(glsl, \"ivec$N0($0)\")\n") SLANG_RAW("vector asint(vector x);\n") +SLANG_RAW("\n") +SLANG_RAW("// No op\n") +SLANG_RAW("__intrinsic_op(") +SLANG_SPLICE(kIRPseudoOp_Pos +) +SLANG_RAW(")\n") +SLANG_RAW("int asint(int x);\n") SLANG_RAW("__generic\n") -SLANG_RAW("__target_intrinsic(glsl, \"$0\")\n") +SLANG_RAW("__intrinsic_op(") +SLANG_SPLICE(kIRPseudoOp_Pos +) +SLANG_RAW(")\n") SLANG_RAW("vector asint(vector x);\n") -SLANG_RAW("\n") -SLANG_RAW("// GLSL Matrix (just identity for now)\n") -SLANG_RAW("\n") SLANG_RAW("__generic\n") -SLANG_RAW("__target_intrinsic(glsl, \"$0\")\n") +SLANG_RAW("__intrinsic_op(") +SLANG_SPLICE(kIRPseudoOp_Pos +) +SLANG_RAW(")\n") SLANG_RAW("matrix asint(matrix x);\n") SLANG_RAW("\n") SLANG_RAW("// Pass thru HLSL\n") SLANG_RAW("\n") SLANG_RAW("int asint(float x);\n") -SLANG_RAW("int asint(int x);\n") SLANG_RAW("int asint(uint x);\n") SLANG_RAW("\n") SLANG_RAW("__generic vector asint(vector x);\n") -SLANG_RAW("__generic vector asint(vector x);\n") SLANG_RAW("__generic matrix asint(matrix x);\n") SLANG_RAW("__generic matrix asint(matrix x);\n") -SLANG_RAW("__generic matrix asint(matrix x);\n") SLANG_RAW("\n") SLANG_RAW("// Reinterpret bits of double as a uint (HLSL SM 5.0)\n") SLANG_RAW("\n") @@ -511,8 +523,6 @@ SLANG_RAW("__target_intrinsic(glsl, \"floatBitsToUint\")\n") SLANG_RAW("uint asuint(float x);\n") SLANG_RAW("__target_intrinsic(glsl, \"uint($0)\")\n") SLANG_RAW("uint asuint(int x);\n") -SLANG_RAW("__target_intrinsic(glsl, \"$0\")\n") -SLANG_RAW("uint asuint(uint x);\n") SLANG_RAW("\n") SLANG_RAW("// GLSL Vector\n") SLANG_RAW("__generic\n") @@ -521,28 +531,35 @@ SLANG_RAW("vector asuint(vector x);\n") SLANG_RAW("__generic\n") SLANG_RAW("__target_intrinsic(glsl, \"uvec$N0($0)\")\n") SLANG_RAW("vector asuint(vector x);\n") +SLANG_RAW("\n") +SLANG_RAW("// No op\n") +SLANG_RAW("__intrinsic_op(") +SLANG_SPLICE(kIRPseudoOp_Pos +) +SLANG_RAW(")\n") +SLANG_RAW("uint asuint(uint x);\n") SLANG_RAW("__generic\n") -SLANG_RAW("__target_intrinsic(glsl, \"$0\")\n") +SLANG_RAW("__intrinsic_op(") +SLANG_SPLICE(kIRPseudoOp_Pos +) +SLANG_RAW(")\n") SLANG_RAW("vector asuint(vector x);\n") -SLANG_RAW("\n") -SLANG_RAW("// GLSL Matrix (Identity only for now)\n") SLANG_RAW("__generic\n") -SLANG_RAW("__target_intrinsic(glsl, \"$0\")\n") +SLANG_RAW("__intrinsic_op(") +SLANG_SPLICE(kIRPseudoOp_Pos +) +SLANG_RAW(")\n") SLANG_RAW("matrix asuint(matrix x);\n") SLANG_RAW("\n") SLANG_RAW("// Pass thru HLSL\n") -SLANG_RAW("\n") SLANG_RAW("uint asuint(float x);\n") SLANG_RAW("uint asuint(int x);\n") -SLANG_RAW("uint asuint(uint x);\n") SLANG_RAW("\n") SLANG_RAW("__generic vector asuint(vector x);\n") SLANG_RAW("__generic vector asuint(vector x);\n") -SLANG_RAW("__generic vector asuint(vector x);\n") SLANG_RAW("\n") SLANG_RAW("__generic matrix asuint(matrix x);\n") SLANG_RAW("__generic matrix asuint(matrix x);\n") -SLANG_RAW("__generic matrix asuint(matrix x);\n") SLANG_RAW("\n") SLANG_RAW("// Inverse tangent (HLSL SM 1.0)\n") SLANG_RAW("__generic T atan(T x);\n") -- cgit v1.2.3