| 147 | } |
| 148 | |
| 149 | bool ShaderCompiler::CompileShaders() |
| 150 | { |
| 151 | auto meta = _context->Meta; |
| 152 | #if BUILD_DEBUG |
| 153 | #define PROFILE_COMPILE_SHADER(s) ZoneTransientN(___tracy_scoped_zone, s.Name.Get(), true); |
| 154 | #else |
| 155 | #define PROFILE_COMPILE_SHADER(s) |
| 156 | #endif |
| 157 | |
| 158 | // Generate vertex shaders cache |
| 159 | for (int32 i = 0; i < meta->VS.Count(); i++) |
| 160 | { |
| 161 | auto& shader = meta->VS[i]; |
| 162 | ASSERT(shader.GetStage() == ShaderStage::Vertex && (shader.Flags & ShaderFlags::Hidden) == (ShaderFlags)0); |
| 163 | PROFILE_COMPILE_SHADER(shader); |
| 164 | if (CompileShader(shader, &WriteCustomDataVS)) |
| 165 | { |
| 166 | LOG(Error, "Failed to compile \'{0}\'", String(shader.Name)); |
| 167 | return true; |
| 168 | } |
| 169 | } |
| 170 | |
| 171 | // Generate hull shaders cache |
| 172 | for (int32 i = 0; i < meta->HS.Count(); i++) |
| 173 | { |
| 174 | auto& shader = meta->HS[i]; |
| 175 | ASSERT(shader.GetStage() == ShaderStage::Hull && (shader.Flags & ShaderFlags::Hidden) == (ShaderFlags)0); |
| 176 | PROFILE_COMPILE_SHADER(shader); |
| 177 | if (CompileShader(shader, &WriteCustomDataHS)) |
| 178 | { |
| 179 | LOG(Error, "Failed to compile \'{0}\'", String(shader.Name)); |
| 180 | return true; |
| 181 | } |
| 182 | } |
| 183 | |
| 184 | // Generate domain shaders cache |
| 185 | for (int32 i = 0; i < meta->DS.Count(); i++) |
| 186 | { |
| 187 | auto& shader = meta->DS[i]; |
| 188 | ASSERT(shader.GetStage() == ShaderStage::Domain && (shader.Flags & ShaderFlags::Hidden) == (ShaderFlags)0); |
| 189 | PROFILE_COMPILE_SHADER(shader); |
| 190 | if (CompileShader(shader)) |
| 191 | { |
| 192 | LOG(Error, "Failed to compile \'{0}\'", String(shader.Name)); |
| 193 | return true; |
| 194 | } |
| 195 | } |
| 196 | |
| 197 | // Generate geometry shaders cache |
| 198 | for (int32 i = 0; i < meta->GS.Count(); i++) |
| 199 | { |
| 200 | auto& shader = meta->GS[i]; |
| 201 | ASSERT(shader.GetStage() == ShaderStage::Geometry && (shader.Flags & ShaderFlags::Hidden) == (ShaderFlags)0); |
| 202 | PROFILE_COMPILE_SHADER(shader); |
| 203 | if (CompileShader(shader)) |
| 204 | { |
| 205 | LOG(Error, "Failed to compile \'{0}\'", String(shader.Name)); |
| 206 | return true; |