2018 – Joined AMD
I joined AMD to work on the Graphics Performance R&D division, bringing my skills in compilers, drivers, and optimisations.
My background with heterogeneous hardware, coupled with my experience with LLVM and a general love of making things as fast and maintainable as possible, make me an ideal partner in this new initiative within AMD.
2018 – Released SPV_EXT_descriptor_indexing
I contributed to the SPIR-V extension SPV_EXT_descriptor_indexing, which lets developers make use of bindless buffers and images in the Vulkan API.
2018 – Published a Vulkan Subgroup Tutorial on khronos.org
I’ve published a Vulkan Subgroup Tutorial on khronos.org, covering how to make use of the subgroup functionality I added to Vulkan 1.1.
2018 – Released Vulkan 1.1 & SPIR-V 1.3
As the primary author of Vulkan’s subgroup functionality I’m proud to have spent 2 years of my life ensuring that Vulkan 1.1 is what developers need. The work I undertook included writing the GL_KHR_shader_subgroup GLSL extension, adding glslang support for GL_KHR_shader_subgroup and HLSL’s Shader Model 6.0 wave operations, adding the GroupNonUniform SPIR-V 1.3 opcodes, and also writing the conformance tests.
2017 – Speaker at Khronos Munich Chapter
I gave a talk at the Khronos Munich Chapter titled ‘OpenCL to Vulkan: A Porting Guide’. I covered how to port from the OpenCL API to the Vulkan API, some common problems our customers have faced, and how to fix them. Slides
2017 – Released VK_KHR_image_format_list
I contributed to the Vulkan extension VK_KHR_image_format_list, which lets developers list what image formats will be used with VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT allowing implementations to use more optimal paths where possible.
2017 – Released VK_KHR_maintenance2
I contributed to the Vulkan extension VK_KHR_maintenance2, which is a bumper pack of extensions on Vulkan 1.0 to enable a bunch of functionality developers had been requesting.
2017 – Released clspv
I was the project lead and main developer on a Google/Codeplay collaboration project clspv, which allows OpenCL C sources to be compiled to Vulkan SPIR-V. The codebase is being actively used by developers to port 1 million+ line codebases of OpenCL C to Vulkan with minimal source changes.
2017 – Released VK_KHR_variable_pointers
I contributed to the Vulkan extension VK_KHR_variable_pointers, which allows for more expressive pointer operations to be used by SPIR-V in Vulkan 1.0.
2017 – Released VK_KHR_16bit_storage
I contributed to the Vulkan extension VK_KHR_16bit_storage, which allows 16 bit buffers to be loaded and stored from, while performing operations in a higher bit-width type, in the SPIR-V used in Vulkan 1.0.
2017 – Released SPIR-V 1.2
I contributed to SPIR-V version 1.2, primarily targeted at OpenCL.
2017 – Released SPV_KHR_variable_pointers
I contributed to the SPIR-V extension SPV_KHR_variable_pointers, which enables more expressive pointer operations in SPIR-V.
2017 – Released SPV_KHR_16bit_storage
I contributed to the SPIR-V extension SPV_KHR_16bit_storage, which enables 16 bit load/store operations in SPIR-V.
2017 – Released VK_KHR_maintenance1
I contributed to the Vulkan extension VK_KHR_maintenance1, which is a bumper pack of extensions on Vulkan 1.0 to enable a bunch of functionality developers had been requesting.
2017 – Released VK_EXT_shader_subgroup_ballot
I contributed to the Vulkan extension VK_EXT_shader_subgroup_ballot, which enables a limited form of subgroup ballot operations via a Vulkan 1.0 extension.
2017 – Released VK_EXT_shader_subgroup_vote
I contributed to the Vulkan extension VK_EXT_shader_subgroup_vote, which enables a limited form of subgroup vote operations via a Vulkan 1.0 extension.
2016 – Released SPV_KHR_shader_ballot
I contributed to the SPIR-V extension SPV_KHR_shader_ballot, which enables a limited form of subgroup ballot operations via a SPIR-V 1.0 extension.
2016 – Open Sourced YARI-V
2016 – Released SPIR-V 1.1
I contributed to SPIR-V version 1.1, primarily targeted at OpenCL.
2016 – Speaker at GDC
I gave a talk at GDC titled ‘An Introduction to SPIR-V’. I covered the basics of SPIR-V, how and why Vulkan uses it, how to hand-write SPIR-V shaders, and how to optimize and find bugs in SPIR-V. Slides
2016 – Released Vulkan 1.0
Two years of my life was sunk into making Vulkan a good platform for compute workloads, and in 2016 it was finally released to the community.
2016 – Released SPIR-V 1.0
Two years of my life was sunk into making SPIR-V great for Vulkan. My focus was to ensure that Vulkan and SPIR-V would make a good target for compute workloads, something that the community can now utelize.
2016 – Released Vulkan GLSL
I was a named contributor to the GLSL variant for Vulkan – this specification modifies the GLSL shading language to enable the features of Vulkan, something I was very proud to have worked on!
2015 – Open Sourced utest.h
I open sourced a single header unit testing framework for C/C++. Check out the library on my GitHub – https://github.com/sheredom/utest.h
2015 – Open Sourced json.h
I open sourced a JSON parser/writer for C/C++. The library supports JSON, but also simplified JSON too. Check out the library on my GitHub – https://github.com/sheredom/json.h
2015 – Open Sourced utf8.h
I open sourced a utf8 string processing library, to provide c string.h like functions but specifically for processing utf8 strings. Check out the library on my GitHub – https://github.com/sheredom/utf8.h
2015 – Speaker at Khronos UK Chapter/EuroLLVM
I gave a talk at the Khronos UK Chapter’s side event attached to the main EuroLLVM conference. My talk was on SPIR-V, the motivation and some of the required features, and how both OpenCL and Vulkan will use it. I got to announce a small part of the specification here, specialization constants! Slides + speaker notes.
2015 – Promoted to Principal Software Engineer, Vulkan & SPIR-V at Codeplay
To coincide with my new focus on Vulkan and SPIR-V, I got a promotion within the company. My years of experience with Khronos and open standards put me in a great position to contribute back to the specifications of both Vulkan and SPIR-V.
2014 – Began contributing to Vulkan
Since its inception, I’ve been involved in the working group at Khronos to help define the new generation, and open standard API. My focus has primarily been;
- Compute as a first-class citizen in the API (including non-GPU compute support).
- Binary shader format evangelist.
- Smoothing the interaction between the API and the binary shaders.
2014 – Began contributing to SPIR-V
SPIR-V is a truly revolutionary addition to the graphics and compute eco-system – now we have a single representation that allows us to define the many shader and kernel types that GLSL and OpenCL Kernel Language support (and of course – much, much, more). My involvement in SPIR-V allowed me to bring my years of experience in writing drivers for OpenGL ES and OpenCL, coupled with my lengthy time of using LLVM, to the working group.
2014 – Began working remotely at Codeplay
I always knew I was going to end up working remotely – specifically on the Isle of Skye. My better half is from there, and in 2013 when she got a job in the local high school, I requested the right to work remotely, and it was granted. Six months later (I gave the company a grace period to ease the transition) I had bought a house, and am now reaping the rewards a remote life can bring (just look at the view I get every day!).
2014 – Speaker at IWOCL
I was a speaker at the International Workshop on OpenCL – giving a talk entitled ‘SPIR me the details: building custom language support on OpenCL’. The talk gave a run through of the SPIR 1.2 specification, and by using the example of targeting custom languages at GPUs explained the pro’s and con’s of using SPIR with OpenCL.
2014 – Shipped OpenCL 1.2 driver for customer
2013 – Speaker at AMD Developer Summit
I was a speaker at AMD’s Developer Summit for 2013 – presenting a talk on how to target custom languages at heterogeneous systems. The talk focused mostly on the (at the time) recently announced SPIR 1.2 specification, and how to target that from your own languages.
2013 – Shipped OpenCL 1.2 driver for customer
2012 – Shipped OpenCL 1.1 driver for customer
2011 – Speaker at Game/AI Conference
After our experience shipping NASCAR The Game 2011, notably the awesome/insane process I went through to get the AI system ported to the SPU on the PlayStation®3, I gave a talk at the Game/AI Conference going through the techniques I used to take very obtuse and linear code and have it run in parallel across the SPUs.
2011 – Promoted to Technology Lead at Codeplay
After gaining the relevant experience in the company, in 2011 I was promoted to Technology Lead. This changed my responsibilities in the company – involving me in the decision making process, leading a team, lots of client interaction and contract negotiations too.
2011 – Fire-fighting on an Activision title
I was flown to the US for onsite fire-fighting for a title. The work was entirely porting code to the SPUs on the PlayStation®3, and I achieved a 10% (~4ms drop in frame time) improvement in just two weeks of on-site development.
2011 – Shipped NASCAR The Game: 2011
After working for 15 months on this title, we finally shipped in 2011. My work was mostly in optimizations to hit a playable framerate, I partially ported PhysX to the SPUs, I ported the AI system to the SPUs, ported the metal damage system that we created for Eutechnyx to the SPUs, and general CPU optimizations for the Xbox 360 and PlayStation®3.
2009 – Joined Codeplay as a Software Engineer
After graduating from University, I joined Codeplay – mostly because I knew they had PlayStation®3’s and I loved the SPU ISA.
2009 – Graduated from University of Glasgow with a BSc (Hons.) in Software Engineering
During my four years at the University of Glasgow, I studied a wide range of courses, all of my electives being anything to do with Operating Systems and low level programming.
In my fourth year, I won the best project prize for my implementation of Software Transactional Memory on Cell – basically my first taste of using a PlayStation®3, and first time using the SPUs!