Letâs clear up the terminology again. That template is the declaration of the SbtRecord struct.
The SBT holds multiple SbtRecords and they can be different SbtRecord types per record group inside the OptixShaderBindingTable structure:
https://raytracing-docs.nvidia.com/optix7/api/html/struct_optix_shader_binding_table.html
For example, I use two different SbtRecord structures because only the hit group records contain additional data.
All my other SBT record groups only need the 32 bytes shader header in my examples. Means they are not using optixGetSbtDataPointer().
https://github.com/NVIDIA/OptiX_Apps/blob/master/apps/rtigo3/inc/Device.h#L191
Your code excerpts should have also the actual SbtRecord declaration using that template or none of that will work.
typedef SbtRecord<RadianceData> SbtRecordRadianceData;
You normally donât need SBT record data on the raygeneration program, because there can only be one and then that data can also be stored inside the launch parameters since those can change often (camera, output buffer, resolution, sample per pixels, sub-frame index, etc.)
Would there be an issue with using an SBT in this manner?
No, that is exactly how youâre supposed to use the SBT record data.
I know that this could be done with a launch parameter structure passed but I would like to know if this can be better accomplished with SBT.
Please forget the different launch parameter structures idea. There can be only one constant launch parameter block per optixLaunch(). But that can of course contain pointers to buffers of whatever data you need at what frequency. You only need to be able index into these buffers somehow with the instanceId, shader hit record data, primitiveIndex, or whatever fits your application needs.
I would normally not hardcode the offsets to material parameters data into shader code because I would want to be able to exchange materials on instances. That was just one simple example. The other methods I described are more flexible if that is required.
The SBT can get even more complicated than that because you can have multiple SBT records per GAS as well, for different build inputs.
Please read the chapter about the SBT as long as you need to understand its different options.
https://raytracing-docs.nvidia.com/optix7/guide/index.html#shader_binding_table#shader-binding-table
If you need to port from OptiX 6.5.0 to OptiX 7.x you should have read and understood both OptiX Programming Guides.