Skip to content

Commit e339bde

Browse files
committed
Harmony port: video vulkan library
1 parent 4f5fcf6 commit e339bde

File tree

4 files changed

+69
-3
lines changed

4 files changed

+69
-3
lines changed

src/core/ohos/SDL_ohos.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
#include <native_window/external_window.h>
77

88
extern SDL_Mutex *g_ohosPageMutex;
9-
void SDL_OHOS_SetDisplayOrientation(int orientation);
109
extern OHNativeWindow *nativeWindow;
1110

1211
#endif

src/video/ohos/SDL_ohosvideo.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ static SDL_VideoDevice *OHOS_CreateDevice(void)
2626
device->Vulkan_LoadLibrary = OHOS_Vulkan_LoadLibrary;
2727
device->Vulkan_UnloadLibrary = OHOS_Vulkan_UnloadLibrary;
2828
device->Vulkan_GetInstanceExtensions = OHOS_Vulkan_GetInstanceExtensions;
29+
device->Vulkan_CreateSurface = OHOS_Vulkan_CreateSurface;
30+
device->Vulkan_DestroySurface = OHOS_Vulkan_DestroySurface;
2931
#endif
3032

3133

src/video/ohos/SDL_ohosvulkan.c

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
#include "SDL_ohosvulkan.h"
22
#include "SDL_internal.h"
3-
#include "../khronos/vulkan/vulkan_ohos.h"
3+
#include <vulkan/vulkan_core.h>
44

55
#ifdef SDL_VIDEO_DRIVER_OHOS
6+
#define VK_USE_PLATFORM_OHOS 1
7+
#include "vulkan/vulkan.h"
68
#include "../SDL_sysvideo.h"
9+
#include "../../core/ohos/SDL_ohos.h"
10+
#include "vulkan/vulkan_ohos.h"
11+
#include <native_window/external_window.h>
712

813
static int loadedCount = 0;
914
bool OHOS_Vulkan_LoadLibrary(SDL_VideoDevice *_this, const char *path)
@@ -69,12 +74,63 @@ void OHOS_Vulkan_UnloadLibrary(SDL_VideoDevice *_this)
6974
char const* const* OHOS_Vulkan_GetInstanceExtensions(SDL_VideoDevice *_this, Uint32 *count)
7075
{
7176
static const char *const extensionsForOHOS[] = {
72-
VK_KHR_SURFACE_EXTENSION_NAME, VK_KHR_OHOS_XCOMPONENT_EXTENSION_NAME
77+
VK_KHR_SURFACE_EXTENSION_NAME, VK_OHOS_SURFACE_EXTENSION_NAME
7378
};
7479
if (count) {
7580
*count = SDL_arraysize(extensionsForOHOS);
7681
}
7782
return extensionsForOHOS;
7883
}
7984

85+
bool OHOS_Vulkan_CreateSurface(SDL_VideoDevice *_this,
86+
SDL_Window *window,
87+
VkInstance instance,
88+
const struct VkAllocationCallbacks *allocator,
89+
VkSurfaceKHR *surface)
90+
{
91+
VkResult result;
92+
93+
PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr =
94+
(PFN_vkGetInstanceProcAddr)_this->vulkan_config.vkGetInstanceProcAddr;
95+
PFN_vkCreateSurfaceOHOS vkCreateSurfaceOHOS =
96+
(PFN_vkCreateSurfaceOHOS)vkGetInstanceProcAddr(instance, "vkCreateSurfaceOHOS");
97+
VkSurfaceCreateInfoOHOS createInfo;
98+
99+
if (!_this->vulkan_config.loader_handle) {
100+
SDL_SetError("Vulkan is not loaded");
101+
return false;
102+
}
103+
104+
if (!vkCreateSurfaceOHOS) {
105+
SDL_SetError(VK_OHOS_SURFACE_EXTENSION_NAME
106+
" extension is not enabled in the Vulkan instance.");
107+
return false;
108+
}
109+
110+
SDL_zero(createInfo);
111+
createInfo.sType = VK_STRUCTURE_TYPE_SURFACE_CREATE_INFO_OHOS;
112+
createInfo.pNext = NULL;
113+
createInfo.flags = 0;
114+
createInfo.window = nativeWindow;
115+
result = vkCreateSurfaceOHOS(instance, &createInfo, NULL, surface);
116+
if (result != VK_SUCCESS) {
117+
SDL_SetError("vkCreateSurfaceOHOS failed: %d", result);
118+
return false;
119+
}
120+
return true;
121+
}
122+
123+
void OHOS_Vulkan_DestroySurface(SDL_VideoDevice *_this,
124+
VkInstance instance,
125+
VkSurfaceKHR surface,
126+
const struct VkAllocationCallbacks *allocator)
127+
{
128+
if (_this->vulkan_config.loader_handle) {
129+
PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr =
130+
(PFN_vkGetInstanceProcAddr)_this->vulkan_config.vkGetInstanceProcAddr;
131+
PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR = (PFN_vkDestroySurfaceKHR)vkGetInstanceProcAddr(instance, "vkDestroySurfaceKHR");
132+
vkDestroySurfaceKHR(instance, surface, allocator);
133+
}
134+
}
135+
80136
#endif

src/video/ohos/SDL_ohosvulkan.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,15 @@
77
bool OHOS_Vulkan_LoadLibrary(SDL_VideoDevice *_this, const char *path);
88
void OHOS_Vulkan_UnloadLibrary(SDL_VideoDevice *_this);
99
char const* const* OHOS_Vulkan_GetInstanceExtensions(SDL_VideoDevice *_this, Uint32 *count);
10+
bool OHOS_Vulkan_CreateSurface(SDL_VideoDevice *_this,
11+
SDL_Window *window,
12+
VkInstance instance,
13+
const struct VkAllocationCallbacks *allocator,
14+
VkSurfaceKHR *surface);
15+
void OHOS_Vulkan_DestroySurface(SDL_VideoDevice *_this,
16+
VkInstance instance,
17+
VkSurfaceKHR surface,
18+
const struct VkAllocationCallbacks *allocator);
1019
#endif
1120

1221
#endif

0 commit comments

Comments
 (0)