1<?xml version="1.0" encoding="utf-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"><svg xmlns="http://www.w3.org/2000/svg" width="1370" height="1152" xmlns:xlink="http://www.w3.org/1999/xlink"><source><![CDATA[participant App 2participant "ANGLE Front-end" 3participant "Vulkan Back-end" 4participant "ANGLE Translator" 5participant "GlslangWrapperVk" 6participant "Glslang" 7 8App->"ANGLE Front-end": glCompileShader (VS) 9"ANGLE Front-end"->"Vulkan Back-end": ShaderVk::compile 10"Vulkan Back-end"->"ANGLE Translator": sh::Compile 11"ANGLE Translator"-->"ANGLE Front-end": return Vulkan-compatible GLSL 12 13Note right of "ANGLE Front-end": Source is using bogus\nVulkan qualifiers to be\ncorrected at link time. 14 15Note right of App: Same for FS, GS, etc... 16 17App->"ANGLE Front-end": glCreateProgram (...) 18App->"ANGLE Front-end": glAttachShader (...) 19App->"ANGLE Front-end": glLinkProgram 20"ANGLE Front-end"->"Vulkan Back-end": ProgramVk::link 21 22Note right of "Vulkan Back-end": ProgramVk inits uniforms,\nlayouts, and descriptors. 23 24"Vulkan Back-end"->GlslangWrapperVk: GlslangWrapperVk::GetShaderSpirvCode 25GlslangWrapperVk->Glslang: GlslangToSpv 26Glslang-->GlslangWrapperVk: Return SPIR-V 27 28Note right of GlslangWrapperVk: Transform SPIR-V 29 30GlslangWrapperVk-->"Vulkan Back-end": return transformed SPIR-V 31"Vulkan Back-end"-->"ANGLE Front-end": return success 32 33Note right of App: App execution continues... 34 35App->"ANGLE Front-end": glDrawArrays (any draw) 36"ANGLE Front-end"->"Vulkan Back-end": ContextVk::drawArrays 37 38Note right of "Vulkan Back-end": We init VkShaderModules\nand VkPipeline then\nrecord the draw. 39 40"Vulkan Back-end"-->"ANGLE Front-end": return success 41]]></source><desc></desc><defs><marker viewBox="0 0 5 5" markerWidth="5" markerHeight="5" orient="auto" refX="5" refY="2.5" id="markerArrowBlock"><path d="M 0 0 L 5 2.5 L 0 5 z"></path></marker><marker viewBox="0 0 9.6 16" markerWidth="4" markerHeight="16" orient="auto" refX="9.6" refY="8" id="markerArrowOpen"><path d="M 9.6,8 1.92,16 0,13.7 5.76,8 0,2.286 1.92,0 9.6,8 z"></path></marker></defs><g class="title"></g><g class="actor"><rect x="10" y="20" width="48.90625" height="39" stroke="#000000" fill="#ffffff" style="stroke-width: 2; --darkreader-inline-fill:#eae7e1; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></rect><text x="20" y="45" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="20">App</tspan></text></g><g class="actor"><rect x="10" y="1093.015625" width="48.90625" height="39" stroke="#000000" fill="#ffffff" style="stroke-width: 2; --darkreader-inline-fill:#eae7e1; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></rect><text x="20" y="1118.015625" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="20">App</tspan></text></g><line x1="34.453125" x2="34.453125" y1="59" y2="1093.015625" stroke="#000000" fill="none" style="stroke-width: 2; --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line><g class="actor"><rect x="252.65625" y="20" width="164.5" height="39" stroke="#000000" fill="#ffffff" style="stroke-width: 2; --darkreader-inline-fill:#eae7e1; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></rect><text x="262.65625" y="45" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="262.65625">ANGLE Front-end</tspan></text></g><g class="actor"><rect x="252.65625" y="1093.015625" width="164.5" height="39" stroke="#000000" fill="#ffffff" style="stroke-width: 2; --darkreader-inline-fill:#eae7e1; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></rect><text x="262.65625" y="1118.015625" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="262.65625">ANGLE Front-end</tspan></text></g><line x1="334.90625" x2="334.90625" y1="59" y2="1093.015625" stroke="#000000" fill="none" style="stroke-width: 2; --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line><g class="actor"><rect x="524.21875" y="20" width="164.5" height="39" stroke="#000000" fill="#ffffff" style="stroke-width: 2; --darkreader-inline-fill:#eae7e1; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></rect><text x="534.21875" y="45" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="534.21875">Vulkan Back-end</tspan></text></g><g class="actor"><rect x="524.21875" y="1093.015625" width="164.5" height="39" stroke="#000000" fill="#ffffff" style="stroke-width: 2; --darkreader-inline-fill:#eae7e1; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></rect><text x="534.21875" y="1118.015625" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="534.21875">Vulkan Back-end</tspan></text></g><line x1="606.46875" x2="606.46875" y1="59" y2="1093.015625" stroke="#000000" fill="none" style="stroke-width: 2; --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line><g class="actor"><rect x="810.046875" y="20" width="174.5" height="39" stroke="#000000" fill="#ffffff" style="stroke-width: 2; --darkreader-inline-fill:#eae7e1; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></rect><text x="820.046875" y="45" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="820.046875">ANGLE Translator</tspan></text></g><g class="actor"><rect x="810.046875" y="1093.015625" width="174.5" height="39" stroke="#000000" fill="#ffffff" style="stroke-width: 2; --darkreader-inline-fill:#eae7e1; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></rect><text x="820.046875" y="1118.015625" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="820.046875">ANGLE Translator</tspan></text></g><line x1="897.296875" x2="897.296875" y1="59" y2="1093.015625" stroke="#000000" fill="none" style="stroke-width: 2; --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line><g class="actor"><rect x="1004.546875" y="20" width="174.5" height="39" stroke="#000000" fill="#ffffff" style="stroke-width: 2; --darkreader-inline-fill:#eae7e1; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></rect><text x="1014.546875" y="45" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="1014.546875">GlslangWrapperVk</tspan></text></g><g class="actor"><rect x="1004.546875" y="1093.015625" width="174.5" height="39" stroke="#000000" fill="#ffffff" style="stroke-width: 2; --darkreader-inline-fill:#eae7e1; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></rect><text x="1014.546875" y="1118.015625" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="1014.546875">GlslangWrapperVk</tspan></text></g><line x1="1091.796875" x2="1091.796875" y1="59" y2="1093.015625" stroke="#000000" fill="none" style="stroke-width: 2; --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line><g class="actor"><rect x="1252.578125" y="20" width="87.4375" height="39" stroke="#000000" fill="#ffffff" style="stroke-width: 2; --darkreader-inline-fill:#eae7e1; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></rect><text x="1262.578125" y="45" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="1262.578125">Glslang</tspan></text></g><g class="actor"><rect x="1252.578125" y="1093.015625" width="87.4375" height="39" stroke="#000000" fill="#ffffff" style="stroke-width: 2; --darkreader-inline-fill:#eae7e1; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></rect><text x="1262.578125" y="1118.015625" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="1262.578125">Glslang</tspan></text></g><line x1="1296.296875" x2="1296.296875" y1="59" y2="1093.015625" stroke="#000000" fill="none" style="stroke-width: 2; --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line><g class="signal"><text x="88.3515625" y="89.5" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="88.3515625">glCompileShader (VS)</tspan></text><line x1="34.453125" x2="334.90625" y1="98" y2="98" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock"); --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line></g><g class="signal"><text x="388.8046875" y="128.5" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="388.8046875">ShaderVk::compile</tspan></text><line x1="334.90625" x2="606.46875" y1="137" y2="137" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock"); --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line></g><g class="signal"><text x="698.8984375" y="167.5" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="698.8984375">sh::Compile</tspan></text><line x1="606.46875" x2="897.296875" y1="176" y2="176" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock"); --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line></g><g class="signal"><text x="476.421875" y="206.5" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="476.421875">return Vulkan-compatible GLSL</tspan></text><line x1="897.296875" x2="334.90625" y1="215" y2="215" stroke="#000000" fill="none" style="stroke-width: 2; stroke-dasharray: 6, 2; marker-end: url("#markerArrowBlock"); --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line></g><g class="note"><rect x="354.90625" y="235" width="231.5625" height="67.40625" stroke="#000000" fill="#ffffff" style="stroke-width: 2; --darkreader-inline-fill:#eae7e1; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></rect><text x="359.90625" y="255" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="359.90625">Source is using bogus</tspan><tspan dy="1.2em" x="359.90625">Vulkan qualifiers to be</tspan><tspan dy="1.2em" x="359.90625">corrected at link time.</tspan></text></g><g class="note"><rect x="54.453125" y="322.40625" width="231.5625" height="29" stroke="#000000" fill="#ffffff" style="stroke-width: 2; --darkreader-inline-fill:#eae7e1; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></rect><text x="59.453125" y="342.40625" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="59.453125">Same for FS, GS, etc...</tspan></text></g><g class="signal"><text x="83.53125" y="381.90625" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="83.53125">glCreateProgram (...)</tspan></text><line x1="34.453125" x2="334.90625" y1="390.40625" y2="390.40625" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock"); --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line></g><g class="signal"><text x="88.3515625" y="420.90625" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="88.3515625">glAttachShader (...)</tspan></text><line x1="34.453125" x2="334.90625" y1="429.40625" y2="429.40625" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock"); --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line></g><g class="signal"><text x="122.0625" y="459.90625" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="122.0625">glLinkProgram</tspan></text><line x1="34.453125" x2="334.90625" y1="468.40625" y2="468.40625" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock"); --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line></g><g class="signal"><text x="398.2578125" y="498.90625" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="398.2578125">ProgramVk::link</tspan></text><line x1="334.90625" x2="606.46875" y1="507.40625" y2="507.40625" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock"); --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line></g><g class="note"><rect x="626.46875" y="527.40625" width="250.828125" height="48.203125" stroke="#000000" fill="#ffffff" style="stroke-width: 2; --darkreader-inline-fill:#eae7e1; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></rect><text x="631.46875" y="547.40625" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="631.46875">ProgramVk inits uniforms,</tspan><tspan dy="1.2em" x="631.46875">layouts, and descriptors.</tspan></text></g><g class="signal"><text x="675.7421875" y="606.109375" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="675.7421875">GlslangWrapperVk::GetShaderSpirvCode</tspan></text><line x1="606.46875" x2="1091.796875" y1="614.609375" y2="614.609375" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock"); --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line></g><g class="signal"><text x="1136.25" y="645.109375" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="1136.25">GlslangToSpv</tspan></text><line x1="1091.796875" x2="1296.296875" y1="653.609375" y2="653.609375" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock"); --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line></g><g class="signal"><text x="1131.25" y="684.109375" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="1131.25">Return SPIR-V</tspan></text><line x1="1296.296875" x2="1091.796875" y1="692.609375" y2="692.609375" stroke="#000000" fill="none" style="stroke-width: 2; stroke-dasharray: 6, 2; marker-end: url("#markerArrowBlock"); --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line></g><g class="note"><rect x="1111.796875" y="712.609375" width="164.5" height="29" stroke="#000000" fill="#ffffff" style="stroke-width: 2; --darkreader-inline-fill:#eae7e1; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></rect><text x="1116.796875" y="732.609375" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="1116.796875">Transform SPIR-V</tspan></text></g><g class="signal"><text x="728.5390625" y="772.109375" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="728.5390625">return transformed SPIR-V</tspan></text><line x1="1091.796875" x2="606.46875" y1="780.609375" y2="780.609375" stroke="#000000" fill="none" style="stroke-width: 2; stroke-dasharray: 6, 2; marker-end: url("#markerArrowBlock"); --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line></g><g class="signal"><text x="403.2578125" y="811.109375" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="403.2578125">return success</tspan></text><line x1="606.46875" x2="334.90625" y1="819.609375" y2="819.609375" stroke="#000000" fill="none" style="stroke-width: 2; stroke-dasharray: 6, 2; marker-end: url("#markerArrowBlock"); --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line></g><g class="note"><rect x="54.453125" y="839.609375" width="260.453125" height="29" stroke="#000000" fill="#ffffff" style="stroke-width: 2; --darkreader-inline-fill:#eae7e1; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></rect><text x="59.453125" y="859.609375" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="59.453125">App execution continues...</tspan></text></g><g class="signal"><text x="73.8984375" y="899.109375" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="73.8984375">glDrawArrays (any draw)</tspan></text><line x1="34.453125" x2="334.90625" y1="907.609375" y2="907.609375" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock"); --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line></g><g class="signal"><text x="369.5390625" y="938.109375" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="369.5390625">ContextVk::drawArrays</tspan></text><line x1="334.90625" x2="606.46875" y1="946.609375" y2="946.609375" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock"); --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line></g><g class="note"><rect x="626.46875" y="966.609375" width="231.5625" height="67.40625" stroke="#000000" fill="#ffffff" style="stroke-width: 2; --darkreader-inline-fill:#eae7e1; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></rect><text x="631.46875" y="986.609375" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="631.46875">We init VkShaderModules</tspan><tspan dy="1.2em" x="631.46875">and VkPipeline then</tspan><tspan dy="1.2em" x="631.46875">record the draw.</tspan></text></g><g class="signal"><text x="403.2578125" y="1064.515625" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="403.2578125">return success</tspan></text><line x1="606.46875" x2="334.90625" y1="1073.015625" y2="1073.015625" stroke="#000000" fill="none" style="stroke-width: 2; stroke-dasharray: 6, 2; marker-end: url("#markerArrowBlock"); --darkreader-inline-fill:none; --darkreader-inline-stroke:#000000;" data-darkreader-inline-fill="" data-darkreader-inline-stroke=""></line></g></svg>