Compare commits

...

2 Commits

14 changed files with 66 additions and 45 deletions

2
CMCore

@ -1 +1 @@
Subproject commit fff021488c9608c2ac4ee06bc544e9a80849c6f0
Subproject commit 86ac0c37fcf6c4c4cb82446b89767561c9349517

View File

@ -216,5 +216,5 @@ public:
int os_main(int,os_char **)
{
return RunFramework<TestApp>(OS_TEXT("AutoInstance"),1024,1024);
return RunFramework<TestApp>(OS_TEXT("AutoInstance"),1280,720);
}

View File

@ -96,6 +96,7 @@ class Semaphore;
struct PipelineLayoutData;
class DescriptorSet;
enum class DescriptorSetType;
struct VertexInputAttribute;

View File

@ -22,6 +22,7 @@ public:
buffer=nullptr;
offset=0;
stride=count=0;
map_ptr=nullptr;
}
virtual ~VKBufferMap()

View File

@ -3,7 +3,6 @@
#include<hgl/type/Map.h>
#include<hgl/type/String.h>
#include<hgl/graph/VK.h>
#include<hgl/graph/VKDescriptorSetType.h>
VK_NAMESPACE_BEGIN
@ -46,6 +45,9 @@ public:
template<typename T>
bool AddUBO(const AnsiString &name,DeviceBufferMap<T> *dbm)
{
if(name.IsEmpty()||!dbm)
return(false);
return AddUBO(name,dbm->GetDeviceBuffer());
}

View File

