MCPcopy Create free account
hub / github.com/carbonengine/trinity / CompileShader

Function CompileShader

shadercompiler/ShaderCompiler.cpp:116–191  ·  view source on GitHub ↗

-------------------------------------------------------------------------------------- Description: Worker thread for compiling shader permutations. Fetches next permutation from input queue, compiles it and puts result into g_compiledEffects. Arguments: param - unused Return value: 0 always --------------------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

114// 0 always
115// --------------------------------------------------------------------------------------
116bool CompileShader( const CompileShaderArguments& arguments, IWorkQueue* workQueue )
117{
118 if( g_error.load( std::memory_order_relaxed ) )
119 {
120 return false;
121 }
122
123 Platform platform = GetPlatform( arguments.defines );
124
125 {
126 std::lock_guard scope( g_compiledEffectsCS );
127 if( g_compiledEffects.find( arguments.permutation ) != g_compiledEffects.end() )
128 {
129 return true;
130 }
131 }
132
133 std::unique_ptr<CompiledData> compiledData( new CompiledData );
134
135
136 //EffectData outputData;
137
138 EffectCompilerBase* compiler = nullptr;
139 {
140 std::lock_guard lockCompilers( g_compilersMutex );
141
142 auto found = g_compilers.find( platform );
143 if( found == end( g_compilers ) )
144 {
145 std::unique_ptr<EffectCompilerBase> newCompiler;
146 switch( platform )
147 {
148#if _WIN32
149 case PLATFORM_DX11:
150 newCompiler.reset( new EffectCompilerDX11() );
151 break;
152 case PLATFORM_DX12:
153 newCompiler.reset( new EffectCompilerDX12() );
154 break;
155#endif
156 case PLATFORM_METAL:
157 newCompiler.reset( new EffectCompilerMetal() );
158 break;
159 default:
160 g_messages.AddMessage( "\\memory(0): error X0000: unsupported platform %i", int( platform ) );
161 g_error = 1;
162 return false;
163 }
164 if( !newCompiler->Create() )
165 {
166 g_messages.AddMessage( "\\memory(0): error X0000: failed to create %s compiler", GetPlatformLongName( platform ) );
167 g_error = 1;
168 return false;
169 }
170 compiler = newCompiler.get();
171 g_compilers[platform] = std::move( newCompiler );
172 }
173 else

Callers

nothing calls this directly

Calls 9

GetPlatformFunction · 0.85
GetPlatformLongNameFunction · 0.85
resetMethod · 0.80
AddMessageMethod · 0.80
getMethod · 0.80
endFunction · 0.50
endMethod · 0.45
CreateMethod · 0.45
CompileEffectMethod · 0.45

Tested by

no test coverage detected