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="1091" 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": GlslangWrapperVk::GetShaderCode 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": GlslangWrapperVk::TransformSpirV 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.807228088378906" height="38.50602340698242" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="20" y="44.65060234069824" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="20">App</tspan></text></g><g class="actor"><rect x="10" y="1033.132526397705" width="48.807228088378906" height="38.50602340698242" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="20" y="1057.7831287384033" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="20">App</tspan></text></g><line x1="34.40361404418945" x2="34.40361404418945" y1="58.50602340698242" y2="1033.132526397705" stroke="#000000" fill="none" style="stroke-width: 2;"></line><g class="actor"><rect x="252.04215621948242" y="20" width="164.0240936279297" height="38.50602340698242" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="262.0421562194824" y="44.65060234069824" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="262.0421562194824">ANGLE Front-end</tspan></text></g><g class="actor"><rect x="252.04215621948242" y="1033.132526397705" width="164.0240936279297" height="38.50602340698242" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="262.0421562194824" y="1057.7831287384033" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="262.0421562194824">ANGLE Front-end</tspan></text></g><line x1="334.05420303344727" x2="334.05420303344727" y1="58.50602340698242" y2="1033.132526397705" stroke="#000000" fill="none" style="stroke-width: 2;"></line><g class="actor"><rect x="522.8855247497559" y="20" width="164.0240936279297" height="38.50602340698242" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="532.8855247497559" y="44.65060234069824" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="532.8855247497559">Vulkan Back-end</tspan></text></g><g class="actor"><rect x="522.8855247497559" y="1033.132526397705" width="164.0240936279297" height="38.50602340698242" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="532.8855247497559" y="1057.7831287384033" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="532.8855247497559">Vulkan Back-end</tspan></text></g><line x1="604.8975715637207" x2="604.8975715637207" y1="58.50602340698242" y2="1033.132526397705" stroke="#000000" fill="none" style="stroke-width: 2;"></line><g class="actor"><rect x="808.132511138916" y="20" width="173.62649536132812" height="38.50602340698242" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="818.132511138916" y="44.65060234069824" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="818.132511138916">ANGLE Translator</tspan></text></g><g class="actor"><rect x="808.132511138916" y="1033.132526397705" width="173.62649536132812" height="38.50602340698242" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="818.132511138916" y="1057.7831287384033" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="818.132511138916">ANGLE Translator</tspan></text></g><line x1="894.9457588195801" x2="894.9457588195801" y1="58.50602340698242" y2="1033.132526397705" stroke="#000000" fill="none" style="stroke-width: 2;"></line><g class="actor"><rect x="1001.7590065002441" y="20" width="288.85540771484375" height="38.50602340698242" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="1011.7590065002441" y="44.65060234069824" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="1011.7590065002441">Link-Time SPIR-V Transformer</tspan></text></g><g class="actor"><rect x="1001.7590065002441" y="1033.132526397705" width="288.85540771484375" height="38.50602340698242" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="1011.7590065002441" y="1057.7831287384033" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="1011.7590065002441">Link-Time SPIR-V Transformer</tspan></text></g><line x1="1146.186710357666" x2="1146.186710357666" y1="58.50602340698242" y2="1033.132526397705" stroke="#000000" fill="none" style="stroke-width: 2;"></line><g class="signal"><text x="88.21084213256836" y="88.90361404418945" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="88.21084213256836">glCompileShader (VS)</tspan></text><line x1="34.40361404418945" x2="334.05420303344727" y1="97.01204681396484" y2="97.01204681396484" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="387.8614311218262" y="127.40963745117188" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="387.8614311218262">ShaderVk::compile</tspan></text><line x1="334.05420303344727" x2="604.8975715637207" y1="135.51807022094727" y2="135.51807022094727" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="697.1084136962891" y="165.9156608581543" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="697.1084136962891">sh::Compile</tspan></text><line x1="604.8975715637207" x2="894.9457588195801" y1="174.0240936279297" y2="174.0240936279297" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="552.0843200683594" y="204.42168426513672" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="552.0843200683594">return SPIR-V</tspan></text><line x1="894.9457588195801" x2="334.05420303344727" y1="212.5301170349121" y2="212.5301170349121" stroke="#000000" fill="none" style="stroke-width: 2; stroke-dasharray: 6, 2; marker-end: url("#markerArrowBlock");"></line></g><g class="note"><rect x="354.05420303344727" y="232.5301170349121" width="230.84336853027344" height="66.9060287475586" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="359.05420303344727" y="252.18071937561035" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="359.05420303344727">SPIR-V is using bogus</tspan><tspan dy="1.2em" x="359.05420303344727">decorations to be</tspan><tspan dy="1.2em" x="359.05420303344727">corrected at link time.</tspan></text></g><g class="note"><rect x="54.40361404418945" y="319.4361457824707" width="230.84336853027344" height="28.506023406982422" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="59.40361404418945" y="339.08674812316895" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="59.40361404418945">Same for FS, GS, etc...</tspan></text></g><g class="signal"><text x="83.40963363647461" y="378.33975982666016" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="83.40963363647461">glCreateProgram (...)</tspan></text><line x1="34.40361404418945" x2="334.05420303344727" y1="386.44819259643555" y2="386.44819259643555" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="88.21084213256836" y="416.8457832336426" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="88.21084213256836">glAttachShader (...)</tspan></text><line x1="34.40361404418945" x2="334.05420303344727" y1="424.95421600341797" y2="424.95421600341797" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="121.81324768066406" y="455.351806640625" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="121.81324768066406">glLinkProgram</tspan></text><line x1="34.40361404418945" x2="334.05420303344727" y1="463.4602394104004" y2="463.4602394104004" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="397.46384048461914" y="493.8578300476074" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="397.46384048461914">ProgramVk::link</tspan></text><line x1="334.05420303344727" x2="604.8975715637207" y1="501.9662628173828" y2="501.9662628173828" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="note"><rect x="624.8975715637207" y="521.9662628173828" width="250.04818725585938" height="47.706024169921875" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="629.8975715637207" y="541.616865158081" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="629.8975715637207">ProgramVk inits uniforms,</tspan><tspan dy="1.2em" x="629.8975715637207">layouts, and descriptors.</tspan></text></g><g class="signal"><text x="726.7168388366699" y="600.0698776245117" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="726.7168388366699">GlslangWrapperVk::GetShaderCode</tspan></text><line x1="604.8975715637207" x2="1146.186710357666" y1="608.1783103942871" y2="608.1783103942871" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="678.7047996520996" y="638.5759010314941" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="678.7047996520996">retrieve SPIR-V and determine decorations</tspan></text><line x1="1146.186710357666" x2="604.8975715637207" y1="646.6843338012695" y2="646.6843338012695" stroke="#000000" fill="none" style="stroke-width: 2; stroke-dasharray: 6, 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="402.2590217590332" y="677.0819244384766" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="402.2590217590332">return success</tspan></text><line x1="604.8975715637207" x2="334.05420303344727" y1="685.190357208252" y2="685.190357208252" stroke="#000000" fill="none" style="stroke-width: 2; stroke-dasharray: 6, 2; marker-end: url("#markerArrowBlock");"></line></g><g class="note"><rect x="54.40361404418945" y="705.190357208252" width="259.6505889892578" height="28.506023406982422" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="59.40361404418945" y="724.8409595489502" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="59.40361404418945">App execution continues...</tspan></text></g><g class="signal"><text x="73.80722427368164" y="764.0939712524414" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="73.80722427368164">glDrawArrays (any draw)</tspan></text><line x1="34.40361404418945" x2="334.05420303344727" y1="772.2024040222168" y2="772.2024040222168" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="368.65661239624023" y="802.5999946594238" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="368.65661239624023">ContextVk::drawArrays</tspan></text><line x1="334.05420303344727" x2="604.8975715637207" y1="810.7084274291992" y2="810.7084274291992" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="721.9156455993652" y="841.1060180664062" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="721.9156455993652">GlslangWrapperVk::TransformSpirV</tspan></text><line x1="604.8975715637207" x2="1146.186710357666" y1="849.2144508361816" y2="849.2144508361816" stroke="#000000" fill="none" style="stroke-width: 2; marker-end: url("#markerArrowBlock");"></line></g><g class="signal"><text x="755.5180473327637" y="879.6120414733887" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="755.5180473327637">return transformed SPIR-V</tspan></text><line x1="1146.186710357666" x2="604.8975715637207" y1="887.7204742431641" y2="887.7204742431641" stroke="#000000" fill="none" style="stroke-width: 2; stroke-dasharray: 6, 2; marker-end: url("#markerArrowBlock");"></line></g><g class="note"><rect x="624.8975715637207" y="907.7204742431641" width="230.84336853027344" height="66.9060287475586" stroke="#000000" fill="#ffffff" style="stroke-width: 2;"></rect><text x="629.8975715637207" y="927.3710765838623" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="629.8975715637207">We init VkShaderModules</tspan><tspan dy="1.2em" x="629.8975715637207">and VkPipeline then</tspan><tspan dy="1.2em" x="629.8975715637207">record the draw.</tspan></text></g><g class="signal"><text x="402.2590217590332" y="1005.0240936279297" style="font-size: 16px; font-family: "Andale Mono", monospace;"><tspan x="402.2590217590332">return success</tspan></text><line x1="604.8975715637207" x2="334.05420303344727" y1="1013.1325263977051" y2="1013.1325263977051" stroke="#000000" fill="none" style="stroke-width: 2; stroke-dasharray: 6, 2; marker-end: url("#markerArrowBlock");"></line></g></svg>