1.3.64
 
Loading...
Searching...
No Matches
SubpatchUUIDCalculator Class Reference

Subpatch UUID calculator for tiled/subdivided geometry. More...

#include <BufferIndexing.h>

Public Member Functions

 SubpatchUUIDCalculator (uint base_UUID, helios::int2 subdivisions)
 Construct subpatch UUID calculator.
 
HELIOS_HOST_DEVICE uint getUUID (int col, int row) const
 Get UUID for subpatch at (col, row) position.
 
HELIOS_HOST_DEVICE int getSubpatchCount () const
 Get total number of subpatches.
 
helios::int2 getSubdivisions () const
 Get subdivisions (useful for loop bounds)
 

Detailed Description

Subpatch UUID calculator for tiled/subdivided geometry.

Encapsulates the subdivision offset calculation pattern. Prevents wrong dimension order (i vs j, x vs y, row vs col).

This helper makes it impossible to:

  • Get subdivision offset formula wrong
  • Swap row/column indices
  • Use wrong dimension (NX vs NY)

Usage in CUDA ray generation:

uint base_UUID = primitiveID[objID];
SubpatchUUIDCalculator calc(base_UUID, object_subdivisions[objID]);
// Clear semantic names prevent index swapping
for (int row = 0; row < calc.getSubdivisions().y; row++) {
for (int col = 0; col < calc.getSubdivisions().x; col++) {
uint subpatch_UUID = calc.getUUID(col, row);
// ... launch ray for this subpatch
}
}

Historical bugs prevented (commit 53ca9687d):

  • Swapped indices: UUID = base + ii * NY + jj (should be jj * NX + ii)
  • Wrong subdivision counts from parent inheritance

Definition at line 457 of file BufferIndexing.h.

Constructor & Destructor Documentation

◆ SubpatchUUIDCalculator()

SubpatchUUIDCalculator::SubpatchUUIDCalculator ( uint  base_UUID,
helios::int2  subdivisions 
)
inline

Construct subpatch UUID calculator.

Parameters
base_UUIDUUID of first subpatch (at position 0,0)
subdivisionsSubdivision counts in x and y directions

Definition at line 476 of file BufferIndexing.h.

Member Function Documentation

◆ getSubdivisions()

helios::int2 SubpatchUUIDCalculator::getSubdivisions ( ) const
inline

Get subdivisions (useful for loop bounds)

Returns
Subdivision counts as int2

Definition at line 510 of file BufferIndexing.h.

◆ getSubpatchCount()

HELIOS_HOST_DEVICE int SubpatchUUIDCalculator::getSubpatchCount ( ) const
inline

Get total number of subpatches.

Returns
subdivisions.x * subdivisions.y

Definition at line 497 of file BufferIndexing.h.

◆ getUUID()

HELIOS_HOST_DEVICE uint SubpatchUUIDCalculator::getUUID ( int  col,
int  row 
) const
inline

Get UUID for subpatch at (col, row) position.

Parameters
colColumn index (x-direction, 0 to subdivisions.x-1)
rowRow index (y-direction, 0 to subdivisions.y-1)
Returns
UUID = base_UUID + row * subdivisions.x + col

Parameter names make dimension order explicit - can't accidentally swap.

Definition at line 489 of file BufferIndexing.h.


The documentation for this class was generated from the following file: