50 lines
966 B
C++
50 lines
966 B
C++
|
|
//
|
||
|
|
// Created by martin on 10/24/23.
|
||
|
|
//
|
||
|
|
|
||
|
|
#ifndef LOFT_SHADER_HPP
|
||
|
|
#define LOFT_SHADER_HPP
|
||
|
|
|
||
|
|
#include "Gpu.hpp"
|
||
|
|
#include "io/ShaderBinary.h"
|
||
|
|
|
||
|
|
#include <volk.h>
|
||
|
|
|
||
|
|
#include <utility>
|
||
|
|
|
||
|
|
|
||
|
|
struct Shader {
|
||
|
|
private:
|
||
|
|
VkShaderModule m_module;
|
||
|
|
|
||
|
|
public:
|
||
|
|
Shader(Shader&& s) :
|
||
|
|
m_module(s.m_module) {
|
||
|
|
}
|
||
|
|
|
||
|
|
Shader(VkShaderModule m) :
|
||
|
|
m_module(m) {
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
const inline Shader& set_name(const Gpu* gpu, const std::string &name) {
|
||
|
|
#if LOFT_DEBUG
|
||
|
|
VkDebugUtilsObjectNameInfoEXT nameInfo = {
|
||
|
|
.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT,
|
||
|
|
.objectType = VK_OBJECT_TYPE_SHADER_MODULE,
|
||
|
|
.objectHandle = (uint64_t) m_module,
|
||
|
|
.pObjectName = name.c_str(),
|
||
|
|
};
|
||
|
|
vkSetDebugUtilsObjectNameEXT(gpu->dev(), &nameInfo);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
return *this;
|
||
|
|
}
|
||
|
|
|
||
|
|
[[nodiscard]] inline VkShaderModule module() const {
|
||
|
|
return m_module;
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
#endif //LOFT_SHADER_HPP
|