Skip to content

GSOC 2020 PROJECT

Fuzzing Graphics Shaders

SPIRV-Tools is a collection of tools to work on SPIR-V modules. One of these tools is spirv-fuzz. It applies semantics-preserving transformations to...

Contributor
André Perez Maselco
Mentors
Paul Thomson, Alastair Donaldson
Organization
Android Graphics Tools TeamProgramming languages
Program
GSoC 2020Completed

About this project

Description from the program archive

<p><a href="https://github.com/KhronosGroup/SPIRV-Tools" target="_blank">SPIRV-Tools</a> is a collection of tools to work on <em>SPIR-V</em> modules. One of these tools is <em>spirv-fuzz</em>. It applies <em>semantics-preserving transformations</em> to a <em>SPIR-V</em> module, that we call the <em>reference</em> module, to obtain a modified <em>variant</em> module. Theoretically, a <em>semantics-preserving transformation</em> should not change the behaviour of the code. In this way, the <em>reference</em> and <em>variant</em> modules can be run, and the outputs compared. The output is usually an image. If the images differ, this probably indicates a shader compiler bug. This is a specialised form of <em>fuzzing</em> that uses a technique called <em>metamorphic testing</em>.</p> <p>This project involved using the metamorphic testing approach to extend <em>spirv-fuzz</em> by adding new transformations to cover instructions and patterns of <em>SPIR-V</em> that were not previously covered by existing <em>spirv-fuzz</em> transformations. Also, the project used tools such as <a href="https://github.com/ChrisLidbury/CLSmith" target="_blank">CLSmith</a> and <a href="https://github.com/google/clspv" target="_blank">clspv</a> to improve <em>spirv-fuzz</em>.</p>

Tags

From the people who did it

No proposal or progress posts shared yet

Worked on this project? Share the proposal that got you selected and the posts you wrote.

Claim this project
  1. Implementation of additional transformations for spirv-fuzz

    Vasyl TelimanMentored by Paul Thomson, Alastair Donaldson

Data: Google Summer of Code public archive. This project in the official archive