feat(render3d): 22.10 - ludic.render3d carries MoltenVK, so a Mac program has its Vulkan driver
native/build.sh builds MoltenVK v1.4.2 from its pinned, checksummed tag (its dependencies at the commits its ExternalRevisions pins), thinned to arm64, id @rpath/libMoltenVK.dylib, signed ad hoc; its licence goes in native/LICENSE-MoltenVK. Every render3d program links it through its rpath - the package's lib/ while developing, Contents/Frameworks in a bundle, where ludic bundle puts and signs it - and vk_mac.ll also looks for @rpath/libMoltenVK.dylib (after an SDK loader, so the validation layer still stacks in development). The suite's SDK stand-in (vk_env) is gone: the render checks draw on the MoltenVK the package carries. gpu_is_gl() removed; nothing calls it. ludic-dev test 306/306 with no Vulkan SDK in the environment. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
25f4d49e43
commit
9425bdc4e5
9 changed files with 254 additions and 23 deletions
|
|
@ -27,6 +27,7 @@ declare i32 @lvk_bind()
|
|||
@.lvk_fmt = private unnamed_addr constant [25 x i8] c"%s/lib/libvulkan.1.dylib\00"
|
||||
@.lvk_fmtm = private unnamed_addr constant [25 x i8] c"%s/lib/libMoltenVK.dylib\00"
|
||||
@.lvk_m0 = private unnamed_addr constant [49 x i8] c"@executable_path/../Frameworks/libMoltenVK.dylib\00"
|
||||
@.lvk_mr = private unnamed_addr constant [25 x i8] c"@rpath/libMoltenVK.dylib\00"
|
||||
@.lvk_m1 = private unnamed_addr constant [35 x i8] c"@executable_path/libMoltenVK.dylib\00"
|
||||
@.lvk_m2 = private unnamed_addr constant [18 x i8] c"libMoltenVK.dylib\00"
|
||||
@lvk_lib = internal global ptr null
|
||||
|
|
@ -40,8 +41,9 @@ entry:
|
|||
|
||||
; the candidates in order: a Vulkan loader first (the SDK's, so the validation layer can be
|
||||
; stacked in development), then MoltenVK itself, which exports every vk* entry point and is what
|
||||
; a bundle ships in Contents/Frameworks - no loader, no ICD json.
|
||||
@lvk_paths = internal constant [7 x ptr] [ptr @.lvk_c0, ptr @.lvk_c1, ptr @.lvk_c2, ptr @.lvk_c3, ptr @.lvk_m0, ptr @.lvk_m1, ptr @.lvk_m2]
|
||||
; a bundle ships in Contents/Frameworks - no loader, no ICD json - or, found through the
|
||||
; executable's rpath, what ludic.render3d carries (lib/macos-arm64) for every other build.
|
||||
@lvk_paths = internal constant [8 x ptr] [ptr @.lvk_c0, ptr @.lvk_c1, ptr @.lvk_c2, ptr @.lvk_c3, ptr @.lvk_m0, ptr @.lvk_mr, ptr @.lvk_m1, ptr @.lvk_m2]
|
||||
|
||||
define i32 @lvk_open() {
|
||||
entry:
|
||||
|
|
@ -50,14 +52,14 @@ entry:
|
|||
br i1 %open, label %ok, label %loop
|
||||
loop:
|
||||
%i = phi i32 [ 0, %entry ], [ %i1, %next ]
|
||||
%slot = getelementptr [7 x ptr], ptr @lvk_paths, i32 0, i32 %i
|
||||
%slot = getelementptr [8 x ptr], ptr @lvk_paths, i32 0, i32 %i
|
||||
%path = load ptr, ptr %slot
|
||||
%h = call ptr @lvk_try(ptr %path)
|
||||
%miss = icmp eq ptr %h, null
|
||||
br i1 %miss, label %next, label %got
|
||||
next:
|
||||
%i1 = add i32 %i, 1
|
||||
%more = icmp slt i32 %i1, 7
|
||||
%more = icmp slt i32 %i1, 8
|
||||
br i1 %more, label %loop, label %sdk
|
||||
got:
|
||||
store ptr %h, ptr @lvk_lib
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue