[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