participant App participant "ANGLE Front-end" participant "Vulkan Back-end" participant "ANGLE Translator" participant "Link-Time SPIR-V Transformer" App->"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