feat(vk): mesh-shader plumbing - *.mesh variants compile, a pointer call for commands the interposer lacks

ludic-dev shaders: a variant whose first file is *.mesh compiles that stage with
glslang -S mesh for Vulkan 1.3, without the vertex stage's depth-remap wrapper
or invariant gl_Position (a mesh shader writes an array of positions and
remaps depth itself). Its SPIR-V keeps the .vert name, so the manifest and the
loader are unchanged. The 51 existing programs build identical SPIR-V.

runtime: lsl_call_piii(fn, ptr, i32, i32, i32) calls a command-buffer command
through a pointer. NVIDIA Streamline's interposer exports no
vkCmdDrawMeshTasksEXT, so it is to be looked up per device with
vkGetDeviceProcAddr. Both runtimes assemble.

Nothing uses either yet.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Orkun ÇAKILKAYA 2026-09-15 20:00:26 +03:00
parent 762a74624c
commit 0224af64ab
3 changed files with 25 additions and 2 deletions

View file

@ -182,3 +182,11 @@ entry:
%r = call i32 %fn(i32 %a0, ptr %a1)
ret i32 %r
}
; a command-buffer command with three counts, through a pointer (vkCmdDrawMeshTasksEXT: the Streamline
; interposer exports no such command, so it is looked up per device with vkGetDeviceProcAddr)
define void @lsl_call_piii(ptr %fn, ptr %a0, i32 %a1, i32 %a2, i32 %a3) {
entry:
call void %fn(ptr %a0, i32 %a1, i32 %a2, i32 %a3)
ret void
}

View file

@ -323,3 +323,11 @@ entry:
%r = call i32 %fn(i32 %a0, ptr %a1)
ret i32 %r
}
; a command-buffer command with three counts, through a pointer (vkCmdDrawMeshTasksEXT: the Streamline
; interposer exports no such command, so it is looked up per device with vkGetDeviceProcAddr)
define void @lsl_call_piii(ptr %fn, ptr %a0, i32 %a1, i32 %a2, i32 %a3) {
entry:
call void %fn(ptr %a0, i32 %a1, i32 %a2, i32 %a3)
ret void
}