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
0x0, // level 9
0x0, // level 8
0x0, // level 8
static const uint64_t OCBT_bit_mask[18] = {
0xffffffffULL, // Root 17
0xffffffffULL, // Level 16
0xffffffffULL, // level 15
0xffffffffULL, // level 14
0xffffffffULL, // level 13
0xffffffffULL, // level 12
0xffffffffULL, // level 11
0xffffffff, // level 7
0x0, // Level 6
0x0, // level 5
0x0, // level 4
0x0, // level 3
0x0, // level 2
0x0, // level 1
};
0xffffULL, // level 10
0xffffULL, // level 9
0xffffULL, // level 8
0xffULL, // level 8
static const uint OCBT_bit_mask_low[18] = {
0xffffffff, // Root 17
0xffffffff, // Level 16
0xffffffff, // level 15
0xffffffff, // level 14
0xffffffff, // level 13
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
0xffffffffffffffffULL, // level 7
0xffffffffULL, // Level 6
0xffffULL, // level 5
0xffULL, // level 4
0xfULL, // level 3
0x3ULL, // level 2
0x1ULL, // level 1
};
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 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
{
uint32_t slot = first_bit / 64;
uint32_t local_id = first_bit % 64;
uint64_t mask = OCBT_bit_mask_high[depth];
mask = (mask << 32) | OCBT_bit_mask_low[depth];
uint64_t target_bits = (pParams.bitFieldBuffer[slot] >> local_id) & mask;
uint64_t target_bits = (pParams.bitFieldBuffer[slot] >> local_id) & OCBT_bit_mask[depth];
debug.target_bits = 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;
// Extract the relevant bits
gs_cbtTree[slot] &= ~(uint32_t(OCBT_bit_mask_low[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]) << local_id);
gs_cbtTree[slot] |= ((uint32_t(OCBT_bit_mask[depth]) & value) << local_id);
}
// 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;
// Extract the relevant bits
InterlockedAnd(gs_cbtTree[slot], ~(uint32_t(OCBT_bit_mask_low[depth]) << local_id));
InterlockedOr(gs_cbtTree[slot], ((uint32_t(OCBT_bit_mask_low[depth]) & value) << local_id));
InterlockedAnd(gs_cbtTree[slot], ~(uint32_t(OCBT_bit_mask[depth]) << local_id));
InterlockedOr(gs_cbtTree[slot], ((uint32_t(OCBT_bit_mask[depth]) & value) << local_id));
}
// Function that returns the number of active bits
@@ -291,19 +266,19 @@ uint decode_bit_complement(uint handle, inout DebugStruct debug)
handle = handle - t;
c /= 2u;
}
return (bitID ^ OCBT_NUM_ELEMENTS);
//handle = temp;
//for(uint i = 0; i < OCBT_NUM_ELEMENTS; ++i)
//{
// if(get_bit(i) == 0)
// {
// if(handle == 0)
// {
// return i;
// }
// handle--;
// }
//}
uint result = (bitID ^ OCBT_NUM_ELEMENTS);
handle = temp;
for(uint i = 0; i < OCBT_NUM_ELEMENTS; ++i)
{
if(get_bit(i) == 0)
{
if(handle == 0)
{
return i;
}
handle--;
}
}
}
void reduce(uint groupIndex)
+2 -2
View File
@@ -9,7 +9,7 @@ layout(std430, binding = 0) buffer StructuredBuffer_uint64_t_0 {
} pParams_bitFieldBuffer_0;
#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
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -19,7 +19,7 @@ void main()
#line 33
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;
}
+19 -19
View File
@@ -5,27 +5,27 @@ struct ComputeParams
};
ParameterBlock<ComputeParams> pParams;
static const uint32_t OCBT_bit_mask[18] = {
0xffffffff, // Root 17
0xffffffff, // Level 16
0xffffffff, // level 15
0xffffffff, // level 14
0xffffffff, // level 13
0xffffffff, // level 12
0xffffffff, // level 11
static const uint64_t OCBT_bit_mask[18] = {
0xffffffffULL, // Root 17
0xffffffffULL, // Level 16
0xffffffffULL, // level 15
0xffffffffULL, // level 14
0xffffffffULL, // level 13
0xffffffffULL, // level 12
0xffffffffULL, // level 11
0xffff, // level 10
0xffff, // level 9
0xffff, // level 8
0xff, // level 8
0xffffULL, // level 10
0xffffULL, // level 9
0xffffULL, // level 8
0xffULL, // level 8
0xffffffff, // level 7
0xffffffff, // Level 6
0xffff, // level 5
0xff, // level 4
0xf, // level 3
0x3, // level 2
0x1, // level 1
0xffffffffffffffffULL, // level 7
0xffffffffULL, // Level 6
0xffffULL, // level 5
0xffULL, // level 4
0xfULL, // level 3
0x3ULL, // level 2
0x1ULL, // level 1
};
[numthreads(1, 1, 1)]