File indexing completed on 2026-04-09 07:49:42
0001 #pragma once
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include "sstr.h"
0011
0012 struct SOPTIX_OPT
0013 {
0014 static constexpr const bool VERBOSE = false ;
0015
0016 static OptixCompileDebugLevel DebugLevel(const char* option);
0017 static const char * DebugLevel_( OptixCompileDebugLevel debugLevel );
0018 #if OPTIX_VERSION == 70000
0019 static constexpr const char* OPTIX_COMPILE_DEBUG_LEVEL_NONE_ = "OPTIX_COMPILE_DEBUG_LEVEL_NONE" ;
0020 static constexpr const char* OPTIX_COMPILE_DEBUG_LEVEL_LINEINFO_ = "OPTIX_COMPILE_DEBUG_LEVEL_LINEINFO" ;
0021 static constexpr const char* OPTIX_COMPILE_DEBUG_LEVEL_FULL_ = "OPTIX_COMPILE_DEBUG_LEVEL_FULL" ;
0022 #elif OPTIX_VERSION >= 70500
0023 static constexpr const char* OPTIX_COMPILE_DEBUG_LEVEL_DEFAULT_ = "OPTIX_COMPILE_DEBUG_LEVEL_DEFAULT" ;
0024 static constexpr const char* OPTIX_COMPILE_DEBUG_LEVEL_NONE_ = "OPTIX_COMPILE_DEBUG_LEVEL_NONE" ;
0025 static constexpr const char* OPTIX_COMPILE_DEBUG_LEVEL_MINIMAL_ = "OPTIX_COMPILE_DEBUG_LEVEL_MINIMAL" ;
0026 static constexpr const char* OPTIX_COMPILE_DEBUG_LEVEL_MODERATE_ = "OPTIX_COMPILE_DEBUG_LEVEL_MODERATE" ;
0027 static constexpr const char* OPTIX_COMPILE_DEBUG_LEVEL_FULL_ = "OPTIX_COMPILE_DEBUG_LEVEL_FULL" ;
0028 #endif
0029
0030
0031
0032
0033 static OptixCompileOptimizationLevel OptimizationLevel(const char* option) ;
0034 static const char* OptimizationLevel_( OptixCompileOptimizationLevel optLevel );
0035 static constexpr const char* OPTIX_COMPILE_OPTIMIZATION_DEFAULT_ = "OPTIX_COMPILE_OPTIMIZATION_DEFAULT" ;
0036 static constexpr const char* OPTIX_COMPILE_OPTIMIZATION_LEVEL_0_ = "OPTIX_COMPILE_OPTIMIZATION_LEVEL_0" ;
0037 static constexpr const char* OPTIX_COMPILE_OPTIMIZATION_LEVEL_1_ = "OPTIX_COMPILE_OPTIMIZATION_LEVEL_1" ;
0038 static constexpr const char* OPTIX_COMPILE_OPTIMIZATION_LEVEL_2_ = "OPTIX_COMPILE_OPTIMIZATION_LEVEL_2" ;
0039 static constexpr const char* OPTIX_COMPILE_OPTIMIZATION_LEVEL_3_ = "OPTIX_COMPILE_OPTIMIZATION_LEVEL_3" ;
0040
0041
0042
0043
0044 static OptixExceptionFlags ExceptionFlags_(const char* opt) ;
0045 static const char* ExceptionFlags__(OptixExceptionFlags excFlag) ;
0046 static unsigned ExceptionFlags(const char* options);
0047 static std::string Desc_ExceptionFlags( unsigned flags );
0048 static constexpr const char* OPTIX_EXCEPTION_FLAG_NONE_ = "OPTIX_EXCEPTION_FLAG_NONE" ;
0049 static constexpr const char* OPTIX_EXCEPTION_FLAG_STACK_OVERFLOW_ = "OPTIX_EXCEPTION_FLAG_STACK_OVERFLOW" ;
0050 static constexpr const char* OPTIX_EXCEPTION_FLAG_TRACE_DEPTH_ = "OPTIX_EXCEPTION_FLAG_TRACE_DEPTH" ;
0051 static constexpr const char* OPTIX_EXCEPTION_FLAG_USER_ = "OPTIX_EXCEPTION_FLAG_USER_" ;
0052
0053 #if OPTIX_VERSION <= 70700
0054 static constexpr const char* OPTIX_EXCEPTION_FLAG_DEBUG_ = "OPTIX_EXCEPTION_FLAG_DEBUG" ;
0055 #endif
0056
0057 };
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082 inline OptixCompileDebugLevel SOPTIX_OPT::DebugLevel(const char* option)
0083 {
0084 OptixCompileDebugLevel level = OPTIX_COMPILE_DEBUG_LEVEL_NONE ;
0085 #if OPTIX_VERSION == 70000
0086 if( strcmp(option, "NONE") == 0 ) level = OPTIX_COMPILE_DEBUG_LEVEL_NONE ;
0087 else if(strcmp(option, "LINEINFO") == 0 ) level = OPTIX_COMPILE_DEBUG_LEVEL_LINEINFO ;
0088 else if(strcmp(option, "FULL") == 0 ) level = OPTIX_COMPILE_DEBUG_LEVEL_FULL ;
0089 else if(strcmp(option, "DEFAULT") == 0 ) level = OPTIX_COMPILE_DEBUG_LEVEL_NONE ;
0090 #elif OPTIX_VERSION >= 70500
0091 if( strcmp(option, "DEFAULT") == 0 ) level = OPTIX_COMPILE_DEBUG_LEVEL_DEFAULT ;
0092 else if(strcmp(option, "NONE") == 0 ) level = OPTIX_COMPILE_DEBUG_LEVEL_NONE ;
0093 else if(strcmp(option, "MINIMAL") == 0 ) level = OPTIX_COMPILE_DEBUG_LEVEL_MINIMAL ;
0094 else if(strcmp(option, "MODERATE") == 0 ) level = OPTIX_COMPILE_DEBUG_LEVEL_MODERATE ;
0095 else if(strcmp(option, "FULL") == 0 ) level = OPTIX_COMPILE_DEBUG_LEVEL_FULL ;
0096 #else
0097 std::cerr
0098 << " NOT RECOGNIZED " << " option " << option << " level " << level
0099 << " OPTIX_VERSION " << OPTIX_VERSION
0100 << std::endl
0101 ;
0102 assert(0);
0103 #endif
0104 if(VERBOSE) std::cout
0105 << "SOPTIX_OPT::DebugLevel"
0106 << " option " << option
0107 << " level " << level
0108 << " OPTIX_VERSION " << OPTIX_VERSION
0109 << std::endl
0110 ;
0111 return level ;
0112 }
0113
0114 inline const char * SOPTIX_OPT::DebugLevel_( OptixCompileDebugLevel debugLevel )
0115 {
0116 const char* s = nullptr ;
0117 switch(debugLevel)
0118 {
0119 #if OPTIX_VERSION == 70000
0120 case OPTIX_COMPILE_DEBUG_LEVEL_NONE: s = OPTIX_COMPILE_DEBUG_LEVEL_NONE_ ; break ;
0121 case OPTIX_COMPILE_DEBUG_LEVEL_LINEINFO: s = OPTIX_COMPILE_DEBUG_LEVEL_LINEINFO_ ; break ;
0122 case OPTIX_COMPILE_DEBUG_LEVEL_FULL: s = OPTIX_COMPILE_DEBUG_LEVEL_FULL_ ; break ;
0123 #elif OPTIX_VERSION >= 70500
0124 case OPTIX_COMPILE_DEBUG_LEVEL_DEFAULT: s = OPTIX_COMPILE_DEBUG_LEVEL_DEFAULT_ ; break ;
0125 case OPTIX_COMPILE_DEBUG_LEVEL_NONE: s = OPTIX_COMPILE_DEBUG_LEVEL_NONE_ ; break ;
0126 case OPTIX_COMPILE_DEBUG_LEVEL_MINIMAL: s = OPTIX_COMPILE_DEBUG_LEVEL_MINIMAL_ ; break ;
0127 case OPTIX_COMPILE_DEBUG_LEVEL_MODERATE: s = OPTIX_COMPILE_DEBUG_LEVEL_MODERATE_ ; break ;
0128 case OPTIX_COMPILE_DEBUG_LEVEL_FULL: s = OPTIX_COMPILE_DEBUG_LEVEL_FULL_ ; break ;
0129 #endif
0130 }
0131
0132 if( s == nullptr ) std::cerr
0133 << "SOPTIX_OPT::DebugLevel_"
0134 << " debugLevel " << debugLevel
0135 << " IS NOT RECOGNIZED "
0136 << " OPTIX_VERSION " << OPTIX_VERSION
0137 << std::endl
0138 ;
0139 return s ;
0140 }
0141
0142 inline OptixCompileOptimizationLevel SOPTIX_OPT::OptimizationLevel(const char* option)
0143 {
0144 OptixCompileOptimizationLevel level = OPTIX_COMPILE_OPTIMIZATION_DEFAULT ;
0145 if( strcmp(option, "LEVEL_0") == 0 ) level = OPTIX_COMPILE_OPTIMIZATION_LEVEL_0 ;
0146 else if( strcmp(option, "LEVEL_1") == 0 ) level = OPTIX_COMPILE_OPTIMIZATION_LEVEL_1 ;
0147 else if( strcmp(option, "LEVEL_2") == 0 ) level = OPTIX_COMPILE_OPTIMIZATION_LEVEL_2 ;
0148 else if( strcmp(option, "LEVEL_3") == 0 ) level = OPTIX_COMPILE_OPTIMIZATION_LEVEL_3 ;
0149 else if( strcmp(option, "DEFAULT") == 0 ) level = OPTIX_COMPILE_OPTIMIZATION_DEFAULT ;
0150 else
0151 {
0152 std::cerr
0153 << "SOPTIX_OPT::OptimizationLevel "
0154 << " option " << option
0155 << " IS NOT RECOGNIZED "
0156 << " level " << level
0157 << " OPTIX_VERSION " << OPTIX_VERSION
0158 << std::endl
0159 ;
0160 assert(0) ;
0161 }
0162
0163 if(VERBOSE) std::cout
0164 << "SOPTIX_OPT::OptimizationLevel "
0165 << " option " << option
0166 << " level " << level
0167 << std::endl
0168 ;
0169 return level ;
0170 }
0171
0172 inline const char* SOPTIX_OPT::OptimizationLevel_( OptixCompileOptimizationLevel optLevel )
0173 {
0174 const char* s = nullptr ;
0175 switch(optLevel)
0176 {
0177 case OPTIX_COMPILE_OPTIMIZATION_LEVEL_0: s = OPTIX_COMPILE_OPTIMIZATION_LEVEL_0_ ; break ;
0178 case OPTIX_COMPILE_OPTIMIZATION_LEVEL_1: s = OPTIX_COMPILE_OPTIMIZATION_LEVEL_1_ ; break ;
0179 case OPTIX_COMPILE_OPTIMIZATION_LEVEL_2: s = OPTIX_COMPILE_OPTIMIZATION_LEVEL_2_ ; break ;
0180 case OPTIX_COMPILE_OPTIMIZATION_LEVEL_3: s = OPTIX_COMPILE_OPTIMIZATION_LEVEL_3_ ; break ;
0181 case OPTIX_COMPILE_OPTIMIZATION_DEFAULT: s = OPTIX_COMPILE_OPTIMIZATION_DEFAULT_ ; break ;
0182 default: ; break ;
0183 }
0184
0185 if( s == nullptr )
0186 {
0187 std::cerr
0188 << "SOPTIX_OPT::OptimizationLevel_"
0189 << " optLevel " << optLevel
0190 << " IS NOT RECOGNIZED "
0191 << " OPTIX_VERSION " << OPTIX_VERSION
0192 << std::endl
0193 ;
0194 assert(0) ;
0195 }
0196 return s ;
0197 }
0198
0199 inline OptixExceptionFlags SOPTIX_OPT::ExceptionFlags_(const char* opt)
0200 {
0201 OptixExceptionFlags flag = OPTIX_EXCEPTION_FLAG_NONE ;
0202 if( strcmp(opt, "NONE") == 0 ) flag = OPTIX_EXCEPTION_FLAG_NONE ;
0203 else if( strcmp(opt, "STACK_OVERFLOW") == 0) flag = OPTIX_EXCEPTION_FLAG_STACK_OVERFLOW ;
0204 else if( strcmp(opt, "TRACE_DEPTH") == 0) flag = OPTIX_EXCEPTION_FLAG_TRACE_DEPTH ;
0205 else if( strcmp(opt, "USER") == 0) flag = OPTIX_EXCEPTION_FLAG_USER ;
0206 #if OPTIX_VERSION <= 70700
0207 else if( strcmp(opt, "DEBUG") == 0) flag = OPTIX_EXCEPTION_FLAG_DEBUG ;
0208 #endif
0209 else
0210 {
0211 std::cerr
0212 << "SOPTIX_OPT::ExceptionFlags_"
0213 << " opt " << opt
0214 << " IS NOT RECOGNIZED "
0215 << " flag " << flag
0216 << " OPTIX_VERSION " << OPTIX_VERSION
0217 << std::endl
0218 ;
0219 assert(0) ;
0220 }
0221 return flag ;
0222 }
0223
0224 inline const char* SOPTIX_OPT::ExceptionFlags__(OptixExceptionFlags excFlag)
0225 {
0226 const char* s = nullptr ;
0227 switch(excFlag)
0228 {
0229 case OPTIX_EXCEPTION_FLAG_NONE: s = OPTIX_EXCEPTION_FLAG_NONE_ ; break ;
0230 case OPTIX_EXCEPTION_FLAG_STACK_OVERFLOW: s = OPTIX_EXCEPTION_FLAG_STACK_OVERFLOW_ ; break ;
0231 case OPTIX_EXCEPTION_FLAG_TRACE_DEPTH: s = OPTIX_EXCEPTION_FLAG_TRACE_DEPTH_ ; break ;
0232 case OPTIX_EXCEPTION_FLAG_USER: s = OPTIX_EXCEPTION_FLAG_USER_ ; break ;
0233 #if OPTIX_VERSION <= 70700
0234 case OPTIX_EXCEPTION_FLAG_DEBUG: s = OPTIX_EXCEPTION_FLAG_DEBUG_ ; break ;
0235 #endif
0236 }
0237 return s ;
0238 }
0239
0240 inline unsigned SOPTIX_OPT::ExceptionFlags(const char* options)
0241 {
0242 std::vector<std::string> opts ;
0243 sstr::Split( options, '|', opts );
0244
0245 unsigned exceptionFlags = OPTIX_EXCEPTION_FLAG_NONE ;
0246 for(unsigned i=0 ; i < opts.size() ; i++)
0247 {
0248 const std::string& opt = opts[i] ;
0249 exceptionFlags |= ExceptionFlags_(opt.c_str());
0250 }
0251 if(VERBOSE) std::cerr
0252 << "SOPTIX_OPT::ExceptionFlags"
0253 << " options " << options
0254 << " exceptionFlags " << exceptionFlags
0255 << std::endl
0256 ;
0257 return exceptionFlags ;
0258 }
0259
0260 inline std::string SOPTIX_OPT::Desc_ExceptionFlags( unsigned flags )
0261 {
0262 std::stringstream ss ;
0263 if( flags & OPTIX_EXCEPTION_FLAG_NONE ) ss << OPTIX_EXCEPTION_FLAG_NONE_ << " " ;
0264 if( flags & OPTIX_EXCEPTION_FLAG_STACK_OVERFLOW ) ss << OPTIX_EXCEPTION_FLAG_STACK_OVERFLOW_ << " " ;
0265 if( flags & OPTIX_EXCEPTION_FLAG_TRACE_DEPTH ) ss << OPTIX_EXCEPTION_FLAG_TRACE_DEPTH_ << " " ;
0266 if( flags & OPTIX_EXCEPTION_FLAG_USER ) ss << OPTIX_EXCEPTION_FLAG_USER_ << " " ;
0267 #if OPTIX_VERSION <= 70700
0268 if( flags & OPTIX_EXCEPTION_FLAG_DEBUG ) ss << OPTIX_EXCEPTION_FLAG_DEBUG_ << " " ;
0269 #endif
0270 std::string str = ss.str() ;
0271 return str ;
0272 }
0273
0274