<div dir="ltr"><div>GSOC 2017 is effectively over for me, Here's the link to the GSOC landing page that I will be submitting later: <a href="https://github.com/programmerjake/vulkan-cpu/blob/gsoc-2017/docs/gsoc-2017-landing-page.md" target="_blank">https://github.com/programmerjake/vulkan-cpu/blob/gsoc-2017/docs/gsoc-2017-landing-page.md</a></div><div><br></div>I've only completed part of the Vulkan on CPU project:<div>- I've completely implemented generating the SPIR-V parser from Khronos's JSON grammar description files. </div><div>- I've completely implemented using LLVM ORC as the JIT compiler back-end. I implemented a ORC layer that integrates with the old JITEventListener interface, allowing me to use LLVM's debugger integration.</div><div>- I've developed this project on GNU/Linux, so it has complete support.</div><div><br></div><div>- I've partially implemented translating from SPIR-V to LLVM IR.</div><div>- I've partially implemented generating a graphics pipeline by compiling several shaders together.</div><div>- I've partially implemented image support: currently only VK_FORMAT_B8G8R8A8_UNORM</div><div>- I have a temporary rasterizer implementation: I've implemented a scanline rasterizer just to get stuff to draw, I'm planning on replacing it with the originally-planned tiled binning rasterizer.</div><div>- I have less than 5 functions to implement before it will work on Win32, mostly filesystem support.</div><div>- I've not yet started implementing the actual Vulkan ICD interface.</div><div>- I've not yet started implementing the Whole-function vectorization pass.</div><div>- I've not yet started implementing support for other platforms, however, it should compile and run without problems on most Unix systems.</div><div><br></div><div>Some interesting things I learned:</div><div>- Vulkan doesn't actually specify using the top-left fill rule. (I couldn't find it in the rasterization section of the Vulkan specification.)</div><div>- SPIR-V is surprisingly complicated to parse for an IR that's designed to be simple to parse. OpSwitch requires you to determine the bit-width of the value being switched on before you can parse the list of cases. See <a href="https://bugs.freedesktop.org/show_bug.cgi?id=101560" target="_blank">https://bugs.freedesktop.org/show_bug.cgi?id=101560</a><br><div><div><br></div><div>I had gotten delayed by my implementing a SPIR-V parser myself. In hindsight, the amount of time needed to run the SPIR-V to LLVM IR translator is dwarfed by running LLVM's optimizations, so I could have just used the SPIR-V parser that Khronos has already written as it's fast enough.</div></div></div><div><br></div><div>Jacob Lifshay</div></div>