From 3dd308aff146b7da686d03a23c29f07ce2e2cfad Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Tue, 10 Oct 2023 14:46:20 +0800 Subject: [PATCH] added sampler parse in MaterialFileLoader.cpp --- src/ShaderGen/MaterialFileData.h | 13 ++++++++++++ src/ShaderGen/MaterialFileLoader.cpp | 30 ++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/ShaderGen/MaterialFileData.h b/src/ShaderGen/MaterialFileData.h index 06250f66..5a831dc0 100644 --- a/src/ShaderGen/MaterialFileData.h +++ b/src/ShaderGen/MaterialFileData.h @@ -1,6 +1,7 @@ #pragma once #include #include +#include namespace material_file { @@ -24,6 +25,13 @@ namespace material_file uint32_t shader_stage_flag_bits; }; + struct SamplerData + { + char name[SHADER_RESOURCE_NAME_MAX_LENGTH]; + + SamplerType type; + }; + struct ShaderData { VkShaderStageFlagBits shader_stage; @@ -33,6 +41,8 @@ namespace material_file List output; + List sampler; + public: ShaderData(VkShaderStageFlagBits ss) @@ -76,12 +86,15 @@ namespace material_file ObjectMap shader; + uint32_t shader_stage_flag_bit; + public: MaterialFileData(char *d,int dl) { data=d; data_length=dl; + shader_stage_flag_bit=0; } ~MaterialFileData() diff --git a/src/ShaderGen/MaterialFileLoader.cpp b/src/ShaderGen/MaterialFileLoader.cpp index c7307856..a4fd6c19 100644 --- a/src/ShaderGen/MaterialFileLoader.cpp +++ b/src/ShaderGen/MaterialFileLoader.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -295,6 +296,33 @@ namespace { output=true; } + else + if(hgl::stricmp(text,"sampler",7)==0) + { + const char *sp=text; + + while(*text!=' '&&*text!='\t')++text; + + SamplerType st=ParseSamplerType(sp,text-sp); + + RANGE_CHECK_RETURN_FALSE(st); + + while(!hgl::iscodechar(*text))++text; + + sp=text; + + while(hgl::iscodechar(*text))++text; + + SamplerData sd; + + sd.type=st; + hgl::strcpy(sd.name,SHADER_RESOURCE_NAME_MAX_LENGTH,sp,text-sp); + + shader_data->sampler.Add(sd); + } + else + { + } return(true); } @@ -445,6 +473,8 @@ namespace return(false); mfd->shader.Add(sd->GetShaderStage(),sd); + + mfd->shader_stage_flag_bit|=sd->GetShaderStage(); } else {