Direct3D Shader Crosscompiler

Direct3D Shader Crosscompiler

ObjectiveCreate a crosscompiler that can translate Direct3D shader bytecode to CUDA/PTX code to be used in a GPU software rendering pipeline.



Evaluating the performance of new rendering algorithms requires input data representative of typical graphics applications. One way to acquire such data is to hook into the rendering API used by a real application and record the calls and data that go into rendering one frame. The information recorded in this way then allows the exact same frame to be reproduced using different algorithms for the purpose of comparison on realistic workloads.

A crucial problem with using frames recorded in this way from modern real-time graphics APIs such as Direct3D and OpenGL is that the rendering process is entirely driven by shader programs that interpret the input data. To be able to recreate such a frame in another rendering system, the shader programs used in the frame have to be translated into something this other rendering system understands.

The Direct3D API, widely used by many real-time graphics applications, particularly most video games, gets shader programs passed in in the form of bytecode targeting a virtual GPU, this bytecode typically being precompiled from a high-level language such as HLSL. The goal of this work is to develop a compiler that can translate a Direct3D shader from bytecode to C++ or PTX assembly code that can be used in a software rendering pipeline based on CUDA.

TeamTeam Schmalstieg
ContactKenzel MichaelSteinberger Markus
Offered asBachelor's thesis
Semester project
Master's thesis