[Bf-blender-cvs] [7cd24fb70af] temp-ghost-vulkan: Implemented createOffscreenContext.
Jeroen Bakker
noreply at git.blender.org
Tue Nov 1 08:43:09 CET 2022
Commit: 7cd24fb70afd251b4cd2a95bbb03c8b3900eae0b
Author: Jeroen Bakker
Date: Fri Oct 21 12:27:54 2022 +0200
Branches: temp-ghost-vulkan
https://developer.blender.org/rB7cd24fb70afd251b4cd2a95bbb03c8b3900eae0b
Implemented createOffscreenContext.
===================================================================
M intern/ghost/CMakeLists.txt
M intern/ghost/intern/GHOST_SystemCocoa.mm
M intern/ghost/intern/GHOST_SystemWayland.cpp
M intern/ghost/intern/GHOST_SystemWin32.cpp
M intern/ghost/intern/GHOST_SystemX11.cpp
===================================================================
diff --git a/intern/ghost/CMakeLists.txt b/intern/ghost/CMakeLists.txt
index 84424e740fa..7c44b648111 100644
--- a/intern/ghost/CMakeLists.txt
+++ b/intern/ghost/CMakeLists.txt
@@ -86,6 +86,10 @@ if(WITH_VULKAN_BACKEND)
list(APPEND INC_SYS
${VULKAN_INCLUDE_DIR}
)
+
+ list(APPEND LIB
+ ${VULKAN_LIBRARY}
+ )
endif()
if(WITH_GHOST_DEBUG)
diff --git a/intern/ghost/intern/GHOST_SystemCocoa.mm b/intern/ghost/intern/GHOST_SystemCocoa.mm
index a1016dd4843..b8463286eab 100644
--- a/intern/ghost/intern/GHOST_SystemCocoa.mm
+++ b/intern/ghost/intern/GHOST_SystemCocoa.mm
@@ -18,6 +18,10 @@
#include "GHOST_ContextCGL.h"
+#ifdef WITH_VULKAN_BACKEND
+# include "GHOST_ContextVK.h"
+#endif
+
#ifdef WITH_INPUT_NDOF
# include "GHOST_NDOFManagerCocoa.h"
#endif
@@ -750,6 +754,18 @@ GHOST_IWindow *GHOST_SystemCocoa::createWindow(const char *title,
*/
GHOST_IContext *GHOST_SystemCocoa::createOffscreenContext(GHOST_GLSettings glSettings)
{
+#ifdef WITH_VULKAN_BACKEND
+ if (glSettings.context_type == GHOST_kDrawingContextTypeVulkan) {
+ const bool debug_context = (glSettings.flags & GHOST_glDebugContext) != 0;
+ GHOST_Context *context = new GHOST_ContextVK(false, NULL, 1, 0, debug_context);
+ if (!context->initializeDrawingContext()) {
+ delete context;
+ return NULL;
+ }
+ return context;
+ }
+#endif
+
GHOST_Context *context = new GHOST_ContextCGL(false, NULL, NULL, NULL, glSettings.context_type);
if (context->initializeDrawingContext())
return context;
diff --git a/intern/ghost/intern/GHOST_SystemWayland.cpp b/intern/ghost/intern/GHOST_SystemWayland.cpp
index 5afbf5b0b5f..770291d6ce6 100644
--- a/intern/ghost/intern/GHOST_SystemWayland.cpp
+++ b/intern/ghost/intern/GHOST_SystemWayland.cpp
@@ -5579,8 +5579,25 @@ static GHOST_Context *createOffscreenContext_impl(GHOST_SystemWayland *system,
return nullptr;
}
-GHOST_IContext *GHOST_SystemWayland::createOffscreenContext(GHOST_GLSettings /*glSettings*/)
+GHOST_IContext *GHOST_SystemWayland::createOffscreenContext(GHOST_GLSettings glSettings)
{
+#ifdef WITH_VULKAN_BACKEND
+ const bool debug_context = (glSettings.flags & GHOST_glDebugContext) != 0;
+
+ if (glSettings.context_type == GHOST_kDrawingContextTypeVulkan) {
+ GHOST_Context *context = new GHOST_ContextVK(
+ false, GHOST_kVulkanPlatformWayland, 0, NULL, NULL, d->display, 1, 0, debug_context);
+
+ if (!context->initializeDrawingContext()) {
+ delete context;
+ return nullptr;
+ }
+ return context;
+ }
+#else
+ (void)glSettings;
+#endif
+
/* Create new off-screen window. */
wl_surface *wl_surface = wl_compositor_create_surface(wl_compositor());
wl_egl_window *egl_window = wl_surface ? wl_egl_window_create(wl_surface, 1, 1) : nullptr;
diff --git a/intern/ghost/intern/GHOST_SystemWin32.cpp b/intern/ghost/intern/GHOST_SystemWin32.cpp
index 54c892d296e..46bd3b7375b 100644
--- a/intern/ghost/intern/GHOST_SystemWin32.cpp
+++ b/intern/ghost/intern/GHOST_SystemWin32.cpp
@@ -256,7 +256,20 @@ GHOST_IContext *GHOST_SystemWin32::createOffscreenContext(GHOST_GLSettings glSet
{
const bool debug_context = (glSettings.flags & GHOST_glDebugContext) != 0;
- GHOST_Context *context;
+ GHOST_Context *context = nullptr;
+
+#ifdef WITH_VULKAN_BACKEND
+ /* Vulkan does not need a window. */
+ if (glSettings.context_type == GHOST_kDrawingContextTypeVulkan) {
+ context = new GHOST_ContextVK(false, (HWND)0, 1, 0, debug_context);
+
+ if (!context->initializeDrawingContext()) {
+ delete context;
+ return nullptr;
+ }
+ return context;
+ }
+#endif
HWND wnd = CreateWindowA("STATIC",
"BlenderGLEW",
diff --git a/intern/ghost/intern/GHOST_SystemX11.cpp b/intern/ghost/intern/GHOST_SystemX11.cpp
index 5c89febe97c..769e1b83476 100644
--- a/intern/ghost/intern/GHOST_SystemX11.cpp
+++ b/intern/ghost/intern/GHOST_SystemX11.cpp
@@ -431,8 +431,20 @@ GHOST_IContext *GHOST_SystemX11::createOffscreenContext(GHOST_GLSettings glSetti
* no fall-backs. */
const bool debug_context = (glSettings.flags & GHOST_glDebugContext) != 0;
+ GHOST_Context *context = nullptr;
- GHOST_Context *context;
+#ifdef WITH_VULKAN_BACKEND
+ if (glSettings.context_type == GHOST_kDrawingContextTypeVulkan) {
+ context = new GHOST_ContextVK(
+ false, GHOST_kVulkanPlatformX11, 0, m_display, NULL, NULL, 1, 0, debug_context);
+
+ if (!context->initializeDrawingContext()) {
+ delete context;
+ return nullptr;
+ }
+ return context;
+ }
+#endif
#ifdef USE_EGL
/* Try to initialize an EGL context. */
More information about the Bf-blender-cvs
mailing list