Metal 着色语言中 GLSL 的 uintBitsToFloat 和 floatBitsToUint 相当于什么?

Sur*_*ine 5 opengl shader glsl metal

我正在将计算着色器从 GLSL 转换为 Metal 着色语言。我正在使用函数uintBitsToFloatfloatBitsToUint存储原子变量。他们在金属中的对应物是什么?GLSL 中的用法示例:

shared uint ldsZMin;
...
float depth = -imageLoad( depthTexture, ivec2( globalThreadIdx.x, globalThreadIdx.y ) ).x;
uint z = floatBitsToUint( depth );
atomicMin( ldsZMin, z );
Run Code Online (Sandbox Code Playgroud)

Rob*_*ani 5

看来你可以使用as_type<type-id>()演员阵容来实现这一点。

从这个链接的最底部:https://developer.apple.com/library/content/documentation/Metal/Reference/MetalShadingLanguageGuide/data-types/data-types.html#//apple_ref/doc/uid/TP40014364- CH2-SW1

Metal 着色语言添加了一个 as_type 运算符,以允许任何标量或向量数据类型(不是指针)被重新解释为相同大小的另一种标量或向量数据类型。操作数中的位不加修改直接返回为新类型。不执行函数参数的通常类型提升。

float f = 1.0f;
// Legal. Contains: 0x3f800000
uint u = as_type<uint>(f);

// Legal. Contains:
// (int4)(0x3f800000, 0x40000000,
//        0x40400000, 0x40800000)
float4 f = float4(1.0f, 2.0f, 3.0f, 4.0f);
int4 i = as_type<int4>(f);
Run Code Online (Sandbox Code Playgroud)