Invalid traversable exception thrown with driver 455 but not 450

I have a program that was working fine in optix 7.1 with the 450 drivers. When I upgrade the drivers to 455 it just renders a black image (no crash, just looks like it doesn’t intersect anything).

So I modified the code slightly to upgrade to optix 7.2 and if I enable validation then I get the OPTIX_EXCEPTION_CODE_TRAVERSAL_INVALID_TRAVERSABLE thrown.

By inspecting the result of optixGetExceptionInvalidTraversable() I can see it’s my top-level instance array that’s causing the exception.

Is there any way to find out what exactly is causing the accel to be invalid? I’m not really sure what to do to debug it.

I’m on:
optix 7.1 or 7.2
cuda 11.1
drivers 455.23.04
ubuntu 18.04

p.s. - since when did this forum start checking the english in my titles? My original title was “What exactly causes OPTIX_EXCEPTION_CODE_TRAVERSAL_INVALID_TRAVERSABLE to be thrown?” which seems like a perfectly valid sentence to me…

I haven’t seen that error, yet. I would check if all settings for the traversable depth and the traversables are consistent, including these:

  • Means if you only have a single GAS, check if OptixPipelineCompileOptions traversableGraphFlags = OPTIX_TRAVERSABLE_GRAPH_FLAG_ALLOW_SINGLE_GAS.
  • If you only have two traversables from root to leaf (IAS->GAS) check if it’s OPTIX_TRAVERSABLE_GRAPH_FLAG_ALLOW_SINGLE_LEVEL_INSTANCING.
  • For all other cases, including any motion transform traversable, check if it’s OPTIX_TRAVERSABLE_GRAPH_FLAG_ALLOW_ANY.
  • When doing that, verify that the optixPipelineSetStackSize(…, maxTraversableGraphDepth) argument matches the traversal depth of the OptiX render graph for optimal stack size.
  • Traversable handle is not of the expected format (did not come from one of the OptiX API functions creating it).
  • Traversable created for Ampere GPU is used on Turing GPU, or other mismatches.

Thanks Detlef. It turned out to be I still had SINGLE_GAS set from the sample I started from but I was busy checking alignment and whether I’d corrupted the instance memory somehow.