Vulkan stuff

This commit is contained in:
2025-09-20 12:39:42 +03:00
parent ab404bf672
commit 287102dcea
19 changed files with 137 additions and 152 deletions

View File

@@ -5,8 +5,9 @@
#include "volk.h"
#include "vk_mem_alloc.h"
#include "tier0/platform.h"
#include "iappsystem.h"
#include "materialsystem/materialsystem.h"
#include "tier1/utlvector.h"
#include "tier2/iappsystem.h"
#include "materialsystem/imaterialsystem.h"
#define REQUIRED_EXTENSION(ext) bool bIsSupported_##ext;
#define OPTIONAL_EXTENSION(ext) bool bIsSupported_##ext;
@@ -17,38 +18,73 @@ extern struct SupportedVulkanExtensions_t
#undef REQUIRED_EXTENSION
#undef OPTIONAL_EXTENSION
enum EVulkanCommandType
{
COMMAND_TYPE_GENERAL,
COMMAND_TYPE_BEGIN,
COMMAND_TYPE_DRAW,
COMMAND_TYPE_END,
};
enum EDependencyMode
{
DEPENDENCY_MODE_SHADER_IMAGE,
DEPENDENCY_MODE_SHADER_BUFFER,
DEPENDENCY_MODE_SHADER_IMAGE_READ,
DEPENDENCY_MODE_SHADER_BUFFER_READ,
DEPENDENCY_MODE_SHADER_IMAGE_WRITE,
DEPENDENCY_MODE_SHADER_BUFFER_WRITE,
DEPENDENCY_MODE_SHADER_ACCELERATION_STRUCTURE,
DEPENDENCY_MODE_DRAWCALL_VERTEX_BUFFER,
DEPENDENCY_MODE_DRAWCALL_INDEX_BUFFER,
DEPENDENCY_MODE_DRAWCALL_OUTPUT_IMAGE,
DEPENDENCY_MODE_IMAGE_SOURCE,
DEPENDENCY_MODE_IMAGE_DESTINATION,
};
abstract_class IVkCommand
#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() \
abstract_class CVkCommand
{
public:
virtual void Call() = 0;
void AddDependency( IRenderingObject *pObject, EDependencyMode eDependencyMode );
virtual void Execute();
struct VulkanCommandDepenency_t {
IRenderingObject *m_pObject;
EDependencyMode m_eDependencyMode;
};
CUtlVector<VulkanCommandDepenency_t> m_depedencies;
};
abstract_class IVkCommandBuffer: public IAppSystem
{
public:
void PushCommand( IVkCommand *pCommand );
virtual void AddCommand( EVulkanCommandType eType, CVkCommand * ) = 0;
void Submit();
virtual void Submit() = 0;
};
extern IVkCommandBuffer *vkcommandbuffer;
IVkCommandBuffer *VulkanCommandBuffer();
#undef __cplusplus
#include "vulkan/vk_enum_string_helper.h"
#define __cplusplus
#define __cplusplus 202400L
#define VULKAN_RESULT_PRINT(r, func) \
if (r != VK_SUCCESS) \