Fixing unsigned hexes

This commit is contained in:
Dynamitos
2024-11-26 20:40:34 +01:00
parent 5248b11432
commit a2c6aca6d7
3 changed files with 59 additions and 84 deletions
+38 -63
View File
@@ -61,51 +61,28 @@ static const uint32_t OCBT_depth_offset[18] = { 0, // Level 0
}; };
static const uint OCBT_bit_mask_high[18] = {
0x0, // Root 17
0x0, // Level 16
0x0, // level 15
0x0, // level 14
0x0, // level 13
0x0, // level 12
0x0, // level 11
0x0, // level 10 static const uint64_t OCBT_bit_mask[18] = {
0x0, // level 9 0xffffffffULL, // Root 17
0x0, // level 8 0xffffffffULL, // Level 16
0x0, // level 8 0xffffffffULL, // level 15
0xffffffffULL, // level 14
0xffffffffULL, // level 13
0xffffffffULL, // level 12
0xffffffffULL, // level 11
0xffffffff, // level 7 0xffffULL, // level 10
0x0, // Level 6 0xffffULL, // level 9
0x0, // level 5 0xffffULL, // level 8
0x0, // level 4 0xffULL, // level 8
0x0, // level 3
0x0, // level 2
0x0, // level 1
};
0xffffffffffffffffULL, // level 7
static const uint OCBT_bit_mask_low[18] = { 0xffffffffULL, // Level 6
0xffffffff, // Root 17 0xffffULL, // level 5
0xffffffff, // Level 16 0xffULL, // level 4
0xffffffff, // level 15 0xfULL, // level 3
0xffffffff, // level 14 0x3ULL, // level 2
0xffffffff, // level 13 0x1ULL, // level 1
0xffffffff, // level 12
0xffffffff, // level 11
0xffff, // level 10
0xffff, // level 9
0xffff, // level 8
0xff, // level 8
0xffffffff, // level 7
0xffffffff, // Level 6
0xffff, // level 5
0xff, // level 4
0xf, // level 3
0x3, // level 2
0x1, // level 1
}; };
static const uint32_t OCBT_bit_count[18] = { 32, // Root 17 static const uint32_t OCBT_bit_count[18] = { 32, // Root 17
@@ -198,15 +175,13 @@ uint get_heap_element(uint id, inout HeapDebug debug)
{ {
uint32_t slot = first_bit / 32; uint32_t slot = first_bit / 32;
uint32_t local_id = first_bit % 32; uint32_t local_id = first_bit % 32;
return (pParams.cbtBuffer[slot] >> local_id) & OCBT_bit_mask_low[depth]; return (pParams.cbtBuffer[slot] >> local_id) & uint32_t(OCBT_bit_mask[depth]);
} }
else else
{ {
uint32_t slot = first_bit / 64; uint32_t slot = first_bit / 64;
uint32_t local_id = first_bit % 64; uint32_t local_id = first_bit % 64;
uint64_t mask = OCBT_bit_mask_high[depth]; uint64_t target_bits = (pParams.bitFieldBuffer[slot] >> local_id) & OCBT_bit_mask[depth];
mask = (mask << 32) | OCBT_bit_mask_low[depth];
uint64_t target_bits = (pParams.bitFieldBuffer[slot] >> local_id) & mask;
debug.target_bits = target_bits; debug.target_bits = target_bits;
return countbits(uint(target_bits >> 32)) + countbits(uint(target_bits)); return countbits(uint(target_bits >> 32)) + countbits(uint(target_bits));
} }
@@ -226,8 +201,8 @@ void set_heap_element(uint id, uint value)
uint local_id = first_bit % 32; uint local_id = first_bit % 32;
// Extract the relevant bits // Extract the relevant bits
gs_cbtTree[slot] &= ~(uint32_t(OCBT_bit_mask_low[depth]) << local_id); gs_cbtTree[slot] &= ~(uint32_t(OCBT_bit_mask[depth]) << local_id);
gs_cbtTree[slot] |= ((uint32_t(OCBT_bit_mask_low[depth]) & value) << local_id); gs_cbtTree[slot] |= ((uint32_t(OCBT_bit_mask[depth]) & value) << local_id);
} }
// Should not be called if depth > TREE_LAST_LEVEL // Should not be called if depth > TREE_LAST_LEVEL
@@ -244,8 +219,8 @@ void set_heap_element_atomic(uint id, uint value)
uint local_id = first_bit % 32; uint local_id = first_bit % 32;
// Extract the relevant bits // Extract the relevant bits
InterlockedAnd(gs_cbtTree[slot], ~(uint32_t(OCBT_bit_mask_low[depth]) << local_id)); InterlockedAnd(gs_cbtTree[slot], ~(uint32_t(OCBT_bit_mask[depth]) << local_id));
InterlockedOr(gs_cbtTree[slot], ((uint32_t(OCBT_bit_mask_low[depth]) & value) << local_id)); InterlockedOr(gs_cbtTree[slot], ((uint32_t(OCBT_bit_mask[depth]) & value) << local_id));
} }
// Function that returns the number of active bits // Function that returns the number of active bits
@@ -291,19 +266,19 @@ uint decode_bit_complement(uint handle, inout DebugStruct debug)
handle = handle - t; handle = handle - t;
c /= 2u; c /= 2u;
} }
return (bitID ^ OCBT_NUM_ELEMENTS); uint result = (bitID ^ OCBT_NUM_ELEMENTS);
//handle = temp; handle = temp;
//for(uint i = 0; i < OCBT_NUM_ELEMENTS; ++i) for(uint i = 0; i < OCBT_NUM_ELEMENTS; ++i)
//{ {
// if(get_bit(i) == 0) if(get_bit(i) == 0)
// { {
// if(handle == 0) if(handle == 0)
// { {
// return i; return i;
// } }
// handle--; handle--;
// } }
//} }
} }
void reduce(uint groupIndex) void reduce(uint groupIndex)
+2 -2
View File
@@ -9,7 +9,7 @@ layout(std430, binding = 0) buffer StructuredBuffer_uint64_t_0 {
} pParams_bitFieldBuffer_0; } pParams_bitFieldBuffer_0;
#line 8 #line 8
const uint OCBT_bit_mask_0[18] = { 4294967295U, 4294967295U, 4294967295U, 4294967295U, 4294967295U, 4294967295U, 4294967295U, 65535U, 65535U, 65535U, 255U, 4294967295U, 4294967295U, 65535U, 255U, 15U, 3U, 1U }; const uint64_t OCBT_bit_mask_0[18] = { 4294967295UL, 4294967295UL, 4294967295UL, 4294967295UL, 4294967295UL, 4294967295UL, 4294967295UL, 65535UL, 65535UL, 65535UL, 255UL, 18446744073709551615UL, 4294967295UL, 65535UL, 255UL, 15UL, 3UL, 1UL };
#line 33 #line 33
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -19,7 +19,7 @@ void main()
#line 33 #line 33
uint _S1 = gl_GlobalInvocationID.x; uint _S1 = gl_GlobalInvocationID.x;
pParams_bitFieldBuffer_0._data[uint(_S1)] = uint64_t(OCBT_bit_mask_0[_S1]); pParams_bitFieldBuffer_0._data[uint(_S1)] = OCBT_bit_mask_0[_S1];
return; return;
} }
+19 -19
View File
@@ -5,27 +5,27 @@ struct ComputeParams
}; };
ParameterBlock<ComputeParams> pParams; ParameterBlock<ComputeParams> pParams;
static const uint32_t OCBT_bit_mask[18] = { static const uint64_t OCBT_bit_mask[18] = {
0xffffffff, // Root 17 0xffffffffULL, // Root 17
0xffffffff, // Level 16 0xffffffffULL, // Level 16
0xffffffff, // level 15 0xffffffffULL, // level 15
0xffffffff, // level 14 0xffffffffULL, // level 14
0xffffffff, // level 13 0xffffffffULL, // level 13
0xffffffff, // level 12 0xffffffffULL, // level 12
0xffffffff, // level 11 0xffffffffULL, // level 11
0xffff, // level 10 0xffffULL, // level 10
0xffff, // level 9 0xffffULL, // level 9
0xffff, // level 8 0xffffULL, // level 8
0xff, // level 8 0xffULL, // level 8
0xffffffff, // level 7 0xffffffffffffffffULL, // level 7
0xffffffff, // Level 6 0xffffffffULL, // Level 6
0xffff, // level 5 0xffffULL, // level 5
0xff, // level 4 0xffULL, // level 4
0xf, // level 3 0xfULL, // level 3
0x3, // level 2 0x3ULL, // level 2
0x1, // level 1 0x1ULL, // level 1
}; };
[numthreads(1, 1, 1)] [numthreads(1, 1, 1)]