From 8a09d5701c74b3dc79ac99b301ca020d016c5182 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Tue, 21 Apr 2026 22:10:34 -0500 Subject: [PATCH] macos wip --- Makefile | 32 +++++++++++++++++------------- include/collada/scene/vulkan.h | 5 +++-- include/dds/vulkan.h | 3 ++- include/minecraft/vulkan.h | 3 ++- src/collada/scene/reload.cpp | 12 ++++++++--- src/collada/scene/vulkan.cpp | 13 ++++++++---- src/font/outline.cpp | 3 ++- src/main.cpp | 17 ++++++++-------- src/minecraft/vulkan.cpp | 3 ++- src/minecraft/vulkan/per_world.cpp | 3 ++- src/renpy/vulkan.cpp | 3 ++- src/vulkan_helper.cpp | 3 ++- tool/Makefile | 2 +- 13 files changed, 63 insertions(+), 39 deletions(-) diff --git a/Makefile b/Makefile index f224b7a..055fd9c 100644 --- a/Makefile +++ b/Makefile @@ -7,15 +7,19 @@ OBJARCH = elf64-x86-64 UNAME := $(shell uname -s) -OPT += -O3 -march=x86-64-v3 +OPT += -O0 +OPT += -march=core-avx2 DEBUG = -g -CSTD = -std=gnu23 -CXXSTD = -std=gnu++23 +CSTD = -std=gnu17 +CXXSTD = -std=gnu++20 CFLAGS += -Wall -Werror CFLAGS += -Wfatal-errors -CFLAGS += -Wno-error=unused-variable -Wno-error=unused-but-set-variable +CFLAGS += -Wno-error=unused-variable +#CFLAGS += -Wno-error=unused-but-set-variable +CFLAGS += -Wno-format-security +CFLAGS += -Wno-format CFLAGS += -Wno-error=unused-function CFLAGS += -Wno-error=array-bounds CFLAGS += -Wno-unknown-pragmas @@ -23,6 +27,9 @@ CFLAGS += -fno-strict-aliasing CFLAGS += -I./include CFLAGS += -I./data CFLAGS += -I../SDL3-dist/include +ifeq ($(UNAME),Darwin) +CFLAGS += -I../MoltenVK/MoltenVK/include +endif CFLAGS += -fpic CFLAGS += -ffunction-sections CFLAGS += -fdata-sections @@ -30,14 +37,17 @@ CFLAGS += -fdata-sections #FLAGS += -fstack-protector -fstack-protector-all -fno-omit-frame-pointer -fsanitize=address LDFLAGS += -lm -LDFLAGS += -Wl,--gc-sections +#LDFLAGS += -Wl,--gc-sections #-Wl,--print-gc-sections ifeq ($(UNAME),Linux) LDFLAGS += -Wl,-z noexecstack endif ifeq ($(UNAME),Darwin) -LDFLAGS += -framework Foundation -framework Cocoa -framework IOKit -framework AVFoundation -framework CoreVideo -framework CoreAudio -framework CoreMedia -framework CoreHaptics -framework AudioToolbox -framework GameController -framework ForceFeedback -framework Carbon -framework Metal -framework QuartzCore -framework UniformTypeIdentifiers +LDFLAGS += -framework Foundation -framework Cocoa -framework IOKit -framework AVFoundation -framework CoreVideo -framework CoreAudio -framework CoreMedia -framework CoreHaptics -framework AudioToolbox -framework GameController -framework ForceFeedback -framework Carbon -framework Metal -framework QuartzCore -framework UniformTypeIdentifiers LDFLAGS += -lstdc++ +#LDFLAGS += ../MoltenVK/MoltenVK/static/MoltenVK.xcframework/macos-arm64_x86_64/libMoltenVK.a +LDFLAGS += -framework IOSurface +LDFLAGS += ../MoltenVK-1.4.0/libMoltenVK.a-x86_64-master.o endif # src/collada/scene/vulkan.o \ @@ -52,8 +62,6 @@ endif OBJS = \ src/main.o \ - src/view.o \ - src/volk/volk.o \ src/file.o \ src/pack.o \ src/dds/validate.o \ @@ -65,10 +73,6 @@ OBJS = \ src/renpy/interpreter.o \ src/renpy/interact.o -WORLDS = \ - data/minecraft/midnightmeadow/inthash.o \ - data/minecraft/grandlecturn/inthash.o - SCENES = \ data/scenes/shadow_test/shadow_test.o \ data/scenes/eidelwind/eidelwind.o @@ -98,8 +102,8 @@ all: main main: $(OBJS) $(LIBS) $(SCENES) $(WORLDS) $(CC) $(ARCH) $(LDFLAGS) $(FLAGS) $(OPT) $(DEBUG) $^ -o $@ -%.spv: %.hlsl - ../dxc/bin/dxc -spirv -T lib_6_3 -fspv-target-env=vulkan1.3 $< -Fo $@ +#%.spv: %.hlsl +# ../dxc/bin/dxc -spirv -T lib_6_3 -fspv-target-env=vulkan1.3 $< -Fo $@ tool/pack_file: tool/pack_file.cpp make -C tool pack_file diff --git a/include/collada/scene/vulkan.h b/include/collada/scene/vulkan.h index 1518261..e6add0f 100644 --- a/include/collada/scene/vulkan.h +++ b/include/collada/scene/vulkan.h @@ -1,6 +1,7 @@ #pragma once -#include "volk/volk.h" +//#include "volk/volk.h" +#include "vulkan/vulkan.h" #include "collada/types.h" #include "collada/instance_types.h" @@ -49,7 +50,7 @@ namespace collada::scene { static constexpr uint32_t uniformBufferDescriptorCount = maxFrames * perFrameDescriptorCount + constantDescriptorCount; // +3: linear sampler, shadow sampled image, scene sampled image (array) static constexpr uint32_t bindingCount = uniformBufferDescriptorCount + 3; - static constexpr int shaderVariantCount = 3; + static constexpr int shaderVariantCount = 2; static constexpr uint32_t maxJointsCount = 128; // externally initialized, opaque handle diff --git a/include/dds/vulkan.h b/include/dds/vulkan.h index 0db558f..09852aa 100644 --- a/include/dds/vulkan.h +++ b/include/dds/vulkan.h @@ -3,7 +3,8 @@ #include #include "dds/dds.h" -#include "volk/volk.h" +//#include "volk/volk.h" +#include "vulkan/vulkan.h" namespace dds { inline constexpr VkFormat dxgi_to_vulkan(DXGI_FORMAT dxgiFormat) diff --git a/include/minecraft/vulkan.h b/include/minecraft/vulkan.h index 83c11db..5fdd202 100644 --- a/include/minecraft/vulkan.h +++ b/include/minecraft/vulkan.h @@ -1,7 +1,8 @@ #pragma once #include "directxmath/directxmath.h" -#include "volk/volk.h" +#include "vulkan/vulkan.h" +//#include "volk/volk.h" #include "vulkan_helper.h" #include "minecraft/vulkan/per_world.h" diff --git a/src/collada/scene/reload.cpp b/src/collada/scene/reload.cpp index 13158ac..f855785 100644 --- a/src/collada/scene/reload.cpp +++ b/src/collada/scene/reload.cpp @@ -6,6 +6,12 @@ #include "new.h" #include "collada/scene/reload.h" +#ifdef __APPLE__ +#define MTIME(s) ((s).st_mtimespec) +#else +#define MTIME(s) ((s).st_mtim) +#endif + namespace collada::scene { void reload::load_images(types::descriptor const * const descriptor) { @@ -37,7 +43,7 @@ namespace collada::scene { if (ret != 0) break; - if (statbuf.st_mtim.tv_sec != imageStats[i].mtime.tv_sec || statbuf.st_mtim.tv_nsec != imageStats[i].mtime.tv_nsec) { + if (MTIME(statbuf).tv_sec != imageStats[i].mtime.tv_sec || MTIME(statbuf).tv_nsec != imageStats[i].mtime.tv_nsec) { if (statbuf.st_size != size) { size = statbuf.st_size; usleep(500); @@ -48,8 +54,8 @@ namespace collada::scene { reload = true; vulkan.destroy_image(i); vulkan.load_image(i, imageStats[i].filenameTGA); - imageStats[i].mtime.tv_sec = statbuf.st_mtim.tv_sec; - imageStats[i].mtime.tv_nsec = statbuf.st_mtim.tv_nsec; + imageStats[i].mtime.tv_sec = MTIME(statbuf).tv_sec; + imageStats[i].mtime.tv_nsec = MTIME(statbuf).tv_nsec; } break; } diff --git a/src/collada/scene/vulkan.cpp b/src/collada/scene/vulkan.cpp index 87166ba..d89d72e 100644 --- a/src/collada/scene/vulkan.cpp +++ b/src/collada/scene/vulkan.cpp @@ -4,7 +4,8 @@ #include #include -#include "volk/volk.h" +//#include "volk/volk.h" +#include "vulkan/vulkan.h" #include "vulkan/vk_enum_string_helper.h" #include "collada/inputs.h" @@ -370,13 +371,13 @@ namespace collada::scene { .binding = 0, .descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, .descriptorCount = 1, - .stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_GEOMETRY_BIT + .stageFlags = VK_SHADER_STAGE_VERTEX_BIT// | VK_SHADER_STAGE_GEOMETRY_BIT }, { .binding = 1, .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, .descriptorCount = 1, - .stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_GEOMETRY_BIT + .stageFlags = VK_SHADER_STAGE_VERTEX_BIT// | VK_SHADER_STAGE_GEOMETRY_BIT }, { .binding = 2, @@ -770,7 +771,7 @@ namespace collada::scene { { VkPushConstantRange pushConstantRanges[1]{ { - .stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT | VK_SHADER_STAGE_GEOMETRY_BIT, + .stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT,// | VK_SHADER_STAGE_GEOMETRY_BIT, .offset = 0, .size = (sizeof (PushConstant)) } @@ -805,6 +806,7 @@ namespace collada::scene { } }; + /* VkPipelineShaderStageCreateInfo geometryShaderStages[3]{ { .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, @@ -825,6 +827,7 @@ namespace collada::scene { .pName = "PSGeometryMain" } }; + */ VkPipelineShaderStageCreateInfo shadowShaderStages[2]{ { @@ -972,6 +975,7 @@ namespace collada::scene { }; // geometry + /* pipelineCreateInfos[i * shaderVariantCount + 2] = { .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, .pNext = &renderingCreateInfo, @@ -987,6 +991,7 @@ namespace collada::scene { .pDynamicState = &dynamicState, .layout = pipelineLayout }; + */ }; pipelines = NewM(pipelineCount); diff --git a/src/font/outline.cpp b/src/font/outline.cpp index 007d3ea..a94749b 100644 --- a/src/font/outline.cpp +++ b/src/font/outline.cpp @@ -2,7 +2,8 @@ #include #include -#include "volk/volk.h" +//#include "volk/volk.h" +#include "vulkan/vulkan.h" #include "vulkan/vk_enum_string_helper.h" #include "directxmath/directxmath.h" diff --git a/src/main.cpp b/src/main.cpp index 0d93c37..2bbfa69 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,7 +1,8 @@ #include #include -#include "volk/volk.h" +//#include "volk/volk.h" +#include "vulkan/vulkan.h" #include "vulkan/vk_enum_string_helper.h" #include "SDL3/SDL.h" #include "SDL3/SDL_vulkan.h" @@ -19,7 +20,7 @@ #include "collada/scene.h" #include "collada/scene/vulkan.h" -#include "minecraft/vulkan.h" +//#include "minecraft/vulkan.h" #include "font/outline.h" #include "renpy/vulkan.h" #include "renpy/interpreter.h" @@ -348,8 +349,8 @@ void gamepad_update(view & viewState) float delta_yaw = rightx * -0.035; float delta_pitch = righty * -0.035; - viewState.applyTransform(delta_forward, delta_strafe, delta_elevation, - delta_yaw, delta_pitch); + //viewState.applyTransform(delta_forward, delta_strafe, delta_elevation, + //delta_yaw, delta_pitch); } } @@ -357,7 +358,7 @@ int main() { SDL_CHECK(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMEPAD)); SDL_CHECK(SDL_Vulkan_LoadLibrary(NULL)); - volkInitialize(); + //volkInitialize(); VkApplicationInfo appInfo{ .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO, @@ -376,7 +377,7 @@ int main() }; VK_CHECK(vkCreateInstance(&instanceCreateInfo, nullptr, &instance)); - volkLoadInstance(instance); + //volkLoadInstance(instance); ////////////////////////////////////////////////////////////////////// // physical device and queue family index @@ -478,7 +479,7 @@ int main() .dynamicRendering = true, }; VkPhysicalDeviceFeatures enabledFeatures{ - .geometryShader = true, + //.geometryShader = true, .samplerAnisotropy = true, }; constexpr uint32_t enabledExtensionCount = 1; @@ -1040,7 +1041,7 @@ int main() .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR, .storeOp = VK_ATTACHMENT_STORE_OP_STORE, //.clearValue{ .color{ 0.0f, 0.0f, 0.2f, 1.0f } } - .clearValue{ .color{ 0.0f, 0.0f, 0.0f, 0.0f } } + .clearValue{ .color{ { 0.0f, 0.0f, 0.0f, 0.0f} } } }; VkRenderingAttachmentInfo depthRenderingAttachmentInfo{ .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO, diff --git a/src/minecraft/vulkan.cpp b/src/minecraft/vulkan.cpp index 163bfe8..e718dec 100644 --- a/src/minecraft/vulkan.cpp +++ b/src/minecraft/vulkan.cpp @@ -1,7 +1,8 @@ #include #include -#include "volk/volk.h" +//#include "volk/volk.h" +#include "vulkan/vulkan.h" #include "vulkan/vk_enum_string_helper.h" #include "file.h" diff --git a/src/minecraft/vulkan/per_world.cpp b/src/minecraft/vulkan/per_world.cpp index e96d39c..f372578 100644 --- a/src/minecraft/vulkan/per_world.cpp +++ b/src/minecraft/vulkan/per_world.cpp @@ -1,7 +1,8 @@ #include #include -#include "volk/volk.h" +//#include "volk/volk.h" +#include "vulkan/vulkan.h" #include "vulkan/vk_enum_string_helper.h" #include "new.h" diff --git a/src/renpy/vulkan.cpp b/src/renpy/vulkan.cpp index 32695f7..6380c9c 100644 --- a/src/renpy/vulkan.cpp +++ b/src/renpy/vulkan.cpp @@ -1,6 +1,7 @@ #include -#include "volk/volk.h" +//#include "volk/volk.h" +#include "vulkan/vulkan.h" #include "vulkan/vk_enum_string_helper.h" #include "dds/validate.h" diff --git a/src/vulkan_helper.cpp b/src/vulkan_helper.cpp index 824fa67..1f75d6d 100644 --- a/src/vulkan_helper.cpp +++ b/src/vulkan_helper.cpp @@ -3,7 +3,8 @@ #include #include -#include "volk/volk.h" +//#include "volk/volk.h" +#include "vulkan/vulkan.h" #include "vulkan/vk_enum_string_helper.h" #include "minmax.h" diff --git a/tool/Makefile b/tool/Makefile index 54f1ec5..2603df8 100644 --- a/tool/Makefile +++ b/tool/Makefile @@ -2,4 +2,4 @@ OPT = -O2 CFLAGS = -I../include pack_file: pack_file.cpp - g++ -o $@ $(OPT) $(CFLAGS) $^ + g++ -std=c++11 -o $@ $(OPT) $(CFLAGS) $^