#version 450 #extension GL_EXT_shader_explicit_arithmetic_types_int64 : require #extension GL_KHR_memory_scope_semantics : require layout(row_major) uniform; layout(row_major) buffer; #line 178 0 layout(std430, binding = 2) buffer StructuredBuffer_uint_t_0 { uint _data[]; } pParams_classificationBuffer_0; #line 178 layout(std430, binding = 9) buffer StructuredBuffer_uint_t_1 { uint _data[]; } pParams_cbtBuffer_0; #line 63 layout(std430, binding = 10) buffer StructuredBuffer_uint64_t_0 { uint64_t _data[]; } pParams_bitFieldBuffer_0; #line 119 const uint64_t OCBT_bit_mask_0[18] = { 18446744073709551615UL, 18446744073709551615UL, 18446744073709551615UL, 18446744073709551615UL, 18446744073709551615UL, 18446744073709551615UL, 18446744073709551615UL, 65535UL, 65535UL, 65535UL, 255UL, 18446744073709551615UL, 18446744073709551615UL, 65535UL, 255UL, 15UL, 3UL, 1UL }; #line 141 const uint OCBT_bit_count_0[18] = { 32U, 32U, 32U, 32U, 32U, 32U, 32U, 16U, 16U, 16U, 8U, 64U, 32U, 16U, 8U, 4U, 2U, 1U }; #line 97 const uint OCBT_depth_offset_0[18] = { 0U, 32U, 96U, 224U, 480U, 992U, 2016U, 4064U, 6112U, 10208U, 18400U, 0U, 0U, 0U, 0U, 0U, 0U, 0U }; #line 163 shared uint gs_cbtTree_0[831]; #line 171 void load_buffer_to_shared_memory_0(uint groupIndex_0) { #line 171 uint e_0 = 0U; for(;;) { #line 174 if(int(e_0) < 13) { } else { #line 174 break; } uint target_element_0 = uint(13 * int(groupIndex_0) + int(e_0)); if(int(target_element_0) < 831) { #line 178 gs_cbtTree_0[target_element_0] = pParams_cbtBuffer_0._data[uint(target_element_0)]; #line 177 } #line 174 e_0 = e_0 + 1U; #line 174 } #line 180 controlBarrier(gl_ScopeWorkgroup, gl_ScopeWorkgroup, gl_StorageSemanticsShared, gl_SemanticsAcquireRelease); return; } #line 183 uint get_heap_element_0(uint id_0) { uint real_heap_id_0 = id_0 - 1U; uint depth_0 = uint(log2(float(real_heap_id_0 + 1U))); uint first_bit_0 = OCBT_depth_offset_0[depth_0] + OCBT_bit_count_0[depth_0] * (real_heap_id_0 - ((1U << depth_0) - 1U)); if(depth_0 < 11U) { return gs_cbtTree_0[first_bit_0 / 32U] >> first_bit_0 % 32U & uint(OCBT_bit_mask_0[depth_0]); } else { uint64_t target_bits_0 = pParams_bitFieldBuffer_0._data[uint(first_bit_0 / 64U)] >> first_bit_0 % 64U & OCBT_bit_mask_0[depth_0]; return bitCount(uint(target_bits_0 >> 32)) + bitCount(uint(target_bits_0)); } #line 205 } uint decode_bit_0(uint handle_0) { #line 210 uint b_0; #line 210 uint heapElementID_0 = 1U; #line 210 uint currentDepth_0 = 0U; #line 210 uint bitCount_0 = handle_0; #line 227 for(;;) { #line 227 if(currentDepth_0 < 11U) { } else { #line 227 break; } uint heapValue_0 = get_heap_element_0(2U * heapElementID_0); if(bitCount_0 < heapValue_0) { #line 233 b_0 = 0U; #line 233 } else { #line 233 b_0 = 1U; #line 233 } uint _S1 = 2U * heapElementID_0 + b_0; uint _S2 = bitCount_0 - heapValue_0 * b_0; #line 227 uint currentDepth_1 = currentDepth_0 + 1U; #line 227 heapElementID_0 = _S1; #line 227 currentDepth_0 = currentDepth_1; #line 227 bitCount_0 = _S2; #line 227 } #line 243 uint _S3 = currentDepth_0 + 1U; uint64_t _S4 = pParams_bitFieldBuffer_0._data[uint(int(heapElementID_0) - 2048)]; #line 210 uint _S5 = bitCount_0; #line 210 uint64_t mask_0 = 18446744073709551615UL; #line 210 currentDepth_0 = _S3; #line 210 bitCount_0 = 32U; #line 210 uint _S6 = _S5; #line 249 for(;;) { #line 249 if(currentDepth_0 < uint(log2(1.31072e+05)) + 1U) { } else { #line 249 break; } #line 257 uint64_t target_bits_1 = _S4 >> bitCount_0 * (2U * heapElementID_0 - 1U - ((1U << currentDepth_0) - 1U)) % 64U & mask_0; uint heapValue_1 = bitCount(uint(target_bits_1 >> 32)) + bitCount(uint(target_bits_1)); if(_S6 < heapValue_1) { #line 261 b_0 = 0U; #line 261 } else { #line 261 b_0 = 1U; #line 261 } uint _S7 = 2U * heapElementID_0 + b_0; uint _S8 = _S6 - heapValue_1 * b_0; uint bitCount_1 = bitCount_0 / 2U; uint64_t _S9 = mask_0 >> bitCount_1; #line 249 uint currentDepth_2 = currentDepth_0 + 1U; #line 249 heapElementID_0 = _S7; #line 249 mask_0 = _S9; #line 249 currentDepth_0 = currentDepth_2; #line 249 bitCount_0 = bitCount_1; #line 249 _S6 = _S8; #line 249 } #line 273 return heapElementID_0 ^ 131072U; } uint decode_bit_complement_0(uint handle_1) { #line 278 uint b_1; #line 278 uint heapElementID_1 = 1U; #line 278 uint currentDepth_3 = 0U; #line 278 uint c_0 = 65536U; #line 278 uint bitCount_2 = handle_1; #line 299 for(;;) { #line 299 if(currentDepth_3 < 11U) { } else { #line 299 break; } uint heapValue_2 = c_0 - get_heap_element_0(2U * heapElementID_1); if(bitCount_2 < heapValue_2) { #line 302 b_1 = 0U; #line 302 } else { #line 302 b_1 = 1U; #line 302 } uint _S10 = 2U * heapElementID_1 + b_1; uint _S11 = bitCount_2 - heapValue_2 * b_1; uint c_1 = c_0 / 2U; #line 299 uint currentDepth_4 = currentDepth_3 + 1U; #line 299 heapElementID_1 = _S10; #line 299 currentDepth_3 = currentDepth_4; #line 299 c_0 = c_1; #line 299 bitCount_2 = _S11; #line 299 } #line 310 uint _S12 = currentDepth_3 + 1U; uint64_t _S13 = pParams_bitFieldBuffer_0._data[uint(int(heapElementID_1) - 2048)]; #line 278 uint _S14 = bitCount_2; #line 278 uint64_t mask_1 = 18446744073709551615UL; #line 278 currentDepth_3 = _S12; #line 278 bitCount_2 = 32U; #line 278 uint _S15 = _S14; #line 316 for(;;) { #line 316 if(currentDepth_3 < uint(log2(1.31072e+05)) + 1U) { } else { #line 316 break; } #line 324 uint64_t target_bits_2 = _S13 >> bitCount_2 * (2U * heapElementID_1 - 1U - ((1U << currentDepth_3) - 1U)) % 64U & mask_1; uint heapValue_3 = c_0 - bitCount(uint(target_bits_2 >> 32)) + bitCount(uint(target_bits_2)); if(_S15 < heapValue_3) { #line 327 b_1 = 0U; #line 327 } else { #line 327 b_1 = 1U; #line 327 } uint _S16 = 2U * heapElementID_1 + b_1; uint _S17 = _S15 - heapValue_3 * b_1; uint c_2 = c_0 / 2U; uint bitCount_3 = bitCount_2 / 2U; uint64_t _S18 = mask_1 >> bitCount_3; #line 316 uint currentDepth_5 = currentDepth_3 + 1U; #line 316 heapElementID_1 = _S16; #line 316 mask_1 = _S18; #line 316 currentDepth_3 = currentDepth_5; #line 316 bitCount_2 = bitCount_3; #line 316 c_0 = c_2; #line 316 _S15 = _S17; #line 316 } #line 338 return heapElementID_1 ^ 131072U; } layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in; void main() { #line 343 uint _S19 = gl_GlobalInvocationID.x; load_buffer_to_shared_memory_0(gl_LocalInvocationIndex); pParams_classificationBuffer_0._data[uint(_S19)] = decode_bit_0(_S19); pParams_classificationBuffer_0._data[uint(_S19 * 2U)] = decode_bit_complement_0(_S19); return; }