cocoa: untested vulkan code
Some checks failed
pyrite-dev/milsko/pipeline/head There was a failure building this commit
Some checks failed
pyrite-dev/milsko/pipeline/head There was a failure building this commit
This commit is contained in:
parent
32f99b62b6
commit
065b0d824c
4 changed files with 43 additions and 0 deletions
|
|
@ -70,6 +70,11 @@ if(MW_TRY_VULKAN)
|
|||
if(HAVE_VULKAN_VULKAN_H)
|
||||
set(MW_BUILD_VULKAN ON)
|
||||
list(APPEND SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/widget/vulkan.c")
|
||||
target_compile_definitions(
|
||||
Mw
|
||||
PRIVATE
|
||||
MW_VULKAN
|
||||
)
|
||||
message(STATUS "Vulkan widget has been enabled")
|
||||
else()
|
||||
message(WARNING "Vulkan widget has been disabled")
|
||||
|
|
|
|||
|
|
@ -131,6 +131,7 @@ if (param_get("opengl")) {
|
|||
new_object("src/widget/opengl.c");
|
||||
}
|
||||
if (param_get("vulkan")) {
|
||||
add_cflags("-DMW_VULKAN");
|
||||
new_object("src/widget/vulkan.c");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,11 @@
|
|||
#include "../../external/stb_ds.h"
|
||||
#include "Mw/LowLevel/Cocoa.h"
|
||||
|
||||
#ifdef MW_VULKAN
|
||||
#include <vulkan/vulkan_core.h>
|
||||
#include <vulkan/vulkan_metal.h>
|
||||
#endif
|
||||
|
||||
#ifdef __clang__
|
||||
#pragma clang push
|
||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||
|
|
@ -1087,5 +1092,17 @@ static int MwLLCocoaCallInitImpl(void) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef MW_VULKAN
|
||||
VkMetalSurfaceCreateInfoEXT MwCocoaGetMetalSurfaceCreateInfo(MwWidget handle) {
|
||||
VkMetalSurfaceCreateInfoEXT createInfo = {
|
||||
.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT,
|
||||
.pNext = NULL,
|
||||
.flags = 0,
|
||||
.pLayer = (CAMetalLayer*)[handle->lowlevel->cocoa.real->view layer],
|
||||
};
|
||||
return createInfo;
|
||||
};
|
||||
#endif
|
||||
|
||||
#include "call.c"
|
||||
CALL(Cocoa);
|
||||
|
|
|
|||
|
|
@ -26,6 +26,9 @@
|
|||
#ifdef USE_WAYLAND
|
||||
#include <vulkan/vulkan_wayland.h>
|
||||
#endif
|
||||
#ifdef USE_COCOA
|
||||
#include <vulkan/vulkan_metal.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAS_VK_ENUM_STRING_HELPER
|
||||
#include <vulkan/vk_enum_string_helper.h>
|
||||
|
|
@ -167,6 +170,8 @@ static void destroy(MwWidget handle) {
|
|||
static void* vulkan_lib_load() {
|
||||
#ifdef _WIN32
|
||||
return MwDynamicOpen("vulkan-1.dll");
|
||||
#elif defined(__APPLE__)
|
||||
return MwDynamicOpen("libvulkan.dylib");
|
||||
#else
|
||||
return MwDynamicOpen("libvulkan.so");
|
||||
#endif
|
||||
|
|
@ -230,6 +235,11 @@ static int vulkan_instance_setup(MwWidget handle, vulkan_t* o) {
|
|||
MwWaylandAlwaysRender = MwTRUE;
|
||||
}
|
||||
#endif
|
||||
#ifdef USE_WAYLAND
|
||||
if(handle->lowlevel->common.type == MwLLBackendCocoa) {
|
||||
arrput(enabledExtensions, VK_EXT_METAL_SURFACE_EXTENSION_NAME);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* passing null gives us all the extensions provided by the current vulkan implementation */
|
||||
VK_CMD(_vkEnumerateInstanceExtensionProperties(NULL, &extension_count, NULL));
|
||||
|
|
@ -338,6 +348,16 @@ static int vulkan_surface_setup(MwWidget handle, vulkan_t* o) {
|
|||
};
|
||||
VK_CMD(_vkCreateWaylandSurfaceKHR(o->vkInstance, &createInfo, NULL, &o->vkSurface));
|
||||
}
|
||||
#endif
|
||||
#ifdef USE_COCOA
|
||||
if(handle->lowlevel->common.type == MwLLBackendCocoa) {
|
||||
VkMetalSurfaceCreateInfoEXT MwCocoaGetMetalSurfaceCreateInfo(MwWidget handle);
|
||||
VkMetalSurfaceCreateInfoEXT inf = MwCocoaGetMetalSurfaceCreateInfo(handle);
|
||||
|
||||
LOAD_VK_FUNCTION(vkCreateMetalSurfaceEXT);
|
||||
|
||||
VK_CMD(_vkCreateMetalSurfaceEXT(o->vkInstance, &inf, NULL, &o->vkSurface));
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue