Available for work in Hertfordshire, Cambridgeshire or surrounding areas.
The canonical address for this CV is http://www.lee-griffiths.net/cv/. If you're not viewing it there, your version might not be up-to-date.
Software developer with 7 years' experience writing WDDM and DirectX 2D/3D graphics drivers in the semiconductor industry for Imagination Technologies. Left in Aug 2015 for a career break, now looking to get back into work.
Worked on large-scale GPU projects, involving many HW and SW teams, with fixed and expensive silicon fabrication deadlines. Experienced full development life-cycle whilst writing embedded, low-level, real-time code for drivers and firmware, and when writing tools for use by developers. Completely comfortable writing non-driver code: desktop apps, 3D apps/games, and utility scripts. Developed programs targeting various OS (Windows, Linux, custom RTOS) on different form-factors (simulated GPUs, tablets, phones, desktop).
Can design, code, test and document software to a high standard. Take pride in personal and professional responsibility. Have a personal emphasis on promoting clear communication between engineers and teams to help avoid ambiguity and reduce tribalism. And also on the testing and documentation of code to help ensure its correctness. Capable of working on solo projects, in teams, or as part of a 300-person effort with little supervision. apable of independent action to get information and work from other teams. Not scared to work on projects that many people rely on. Gained some experience in leading and supervising junior developers in their work.
C, Python, (Windows) graphics drivers, debugging IEEE 754 floating point problems present in C and GPU shader code
Imagination Technologies. Market leading IP company. Owner of brands: PowerVR, MIPS, PURE, Ensigma. PowerVR GPU technology used by many leading-brand smart devices (e.g. all Apple iPads & iPhones, Kindle Fire, Samsung Galaxy), PS Vita, TVs, Laptops, etc.
DirectX driver shipped on Windows-based laptops and tables, and used in the validation and verification of all shipping GPUs.
Started work on the course materials that the APT group would use for a new second-year course module that was due to be taught the following year. Work continued on into my third year project. For more details see UoM final year project.
Created a new website for the PEVE group that would live on CS Department's webpages (cs.man.ac.uk). It had to match the "new" style template used by the rest of the CS department.
In addition to the usual CS topics (algorithms & data structures, databases, AI, etc) there was a particular focus on: Micro-controllers, Digital design of hardware (circuits, CPUs and systems on chip); Operating system design; Programming language theory & compilers;
|Advanced Computer Graphics||Operating Systems||Algorithms and Data Structures|
|Digital Design Techniques||Digital Media Processing||Software Engineering|
|Micro-controllers||From Transistors to Systems-on-Chip||High Performance Microprocessor Design|
|Understanding Programming Languages||Imperative Programming with C and C++||Object Oriented Programming in Java|
|Optical Computing||AI and Games||Enterprise Management for Computer Scientists|
Hand-picked by University staff. Created a hardware platform/system to be used by the CS department for a new 2nd year course-module. Worked with one other student (only joint project of that year!). Given a very basic specification with large freedom of design. Single requirement was that it had to use two specific boards: One ARM and one PIC based. Asked to design a complete, working system as well as sketch feasible applications that could be run on it in the future, with the course potentially changing the app used each year. Delivered a technical report (~20k words) on the project as final year dissertation. Also produced an additional handover report documenting the structure and function of the code/system for the course organisers.
The course apparently used the platform and codebase, with modifications, for a few years with no problems.
Hardware platform with a camera module that could be rotated around two axes. PIC board controlled rotation via stepper and brushed-DC motors. The ARM board worked in tandem with a VDEC1 video decoding co-processor to manipulate camera images, and used an FPGA to help accelerate certain image decoding operations. ARM/PIC/VDEC1 all talked over I2C. Working example provided to staff was simple colour space conversion. A theoretical example application for the platform was motion detection & automated tracking.
Prototype for a procedurally-generated detective game featuring the "realistic" simulation of people, their emotions and crimes. The prototype currently uses a text-based input system written in Python. (~4k kloc)
Documentation and design for full game underway.
An unfinished mod for Kerbal Space Program (KSP). Attempt at "full system" computer emulation inside of KSP, which would allow players to make automated and self-programmable rocket flights (rather than manual ones, or a completely automated/cheat flights like MehcJeb) and add an element of program- and circuit-design mistake-based-fun to go along with the Rocket-science mistake-based-fun already present in the game.
CPU emulation mostly complete, aside from: adding more op codes, more trap conditions, different configurations (e.g. instantiable as 8/16/24/32-bit CPU etc), and a vigorous re-factoring of the C#.
LLVM backend was planned but not functionally implemented.
Circuit simulation is in research + design stage only. Lots of circuit simulation techniques read about, but no code committed as of yet.
~12kloc lines of C#, ~4.5kloc of test programs written in ksp_pfc assembly.
A few Python scripts to help clean up an exported Google Sheets spreadsheet and "rank" every computer game I've ever played.
A multitude of small arcade-era style games in Python/PyGame (pacman, tetris etc).
Pong in C/SDL using MinGW.
A few other larger-scope but completely unfinished games written in XNA/C#
|Advanced Use||C (c89, c99), DirectX 9/10/11, HLSL (shaders)|
|Everyday Use||Python, Debugging of IEEE 754/floating point problems (C & GPU HW), Windows Xp/Vista/7/8/10 drivers (WDDM, DirectX), WHQL/WHCK/WLK, GPU synchronisation, concurrent programming/data access, cache coherency, GPU assembly,|
|Frequent Use||Assembly (x86, x86-64, ARM, GPU), Direct2D, doxygen, nmake (Microsoft version), msbuild, CMake, MinGW, MSys, SDL (via both PyGame and C API), C#, C++ (C++98, C++03)|
|Infrequent||Java, c11, OpenGL 4.5, GLSL 4.5, gdb, POSIX + Gnu/Linux utilities (grep, sed, awk, etc), Win32 API, COM, XNA 4.0 (+ MonoGame), HTML 5.0, CSS, Event Tracing for Windows (ETW), MISRA C rules|
|I used this once to do something useful and still vaguely remember how to use it||Android, DirectX12, Vulkan, OpenCL, Pic18 assembly, Perl, MATLAB, MPLab, Apple's Metal API, AMD's Mantle API, SystemC, Ruby, Verilog, VHDL, Modern C++ (C++11 C++14), PHP, Oracle SQL & MySQL, LLVM backend + LLVM language ref, Lex, Yacc, Bash scripts|
|Advanced Knowledge||git, Pix For Windows|
|Configure/Use||Mantis bug tracker, ReviewBoard, CVS, SVN, Mercurial (Hg)|
|Normal Everyday Use||Windows, Linux, Visual Studio, WinDBG (kernel + user-mode), Perforce, MKS, Microsoft Project (Gannt chart), RenderDoc, Serena business mishaps (formally TeamTrack), CA Clarity PPM, Openproject, Bugzilla, Eclipse, Jenkins, Microsoft connect, Microsoft Driver Verifier|
|Used a Few Times||GPUView, PVRTune, Intel VTune, ApiTrace, OllyDbg, Cadence Tools (Schematic & CMOS Layout editors. NC-Verilog/NCSim & Verilog XL simulators), Mentor Graphics (Schematic), SoftICE, XPerf, LaTeX|
|Micro‑controllers||All PowerVR GPUs from MBX to Rogue (series 3-7), parts of PowerVR Series 8, some PowerVR video & display cores, Intel Poulsbo (GMA 500), Intel Atoms, AT91SAM9621 (ARM9 based), AT91M40800 (ARM7), PIC18LF452, Xilinx Virtex & Spartan FPGAs, Analog Devices ADV7183B (Digilent VDEC1 video decoder chip). Some time with Arduino and Raspberry Pi.|
|Peripheral Hardware & Protocols||PCI bus, I2C, UART, USART, RS232, SPI. Analogue and digital PIOs. Interrupts, Power Management controllers etc. Motor control, Character LCDs. Watchdog/One-shot timers, 555 timers, etc.|
|Practical tools||Oscilloscopes, Signal Generators, Soldering Iron, Digital multimeters/Volt-Ohm meters|