@ -5,7 +5,7 @@
#include<hgl/type/Map.h>
#include<hgl/type/String.h>
#include<hgl/graph/VKShaderModuleMap.h>
#include<hgl/graph/VKDescriptorSetType.h>
#include<hgl/graph/mtl/ShaderBufferSource.h>
namespace hgl
{
@ -83,6 +83,11 @@ public:
bool BindSSBO(const DescriptorSetType &type,const AnsiString &name,DeviceBuffer *ubo,bool dynamic=false);
bool BindImageSampler(const DescriptorSetType &type,const AnsiString &name,Texture *tex,Sampler *sampler);
bool BindUBO(const ShaderBufferDesc *sbd,DeviceBuffer *ubo,bool dynamic=false)
{
return BindUBO(sbd->set_type,sbd->name,ubo,dynamic);
}
void Update();
public:

View File

@ -14,9 +14,12 @@ namespace blinnphong
constexpr const ShaderBufferSource SBS_SunLight=
{
"SunLight",
DescriptorSetType::Scene,
"sun",
"SunLight",
R"(
vec4 direction;
vec4 color;

View File

@ -1,11 +1,19 @@
#pragma once
#include<hgl/graph/VKDescriptorSetType.h>
namespace hgl::graph
{
struct ShaderBufferSource
struct ShaderBufferDesc
{
const DescriptorSetType set_type;
const char *name;
};
struct ShaderBufferSource:public ShaderBufferDesc
{
const char *struct_name;
const char *name;
const char *codes;
};
}//namespace hgl::graph

View File

@ -6,8 +6,10 @@
STD_MTL_NAMESPACE_BEGIN
constexpr const ShaderBufferSource SBS_ViewportInfo=
{
"ViewportInfo",
DescriptorSetType::RenderTarget,
"viewport",
"ViewportInfo",
R"(
mat4 ortho_matrix;
@ -20,8 +22,10 @@ constexpr const ShaderBufferSource SBS_ViewportInfo=
constexpr const ShaderBufferSource SBS_CameraInfo=
{
"CameraInfo",
DescriptorSetType::Camera,
"camera",
"CameraInfo",
R"(
mat4 projection;
@ -48,12 +52,13 @@ constexpr const ShaderBufferSource SBS_CameraInfo=
};
constexpr const char LocalToWorldStruct[]="LocalToWorld";
constexpr const DescriptorSetType DST_LocalToWorld=DescriptorSetType::PerFrame;
constexpr const ShaderBufferSource SBS_LocalToWorld=
{
"LocalToWorldData",
DescriptorSetType::PerFrame,
"l2w",
"LocalToWorldData",
R"(
mat4 mats[L2W_MAX_COUNT];
@ -64,12 +69,13 @@ constexpr const ShaderBufferSource SBS_LocalToWorld=
// SSBO则不需要使用[]方式指定为动态大小数组
constexpr const char MaterialInstanceStruct[]="MaterialInstance";
constexpr const DescriptorSetType DST_MaterialInstance=DescriptorSetType::PerMaterial;
constexpr const ShaderBufferSource SBS_MaterialInstance=
{
"MaterialInstanceData",
DescriptorSetType::PerMaterial,
"mtl",
"MaterialInstanceData",
R"(
MaterialInstance mi[MI_MAX_COUNT];)"
@ -77,8 +83,10 @@ constexpr const ShaderBufferSource SBS_MaterialInstance=
constexpr const ShaderBufferSource SBS_JointInfo=
{
"JointInfo",
DescriptorSetType::PerFrame,
"joint",
"JointInfo",
R"(
mat4 mats[];

View File

@ -81,11 +81,11 @@ namespace hgl::graph
bool SetLocalToWorld(const uint32_t shader_stage_flag_bits);
bool AddStruct(const AnsiString &ubo_typename,const AnsiString &codes);
bool AddStruct(const ShaderBufferSource &ss){return AddStruct(ss.struct_name,ss.codes);}
bool AddUBO(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const AnsiString &struct_name,const AnsiString &name);
bool AddUBO(const uint32_t flag_bits,const DescriptorSetType &set_type,const AnsiString &struct_name,const AnsiString &name);
bool AddUBO(const uint32_t flag_bits,const DescriptorSetType &set_type,const ShaderBufferSource &ss){return AddUBO(flag_bits,set_type,ss.struct_name,ss.name);}
bool AddUBOStruct(const uint32_t flag_bits,const ShaderBufferSource &ss);
bool AddSampler(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name);

View File

@ -30,8 +30,8 @@ void RenderAssignBuffer::Bind(Material *mtl)const
{
if(!mtl)return;
mtl->BindUBO(mtl::DST_LocalToWorld, mtl::SBS_LocalToWorld.name, l2w_buffer);
mtl->BindUBO(mtl::DST_MaterialInstance, mtl::SBS_MaterialInstance.name, mi_buffer);
mtl->BindUBO(&mtl::SBS_LocalToWorld, l2w_buffer);
mtl->BindUBO(&mtl::SBS_MaterialInstance, mi_buffer);
}
void RenderAssignBuffer::Clear()

View File

@ -17,9 +17,7 @@ bool Std2DMaterial::CustomVertexShader(ShaderCreateInfoVertex *vsc)
if(cfg->local_to_world
||cfg->material_instance)
{
mci->AddStruct(SBS_LocalToWorld);
mci->AddUBO(VK_SHADER_STAGE_ALL_GRAPHICS,DescriptorSetType::PerFrame,SBS_LocalToWorld);
mci->AddUBOStruct(VK_SHADER_STAGE_ALL_GRAPHICS,SBS_LocalToWorld);
vsc->AddAssign();
}
@ -43,11 +41,7 @@ bool Std2DMaterial::CustomVertexShader(ShaderCreateInfoVertex *vsc)
if(cfg->coordinate_system==CoordinateSystem2D::Ortho)
{
mci->AddStruct(SBS_ViewportInfo);
mci->AddUBO(VK_SHADER_STAGE_ALL_GRAPHICS,
DescriptorSetType::RenderTarget,
SBS_ViewportInfo);
mci->AddUBOStruct(VK_SHADER_STAGE_ALL_GRAPHICS,SBS_ViewportInfo);
}
return(true);

View File

@ -13,20 +13,14 @@ bool Std3DMaterial::CustomVertexShader(ShaderCreateInfoVertex *vsc)
if(cfg->camera||cfg->local_to_world||cfg->material_instance)
{
mci->AddStruct(SBS_LocalToWorld);
mci->AddUBO(VK_SHADER_STAGE_ALL_GRAPHICS,DescriptorSetType::PerFrame,SBS_LocalToWorld);
mci->AddUBOStruct(VK_SHADER_STAGE_ALL_GRAPHICS,SBS_LocalToWorld);
vsc->AddAssign();
}
if(cfg->camera)
{
mci->AddStruct(SBS_CameraInfo);
mci->AddUBO(VK_SHADER_STAGE_ALL_GRAPHICS,
DescriptorSetType::Camera,
SBS_CameraInfo);
mci->AddUBOStruct(VK_SHADER_STAGE_ALL_GRAPHICS,SBS_CameraInfo);
}
if(cfg->local_to_world)
@ -58,11 +52,7 @@ bool Std3DMaterial::CustomVertexShader(ShaderCreateInfoVertex *vsc)
vsc->AddFunction(func::GetNormalVS);
}
mci->AddStruct(SBS_ViewportInfo);
mci->AddUBO(VK_SHADER_STAGE_ALL_GRAPHICS,
DescriptorSetType::RenderTarget,
SBS_ViewportInfo);
mci->AddUBOStruct(VK_SHADER_STAGE_ALL_GRAPHICS,SBS_ViewportInfo);
return(true);
}

View File

@ -93,6 +93,14 @@ bool MaterialCreateInfo::AddUBO(const uint32_t flag_bits,const DescriptorSetType
return(result==shader_map.GetCount());
}
bool MaterialCreateInfo::AddUBOStruct(const uint32_t flag_bits,const ShaderBufferSource &ss)
{
if(!AddStruct(ss.struct_name,ss.codes))
return(false);
return AddUBO(flag_bits,ss.set_type,ss.struct_name,ss.name);
}
bool MaterialCreateInfo::AddSampler(const VkShaderStageFlagBits flag_bit,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name)
{
if(!shader_map.ContainsKey(flag_bit))
@ -168,11 +176,12 @@ bool MaterialCreateInfo::SetMaterialInstance(const AnsiString &glsl_codes,const
mi_max_count=hgl_min<uint32_t>(ubo_range/data_bytes,HGL_U16_MAX);
mdi.AddStruct(MaterialInstanceStruct,mi_codes);
mdi.AddStruct(SBS_MaterialInstance);
mi_ubo=CreateUBODescriptor(SBS_MaterialInstance,shader_stage_flag_bits);
mdi.AddUBO(shader_stage_flag_bits,DST_MaterialInstance,mi_ubo);
mdi.AddUBO(shader_stage_flag_bits,SBS_MaterialInstance.set_type,mi_ubo);
const AnsiString MI_MAX_COUNT_STRING=AnsiString::numberOf(mi_max_count);
@ -204,7 +213,7 @@ bool MaterialCreateInfo::SetLocalToWorld(const uint32_t shader_stage_flag_bits)
l2w_ubo=CreateUBODescriptor(SBS_LocalToWorld,shader_stage_flag_bits);
mdi.AddUBO(shader_stage_flag_bits,DST_LocalToWorld,l2w_ubo);
mdi.AddUBO(shader_stage_flag_bits,SBS_LocalToWorld.set_type,l2w_ubo);
const AnsiString L2W_MAX_COUNT_STRING=AnsiString::numberOf(l2w_max_count);