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="1320" height="1070" xmlns:xlink="http://www.w3.org/1999/xlink"><source><![CDATA[participant App 2participant "ANGLE Front-end" 3participant "Vulkan Back-end" 4participant "ANGLE Translator" 5participant "Link-Time SPIR-V Transformer" 6 7App->"ANGLE Front-end": glCompileShader (VS) 8"ANGLE Front-end"->"Vulkan Back-end": ShaderVk::compile 9"Vulkan Back-end"->"ANGLE Translator": sh::Compile 10"ANGLE Translator"-->"ANGLE Front-end": return SPIR-V 11 12Note right of "ANGLE Front-end": SPIR-V is using bogus\ndecorations to be\ncorrected at link time. 13 14Note right of App: Same for FS, GS, etc... 15 16App->"ANGLE Front-end": glCreateProgram (...) 17App->"ANGLE Front-end": glAttachShader (...) 18App->"ANGLE Front-end": glLinkProgram 19"ANGLE Front-end"->"Vulkan Back-end": ProgramVk::link 20 21Note right of "Vulkan Back-end": ProgramVk inits uniforms,\nlayouts, and descriptors. 22 23"Vulkan Back-end"->"Link-Time SPIR-V Transformer": SpvGetShaderSpirvCode 24"Link-Time SPIR-V Transformer"-->"Vulkan Back-end": retrieve SPIR-V and determine decorations 25"Vulkan Back-end"-->"ANGLE Front-end": return success 26 27Note right of App: App execution continues... 28 29App->"ANGLE Front-end": glDrawArrays (any draw) 30"ANGLE Front-end"->"Vulkan Back-end": ContextVk::drawArrays 31 32"Vulkan Back-end"->"Link-Time SPIR-V Transformer": SpvTransformSpirvCode 33"Link-Time SPIR-V Transformer"-->"Vulkan Back-end": return transformed SPIR-V 34 35Note right of "Vulkan Back-end": We init VkShaderModules\nand VkPipeline then\nrecord the draw. 36 37"Vulkan Back-end"-->"ANGLE Front-end": return success 38]]></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.8125" height="37.60000038146973" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="20" y="43.60000038146973" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="20">App</tspan></text></g><g class="actor"><rect x="10" y="1013.2000102996826" width="48.8125" height="37.60000038146973" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="20" y="1036.8000106811523" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="20">App</tspan></text></g><line x1="34.40625" x2="34.40625" y1="57.60000038146973" y2="1013.2000102996826" stroke="#000000" fill="none" style="stroke-width: 2;"></line><g class="actor"><rect x="252.04375457763672" y="20" width="164.02500915527344" height="37.60000038146973" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="262.0437545776367" y="43.60000038146973" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="262.0437545776367">ANGLE Front-end</tspan></text></g><g class="actor"><rect x="252.04375457763672" y="1013.2000102996826" width="164.02500915527344" height="37.60000038146973" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="262.0437545776367" y="1036.8000106811523" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="262.0437545776367">ANGLE Front-end</tspan></text></g><line x1="334.05625915527344" x2="334.05625915527344" y1="57.60000038146973" y2="1013.2000102996826" stroke="#000000" fill="none" style="stroke-width: 2;"></line><g class="actor"><rect x="522.8812637329102" y="20" width="164.02500915527344" height="37.60000038146973" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="532.8812637329102" y="43.60000038146973" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="532.8812637329102">Vulkan Back-end</tspan></text></g><g class="actor"><rect x="522.8812637329102" y="1013.2000102996826" width="164.02500915527344" height="37.60000038146973" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="532.8812637329102" y="1036.8000106811523" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="532.8812637329102">Vulkan Back-end</tspan></text></g><line x1="604.8937683105469" x2="604.8937683105469" y1="57.60000038146973" y2="1013.2000102996826" stroke="#000000" fill="none" style="stroke-width: 2;"></line><g class="actor"><rect x="808.1312713623047" y="20" width="173.625" height="37.60000038146973" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="818.1312713623047" y="43.60000038146973" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="818.1312713623047">ANGLE Translator</tspan></text></g><g class="actor"><rect x="808.1312713623047" y="1013.2000102996826" width="173.625" height="37.60000038146973" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="818.1312713623047" y="1036.8000106811523" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="818.1312713623047">ANGLE Translator</tspan></text></g><line x1="894.9437713623047" x2="894.9437713623047" y1="57.60000038146973" y2="1013.2000102996826" stroke="#000000" fill="none" style="stroke-width: 2;"></line><g class="actor"><rect x="1001.7562713623047" y="20" width="288.8500061035156" height="37.60000038146973" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="1011.7562713623047" y="43.60000038146973" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="1011.7562713623047">Link-Time SPIR-V Transformer</tspan></text></g><g class="actor"><rect x="1001.7562713623047" y="1013.2000102996826" width="288.8500061035156" height="37.60000038146973" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="1011.7562713623047" y="1036.8000106811523" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="1011.7562713623047">Link-Time SPIR-V Transformer</tspan></text></g><line x1="1146.1812744140625" x2="1146.1812744140625" y1="57.60000038146973" y2="1013.2000102996826" stroke="#000000" fill="none" style="stroke-width: 2;"></line><g class="signal"><text x="88.2125015258789" y="87.40000057220459" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="88.2125015258789">glCompileShader (VS)</tspan></text><line x1="34.40625" x2="334.05625915527344" y1="95.20000076293945" y2="95.20000076293945" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="387.85626220703125" y="125.00000095367432" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="387.85626220703125">ShaderVk::compile</tspan></text><line x1="334.05625915527344" x2="604.8937683105469" y1="132.80000114440918" y2="132.80000114440918" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="697.1062698364258" y="162.60000133514404" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="697.1062698364258">sh::Compile</tspan></text><line x1="604.8937683105469" x2="894.9437713623047" y1="170.4000015258789" y2="170.4000015258789" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="552.0875129699707" y="200.20000171661377" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="552.0875129699707">return SPIR-V</tspan></text><line x1="894.9437713623047" x2="334.05625915527344" y1="208.00000190734863" y2="208.00000190734863" stroke="#000000" fill="none" style="stroke-width: 2; stroke-dasharray: 6, 2; marker-end: url("#markerArrowBlock");"></line></g><g class="note"><rect x="354.05625915527344" y="228.00000190734863" width="230.83750915527344" height="66" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="359.05625915527344" y="246.60000228881836" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="359.05625915527344">SPIR-V is using bogus</tspan><tspan dy="1.2em" x="359.05625915527344">decorations to be</tspan><tspan dy="1.2em" x="359.05625915527344">corrected at link time.</tspan></text></g><g class="note"><rect x="54.40625" y="314.00000190734863" width="230.83750915527344" height="27.600000381469727" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="59.40625" y="332.60000228881836" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="59.40625">Same for FS, GS, etc...</tspan></text></g><g class="signal"><text x="83.41250610351562" y="371.4000024795532" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="83.41250610351562">glCreateProgram (...)</tspan></text><line x1="34.40625" x2="334.05625915527344" y1="379.2000026702881" y2="379.2000026702881" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="88.2125015258789" y="409.00000286102295" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="88.2125015258789">glAttachShader (...)</tspan></text><line x1="34.40625" x2="334.05625915527344" y1="416.8000030517578" y2="416.8000030517578" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="121.81875228881836" y="446.6000032424927" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="121.81875228881836">glLinkProgram</tspan></text><line x1="34.40625" x2="334.05625915527344" y1="454.40000343322754" y2="454.40000343322754" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="397.46250915527344" y="484.2000036239624" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="397.46250915527344">ProgramVk::link</tspan></text><line x1="334.05625915527344" x2="604.8937683105469" y1="492.00000381469727" y2="492.00000381469727" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="note"><rect x="624.8937683105469" y="512.0000038146973" width="250.0500030517578" height="46.80000305175781" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="629.8937683105469" y="530.600004196167" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="629.8937683105469">ProgramVk inits uniforms,</tspan><tspan dy="1.2em" x="629.8937683105469">layouts, and descriptors.</tspan></text></g><g class="signal"><text x="774.7187728881836" y="588.6000070571899" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="774.7187728881836">SpvGetShaderSpirvCode</tspan></text><line x1="604.8937683105469" x2="1146.1812744140625" y1="596.4000072479248" y2="596.4000072479248" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="678.7000122070312" y="626.2000074386597" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="678.7000122070312">retrieve SPIR-V and determine decorations</tspan></text><line x1="1146.1812744140625" x2="604.8937683105469" y1="634.0000076293945" y2="634.0000076293945" stroke="#000000" fill="none" style="stroke-width: 2; stroke-dasharray: 6, 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="402.26251220703125" y="663.8000078201294" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="402.26251220703125">return success</tspan></text><line x1="604.8937683105469" x2="334.05625915527344" y1="671.6000080108643" y2="671.6000080108643" stroke="#000000" fill="none" style="stroke-width: 2; stroke-dasharray: 6, 2; marker-end: url("#markerArrowBlock");"></line></g><g class="note"><rect x="54.40625" y="691.6000080108643" width="259.65000915527344" height="27.600000381469727" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="59.40625" y="710.200008392334" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="59.40625">App execution continues...</tspan></text></g><g class="signal"><text x="73.8125" y="749.0000085830688" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="73.8125">glDrawArrays (any draw)</tspan></text><line x1="34.40625" x2="334.05625915527344" y1="756.8000087738037" y2="756.8000087738037" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="368.65626525878906" y="786.6000089645386" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="368.65626525878906">ContextVk::drawArrays</tspan></text><line x1="334.05625915527344" x2="604.8937683105469" y1="794.4000091552734" y2="794.4000091552734" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="774.7187728881836" y="824.2000093460083" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="774.7187728881836">SpvTransformSpirvCode</tspan></text><line x1="604.8937683105469" x2="1146.1812744140625" y1="832.0000095367432" y2="832.0000095367432" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="755.5125198364258" y="861.800009727478" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="755.5125198364258">return transformed SPIR-V</tspan></text><line x1="1146.1812744140625" x2="604.8937683105469" y1="869.6000099182129" y2="869.6000099182129" stroke="#000000" fill="none" style="stroke-width: 2; stroke-dasharray: 6, 2; marker-end: url("#markerArrowBlock");"></line></g><g class="note"><rect x="624.8937683105469" y="889.6000099182129" width="230.83750915527344" height="66" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="629.8937683105469" y="908.2000102996826" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="629.8937683105469">We init VkShaderModules</tspan><tspan dy="1.2em" x="629.8937683105469">and VkPipeline then</tspan><tspan dy="1.2em" x="629.8937683105469">record the draw.</tspan></text></g><g class="signal"><text x="402.26251220703125" y="985.4000101089478" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="402.26251220703125">return success</tspan></text><line x1="604.8937683105469" x2="334.05625915527344" y1="993.2000102996826" y2="993.2000102996826" stroke="#000000" fill="none" style="stroke-width: 2; stroke-dasharray: 6, 2; marker-end: url("#markerArrowBlock");"></line></g></svg>