[Bf-blender-cvs] [ea5a70973d7] tmp-vulkan: VK: Make the placeholder backend work

Clément Foucault noreply at git.blender.org
Sun Sep 13 03:38:06 CEST 2020


Commit: ea5a70973d7eba8c7585e0c48cc80c03b2a3ec09
Author: Clément Foucault
Date:   Sun Sep 13 03:33:35 2020 +0200
Branches: tmp-vulkan
https://developer.blender.org/rBea5a70973d7eba8c7585e0c48cc80c03b2a3ec09

VK: Make the placeholder backend work

Now we get a green window without a crash

===================================================================

M	source/blender/gpu/intern/gpu_context.cc
M	source/blender/gpu/vulkan/vk_backend.cc
M	source/blender/gpu/vulkan/vk_context.hh
M	source/blender/gpu/vulkan/vk_immediate.hh
M	source/blender/gpu/vulkan/vk_shader.hh
M	source/blender/gpu/vulkan/vk_shader_interface.hh
M	source/blender/gpu/vulkan/vk_state.hh
M	source/blender/gpu/vulkan/vk_vertex_buffer.hh

===================================================================

diff --git a/source/blender/gpu/intern/gpu_context.cc b/source/blender/gpu/intern/gpu_context.cc
index 0bc737b7fbe..ad1673b78f5 100644
--- a/source/blender/gpu/intern/gpu_context.cc
+++ b/source/blender/gpu/intern/gpu_context.cc
@@ -106,11 +106,11 @@ Context *Context::get(void)
 GPUContext *GPU_context_create(void *ghost_window)
 {
   if (GPUBackend::get() == NULL) {
-    /* TODO move where it make sense. */
+    /* FIXME We should get the context type from ghost instead of guessing it. */
     eGPUBackendType type = GPU_BACKEND_OPENGL;
 #ifdef WITH_VULKAN
     if (G.debug & G_DEBUG_VK_CONTEXT) {
-      type = GPU_BACKEND_OPENGL;
+      type = GPU_BACKEND_VULKAN;
     }
 #endif
     GPU_backend_init(type);
diff --git a/source/blender/gpu/vulkan/vk_backend.cc b/source/blender/gpu/vulkan/vk_backend.cc
index a025768c845..74779549274 100644
--- a/source/blender/gpu/vulkan/vk_backend.cc
+++ b/source/blender/gpu/vulkan/vk_backend.cc
@@ -46,6 +46,15 @@ void VKBackend::platform_init(void)
 #else
   GPG.os = GPU_OS_UNIX;
 #endif
+
+  GPG.device = GPU_DEVICE_ANY;
+  GPG.driver = GPU_DRIVER_ANY;
+
+  /* Detect support level */
+  GPG.support_level = GPU_SUPPORT_LEVEL_SUPPORTED;
+
+  GPG.create_key(GPG.support_level, "vendor", "renderer", "version");
+  GPG.create_gpu_name("vendor", "renderer", "version");
 }
 
 void VKBackend::platform_exit(void)
@@ -63,12 +72,12 @@ void VKBackend::platform_exit(void)
 void VKBackend::capabilities_init(void)
 {
   /* Common Capabilities. */
-  GCaps.max_texture_size = 0;
-  GCaps.max_texture_layers = 0;
-  GCaps.max_textures_frag = 0;
-  GCaps.max_textures_vert = 0;
-  GCaps.max_textures_geom = 0;
-  GCaps.max_textures = 0;
+  GCaps.max_texture_size = 2048;
+  GCaps.max_texture_layers = 64;
+  GCaps.max_textures_frag = 16;
+  GCaps.max_textures_vert = 16;
+  GCaps.max_textures_geom = 16;
+  GCaps.max_textures = 46;
   GCaps.mem_stats_support = false;
   GCaps.shader_image_load_store_support = false;
 }
diff --git a/source/blender/gpu/vulkan/vk_context.hh b/source/blender/gpu/vulkan/vk_context.hh
index e4664bf5e85..73565e4ecf3 100644
--- a/source/blender/gpu/vulkan/vk_context.hh
+++ b/source/blender/gpu/vulkan/vk_context.hh
@@ -25,6 +25,11 @@
 
 #include "gpu_context_private.hh"
 
+/* TODO move these dependencies to the .cc file. */
+#include "vk_framebuffer.hh"
+#include "vk_immediate.hh"
+#include "vk_state.hh"
+
 #include "vk_state.hh"
 
 namespace blender {
@@ -37,11 +42,24 @@ class VKContext : public Context {
   /** Workarounds. */
 
  public:
-  VKContext(void *ghost_window){};
+  VKContext(void *ghost_window)
+  {
+    state_manager = new VKStateManager();
+    imm = new VKImmediate();
+
+    back_left = new VKFrameBuffer("Back Left");
+    active_fb = back_left;
+  };
   ~VKContext(){};
 
-  void activate(void) override{};
-  void deactivate(void) override{};
+  void activate(void) override
+  {
+    immActivate();
+  };
+  void deactivate(void) override
+  {
+    immDeactivate();
+  };
 
   void flush(void) override{};
   void finish(void) override{};
diff --git a/source/blender/gpu/vulkan/vk_immediate.hh b/source/blender/gpu/vulkan/vk_immediate.hh
index c76c5652ec3..587c77b4aaa 100644
--- a/source/blender/gpu/vulkan/vk_immediate.hh
+++ b/source/blender/gpu/vulkan/vk_immediate.hh
@@ -32,11 +32,17 @@
 namespace blender::gpu {
 
 class VKImmediate : public Immediate {
+ private:
+  uchar data_[4 * 1024 * 1024];
+
  public:
   VKImmediate(){};
   ~VKImmediate(){};
 
-  uchar *begin(void) override{};
+  uchar *begin(void) override
+  {
+    return data_;
+  };
   void end(void) override{};
 };
 
diff --git a/source/blender/gpu/vulkan/vk_shader.hh b/source/blender/gpu/vulkan/vk_shader.hh
index 2f7f9ebfd31..8f6f8461155 100644
--- a/source/blender/gpu/vulkan/vk_shader.hh
+++ b/source/blender/gpu/vulkan/vk_shader.hh
@@ -27,6 +27,9 @@
 
 #include "gpu_shader_private.hh"
 
+/* TODO move this deps to the .cc file. */
+#include "vk_shader_interface.hh"
+
 namespace blender {
 namespace gpu {
 
@@ -35,7 +38,10 @@ namespace gpu {
  **/
 class VKShader : public Shader {
  public:
-  VKShader(const char *name) : Shader(name){};
+  VKShader(const char *name) : Shader(name)
+  {
+    interface = new VKShaderInterface();
+  };
   ~VKShader(){};
 
   /* Return true on success. */
diff --git a/source/blender/gpu/vulkan/vk_shader_interface.hh b/source/blender/gpu/vulkan/vk_shader_interface.hh
index 188f1044579..554d189d09c 100644
--- a/source/blender/gpu/vulkan/vk_shader_interface.hh
+++ b/source/blender/gpu/vulkan/vk_shader_interface.hh
@@ -41,7 +41,11 @@ class GLVaoCache;
  **/
 class VKShaderInterface : public ShaderInterface {
  public:
-  VKShaderInterface(){};
+  VKShaderInterface()
+  {
+    inputs_ = (ShaderInput *)MEM_callocN(sizeof(*inputs_), __func__);
+    name_buffer_ = (char *)MEM_callocN(1, __func__);
+  };
   ~VKShaderInterface(){};
 
   MEM_CXX_CLASS_ALLOC_FUNCS("VKShaderInterface");
diff --git a/source/blender/gpu/vulkan/vk_state.hh b/source/blender/gpu/vulkan/vk_state.hh
index 1de39b3064d..a6513f8ea1e 100644
--- a/source/blender/gpu/vulkan/vk_state.hh
+++ b/source/blender/gpu/vulkan/vk_state.hh
@@ -37,7 +37,7 @@ namespace gpu {
  **/
 class VKStateManager : public StateManager {
  public:
-  VKStateManager();
+  VKStateManager(){};
 
   void apply_state(void) override{};
   void force_state(void) override{};
diff --git a/source/blender/gpu/vulkan/vk_vertex_buffer.hh b/source/blender/gpu/vulkan/vk_vertex_buffer.hh
index e620302c0bb..96abb0c4ba0 100644
--- a/source/blender/gpu/vulkan/vk_vertex_buffer.hh
+++ b/source/blender/gpu/vulkan/vk_vertex_buffer.hh
@@ -37,11 +37,31 @@ class VKVertBuf : public VertBuf {
   void update_sub(uint start, uint len, void *data) override{};
 
  protected:
-  void acquire_data(void) override{};
-  void resize_data(void) override{};
-  void release_data(void) override{};
-  void upload_data(void) override{};
-  void duplicate_data(VertBuf *dst) override{};
+  void acquire_data(void) override
+  {
+    MEM_SAFE_FREE(data);
+    data = (uchar *)MEM_mallocN(sizeof(uchar) * this->size_alloc_get(), __func__);
+  };
+  void resize_data(void) override
+  {
+    data = (uchar *)MEM_reallocN(data, sizeof(uchar) * this->size_alloc_get());
+  };
+  void release_data(void) override
+  {
+    MEM_SAFE_FREE(data);
+  };
+  void upload_data(void) override
+  {
+    if (usage_ == GPU_USAGE_STATIC) {
+      MEM_SAFE_FREE(data);
+    }
+  };
+  void duplicate_data(VertBuf *dst) override
+  {
+    if (data != nullptr) {
+      dst->data = (uchar *)MEM_dupallocN(data);
+    }
+  };
 
   MEM_CXX_CLASS_ALLOC_FUNCS("VKVertBuf");
 };



More information about the Bf-blender-cvs mailing list