2016-09-23 78 views
2

我將一個計算着色器從GLSL轉換爲金屬着色語言。我正在使用函數uintBitsToFloatfloatBitsToUint來存儲原子變量。他們在金屬中的等同物是什麼? GLSL中的示例用法:在金屬着色語言中,GLSL的uintBitsToFloat和floatBitsToUint等價於什麼?

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

回答

2

看起來您可以使用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

金屬着色語言增加了一個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);