use standalone DescriptorSetType,ShaderDescriptor,ShaderStage
This commit is contained in:
@@ -140,7 +140,7 @@ Semaphore *GPUDevice::CreateGPUSemaphore()
|
||||
return(new Semaphore(attr->device,sem));
|
||||
}
|
||||
|
||||
Queue *GPUDevice::CreateQueue(const uint32_t fence_count,const bool create_signaled)
|
||||
DeviceQueue *GPUDevice::CreateQueue(const uint32_t fence_count,const bool create_signaled)
|
||||
{
|
||||
if(fence_count<=0)return(nullptr);
|
||||
|
||||
@@ -149,6 +149,6 @@ Queue *GPUDevice::CreateQueue(const uint32_t fence_count,const bool create_signa
|
||||
for(uint32_t i=0;i<fence_count;i++)
|
||||
fence_list[i]=CreateFence(create_signaled);
|
||||
|
||||
return(new Queue(attr->device,attr->graphics_queue,fence_list,fence_count));
|
||||
return(new DeviceQueue(attr->device,attr->graphics_queue,fence_list,fence_count));
|
||||
}
|
||||
VK_NAMESPACE_END
|
||||
|
@@ -33,7 +33,7 @@ RenderTarget *GPUDevice::CreateRenderTarget(const FramebufferInfo *fbi,RenderPas
|
||||
|
||||
if(fb)
|
||||
{
|
||||
Queue *q=CreateQueue(fence_count,false);
|
||||
DeviceQueue *q=CreateQueue(fence_count,false);
|
||||
Semaphore *render_complete_semaphore=CreateGPUSemaphore();
|
||||
|
||||
RenderTarget *rt=new RenderTarget(q,render_complete_semaphore,rp,fb,color_texture_list,color_count,depth_texture);
|
||||
@@ -64,7 +64,7 @@ SwapchainRenderTarget *GPUDevice::CreateSwapchainRenderTarget()
|
||||
if(!sc)
|
||||
return(false);
|
||||
|
||||
Queue *q=CreateQueue(sc->color_count,false);
|
||||
DeviceQueue *q=CreateQueue(sc->color_count,false);
|
||||
Semaphore *render_complete_semaphore=CreateGPUSemaphore();
|
||||
Semaphore *present_complete_semaphore=CreateGPUSemaphore();
|
||||
|
||||
|
@@ -1,4 +1,5 @@
|
||||
#include<hgl/graph/VKMaterialDescriptorSets.h>
|
||||
#include<hgl/graph/VKDescriptorSetType.h>
|
||||
#include<hgl/TypeFunc.h>
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include<hgl/graph/VK.h>
|
||||
#include<hgl/graph/VKShaderResource.h>
|
||||
#include<hgl/graph/VKDescriptorSetType.h>
|
||||
#include<hgl/type/Map.h>
|
||||
#include<hgl/type/SortedSets.h>
|
||||
VK_NAMESPACE_BEGIN
|
||||
|
@@ -7,7 +7,7 @@ namespace
|
||||
const VkPipelineStageFlags pipe_stage_flags=VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
|
||||
}//namespace
|
||||
|
||||
Queue::Queue(VkDevice dev,VkQueue q,Fence **fl,const uint32_t fc)
|
||||
DeviceQueue::DeviceQueue(VkDevice dev,VkQueue q,Fence **fl,const uint32_t fc)
|
||||
{
|
||||
device=dev;
|
||||
queue=q;
|
||||
@@ -19,12 +19,12 @@ Queue::Queue(VkDevice dev,VkQueue q,Fence **fl,const uint32_t fc)
|
||||
submit_info.pWaitDstStageMask = &pipe_stage_flags;
|
||||
}
|
||||
|
||||
Queue::~Queue()
|
||||
DeviceQueue::~DeviceQueue()
|
||||
{
|
||||
SAFE_CLEAR_OBJECT_ARRAY(fence_list,fence_count)
|
||||
}
|
||||
|
||||
bool Queue::WaitQueue()
|
||||
bool DeviceQueue::WaitQueue()
|
||||
{
|
||||
VkResult result=vkQueueWaitIdle(queue);
|
||||
|
||||
@@ -34,7 +34,7 @@ bool Queue::WaitQueue()
|
||||
return(true);
|
||||
}
|
||||
|
||||
bool Queue::WaitFence(const bool wait_all,uint64_t time_out)
|
||||
bool DeviceQueue::WaitFence(const bool wait_all,uint64_t time_out)
|
||||
{
|
||||
VkResult result;
|
||||
VkFence fence=*fence_list[current_fence];
|
||||
@@ -48,7 +48,7 @@ bool Queue::WaitFence(const bool wait_all,uint64_t time_out)
|
||||
return(true);
|
||||
}
|
||||
|
||||
bool Queue::Submit(const VkCommandBuffer *cmd_buf,const uint32_t cb_count,Semaphore *wait_sem,Semaphore *complete_sem)
|
||||
bool DeviceQueue::Submit(const VkCommandBuffer *cmd_buf,const uint32_t cb_count,Semaphore *wait_sem,Semaphore *complete_sem)
|
||||
{
|
||||
VkSemaphore ws;
|
||||
VkSemaphore cs;
|
||||
@@ -91,7 +91,7 @@ bool Queue::Submit(const VkCommandBuffer *cmd_buf,const uint32_t cb_count,Semaph
|
||||
return(result==VK_SUCCESS);
|
||||
}
|
||||
|
||||
bool Queue::Submit(const VkCommandBuffer &cmd_buf,Semaphore *wait_sem,Semaphore *complete_sem)
|
||||
bool DeviceQueue::Submit(const VkCommandBuffer &cmd_buf,Semaphore *wait_sem,Semaphore *complete_sem)
|
||||
{
|
||||
return Submit(&cmd_buf,1,wait_sem,complete_sem);
|
||||
}
|
||||
|
@@ -75,6 +75,8 @@ void LoadShaderDescriptor(io::ConstBufferReader &cbr,ShaderDescriptor *sd_list,c
|
||||
}
|
||||
}
|
||||
|
||||
ShaderResource *LoadShaderResource(io::ConstBufferReader &cbr);
|
||||
|
||||
Material *RenderResource::CreateMaterial(const OSString &filename)
|
||||
{
|
||||
Material *mtl;
|
||||
@@ -137,7 +139,7 @@ Material *RenderResource::CreateMaterial(const OSString &filename)
|
||||
|
||||
if(sr)
|
||||
{
|
||||
shader_name=filename+OS_TEXT("?")+OSString(sr->GetStageName());
|
||||
shader_name=filename+OS_TEXT("?")+ToOSString(sr->GetStageName());
|
||||
|
||||
sm=CreateShaderModule(shader_name,sr);
|
||||
|
||||
|
@@ -6,7 +6,7 @@
|
||||
#include<hgl/graph/VKFramebuffer.h>
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
RenderTarget::RenderTarget(Queue *q,Semaphore *s)
|
||||
RenderTarget::RenderTarget(DeviceQueue *q,Semaphore *s)
|
||||
{
|
||||
queue=q;
|
||||
render_pass=nullptr;
|
||||
@@ -18,7 +18,7 @@ RenderTarget::RenderTarget(Queue *q,Semaphore *s)
|
||||
render_complete_semaphore=s;
|
||||
}
|
||||
|
||||
RenderTarget::RenderTarget(Queue *q,Semaphore *s,RenderPass *_rp,Framebuffer *_fb,Texture2D **ctl,const uint32_t cc,Texture2D *dt)
|
||||
RenderTarget::RenderTarget(DeviceQueue *q,Semaphore *s,RenderPass *_rp,Framebuffer *_fb,Texture2D **ctl,const uint32_t cc,Texture2D *dt)
|
||||
{
|
||||
queue=q;
|
||||
render_pass=_rp;
|
||||
|
@@ -51,17 +51,17 @@ Renderable *CreateRenderable(Primitive *r,MaterialInstance *mi,Pipeline *p)
|
||||
AutoDeleteArray<VkDeviceSize> buffer_size(input_count);
|
||||
|
||||
VBO *vbo;
|
||||
const AnsiString ** name_list=vil->GetNameList();
|
||||
const char ** name_list=vil->GetNameList();
|
||||
const VkVertexInputBindingDescription * bind_list=vil->GetBindingList();
|
||||
const VkVertexInputAttributeDescription * attr_list=vil->GetAttributeList();
|
||||
|
||||
for(int i=0;i<input_count;i++)
|
||||
{
|
||||
vbo=r->GetVBO(**name_list,buffer_size+i);
|
||||
vbo=r->GetVBO(*name_list,buffer_size+i);
|
||||
|
||||
if(!vbo)
|
||||
{
|
||||
LOG_ERROR("[FATAL ERROR] not found VBO \""+**name_list+"\" in Material: "+mtl_name);
|
||||
LOG_ERROR("[FATAL ERROR] not found VBO \""+AnsiString(*name_list)+"\" in Material: "+mtl_name);
|
||||
return(nullptr);
|
||||
}
|
||||
|
||||
|
@@ -48,13 +48,14 @@ VertexShaderModule::VertexShaderModule(VkDevice dev,VkPipelineShaderStageCreateI
|
||||
|
||||
attr_count=stage_input_list.GetCount();
|
||||
ssi_list=stage_input_list.GetData();
|
||||
name_list=new const AnsiString *[attr_count];
|
||||
name_list=new const char *[attr_count];
|
||||
type_list=new VertexAttribType[attr_count];
|
||||
|
||||
for(uint i=0;i<attr_count;i++)
|
||||
{
|
||||
name_list[i]=&(ssi_list[i]->name);
|
||||
type_list[i]= ssi_list[i]->type;
|
||||
name_list[i] =ssi_list[i]->name;
|
||||
type_list[i].basetype =VertexAttribType::BaseType(ssi_list[i]->basetype);
|
||||
type_list[i].vec_size =ssi_list[i]->vec_size;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,6 +70,8 @@ VertexShaderModule::~VertexShaderModule()
|
||||
delete[] name_list;
|
||||
}
|
||||
|
||||
const VkFormat GetVulkanFormat(const VertexAttribType::BaseType &base_type,const uint vec_size); //VertexAttrib.cpp
|
||||
|
||||
VIL *VertexShaderModule::CreateVIL(const VILConfig *cfg)
|
||||
{
|
||||
VkVertexInputBindingDescription *binding_list=new VkVertexInputBindingDescription[attr_count];
|
||||
@@ -97,11 +100,11 @@ VIL *VertexShaderModule::CreateVIL(const VILConfig *cfg)
|
||||
|
||||
if(!cfg||!cfg->Get((*si)->name,vac))
|
||||
{
|
||||
attr->format =VK_NAMESPACE::GetVulkanFormat(&((*si)->type));
|
||||
attr->format =GetVulkanFormat(VertexAttribType::BaseType((*si)->basetype),(*si)->vec_size);
|
||||
|
||||
if(memcmp((*si)->name.c_str(),"Inst_",5)==0) //不可以使用CaseComp("Inst_",5)会被认为是比较一个5字长的字符串,而不是只比较5个字符
|
||||
bind->inputRate =VK_VERTEX_INPUT_RATE_INSTANCE;
|
||||
else
|
||||
//if(memcmp((*si)->name.c_str(),"Inst_",5)==0) //不可以使用CaseComp("Inst_",5)会被认为是比较一个5字长的字符串,而不是只比较5个字符
|
||||
// bind->inputRate =VK_VERTEX_INPUT_RATE_INSTANCE;
|
||||
//else
|
||||
bind->inputRate =VK_VERTEX_INPUT_RATE_VERTEX;
|
||||
}
|
||||
else
|
||||
@@ -109,7 +112,7 @@ VIL *VertexShaderModule::CreateVIL(const VILConfig *cfg)
|
||||
if(vac.format!=PF_UNDEFINED)
|
||||
attr->format =vac.format;
|
||||
else
|
||||
attr->format =VK_NAMESPACE::GetVulkanFormat(&((*si)->type));
|
||||
attr->format =GetVulkanFormat(VertexAttribType::BaseType((*si)->basetype),(*si)->vec_size);
|
||||
|
||||
bind->inputRate =vac.instance?VK_VERTEX_INPUT_RATE_INSTANCE:VK_VERTEX_INPUT_RATE_VERTEX;
|
||||
}
|
||||
|
@@ -26,8 +26,8 @@ VK_NAMESPACE_BEGIN
|
||||
ss=new ShaderStage;
|
||||
|
||||
cbr.Read(ss->location);
|
||||
cbr.CastRead<uint8>(ss->type.basetype);
|
||||
cbr.CastRead<uint8>(ss->type.vec_size);
|
||||
cbr.CastRead<uint8>(ss->basetype);
|
||||
cbr.CastRead<uint8>(ss->vec_size);
|
||||
|
||||
cbr.ReadTinyString(ss->name);
|
||||
|
||||
@@ -45,34 +45,6 @@ VK_NAMESPACE_BEGIN
|
||||
spv_size=size;
|
||||
}
|
||||
|
||||
const os_char *ShaderStageName[]=
|
||||
{
|
||||
OS_TEXT("vert"),
|
||||
OS_TEXT("tesc"),
|
||||
OS_TEXT("tese"),
|
||||
OS_TEXT("geom"),
|
||||
OS_TEXT("frag"),
|
||||
OS_TEXT("comp"),
|
||||
OS_TEXT("task"),
|
||||
OS_TEXT("mesh")
|
||||
};
|
||||
|
||||
const os_char *ShaderResource::GetStageName() const
|
||||
{
|
||||
switch(stage_flag)
|
||||
{
|
||||
case VK_SHADER_STAGE_VERTEX_BIT: return ShaderStageName[0];
|
||||
case VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT: return ShaderStageName[1];
|
||||
case VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT: return ShaderStageName[2];
|
||||
case VK_SHADER_STAGE_GEOMETRY_BIT: return ShaderStageName[3];
|
||||
case VK_SHADER_STAGE_FRAGMENT_BIT: return ShaderStageName[4];
|
||||
case VK_SHADER_STAGE_COMPUTE_BIT: return ShaderStageName[5];
|
||||
case VK_SHADER_STAGE_TASK_BIT_NV: return ShaderStageName[6];
|
||||
case VK_SHADER_STAGE_MESH_BIT_NV: return ShaderStageName[7];
|
||||
default: return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
const ShaderStage *ShaderResource::GetStageInput(const AnsiString &name) const
|
||||
{
|
||||
const int count=stage_inputs.GetCount();
|
||||
|
@@ -3,7 +3,7 @@
|
||||
#include<hgl/graph/VKSemaphore.h>
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
SwapchainRenderTarget::SwapchainRenderTarget(VkDevice dev,Swapchain *sc,Queue *q,Semaphore *rcs,Semaphore *pcs,RenderPass *rp):RenderTarget(q,rcs)
|
||||
SwapchainRenderTarget::SwapchainRenderTarget(VkDevice dev,Swapchain *sc,DeviceQueue *q,Semaphore *rcs,Semaphore *pcs,RenderPass *rp):RenderTarget(q,rcs)
|
||||
{
|
||||
device=dev;
|
||||
|
||||
|
Reference in New Issue
Block a user