[Bf-blender-cvs] [1273af7a014] temp-vulkan-shader: Vulkan: create shader module.
Jeroen Bakker
noreply at git.blender.org
Tue Nov 22 17:01:40 CET 2022
Commit: 1273af7a014231ba99ca7ffed03dba31f570d4ab
Author: Jeroen Bakker
Date: Tue Nov 22 17:01:33 2022 +0100
Branches: temp-vulkan-shader
https://developer.blender.org/rB1273af7a014231ba99ca7ffed03dba31f570d4ab
Vulkan: create shader module.
===================================================================
M source/blender/gpu/vulkan/vk_context.hh
M source/blender/gpu/vulkan/vk_shader.cc
M source/blender/gpu/vulkan/vk_shader.hh
===================================================================
diff --git a/source/blender/gpu/vulkan/vk_context.hh b/source/blender/gpu/vulkan/vk_context.hh
index 7c83548536d..56d39169538 100644
--- a/source/blender/gpu/vulkan/vk_context.hh
+++ b/source/blender/gpu/vulkan/vk_context.hh
@@ -47,6 +47,16 @@ class VKContext : public Context {
void debug_group_begin(const char *, int) override;
void debug_group_end() override;
+ static VKContext *get(void)
+ {
+ return static_cast<VKContext *>(Context::get());
+ }
+
+ VkDevice device_get() const
+ {
+ return device_;
+ }
+
VmaAllocator mem_allocator_get() const
{
return mem_allocator_;
diff --git a/source/blender/gpu/vulkan/vk_shader.cc b/source/blender/gpu/vulkan/vk_shader.cc
index 37d26767c7a..2ad19dd25b8 100644
--- a/source/blender/gpu/vulkan/vk_shader.cc
+++ b/source/blender/gpu/vulkan/vk_shader.cc
@@ -37,13 +37,31 @@ Vector<uint32_t> VKShader::compile_glsl_to_spirv(StringRef source, shaderc_shade
void VKShader::build_shader_module(Span<uint32_t> spirv_module, VkShaderModule *r_shader_module)
{
- VkShaderModuleCreateInfo createInfo = {};
- createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
- createInfo.codeSize = spirv_module.size() * sizeof(uint32_t);
- createInfo.pCode = spirv_module.data();
+ VkShaderModuleCreateInfo create_info = {};
+ create_info.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
+ create_info.codeSize = spirv_module.size() * sizeof(uint32_t);
+ create_info.pCode = spirv_module.data();
- // TODO(jbakker): retrieve allocator and device
- // VkResult result = vkCreateShaderModule(*device, &create_info, nullptr, r_shader_module);
+ VKContext &context = *static_cast<VKContext *>(VKContext::get());
+
+ VkResult result = vkCreateShaderModule(
+ context.device_get(), &create_info, nullptr, r_shader_module);
+ if (result != VK_SUCCESS) {
+ *r_shader_module = VK_NULL_HANDLE;
+ }
+}
+
+VKShader::VKShader(const char *name) : Shader(name)
+{
+ context_ = VKContext::get();
+}
+VKShader::~VKShader()
+{
+ VkDevice device = context_->device_get();
+ if (compute_module_ != VK_NULL_HANDLE) {
+ vkDestroyShaderModule(device, compute_module_, nullptr);
+ compute_module_ = VK_NULL_HANDLE;
+ }
}
void VKShader::vertex_shader_from_glsl(MutableSpan<const char *> /*sources*/)
diff --git a/source/blender/gpu/vulkan/vk_shader.hh b/source/blender/gpu/vulkan/vk_shader.hh
index e6cdf246f3e..35513bf0e1c 100644
--- a/source/blender/gpu/vulkan/vk_shader.hh
+++ b/source/blender/gpu/vulkan/vk_shader.hh
@@ -10,6 +10,7 @@
#include "gpu_shader_private.hh"
#include "vk_backend.hh"
+#include "vk_context.hh"
#include "BLI_string_ref.hh"
@@ -17,12 +18,12 @@ namespace blender::gpu {
class VKShader : public Shader {
private:
+ VKContext *context_ = nullptr;
VkShaderModule compute_module_ = nullptr;
public:
- VKShader(const char *name) : Shader(name)
- {
- }
+ VKShader(const char *name);
+ virtual ~VKShader();
void vertex_shader_from_glsl(MutableSpan<const char *> sources) override;
void geometry_shader_from_glsl(MutableSpan<const char *> sources) override;
More information about the Bf-blender-cvs
mailing list