|
@@ -354,6 +354,24 @@ class HlslOut {
|
|
decl("float2 _uintBitsToFloat( int2 v ) { return asfloat(asuint(v)); }");
|
|
decl("float2 _uintBitsToFloat( int2 v ) { return asfloat(asuint(v)); }");
|
|
decl("float3 _uintBitsToFloat( int3 v ) { return asfloat(asuint(v)); }");
|
|
decl("float3 _uintBitsToFloat( int3 v ) { return asfloat(asuint(v)); }");
|
|
decl("float4 _uintBitsToFloat( int4 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:
|
|
case AtomicAdd:
|
|
decl("int atomicAdd( RWStructuredBuffer<int> buf, int index, int data ) { int val; InterlockedAdd(buf[index], data, val); return val; }");
|
|
decl("int atomicAdd( RWStructuredBuffer<int> buf, int index, int data ) { int val; InterlockedAdd(buf[index], data, val); return val; }");
|
|
case TextureSize:
|
|
case TextureSize:
|