MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / Compile

Method Compile

Source/Engine/ShadersCompilation/ShaderCompiler.cpp:32–91  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

30}
31
32bool ShaderCompiler::Compile(ShaderCompilationContext* context)
33{
34 // Clear cache
35 _globalMacros.Clear();
36 _macros.Clear();
37 _constantBuffers.Clear();
38 _globalMacros.EnsureCapacity(32);
39 _macros.EnsureCapacity(32);
40 _context = context;
41
42 // Prepare
43 auto output = context->Output;
44 auto meta = context->Meta;
45 const int32 shadersCount = meta->GetShadersCount();
46 if (OnCompileBegin())
47 return true;
48 _globalMacros.Add({ nullptr, nullptr });
49
50 // Setup constant buffers cache
51 _constantBuffers.EnsureCapacity(meta->CB.Count(), false);
52 for (int32 i = 0; i < meta->CB.Count(); i++)
53 _constantBuffers.Add({ meta->CB[i].Slot, false, 0 });
54
55 // [Output] Version number
56 output->WriteInt32(GPU_SHADER_CACHE_VERSION);
57
58 // [Output] Additional data start
59 const int32 additionalDataStartPos = output->GetPosition();
60 output->WriteInt32(-1);
61
62 // [Output] Amount of shaders
63 output->WriteInt32(shadersCount);
64
65 // Compile all shaders
66 if (CompileShaders())
67 return true;
68
69 // [Output] Constant Buffers
70 output->Write((byte)_constantBuffers.Count());
71 for (const ShaderResourceBuffer& cb : _constantBuffers)
72 {
73 output->Write((byte)cb.Slot);
74 output->Write((uint32)cb.Size);
75 }
76
77 // Additional Data Start
78 *(int32*)(output->GetHandle() + additionalDataStartPos) = output->GetPosition();
79
80 // [Output] Includes
81 output->WriteInt32(context->Includes.Count());
82 for (auto& include : context->Includes)
83 {
84 String compactPath = ShadersCompilation::CompactShaderPath(include.Item);
85 output->Write(compactPath, 11);
86 const auto date = FileSystem::GetFileLastEditTime(include.Item);
87 output->Write(date);
88 }
89

Callers 2

CompileShaderMethod · 0.45

Calls 9

GetShadersCountMethod · 0.80
ClearMethod · 0.45
EnsureCapacityMethod · 0.45
AddMethod · 0.45
CountMethod · 0.45
WriteInt32Method · 0.45
GetPositionMethod · 0.45
WriteMethod · 0.45
GetHandleMethod · 0.45

Tested by

no test coverage detected