-------------------------------------------------------------------------------------- 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 --------------------------------------------------------------------------------------
| 114 | // 0 always |
| 115 | // -------------------------------------------------------------------------------------- |
| 116 | bool 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 |
nothing calls this directly
no test coverage detected