Releases: derfsss/VulkanOS4
Release list
VulkanOS4 v1.3
VulkanOS4 v1.3 -- Vulkan 1.3 for AmigaOS 4 PowerPC.
Verified end-to-end on real X5000 hardware with the Radeon GPU ICD
(ogles2_vk.library) and qemu-sam460 with the software ICD
(software_vk.library). 24/24 example programs run to clean exit;
the new 24_proc_addr regression test passes 23/23 assertions on both ICDs.
Install: download VulkanOS4.lha, extract, Execute Autoinstall from a Shell.
Build from source: make all then make dist-lha (requires Docker Desktop
and the walkero/amigagccondocker:os4-gcc11 image).
1.3 -- 2026-05-13
ABI and compatibility fixes; presentation correctness; build hygiene.
Many of the underlying issues were diagnosed by Andrea Palmate'
(afxgroup) in
PR #1.
ICD changes:
- Fix
vkGetDeviceProcAddrABI: the GPU ICD'sLookupRawProcAddr
previously fell back to APICALL trampolines for unlisted names,
which slid every argument by one register slot when called as raw
PFN_vk*. Expanded theRAWtable to mirror the fullDISPATCH
table (~210 entries) and replaced the fallback withreturn NULL.
Also extended the SW ICD'sRAWtable with the four surface queries
and five swapchain entry points it was missing. - Honour
VK_PRESENT_MODE_FIFO_KHRin the GPU ICD via OGLES2 vsync.
The OGLES2 context was previously created withOGLES2_CCT_VSYNC=0
hard-coded, regardless of the swapchain'spresentMode. With vsync
off,aglSwapBuffersreturned immediately, the CPU loop submitted
thousands of frames per second, and the Warp3D Nova compositor's
per-refresh sampling produced visible animation skipping on
rotating-cube examples regardless of the display's actual refresh
rate. NowvkCreateSwapchainKHRtoggles vsync viaaglSetParams2
based on the swapchain'spresentMode, so FIFO/FIFO_RELAXED/MAILBOX
vsync pace to whatever refresh rate the W3D Nova driver reports. - Give
vkWaitForFencesreal CPU/GPU sync viaglFinish. The GPU
ICD's fence wait was a no-op (just flipping a boolean) which let
the CPU loop outrun the GPU and queue up frames the compositor
never displays. CallingglFinishbefore marking fences signalled
matches the standard Vulkan spec semantic and tightens up the
frame-time distribution even in FIFO mode (max frame-time dropped
from a 1.2 s outlier tail to ~14.7 ms). - Detect SPIR-V endianness from the magic word in the SW ICD, rather
than unconditionally byte-swapping. Per the Vulkan spec, the magic
word may be supplied in either endianness. The previous behaviour
was wrong for callers that already produce host-byte-order SPIR-V
(e.g.uint32_tarray literals compiled on a big-endian host such
as ImGui's__glsl_shader_*_spvarrays on PowerPC). - GPU ICD: force
FORCE_FLATTENED_IO_BLOCKSin SPIRV-Cross and rename
vertex/fragment interface-block instances to a commonvaryso
Warp3D Nova's name-based GLSL ES linker can match varyings across
stages. - GPU ICD: add
VK_FORMAT_R8G8B8A8_UNORM(VkFormat 37) to the vertex
attribute mapping withGL_TRUEfor the normalised flag. ImGui
packs vertex colour in this format. - GPU ICD: set non-zero defaults for
bufferImageGranularity,
nonCoherentAtomSize, the variousmin*OffsetAlignmentand
max*Rangelimits. VMA divides by some of these during init and
on every allocation; zeroes causedvmaCreateImageto bail out
withVK_ERROR_OUT_OF_DEVICE_MEMORYbefore calling
vkAllocateMemory. - Add a
D(...)debug-print macro to both ICDs (no-op whenDEBUG
is undefined) and convert the existingIExec->DebugPrintFcall
sites. Lets release builds skip the trace overhead.
Examples and tests:
- New regression test example
24_proc_addr: 23 assertions across 7
function categories verifying thatvkGetDeviceProcAddrreturns
raw C-ABI pointers (no APICALL trampolines), so any future drift
between theDISPATCHandRAWtables fails on first run. - All graphical examples accept
-d N/--duration Nto exit after
N seconds. Default behaviour (no flag) unchanged. Animated examples
checktime(NULL)in the render loop; render-once examples use a
multi-signalWaiton the window port +timer.device+ CTRL-C. 21_image_texture/22_gltf_viewernow skip the-d Nflag when
scanning argv for their positional file argument, so they can be
used in automated test sweeps without spurious "file not found"
fallbacks.
Build / loader:
- Wire
$(DEBUG)into the Docker build recipes for the loader and
both ICDs (previously the variable existed but never reached the
compiler). - Refactor
software_icd/Makefile.crossto use pattern rules instead
of a single 80-line&&-chained shell pipeline; supports
incremental builds andmake -j. - Replace
strncpy+ manual null-terminate withsnprintfin the
loader ICD path tracking to silence a-Wstringop-truncation
warning.
VulkanOS4 v1.1.0
VulkanOS4 v1.1.0
SPIRV-Cross GPU ICD fixes and new example. All 23 examples verified on AmigaOne X5000/20 (P5020 2GHz, RX 560, RadeonRX 2.12).
What's New
- SPIRV-Cross GLSL backend enabled -- was compiled out in v1.0 (
SPIRV_CROSS_C_API_GLSLnot defined) - GPU ICD GLSL post-processing pipeline for Warp3D Nova shader compiler compatibility:
- Const array initializers converted to runtime assignments in
main() - Dynamic
gl_VertexIDarray indexing replaced with if-else chains using temp variables gl_InstanceIDrenamed tou_InstanceIndex(gl_prefix reserved by OGLES2 compiler)- Integer modulo (
%) replaced with(A - (A/B)*B)(not implemented in Warp3D Nova) #ifdef GL_ARB_shader_draw_parametersblocks stripped
- Const array initializers converted to runtime assignments in
- SPIRV-Cross static keyword set crash fix -- prevents DSI exception when library persists between program runs on AmigaOS
- Push constant uniform name fixed to always use
PushConstants(SPIRV-Cross flatten-UBO name) - Shader module transpile result caching -- fixes missing sampler uniforms when multiple pipelines share shader modules
- New example: 23_cow3d -- port of Alain Thellier's Cow3D demo with textured rotating 3D cow and cosmos space background
- Autoinstall runs
Avail FLUSHbefore/after install for clean library updates - Build timestamp in GPU ICD debug output for version verification
- Attribution added for ogles2.library (Daniel Muessener), Warp3DNova.library and RadeonRX/RadeonHD drivers (Hans de Ruiter)
Installation
Extract VulkanOS4.lha to RAM: and run Execute Autoinstall from the VulkanOS4 directory.
Requirements
- AmigaOS 4.1 Final Edition or later
- For GPU rendering: Radeon GPU + RadeonRX/RadeonHD driver + Warp3D Nova + ogles2.library
VulkanOS4 1.0.0
Initial release of VulkanOS4 -- Vulkan 1.3 for AmigaOS 4.
Included
- vulkan.library -- Vulkan loader with automatic ICD discovery
- software_vk.library -- Software ICD (CPU rendering, works on any AmigaOS 4 system)
- ogles2_vk.library -- GPU ICD (OGLES2/Warp3D Nova backend, requires Radeon GPU)
- SDK headers and link library for compiling Vulkan programs
- 22 example programs with source code and pre-compiled binaries
- Tools: vulkaninfo, VulkanPrefs, AmigaMark
- Autoinstall script
Key specs
- 218 Vulkan functions per ICD (100% Vulkan 1.3 core + WSI)
- 210+ SPIR-V opcodes
- SPIRV-Cross transpiler for GPU shader execution
Installation
Extract VulkanOS4.lha on your Amiga and run:
Execute Autoinstall
See the README for full installation and SDK setup instructions.