2019-05-06 21:01:28 +08:00
|
|
|
|
#ifndef HGL_GRAPH_VULKAN_SHADER_MODULE_INCLUDE
|
2019-04-27 21:23:57 +08:00
|
|
|
|
#define HGL_GRAPH_VULKAN_SHADER_MODULE_INCLUDE
|
|
|
|
|
|
2023-03-02 20:19:25 +08:00
|
|
|
|
#include<hgl/graph/VK.h>
|
|
|
|
|
#include<hgl/graph/VKVertexInputLayout.h>
|
2024-11-21 01:30:42 +08:00
|
|
|
|
#include<hgl/type/SortedSet.h>
|
2019-04-28 16:06:53 +08:00
|
|
|
|
|
2019-04-27 21:23:57 +08:00
|
|
|
|
VK_NAMESPACE_BEGIN
|
2019-04-28 16:06:53 +08:00
|
|
|
|
|
2019-04-27 21:23:57 +08:00
|
|
|
|
/**
|
2019-05-06 21:01:28 +08:00
|
|
|
|
* Shader模块<br>
|
|
|
|
|
* 该模块提供的是原始的shader数据和信息,不可被修改,只能通过ShaderModuleManage创建和删除
|
2019-04-27 21:23:57 +08:00
|
|
|
|
*/
|
|
|
|
|
class ShaderModule
|
|
|
|
|
{
|
2019-05-05 21:30:55 +08:00
|
|
|
|
VkDevice device;
|
2019-04-27 21:23:57 +08:00
|
|
|
|
int ref_count;
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
|
|
VkPipelineShaderStageCreateInfo *stage_create_info;
|
|
|
|
|
|
|
|
|
|
public:
|
2019-05-05 14:22:58 +08:00
|
|
|
|
|
2023-03-19 19:41:21 +08:00
|
|
|
|
ShaderModule(VkDevice dev,VkPipelineShaderStageCreateInfo *pssci);
|
2019-04-28 16:06:53 +08:00
|
|
|
|
virtual ~ShaderModule();
|
2019-04-27 21:23:57 +08:00
|
|
|
|
|
|
|
|
|
const int IncRef(){return ++ref_count;}
|
|
|
|
|
const int DecRef(){return --ref_count;}
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
const VkShaderStageFlagBits GetStage ()const{return stage_create_info->stage;}
|
2020-09-05 18:36:18 +08:00
|
|
|
|
|
|
|
|
|
const bool IsVertex ()const{return stage_create_info->stage==VK_SHADER_STAGE_VERTEX_BIT;}
|
|
|
|
|
const bool IsTessControl ()const{return stage_create_info->stage==VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT;}
|
|
|
|
|
const bool IsTessEval ()const{return stage_create_info->stage==VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT;}
|
|
|
|
|
const bool IsGeometry ()const{return stage_create_info->stage==VK_SHADER_STAGE_GEOMETRY_BIT;}
|
|
|
|
|
const bool IsFragment ()const{return stage_create_info->stage==VK_SHADER_STAGE_FRAGMENT_BIT;}
|
|
|
|
|
const bool IsCompute ()const{return stage_create_info->stage==VK_SHADER_STAGE_COMPUTE_BIT;}
|
|
|
|
|
const bool IsTask ()const{return stage_create_info->stage==VK_SHADER_STAGE_TASK_BIT_NV;}
|
|
|
|
|
const bool IsMesh ()const{return stage_create_info->stage==VK_SHADER_STAGE_MESH_BIT_NV;}
|
|
|
|
|
|
2019-04-27 21:23:57 +08:00
|
|
|
|
const VkPipelineShaderStageCreateInfo * GetCreateInfo ()const{return stage_create_info;}
|
2022-09-29 18:29:21 +08:00
|
|
|
|
|
|
|
|
|
operator VkShaderModule ()const{return stage_create_info->module;}
|
2019-04-28 16:06:53 +08:00
|
|
|
|
};//class ShaderModule
|
2019-04-27 21:23:57 +08:00
|
|
|
|
VK_NAMESPACE_END
|
|
|
|
|
#endif//HGL_GRAPH_VULKAN_SHADER_MODULE_INCLUDE
|