"ANGLE Front-end": glCompileShader (VS)
"ANGLE Front-end"->"Vulkan Back-end": ShaderVk::compile
"Vulkan Back-end"->"ANGLE Translator": sh::Compile
"ANGLE Translator"-->"ANGLE Front-end": return SPIR-V
Note right of "ANGLE Front-end": SPIR-V is using bogus\ndecorations to be\ncorrected at link time.
Note right of App: Same for FS, GS, etc...
App->"ANGLE Front-end": glCreateProgram (...)
App->"ANGLE Front-end": glAttachShader (...)
App->"ANGLE Front-end": glLinkProgram
"ANGLE Front-end"->"Vulkan Back-end": ProgramVk::link
Note right of "Vulkan Back-end": ProgramVk inits uniforms,\nlayouts, and descriptors.
"Vulkan Back-end"->"Link-Time SPIR-V Transformer": SpvGetShaderSpirvCode
"Link-Time SPIR-V Transformer"-->"Vulkan Back-end": retrieve SPIR-V and determine decorations
"Vulkan Back-end"-->"ANGLE Front-end": return success
Note right of App: App execution continues...
App->"ANGLE Front-end": glDrawArrays (any draw)
"ANGLE Front-end"->"Vulkan Back-end": ContextVk::drawArrays
"Vulkan Back-end"->"Link-Time SPIR-V Transformer": SpvTransformSpirvCode
"Link-Time SPIR-V Transformer"-->"Vulkan Back-end": return transformed SPIR-V
Note right of "Vulkan Back-end": We init VkShaderModules\nand VkPipeline then\nrecord the draw.
"Vulkan Back-end"-->"ANGLE Front-end": return success
]]>AppAppANGLE Front-endANGLE Front-endVulkan Back-endVulkan Back-endANGLE TranslatorANGLE TranslatorLink-Time SPIR-V TransformerLink-Time SPIR-V TransformerglCompileShader (VS)ShaderVk::compilesh::Compilereturn SPIR-VSPIR-V is using bogusdecorations to becorrected at link time.Same for FS, GS, etc...glCreateProgram (...)glAttachShader (...)glLinkProgramProgramVk::linkProgramVk inits uniforms,layouts, and descriptors.SpvGetShaderSpirvCoderetrieve SPIR-V and determine decorationsreturn successApp execution continues...glDrawArrays (any draw)ContextVk::drawArraysSpvTransformSpirvCodereturn transformed SPIR-VWe init VkShaderModulesand VkPipeline thenrecord the draw.return success