Pipeline Link error, how to debug?

Hey folks. I’ve fiddled around with modifying OptiX examples in various places in the past, but I’m creating my first from-scratch OptiX 7-based renderer.

Going off of the various SDK examples, I’ve pieced together something that tries to do the following:

createContext();
buildAccelStructures();
createModules();
createProgramGroups();
createPipeline();
createShaderBindingTable();

I aggresively check for errors on every OptiX call, and there appear to be no problems leading up to createPipeline, where optixPipelineCreate fails with error 7251 (Pipeline Link Error). I am printing logs associated with all applicable calls as well, and don’t see any actionable feedback.

Here is the sum total of all the logs I get:

[4][ KNOBS]: All knobs on default.

[ 4][ DISK CACHE]: Opened database: “/var/tmp/OptixCache_bbudge/cache7.db”
[ 4][ DISK CACHE]: Cache data size: “865.3 KiB”
[ 4][ DISKCACHE]: Cache hit for key: ptx-3276-keycb2650c8fac8c52f6f29923d9b42165c-sm_75-rtc1-drv450.57
[ 4][ DISKCACHE]: Cache hit for key: ptx-97173-key36914a701f564668683c332351ea2f74-sm_75-rtc1-drv450.57
[ 2][COMPILE FEEDBACK]: COMPILE ERROR: failed to create pipeline
Info: Pipeline has 2 module(s), 4 entry function(s), 2 trace call(s), 0 continuation callable call(s), 0 direct callable call(s), 136 basic block(s) in entry functions, 2577 instruction(s) in entry functions, 14 non-entry function(s), 84 basic block(s) in non-entry functions, 1268 instruction(s) in non-entry functions

F1215 12:02:50.397285 172993024 OptiXRenderer.cpp:222] Check failed: resultCode == OPTIX_SUCCESS (7251 vs. 0) Pipeline link error
*** Check failure stack trace: ***
@ 0x50af38
@ 0x50e8af
@ 0x4d5e5b
@ 0x4d3f5a
@ 0x4d0fe3
@ 0x4d0e85
@ 0x7fe40be041a3
@ 0x4d0d9e
@ (nil)

What would be a good strategy for narrowing down the bug?

In case it is relevant, this is on Fedora Linux 31, with 450.57 drivers

Hi @brian.budge!

Link errors got significantly improved in OptiX 7.2, which requires a 455 driver (and the even newer 460 drivers were released today). In addition, OptiX 7.2 got a new “validation mode” that will do some extra checking for common errors, so I recommend upgrading to the most recent OptiX version and the most recent driver. If you still don’t get proper link error messages after that, sending me a reproducer will be the best way forward and I can report back to you what the error is as well as open a ticket to fix OptiX so the error gets properly reported. I suspect (hope) that upgrading will resolve your errors immediately.

In case you need to plan your upgrade schedule, do be aware that OptiX 7.2 had a small incompatible API change, so depending on which features you use, you might get some compile errors that have to be fixed as soon as you upgrade OptiX. The API removed some cases of needing to provide your own bounding boxes for instancing and motion blur. Now the bounding boxes are computed automatically.

The most common link errors are undefined symbols and/or duplicate symbols, so if you can’t upgrade immediately, you could look around for those.


David.

1 Like

Thanks David. Upgrading did help me find my problem: I’m attempting to use glm and it seems that one of the extension functions isn’t getting inlined, and so it is trying to make a call to a function instead, which isn’t available at link time. I will have to go see if I can massage glm to work in this case :)

1 Like