]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/program_backend.h
Initial implementation of Vulkan backend
[libs/gl.git] / source / backends / vulkan / program_backend.h
diff --git a/source/backends/vulkan/program_backend.h b/source/backends/vulkan/program_backend.h
new file mode 100644 (file)
index 0000000..3bdf3b7
--- /dev/null
@@ -0,0 +1,48 @@
+#ifndef MSP_GL_PROGRAM_BACKEND_H_
+#define MSP_GL_PROGRAM_BACKEND_H_
+
+#include <map>
+#include <string>
+#include <vector>
+#include <msp/core/noncopyable.h>
+#include "reflectdata.h"
+
+namespace Msp {
+namespace GL {
+
+class Device;
+
+class VulkanProgram: public NonCopyable
+{
+       friend class VulkanPipelineState;
+
+protected:
+       struct TransientData
+       { };
+
+       Device &device;
+       unsigned n_stages = 0;
+       std::vector<char> creation_info;
+       std::vector<VkDescriptorSetLayout> desc_set_layout_handles;
+       VkPipelineLayout layout_handle = 0;
+
+       VulkanProgram();
+       VulkanProgram(VulkanProgram &&);
+       ~VulkanProgram();
+
+       bool has_stages() const;
+       void add_glsl_stages(const GlslModule &, const std::map<std::string, int> &, TransientData &);
+       void add_spirv_stages(const SpirVModule &, const std::map<std::string, int> &);
+
+       void finalize(const Module &, TransientData &) { }
+       void finalize_uniforms();
+
+       void set_debug_name(const std::string &) { }
+};
+
+using ProgramBackend = VulkanProgram;
+
+} // namespace GL
+} // namespace Msp
+
+#endif