added barriers, started working on libraries
This commit is contained in:
@@ -58,13 +58,20 @@ enum EDependencyMode
|
||||
DEPENDENCY_MODE_DRAWCALL_VERTEX_BUFFER,
|
||||
DEPENDENCY_MODE_DRAWCALL_INDEX_BUFFER,
|
||||
DEPENDENCY_MODE_DRAWCALL_OUTPUT_IMAGE,
|
||||
DEPENDENCY_MODE_DRAWCALL_INPUT_IMAGE,
|
||||
DEPENDENCY_MODE_DRAWCALL_MIXED_IMAGE,
|
||||
|
||||
DEPENDENCY_MODE_IMAGE_SOURCE,
|
||||
DEPENDENCY_MODE_IMAGE_DESTINATION,
|
||||
|
||||
DEPENDENCY_MODE_COLOR_CLEAR_SOURCE,
|
||||
DEPENDENCY_MODE_COLOR_CLEAR_DESTINATION,
|
||||
|
||||
DEPENDENCY_MODE_ALL_COMMANDS,
|
||||
DEPENDENCY_MODE_IMAGE_PRESENT,
|
||||
|
||||
DEPENDENCY_MODE_FROM_PREVIOUS,
|
||||
|
||||
DEPENDENCY_MODE_COUNT,
|
||||
};
|
||||
|
||||
@@ -73,6 +80,10 @@ struct VulkanCommandDepenency_t {
|
||||
IRenderingObject *m_pObject;
|
||||
EDependencyMode m_eDependencyMode;
|
||||
};
|
||||
struct VulkanCommandSwapchainDepenency_t {
|
||||
IRenderingObject **m_ppObjects;
|
||||
EDependencyMode m_eDependencyMode;
|
||||
};
|
||||
|
||||
struct VulkanCommandParameter_t
|
||||
{
|
||||
@@ -90,10 +101,12 @@ public:
|
||||
virtual void Execute( VkCommandBuffer hCommandBuffer, int iCurrentFrame ) = 0;
|
||||
//virtual const char *GetName();
|
||||
|
||||
CUtlVector<VulkanCommandDepenency_t> m_depedencies;
|
||||
CUtlVector<VulkanCommandDepenency_t> m_dependencies = {};
|
||||
CUtlVector<VulkanCommandSwapchainDepenency_t> m_swapchainDependencies = {};
|
||||
EVulkanCommandType m_eType;
|
||||
protected:
|
||||
|
||||
void AddDependency( IRenderingObject *pObject, EDependencyMode eDependencyMode );
|
||||
void AddSwapchainDependency( IRenderingObject **ppObjects, EDependencyMode eDependencyMode );
|
||||
};
|
||||
|
||||
abstract_class IVkCommandBuffer
|
||||
@@ -173,9 +186,88 @@ public:
|
||||
VkImage m_image;
|
||||
VkImageView m_imageView;
|
||||
VmaAllocation m_allocation;
|
||||
VkImageSubresourceRange m_range;
|
||||
|
||||
VkImageLayout m_eImageLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
EDependencyMode m_eLastUsage;
|
||||
};
|
||||
|
||||
class CVkBuffer: public IBuffer
|
||||
{
|
||||
public:
|
||||
CVkBuffer( uint32_t nSize, VkBufferUsageFlags2 eUsage, uint32_t nAlignment );
|
||||
~CVkBuffer();
|
||||
|
||||
virtual void SetDebugName( const char *szName ) override;
|
||||
virtual void Lock() override;
|
||||
virtual void Unlock() override;
|
||||
virtual void *Map() override;
|
||||
virtual void Unmap() override;
|
||||
virtual uint32_t GetSize() override;
|
||||
|
||||
VmaAllocation allocation;
|
||||
VkBuffer buffer;
|
||||
VkDeviceAddress address;
|
||||
uint32_t nSize;
|
||||
};
|
||||
|
||||
class CVkPipelineLibrary
|
||||
{
|
||||
public:
|
||||
virtual void Build() = 0;
|
||||
|
||||
VkPipeline m_hPipeline = NULL;
|
||||
};
|
||||
|
||||
#define BEGIN_DEFINE_PIPELINE_LIBRARY(name) \
|
||||
class CVk##name##PipelineLibrary: public CVkPipelineLibrary \
|
||||
{ \
|
||||
public: \
|
||||
virtual void Build() override; \
|
||||
|
||||
#define END_DEFINE_PIPELINE_LIBRARY() \
|
||||
};
|
||||
|
||||
#define BEGIN_BUILD_PIPELINE_LIBRARY(name) \
|
||||
void CVk##name##PipelineLibrary::Build() \
|
||||
{ \
|
||||
VkGraphicsPipelineCreateInfo pipeline = {}; \
|
||||
pipeline.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; \
|
||||
|
||||
#define END_BUILD_PIPELINE_LIBRARY() \
|
||||
vkCreateGraphicsPipelines(g_vkDevice, NULL, 1, &pipeline, NULL, &m_hPipeline); \
|
||||
}
|
||||
|
||||
class CVkShader : IShader
|
||||
{
|
||||
public:
|
||||
void AddShaderLibrary( CVkPipelineLibrary *pLibrary );
|
||||
void Build();
|
||||
VkPipeline m_hPipeline = NULL;
|
||||
VkPipelineLayout m_hPipelineLayout;
|
||||
CUtlVector<CVkPipelineLibrary*> m_libraries;
|
||||
};
|
||||
|
||||
enum EVkFrameObjectType_t
|
||||
{
|
||||
FRAME_OBJECT_TYPE_SINGLE,
|
||||
FRAME_OBJECT_TYPE_SWAPPED,
|
||||
};
|
||||
|
||||
struct VkFrameObject_t
|
||||
{
|
||||
EVkFrameObjectType_t m_eObjectType;
|
||||
union {
|
||||
IRenderingObject *m_pSingle;
|
||||
IRenderingObject **m_ppSwapped;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
IRenderingObject *VulkanGetObject( VkFrameObject_t stObject, int iIndex );
|
||||
|
||||
VkAccessFlags2 VulkanGetAccessFlags( EDependencyMode eMode );
|
||||
VkPipelineStageFlags2 VulkanGetStageFlags( EDependencyMode eMode );
|
||||
VkImageLayout VulkanGetImageLayout( EDependencyMode eMode );
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user