Browse Source

HLSL : Implemented UnpackSnorm4x8 and UnpackUnorm4x8

TothBenoit 7 months ago
parent
commit
4f39b77c69
1 changed files with 18 additions and 0 deletions
  1. 18 0
      hxsl/HlslOut.hx

+ 18 - 0
hxsl/HlslOut.hx

@@ -354,6 +354,24 @@ class HlslOut {
 			decl("float2 _uintBitsToFloat( int2 v ) { return asfloat(asuint(v)); }");
 			decl("float3 _uintBitsToFloat( int3 v ) { return asfloat(asuint(v)); }");
 			decl("float4 _uintBitsToFloat( int4 v ) { return asfloat(asuint(v)); }");
+		case UnpackSnorm4x8:
+			decl("float4 unpackSnorm4x8( int v ) {
+				float4 unpack;
+				unpack.x = clamp(((asuint(v) & asuint(0xff000000)) >> 24) / 127.0, -1.0, 1.0);
+				unpack.y = clamp(((asuint(v) & asuint(0x00ff0000)) >> 16) / 127.0, -1.0, 1.0);
+				unpack.z = clamp(((asuint(v) & asuint(0x0000ff00)) >> 8) / 127.0, -1.0, 1.0);
+				unpack.w = clamp(((asuint(v) & asuint(0x000000ff)) >> 0) / 127.0, -1.0, 1.0);
+				return unpack;
+			 }");
+		case UnpackUnorm4x8:
+			decl("float4 unpackUnorm4x8( int v ) {
+				float4 unpack;
+				unpack.x = ((asuint(v) & asuint(0xff000000)) >> 24) / 255.0;
+				unpack.y = ((asuint(v) & asuint(0x00ff0000)) >> 16) / 255.0;
+				unpack.z = ((asuint(v) & asuint(0x0000ff00)) >> 8) / 255.0;
+				unpack.w = ((asuint(v) & asuint(0x000000ff)) >> 0) / 255.0;
+				return unpack;
+			 }");
 		case AtomicAdd:
 			decl("int atomicAdd( RWStructuredBuffer<int> buf, int index, int data ) { int val; InterlockedAdd(buf[index], data, val); return val; }");
 		case TextureSize: