From 6d4fa92a86fe5d05dbfa248524cf976ab27f4444 Mon Sep 17 00:00:00 2001 From: Tim Foley Date: Mon, 20 Apr 2020 16:24:49 -0700 Subject: Fix stdlib definitions of half<->float conversion (#1326) These ended up being additional cases where we needed to use an explicit loop over components in the stdlib in order to produce valid GLSL output, but the existing declarations weren't doing it. I added a very minimal cross-compilation test just to confirm that we generate valid SPIR-V for code using `f16tof32()`. --- source/slang/hlsl.meta.slang | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'source') diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 73cda7761..e9da539bf 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -1158,19 +1158,25 @@ matrix exp2(matrix x) // Convert 16-bit float stored in low bits of integer __target_intrinsic(glsl, "unpackHalf2x16($0).x") +__glsl_version(420) float f16tof32(uint value); __generic -__target_intrinsic(glsl, "unpackHalf2x16($0).x") -vector f16tof32(vector value); +vector f16tof32(vector value) +{ + VECTOR_MAP_UNARY(float, N, f16tof32, value); +} // Convert to 16-bit float stored in low bits of integer __target_intrinsic(glsl, "packHalf2x16(vec2($0,0.0))") +__glsl_version(420) uint f32tof16(float value); __generic -__target_intrinsic(glsl, "packHalf2x16(vec2($0,0.0))") -vector f32tof16(vector value); +vector f32tof16(vector value) +{ + VECTOR_MAP_UNARY(uint, N, f32tof16, value); +} // Flip surface normal to face forward, if needed __generic -- cgit v1.2.3