mirror of https://github.com/libsdl-org/SDL.git
Harmony port: video vulkan library & disable version test
This commit is contained in:
parent
addb748c64
commit
845ba7d5ce
|
|
@ -236,7 +236,7 @@ jobs:
|
|||
${{ matrix.platform.source-cmd }}
|
||||
cmake --build build --config ${{ matrix.platform.cmake-build-type }} --verbose -- ${{ matrix.platform.cmake-build-arguments }}
|
||||
- name: 'Verify SDL_REVISION'
|
||||
if: ${{ !matrix.platform.no-cmake }}
|
||||
if: ${{ !matrix.platform.no-cmake && matrix.platform.platform != 'harmony' }}
|
||||
run: |
|
||||
echo "This should show us the SDL_REVISION"
|
||||
echo "Shared library:"
|
||||
|
|
|
|||
|
|
@ -1512,6 +1512,16 @@ elseif(OHOS)
|
|||
sdl_link_dependency(OHOS_LIBS LIBS ace_napi.z hilog_ndk.z ace_ndk.z rawfile.z pixelmap_ndk.z)
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/ohos/*.c")
|
||||
|
||||
if(SDL_VIDEO)
|
||||
set(SDL_VIDEO_DRIVER_OHOS 1)
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/ohos/*.c")
|
||||
set(HAVE_SDL_VIDEO TRUE)
|
||||
set(SDL_VULKAN ON)
|
||||
set(HAVE_VULKAN ON)
|
||||
set(SDL_VIDEO_VULKAN ON)
|
||||
set(HAVE_RENDER_VULKAN TRUE)
|
||||
endif()
|
||||
|
||||
set(SDL_LOADSO_DLOPEN 1)
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/loadso/dlopen/*.c")
|
||||
set(HAVE_SDL_LOADSO TRUE)
|
||||
|
|
|
|||
|
|
@ -542,6 +542,7 @@ extern VideoBootStrap Emscripten_bootstrap;
|
|||
extern VideoBootStrap OFFSCREEN_bootstrap;
|
||||
extern VideoBootStrap QNX_bootstrap;
|
||||
extern VideoBootStrap OPENVR_bootstrap;
|
||||
extern VideoBootStrap OHOS_bootstrap;
|
||||
|
||||
extern bool SDL_UninitializedVideo(void);
|
||||
// Use SDL_OnVideoThread() sparingly, to avoid regressions in use cases that currently happen to work
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
#include "SDL_internal.h"
|
||||
#include "../SDL_sysvideo.h"
|
||||
|
||||
#ifdef SDL_VIDEO_DRIVER_OHOS
|
||||
#include "SDL_ohosvulkan.h"
|
||||
|
||||
bool OHOS_VideoInit(SDL_VideoDevice *_this)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
void OHOS_VideoQuit(SDL_VideoDevice *_this)
|
||||
{
|
||||
}
|
||||
static SDL_VideoDevice *OHOS_CreateDevice(void)
|
||||
{
|
||||
SDL_VideoDevice *device;
|
||||
|
||||
device = (SDL_VideoDevice *)SDL_calloc(1, sizeof(SDL_VideoDevice));
|
||||
if (!device) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
device->VideoInit = OHOS_VideoInit;
|
||||
device->VideoQuit = OHOS_VideoQuit;
|
||||
#ifdef SDL_VIDEO_VULKAN
|
||||
device->Vulkan_LoadLibrary = OHOS_Vulkan_LoadLibrary;
|
||||
device->Vulkan_UnloadLibrary = OHOS_Vulkan_UnloadLibrary;
|
||||
#endif
|
||||
|
||||
|
||||
return device;
|
||||
}
|
||||
VideoBootStrap OHOS_bootstrap = {
|
||||
"ohos", "OpenHarmony video driver",
|
||||
OHOS_CreateDevice,
|
||||
NULL,
|
||||
false
|
||||
};
|
||||
#endif
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
#include "SDL_ohosvulkan.h"
|
||||
#include "SDL_internal.h"
|
||||
#include "../khronos/vulkan/vulkan.h"
|
||||
|
||||
#ifdef SDL_VIDEO_DRIVER_OHOS
|
||||
|
||||
static int loadedCount = 0;
|
||||
bool OHOS_Vulkan_LoadLibrary(SDL_VideoDevice *_this, const char *path)
|
||||
{
|
||||
PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = NULL;
|
||||
if (_this->vulkan_config.loader_handle)
|
||||
{
|
||||
return SDL_SetError("Vulkan already loaded");
|
||||
}
|
||||
|
||||
/* Load the Vulkan loader library */
|
||||
if (!path)
|
||||
{
|
||||
path = SDL_getenv("SDL_VULKAN_LIBRARY");
|
||||
}
|
||||
if (!path)
|
||||
{
|
||||
path = "libvulkan.so";
|
||||
}
|
||||
_this->vulkan_config.loader_handle = SDL_LoadObject(path);
|
||||
if (!_this->vulkan_config.loader_handle)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
SDL_strlcpy(_this->vulkan_config.loader_path, path,
|
||||
SDL_arraysize(_this->vulkan_config.loader_path));
|
||||
vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)SDL_LoadFunction(
|
||||
_this->vulkan_config.loader_handle, "vkGetInstanceProcAddr");
|
||||
if (!vkGetInstanceProcAddr)
|
||||
{
|
||||
goto fail;
|
||||
}
|
||||
_this->vulkan_config.vkGetInstanceProcAddr = (void *)vkGetInstanceProcAddr;
|
||||
_this->vulkan_config.vkEnumerateInstanceExtensionProperties =
|
||||
(void *)((PFN_vkGetInstanceProcAddr)_this->vulkan_config.vkGetInstanceProcAddr)(
|
||||
VK_NULL_HANDLE, "vkEnumerateInstanceExtensionProperties");
|
||||
if (!_this->vulkan_config.vkEnumerateInstanceExtensionProperties)
|
||||
{
|
||||
goto fail;
|
||||
}
|
||||
loadedCount++;
|
||||
return true;
|
||||
|
||||
fail:
|
||||
SDL_UnloadObject(_this->vulkan_config.loader_handle);
|
||||
_this->vulkan_config.loader_handle = NULL;
|
||||
return false;
|
||||
}
|
||||
|
||||
void OHOS_Vulkan_UnloadLibrary(SDL_VideoDevice *_this)
|
||||
{
|
||||
if (loadedCount == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
loadedCount--;
|
||||
if (_this->vulkan_config.loader_handle && loadedCount == 0) {
|
||||
SDL_UnloadObject(_this->vulkan_config.loader_handle);
|
||||
_this->vulkan_config.loader_handle = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/*bool OHOS_Vulkan_GetInstanceExtensions(SDL_VideoDevice *_this, SDL_Window *window, unsigned *count,
|
||||
const char **names)
|
||||
{
|
||||
static const char *const extensionsForOHOS[] = {
|
||||
VK_KHR_SURFACE_EXTENSION_NAME, VK_KHR_OHOS_XCOMPONENT_EXTENSION_NAME
|
||||
};
|
||||
if (!_this->vulkan_config.loader_handle) {
|
||||
SDL_SetError("Vulkan is not loaded");
|
||||
return false;
|
||||
}
|
||||
return SDL_Vulkan_GetInstanceExtensions_Helper(
|
||||
count, names, SDL_arraysize(extensionsForOHOS), extensionsForOHOS);
|
||||
}*/
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
#ifndef SDL_OHOSVULKAN_H
|
||||
#define SDL_OHOSVULKAN_H
|
||||
|
||||
#ifdef SDL_VIDEO_DRIVER_OHOS
|
||||
#include "../SDL_sysvideo.h"
|
||||
|
||||
bool OHOS_Vulkan_LoadLibrary(SDL_VideoDevice *_this, const char *path);
|
||||
void OHOS_Vulkan_UnloadLibrary(SDL_VideoDevice *_this);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Loading…
Reference in New Issue