@@ -200,21 +200,13 @@ typedef uint32_t pnanovdb_grid_type_t;
200
200
#elif defined(PNANOVDB_BUF_HLSL )
201
201
#if defined(PNANOVDB_BUF_HLSL_RW )
202
202
#if defined(PNANOVDB_BUF_HLSL_64 )
203
- #if defined(PNANOVDB_ADDRESS_64 )
204
- #define pnanovdb_buf_t RWStructuredBuffer<uint64_t>
205
- #else
206
203
#define pnanovdb_buf_t RWStructuredBuffer<uint2>
207
- #endif
208
204
#else
209
205
#define pnanovdb_buf_t RWStructuredBuffer<uint>
210
206
#endif
211
207
#else
212
208
#if defined(PNANOVDB_BUF_HLSL_64 )
213
- #if defined(PNANOVDB_ADDRESS_64 )
214
- #define pnanovdb_buf_t StructuredBuffer<uint64_t>
215
- #else
216
209
#define pnanovdb_buf_t StructuredBuffer<uint2>
217
- #endif
218
210
#else
219
211
#define pnanovdb_buf_t StructuredBuffer<uint>
220
212
#endif
@@ -268,8 +260,8 @@ void pnanovdb_buf_write_uint64(pnanovdb_buf_t buf, uint byte_offset, uint2 value
268
260
uint pnanovdb_buf_read_uint32 (pnanovdb_buf_t buf , uint64_t byte_offset )
269
261
{
270
262
#if defined(PNANOVDB_BUF_HLSL_64 )
271
- uint64_t val64 = buf [uint (byte_offset >> 3u )];
272
- return ((uint (byte_offset ) & 4u ) == 0u ) ? uint ( val64 ) : uint ( val64 >> 32u ) ;
263
+ uint2 val = buf [uint (byte_offset >> 3u )];
264
+ return ((uint (byte_offset ) & 4u ) == 0u ) ? val . x : val . y ;
273
265
#else
274
266
return buf [uint (byte_offset >> 2u )];
275
267
#endif
@@ -278,10 +270,11 @@ uint64_t pnanovdb_buf_read_uint64(pnanovdb_buf_t buf, uint64_t byte_offset)
278
270
{
279
271
uint64_t ret ;
280
272
#if defined(PNANOVDB_BUF_HLSL_64 )
281
- ret = buf [uint (byte_offset >> 3u )];
273
+ uint2 raw = buf [uint (byte_offset >> 3u )];
274
+ ret = uint64_t (raw .x ) | (uint64_t (raw .y ) << 32u );
282
275
#else
283
276
ret = pnanovdb_buf_read_uint32 (buf , byte_offset + 0u );
284
- ret = ret + (uint64_t (pnanovdb_buf_read_uint32 (buf , byte_offset + 4u )) << 32u );
277
+ ret = ret | (uint64_t (pnanovdb_buf_read_uint32 (buf , byte_offset + 4u )) << 32u );
285
278
#endif
286
279
return ret ;
287
280
}
@@ -290,9 +283,8 @@ void pnanovdb_buf_write_uint32(pnanovdb_buf_t buf, uint64_t byte_offset, uint va
290
283
// NOP, by default no write in HLSL
291
284
#if defined(PNANOVDB_BUF_HLSL_RW )
292
285
#if defined(PNANOVDB_BUF_HLSL_64 )
293
- uint shift = (uint (byte_offset ) & 4u ) == 0u ? 0u : 32u ;
294
- InterlockedAnd (buf [uint (byte_offset >> 3u )], ~(0xFFFFFFFFllu << shift ));
295
- InterlockedOr (buf [uint (byte_offset >> 3u )], uint64_t (value ) << shift );
286
+ if ((byte_offset & 4u ) == 0u ) {buf [uint (byte_offset >> 3u )].x = value ;}
287
+ else {buf [uint (byte_offset >> 3u )].y = value ;}
296
288
#else
297
289
buf [uint (byte_offset >> 2u )] = value ;
298
290
#endif
@@ -303,7 +295,8 @@ void pnanovdb_buf_write_uint64(pnanovdb_buf_t buf, uint64_t byte_offset, uint64_
303
295
// NOP, by default no write in HLSL
304
296
#if defined(PNANOVDB_BUF_HLSL_RW )
305
297
#if defined(PNANOVDB_BUF_HLSL_64 )
306
- buf [uint (byte_offset >> 3u )] = value ;
298
+ uint2 raw = uint2 (uint (value ), uint (value >> 32u ));
299
+ buf [uint (byte_offset >> 3u )] = raw ;
307
300
#else
308
301
pnanovdb_buf_write_uint32 (buf , byte_offset + 0u , uint (value ));
309
302
pnanovdb_buf_write_uint32 (buf , byte_offset + 4u , uint (value >> 32u ));
0 commit comments