Skip to content

Commit a4359d4

Browse files
committed
various fixes to handle the float/double-binaryBVH/wideBVH matrix
1 parent 3c106d0 commit a4359d4

2 files changed

Lines changed: 60 additions & 48 deletions

File tree

cuBQL/traversal/rayQueries.h

Lines changed: 57 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -23,25 +23,25 @@ namespace cuBQL {
2323
_terminate_ a traveral, but ordering child nodes is not required
2424
because ordering shouldn't matter */
2525
namespace fixedRayQuery {
26-
template<typename Lambda, typename T, int D>
26+
template<typename Lambda, typename T>
2727
inline __cubql_both
2828
void forEachLeaf(const Lambda &lambdaToExecuteForEachCandidate,
29-
cuBQL::bvh_t<T, D> bvh,
30-
cuBQL::ray3f ray,
29+
cuBQL::bvh_t<T, 3> bvh,
30+
cuBQL::ray_t<T> ray,
3131
bool dbg=false);
3232

33-
template<typename Lambda, typename T, int D, int W>
33+
template<typename Lambda, typename T, int W>
3434
inline __cubql_both
3535
void forEachLeaf(const Lambda &lambdaToExecuteForEachCandidate,
36-
cuBQL::WideBVH<T, D, W> bvh,
37-
cuBQL::ray3f ray,
36+
cuBQL::WideBVH<T, 3, W> bvh,
37+
cuBQL::ray_t<T> ray,
3838
bool dbg=false);
3939

40-
template<typename Lambda, typename bvh_t>
40+
template<typename Lambda, typename T>
4141
inline __cubql_both
4242
void forEachPrim(const Lambda &lambdaToExecuteForEachCandidate,
43-
bvh_t bvh,
44-
cuBQL::ray3f ray,
43+
bvh_t<T,3> bvh,
44+
cuBQL::ray_t<T> ray,
4545
bool dbg=false);
4646

4747
/*! traverse BVH with given fixed-length, axis-aligned ray, and
@@ -86,31 +86,40 @@ namespace cuBQL {
8686
/*! single level BVH ray traversal, provided lambda covers what
8787
happens when a ray wants to intersect a given prim within that
8888
bvh */
89-
template<typename Lambda, typename T, int D, typename ray_t>
89+
template<typename Lambda, typename T>
9090
inline __cubql_both
9191
float forEachLeaf(const Lambda &lambdaToCallOnEachLeaf,
92-
bvh_t<T, D> bvh,
93-
ray_t ray,
92+
bvh_t<T, 3> bvh,
93+
ray_t<T> ray,
9494
bool dbg=false);
9595

9696
/*! single level BVH ray traversal, provided lambda covers what
9797
happens when a ray wants to intersect a given prim within that
9898
bvh */
99-
template<typename Lambda, typename T, int D, int W, typename ray_t>
99+
template<typename Lambda, typename T, int W>
100100
inline __cubql_both
101101
float forEachLeaf(const Lambda &lambdaToCallOnEachLeaf,
102-
WideBVH<T, D, W> bvh,
103-
ray_t ray,
102+
WideBVH<T, 3, W> bvh,
103+
ray_t<T> ray,
104104
bool dbg=false);
105105

106106
/*! single level BVH ray traversal, provided lambda covers what
107107
happens when a ray wants to intersect a given prim within that
108108
bvh */
109-
template<typename Lambda, typename bvh_t, typename ray_t>
109+
template<typename Lambda, typename T>
110110
inline __cubql_both
111111
void forEachPrim(const Lambda &lambdaToExecuteForEachCandidate,
112-
bvh_t bvh,
113-
ray_t &ray,
112+
BinaryBVH<T,3> bvh,
113+
ray_t<T> &ray,
114+
bool dbg=false);
115+
/*! single level BVH ray traversal, provided lambda covers what
116+
happens when a ray wants to intersect a given prim within that
117+
bvh */
118+
template<typename Lambda, typename T, int W>
119+
inline __cubql_both
120+
void forEachPrim(const Lambda &lambdaToExecuteForEachCandidate,
121+
WideBVH<T,3,W> bvh,
122+
ray_t<T> &ray,
114123
bool dbg=false);
115124

116125
namespace twoLevel {
@@ -272,14 +281,15 @@ namespace cuBQL {
272281
forEachLeaf(leafCode,bvh,ray,dbg);
273282
}
274283

275-
template<typename Lambda, typename T, int D>
284+
template<typename Lambda, typename T>
276285
inline __cubql_both
277286
void fixedRayQuery::forEachLeaf(const Lambda &lambdaToCallOnEachLeaf,
278-
cuBQL::bvh_t<T,D> bvh,
287+
cuBQL::BinaryBVH<T,3> bvh,
279288
cuBQL::ray_t<T> ray,
280289
bool dbg)
281290
{
282-
using node_admin_t = typename bvh_t<T,D>::node_t::Admin;
291+
using node_t = typename BinaryBVH<T,3>::node_t;
292+
using node_admin_t = typename node_t::Admin;
283293
enum { stackDepth = 64 };
284294
struct StackEntry {
285295
uint32_t idx;
@@ -304,10 +314,10 @@ namespace cuBQL {
304314

305315
uint32_t n0Idx = (uint32_t)node.offset+0;
306316
uint32_t n1Idx = (uint32_t)node.offset+1;
307-
bvh3f::node_t n0 = bvh.nodes[n0Idx];
308-
bvh3f::node_t n1 = bvh.nodes[n1Idx];
309-
bool o0 = rayIntersectsBox(ray,n0.bounds,dbg);
310-
bool o1 = rayIntersectsBox(ray,n1.bounds,dbg);
317+
node_t n0 = bvh.nodes[n0Idx];
318+
node_t n1 = bvh.nodes[n1Idx];
319+
bool o0 = rayIntersectsBox(ray,n0.bounds);
320+
bool o1 = rayIntersectsBox(ray,n1.bounds);
311321
if (o0) {
312322
if (o1) {
313323
*stackPtr++ = n1.admin;
@@ -367,14 +377,14 @@ namespace cuBQL {
367377
}
368378
}
369379

370-
template<typename Lambda, typename T, int D, int W>
380+
template<typename Lambda, typename T, int W>
371381
inline __cubql_both
372382
void fixedRayQuery::forEachLeaf(const Lambda& lambdaToCallOnEachLeaf,
373-
cuBQL::WideBVH<T, D, W> bvh,
374-
cuBQL::ray3f ray,
383+
cuBQL::WideBVH<T, 3, W> bvh,
384+
cuBQL::ray_t<T> ray,
375385
bool dbg)
376386
{
377-
using node_t = typename WideBVH<T, D, W>::node_t;
387+
using node_t = typename WideBVH<T, 3, W>::node_t;
378388

379389
int traversalStack[64], * stackPtr = traversalStack;
380390
int nodeID = 0;
@@ -454,11 +464,11 @@ namespace cuBQL {
454464

455465
/*! this query assumes lambads that return CUBQL_CONTINUE_TRAVERSAL
456466
or CUBQL_TERMINATE_TRAVERSAL */
457-
template<typename Lambda, typename bvh_t>
467+
template<typename Lambda, typename T>
458468
inline __cubql_both
459469
void fixedRayQuery::forEachPrim(const Lambda &lambdaToExecuteForEachCandidate,
460-
bvh_t bvh,
461-
cuBQL::ray3f ray,
470+
bvh_t<T,3> bvh,
471+
cuBQL::ray_t<T> ray,
462472
bool dbg)
463473
{
464474
/* the code we want to have executed for each leaf that may
@@ -479,15 +489,15 @@ namespace cuBQL {
479489
forEachLeaf(leafCode,bvh,ray,dbg);
480490
}
481491

482-
template<typename Lambda, typename T, int D, typename ray_t>
492+
template<typename Lambda, typename T>
483493
inline __cubql_both
484494
float shrinkingRayQuery::forEachLeaf(const Lambda &lambdaToCallOnEachLeaf,
485-
bvh_t<T, D> bvh,
486-
ray_t ray,
495+
BinaryBVH<T, 3> bvh,
496+
ray_t<T> ray,
487497
bool dbg)
488498
{
489499
using scalar_t = T;
490-
using node_t = typename bvh_t<T, D>::node_t;
500+
using node_t = typename BinaryBVH<T, 3>::node_t;
491501
using node_admin_t = typename node_t::Admin;
492502
struct StackEntry {
493503
uint32_t idx;
@@ -578,14 +588,14 @@ namespace cuBQL {
578588
}
579589
}
580590

581-
template<typename Lambda, typename T, int D, int W, typename ray_t>
591+
template<typename Lambda, typename T, int W>
582592
inline __cubql_both
583593
float shrinkingRayQuery::forEachLeaf(const Lambda& lambdaToCallOnEachLeaf,
584-
WideBVH<T, D, W> bvh,
585-
ray_t ray,
594+
WideBVH<T, 3, W> bvh,
595+
ray_t<T> ray,
586596
bool dbg)
587597
{
588-
using node_t = typename WideBVH<T, D, W>::node_t;
598+
using node_t = typename WideBVH<T, 3, W>::node_t;
589599

590600
int traversalStack[64], * stackPtr = traversalStack;
591601
int nodeID = 0;
@@ -662,11 +672,11 @@ namespace cuBQL {
662672
return T(CUBQL_INF);
663673
}
664674

665-
template<typename Lambda, typename bvh_t, typename ray_t>
675+
template<typename Lambda, typename T>
666676
inline __cubql_both
667677
void shrinkingRayQuery::forEachPrim(const Lambda &lambdaToExecuteForEachCandidate,
668-
bvh_t bvh,
669-
ray_t &ray,
678+
bvh_t<T,3> bvh,
679+
ray_t<T> &ray,
670680
bool dbg)
671681
{
672682
auto perLeaf = [dbg,bvh,&ray,lambdaToExecuteForEachCandidate]
@@ -695,24 +705,24 @@ namespace cuBQL {
695705
template<typename EnterBlasLambda,
696706
typename LeaveBlasLambda,
697707
typename ProcessLeafLambda,
698-
typename bvh_t, typename ray_t>
708+
typename T>
699709
inline __cubql_both
700710
void shrinkingRayQuery::twoLevel::
701711
forEachLeaf(const EnterBlasLambda &enterBlas,
702712
const LeaveBlasLambda &leaveBlas,
703713
const ProcessLeafLambda &processLeaf,
704-
bvh_t bvh,
714+
BinaryBVH<T,3> bvh,
705715
/*! REFERENCE to a ray, so 'enterBlas()' can modify it */
706-
ray_t &ray,
716+
ray_t<T> &ray,
707717
bool _dbg)
708718
{
709719
#ifdef NDEBUG
710720
const bool dbg = false;
711721
#else
712722
bool dbg = _dbg;
713723
#endif
724+
using bvh_t = BinaryBVH<T,3>;
714725
using node_t = typename bvh_t::node_t;
715-
using T = typename bvh_t::scalar_t;
716726
using scalar_t = typename bvh_t::scalar_t;
717727
using vec3_t = typename cuBQL::vec_t<scalar_t,3>;
718728
struct StackEntry {

samples/3rdParty/stb_image/stb/stb_image.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5162,7 +5162,9 @@ static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp)
51625162
if (z->depth == 16) {
51635163
for (k = 0; k < s->img_n; ++k) tc16[k] = (stbi__uint16)stbi__get16be(s); // copy the values as-is
51645164
} else {
5165-
for (k = 0; k < s->img_n; ++k) tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger
5165+
for (k = 0; k < s->img_n; ++k)
5166+
if (k < 3)
5167+
tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger
51665168
}
51675169
}
51685170
break;

0 commit comments

Comments
 (0)