Single header implemenations of Vulkan and D3D12 renderers
Features
Single header for Vulkan renderer
Single header for D3D12 renderer
Texture upload + mipmap generation (better quality resizer coming soon)
Simplified API shared between both renderers
C style structs
Support for Vulkan layers
Configurable swapchain multi-sample
Configurable swapchain imagecount
Configurable swapchain depth/stencil attachment
Samples use GLFW GLFW Works for both Vulkan and D3D12 - renderer takes over after window handle is obtained
Image loading done via
Includes basic compute samples
Uses CMake
...more to come soon
Notes
Linux and Windows only for the moment Tested on open source intel driver on Linux
Tested on AMD and NVIDIA drivers on Windows
For best results, use latest drivers
Vulkan renderer will work with C/C++ For best results, use latest version of Vulkan SDK
D3D12 render requires C++
Microsoft's C compiler doesn't support certain C11/C99 features, such as VLAs (so alot of awkward array handling)
tinyvk/tinydx is written for experimentation and fun-having - not performance
For simplicity, only one descriptor set can be bound at once In D3D12, this means two descriptor heaps (CBVSRVUAVs and samplers)
For Vulkan shaders the 'set' parameter for 'layout' should always be 0
For D3D12 shaders the 'space' parameter for resource bindings should always be 0
Vulkan like idioms are used primarily with some D3D12 wherever it makes sense
For Vulkan, host visible means both HOST VISIBLE and HOST COHERENT
Bring your own math libraary
Development was done on Cinder but renderers are not limited to it
Compiling and Linking
In one C/C++ file that #includes the renderer's header file, do this:
#define TINY_RENDERER_IMPLEMENTATION #include "tinyvk.h" or
#define TINY_RENDERER_IMPLEMENTATION #include "tinydx.h" Building on Linux
git clone --recursive [email protected]:chaoticbob/tinyrenderers.git cd tinyrenderers mkdir build cd build cmake .. make Ubuntu and variants will require the follow packages
libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev Building on Windows
git clone --recursive [email protected]:chaoticbob/tinyrenderers.git cd tinyrenderers mkdir build cd build cmake -G "Visual Studio 14 2015 Win64" .. Open tinyrenderers.sln and go
Screenshots
Change Log
[2017/11/12] - Added simple tessellation shader sample. Fixed misc issues with pipeline setup for tessellation. [2017/11/10] - Added ChessSet demo. Added geometry shader sample. Fixes to depth stencil handling. [2017/11/10] - Added TexturedCube sample. Updated depth attachment handling on swapchain render pass. Switched out lc_image for stb_image. Added DXC shader build script. [2017/05/27] - Fixed some annoying buffer state transitions. Added build script for shaders. Updated shader naming convention to be more exact. Added OpaqueArgs and PassingArrays for investigation.
[2017/05/20] - Updated Append/Consume sample for Vulkan. Requires latest glslang. ConstantBuffer also works for both platforms.
[2017/05/13] - Added Linux support. Moved to project files to cmake. Moved glsl shaders to glsl sub directory - forcing HLSL for now.
[2017/04/30] - Clarified shader usage in some sample programs to point out which source they're coming from.
[2017/04/27] - Added ConstantBuffer sample (D3D12 only for now). Updated Vulkan samples to use negative viewport height.
[2017/04/25] - Updated SimpleCompute and StructuredBuffer to work on Vulkan.
[2017/04/24] - Added compute samples (D3D12 only for now). One for simple compute and another for structured buffers.