GSoC 2017 - Project presentation

On my arrival at the lab, I started a little project: working on a display only driver for Windows. A good way to start learning what was hidden under the hood of an OpenGL application. Google Summer of Code 2017 arrived, and subject were published. Among these, QEMU’s ‘Windows Virgl driver’. Great ! Let’s apply !

Applications closed early April. I took a look at the already existing DOD driver (non official repo)

and also decided to learn a bit more about Vulkan. Results came, and I was selected, excellent !

Mission

The idea is to bring 3d acceleration on Windows guests running with QEMU. Using VirtIO devices and Virgl3d.

Context

windows stack

On this stack, we can work on three parts: opengl32.dll, ICD and Miniport driver.

  • OpenGL32.dll is just a dynamic library used to communicate with out runtime driver.
  • ICD: this is the OpenGL implementation. This part is the equivalent of Mesa on Linux.
  • Miniport-driver: this is the kernel driver. Hardware specific, we are going to do our hypercalls here.

Problems

  • Windows is not open source. We have some basic ideas about D3DKrnl subsystem behaviour, but nothing is certain.
  • To develop a complete OpenGL state tracker is a lot of work.
  • Virgl3D takes some calls, and bytecode for shaders, re-translate it to GLSL, and call OpenGL again. Which means we will do the same work twice. Once on the host, once on the guest.


> Leave a comment






First steps with Vulkan

Vulkan is great, vulkan is love, vulkan is $(COMPLIMENT)

I heard a lot about this API, but never took some time to try it… So why not now ? The goal was to do a simple OBJ file viewer. Then, try to improve performances, and of course, since it’s Vulkan, go multithread ! The API is pretty simple to use. We fill out some structs, and call a vkSomething function.

Some samples are available in the SDK, and of course, there is the famous Vulkan-tutorial website.

So commits after commits, the little viewer is built, until the first ‘Hello, world !’ And now, realization: to display a white triangle, I needed more than 1000 lines of code. Anyway, it’s OK, let’s continue, and finally, a simple obj viewer !

( project repository link )

R5D4 on Vulkan app under i3

But we are the May the 5th, and GSoC results are out. Time to switch lanes and go back to the big project: OpenGL driver for a Windows on QEMU VMs.


> Leave a comment






Model time - R5D4

For the upcoming Vulkan project, I needed a model. So here it is ! R5D4, the unchosen droid from Star Wars. (3ds Max, Substance Painter, Photoshop)


> Leave a comment






Realtime ocean rendering and buyoancy

My Erasmus took place in Spain, in a city near the coast. So each morning, seeing the sea reminded me how I never tried to work on water rendering. So why not, let’s try it !

For some reason, I wanted to work on the buyoancy part first. Using Unity a lot at that time. I decided to create a usable Asset. Two constraints: - Had to work on every model - Had to work on every ocean model

Here is the asset (free): ASSET-STORE LINK

And here are some preview:

Screenshot in Unity 5

The model made for the occasion


> Leave a comment






Model time - Wall-E

The famous Wall-E for this week’s mini project. (3ds Max, Substance Painter, Photoshop)

Wall-E model (3ds Max + Substance Painter


> Leave a comment