改进ShaderModuleManage::CreateShader返回值

This commit is contained in:
HuYingzhuo 2019-04-27 21:41:58 +08:00
parent dda6dec4e7
commit 066bc4952c
2 changed files with 11 additions and 8 deletions

View File

@ -2,7 +2,7 @@
#include"VKShaderModule.h" #include"VKShaderModule.h"
VK_NAMESPACE_BEGIN VK_NAMESPACE_BEGIN
int ShaderModuleManage::CreateShader(const VkShaderStageFlagBits shader_stage_bit,const void *spv_data,const uint32_t spv_size) const ShaderModule *ShaderModuleManage::CreateShader(const VkShaderStageFlagBits shader_stage_bit,const void *spv_data,const uint32_t spv_size)
{ {
VkPipelineShaderStageCreateInfo *shader_stage=new VkPipelineShaderStageCreateInfo; VkPipelineShaderStageCreateInfo *shader_stage=new VkPipelineShaderStageCreateInfo;
shader_stage->sType=VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; shader_stage->sType=VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
@ -20,13 +20,15 @@ int ShaderModuleManage::CreateShader(const VkShaderStageFlagBits shader_stage_bi
moduleCreateInfo.pCode=(const uint32_t *)spv_data; moduleCreateInfo.pCode=(const uint32_t *)spv_data;
if(vkCreateShaderModule(device,&moduleCreateInfo,nullptr,&(shader_stage->module))!=VK_SUCCESS) if(vkCreateShaderModule(device,&moduleCreateInfo,nullptr,&(shader_stage->module))!=VK_SUCCESS)
return(-1); return(nullptr);
ShaderModule *sm=new ShaderModule(shader_count,shader_stage); ShaderModule *sm=new ShaderModule(shader_count,shader_stage);
shader_list.Add(shader_count,sm); shader_list.Add(shader_count,sm);
return shader_count++; ++shader_count;
return sm;
} }
const ShaderModule *ShaderModuleManage::GetShader(int id) const ShaderModule *ShaderModuleManage::GetShader(int id)
@ -42,12 +44,13 @@ const ShaderModule *ShaderModuleManage::GetShader(int id)
bool ShaderModuleManage::ReleaseShader(const ShaderModule *const_sm) bool ShaderModuleManage::ReleaseShader(const ShaderModule *const_sm)
{ {
if(!const_sm)return; if(!const_sm)
return(false);
ShaderModule *sm; ShaderModule *sm;
if(!shader_list.Get(const_sm->GetID(),sm)) if(!shader_list.Get(const_sm->GetID(),sm))
return nullptr; return(false);
if(sm!=const_sm) if(sm!=const_sm)
return(false); return(false);

View File

@ -28,9 +28,9 @@ public:
~ShaderModuleManage(); ~ShaderModuleManage();
int CreateShader(const VkShaderStageFlagBits shader_stage_bit,const void *spv_data,const uint32_t spv_size); const ShaderModule *CreateShader(const VkShaderStageFlagBits shader_stage_bit,const void *spv_data,const uint32_t spv_size);
#define ADD_SHADER_FUNC(sn,vk_name) int Create##sn##Shader(const void *spv_data,const uint32_t spv_size){return CreateShader(VK_SHADER_STAGE_##vk_name##_BIT,spv_data,spv_size);} #define ADD_SHADER_FUNC(sn,vk_name) const ShaderModule *Create##sn##Shader(const void *spv_data,const uint32_t spv_size){return CreateShader(VK_SHADER_STAGE_##vk_name##_BIT,spv_data,spv_size);}
ADD_SHADER_FUNC(Vertex, VERTEX) ADD_SHADER_FUNC(Vertex, VERTEX)
ADD_SHADER_FUNC(Fragment, FRAGMENT) ADD_SHADER_FUNC(Fragment, FRAGMENT)
ADD_SHADER_FUNC(Geometry, GEOMETRY) ADD_SHADER_FUNC(Geometry, GEOMETRY)
@ -39,7 +39,7 @@ public:
ADD_SHADER_FUNC(Compute, COMPUTE) ADD_SHADER_FUNC(Compute, COMPUTE)
#undef ADD_SHADER_FUNC #undef ADD_SHADER_FUNC
#define ADD_NV_SHADER_FUNC(sn,vk_name) int Create##sn##Shader(const void *spv_data,const uint32_t spv_size){return CreateShader(VK_SHADER_STAGE_##vk_name##_BIT_NV,spv_data,spv_size);} #define ADD_NV_SHADER_FUNC(sn,vk_name) const ShaderModule *Create##sn##Shader(const void *spv_data,const uint32_t spv_size){return CreateShader(VK_SHADER_STAGE_##vk_name##_BIT_NV,spv_data,spv_size);}
ADD_NV_SHADER_FUNC(Raygen, RAYGEN); ADD_NV_SHADER_FUNC(Raygen, RAYGEN);
ADD_NV_SHADER_FUNC(AnyHit, ANY_HIT); ADD_NV_SHADER_FUNC(AnyHit, ANY_HIT);
ADD_NV_SHADER_FUNC(ClosestHit, CLOSEST_HIT); ADD_NV_SHADER_FUNC(ClosestHit, CLOSEST_HIT);