2016-09-23 10 views
2

Я преобразовываю вычислительный шейдер из GLSL в язык металлического затенения. Я использую функции uintBitsToFloat и floatBitsToUint для хранения атомных переменных. Каков их эквивалент в металле? Пример использования в GLSL:Каков эквивалент uintBitsToFloat и floatBitsToUint GLSL в языке затенения металла?

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); 

 Смежные вопросы

  • Нет связанных вопросов^_^