improvements
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
#include "tier1/utlvector.h"
|
||||
#include "tier2/iappsystem.h"
|
||||
#include "materialsystem/imaterialsystem.h"
|
||||
#include "vulkan/vulkan_core.h"
|
||||
|
||||
#define REQUIRED_EXTENSION(ext) bool bIsSupported_##ext;
|
||||
#define OPTIONAL_EXTENSION(ext) bool bIsSupported_##ext;
|
||||
@@ -18,6 +19,16 @@ extern struct SupportedVulkanExtensions_t
|
||||
#undef REQUIRED_EXTENSION
|
||||
#undef OPTIONAL_EXTENSION
|
||||
|
||||
extern CUtlVector<IImage*> g_vkSwapchainImages;
|
||||
|
||||
|
||||
extern CUtlVector<VkCommandPool> g_vkCommandPools;
|
||||
extern CUtlVector<VkCommandBuffer> g_vkCommandBuffers;
|
||||
|
||||
extern VkInstance g_vkInstance;
|
||||
extern VkPhysicalDevice g_vkPhysicalDevice;
|
||||
extern VkDevice g_vkDevice;
|
||||
|
||||
enum EVulkanCommandType
|
||||
{
|
||||
COMMAND_TYPE_GENERAL,
|
||||
@@ -27,6 +38,14 @@ enum EVulkanCommandType
|
||||
COMMAND_TYPE_END,
|
||||
};
|
||||
|
||||
enum EVulkanCommandParameterType
|
||||
{
|
||||
VULKAN_PARAMETER_TYPE_UINT32,
|
||||
VULKAN_PARAMETER_TYPE_FLOAT,
|
||||
VULKAN_PARAMETER_TYPE_BUFFER,
|
||||
VULKAN_PARAMETER_TYPE_IMAGE,
|
||||
};
|
||||
|
||||
enum EDependencyMode
|
||||
{
|
||||
DEPENDENCY_MODE_SHADER_IMAGE_READ,
|
||||
@@ -41,46 +60,92 @@ enum EDependencyMode
|
||||
|
||||
DEPENDENCY_MODE_IMAGE_SOURCE,
|
||||
DEPENDENCY_MODE_IMAGE_DESTINATION,
|
||||
|
||||
DEPENDENCY_MODE_COLOR_CLEAR_DESTINATION,
|
||||
};
|
||||
|
||||
#define EXPOSE_VULKAN_COMMAND( name ) \
|
||||
class CVulkanCommand_##name; \
|
||||
CVulkanCommand_##name *name(); \
|
||||
|
||||
#define DECLARE_VULKAN_COMMAND( name ) \
|
||||
class CVulkanCommand_##name \
|
||||
{ \
|
||||
public: \
|
||||
virtual void Execute() override; \
|
||||
}; \
|
||||
CVulkanCommand_##name *name(); \
|
||||
{ \
|
||||
return new CVulkanCommand_##name \
|
||||
} \
|
||||
void CVulkanCommand_##name::Execute() \
|
||||
struct VulkanCommandDepenency_t {
|
||||
IRenderingObject *m_pObject;
|
||||
EDependencyMode m_eDependencyMode;
|
||||
};
|
||||
|
||||
struct VulkanCommandParameter_t
|
||||
{
|
||||
const char *m_szName;
|
||||
const EVulkanCommandParameterType m_eParameterType;
|
||||
union {
|
||||
uint32_t uint32_Data;
|
||||
IImage *pImageData;
|
||||
};
|
||||
};
|
||||
|
||||
abstract_class CVkCommand
|
||||
{
|
||||
public:
|
||||
void AddDependency( IRenderingObject *pObject, EDependencyMode eDependencyMode );
|
||||
virtual void Execute();
|
||||
virtual void Execute( VkCommandBuffer hCommandBuffer ) = 0;
|
||||
//virtual const char *GetName();
|
||||
|
||||
struct VulkanCommandDepenency_t {
|
||||
IRenderingObject *m_pObject;
|
||||
EDependencyMode m_eDependencyMode;
|
||||
};
|
||||
CUtlVector<VulkanCommandDepenency_t> m_depedencies;
|
||||
EVulkanCommandType m_eType;
|
||||
|
||||
void SetUIntParam( const char *szName, uint32_t uintParam );
|
||||
uint32_t GetUIntParam( const char *szName );
|
||||
void SetImageParam( const char *szName, IImage *pImageParam );
|
||||
IImage *GetImageParam( const char *szName );
|
||||
virtual CUtlVector<VulkanCommandParameter_t> GetDataTemplate() = 0;
|
||||
CUtlVector<VulkanCommandParameter_t> m_parameters;
|
||||
};
|
||||
|
||||
abstract_class IVkCommandBuffer: public IAppSystem
|
||||
abstract_class IVkCommandBuffer
|
||||
{
|
||||
public:
|
||||
virtual void AddCommand( EVulkanCommandType eType, CVkCommand * ) = 0;
|
||||
virtual void AddCommand( CVkCommand *pCommand ) = 0;
|
||||
|
||||
virtual void Submit() = 0;
|
||||
virtual void Reset() = 0;
|
||||
virtual void Submit( int iFrameIndex ) = 0;
|
||||
virtual void Render() = 0;
|
||||
};
|
||||
|
||||
typedef CVkCommand *(*fnCreateVulkanCommand_t)();
|
||||
|
||||
abstract_class IVkCommandBufferManager: public IAppSystem
|
||||
{
|
||||
public:
|
||||
virtual IVkCommandBuffer *CreateCommandBuffer() = 0;
|
||||
virtual CVkCommand *CreateCommand( const char *szName ) = 0;
|
||||
};
|
||||
#define VULKAN_COMMAND_BUFFER_MANAGER_INTERFACE_NAME "VulkanCommandBufferManager"
|
||||
extern IVkCommandBufferManager *g_pCommandBufferManager;
|
||||
|
||||
class CVkCommandRegistry
|
||||
{
|
||||
public:
|
||||
CVkCommandRegistry( const char *szName, fnCreateVulkanCommand_t pfnCreate );
|
||||
};
|
||||
|
||||
#define DECLARE_VULKAN_COMMAND( name ) \
|
||||
class VulkanCommand_##name : public CVkCommand \
|
||||
{ \
|
||||
public: \
|
||||
virtual void Execute( VkCommandBuffer hCommandBuffer ) override; \
|
||||
virtual CUtlVector<VulkanCommandParameter_t> GetDataTemplate() override; \
|
||||
}; \
|
||||
CVkCommand *_VulkanCommandCreate_##name() { return new VulkanCommand_##name; } \
|
||||
CVkCommandRegistry _VulkanCommandRegistry_##name( #name, _VulkanCommandCreate_##name ); \
|
||||
void VulkanCommand_##name::Execute( VkCommandBuffer hCommandBuffer ) \
|
||||
|
||||
#define BEGIN_VULKAN_COMMAND_DATA(name) \
|
||||
CUtlVector<VulkanCommandParameter_t> VulkanCommand_##name::GetDataTemplate() \
|
||||
{ \
|
||||
CUtlVector<VulkanCommandParameter_t> parameters = {
|
||||
|
||||
#define END_VULKAN_COMMAND_DATA() \
|
||||
}; \
|
||||
return parameters; \
|
||||
};
|
||||
|
||||
IVkCommandBuffer *VulkanCommandBuffer();
|
||||
|
||||
#undef __cplusplus
|
||||
#include "vulkan/vk_enum_string_helper.h"
|
||||
@@ -90,4 +155,34 @@ IVkCommandBuffer *VulkanCommandBuffer();
|
||||
if (r != VK_SUCCESS) \
|
||||
Plat_FatalErrorFunc(#func " failed: %s\n", string_VkResult(r))
|
||||
|
||||
class CVkImage: public IImage
|
||||
{
|
||||
public:
|
||||
CVkImage();
|
||||
CVkImage( uint32_t nWidth, uint32_t nHeight, EImageFormat eFormat, EMultisampleType eMultisampleType );
|
||||
~CVkImage();
|
||||
|
||||
virtual void SetDebugName( const char *szName ) override;
|
||||
virtual uint32_t GetImageWidth() override;
|
||||
virtual uint32_t GetImageHeight() override;
|
||||
virtual EImageFormat GetImageFormat() override;
|
||||
virtual EMultisampleType GetMultisampleType() override;
|
||||
|
||||
void CreateImage( uint32_t nWidth, uint32_t nHeight, EImageFormat eFormat, EMultisampleType eMultisampleType );
|
||||
void CreateImageView();
|
||||
|
||||
static VkImageViewType GetImageViewType( enum EImageType eImageType );
|
||||
static VkFormat GetImageFormat( enum EImageFormat eImageFormat );
|
||||
|
||||
uint32_t m_nWidth;
|
||||
uint32_t m_nHeight;
|
||||
EImageFormat m_eFormat;
|
||||
EMultisampleType m_eMultisampleType;
|
||||
EImageType m_eImageType;
|
||||
|
||||
VkImage m_image;
|
||||
VkImageView m_imageView;
|
||||
VmaAllocation m_allocation;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user