Vulkan stuff
This commit is contained in:
@@ -8,6 +8,7 @@ CUtlVector<CUtlString> MaterialSystem_CompiledFiles = {
|
||||
"materialsystem/materialsystem.cpp",
|
||||
"materialsystem/vulkan/rendercontext.cpp",
|
||||
"materialsystem/vulkan/material.cpp",
|
||||
"materialsystem/vulkan/commandbuffer.cpp",
|
||||
"external/volk/volk.c",
|
||||
};
|
||||
CUtlString material_lib;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#include "materialsystem/materialsystem.h"
|
||||
#include "materialsystem/imaterialsystem.h"
|
||||
|
||||
class CMaterialSystem: public IMaterialSystem
|
||||
{
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
#include "tier1/utlvector.h"
|
||||
#include "vulkan_state.h"
|
||||
|
||||
class CVkCommandBuffer: public IVkCommandBuffer
|
||||
{
|
||||
public:
|
||||
virtual void Init() override;
|
||||
virtual void Shutdown() override;
|
||||
virtual void AddCommand( EVulkanCommandType eType, CVkCommand *pCommand ) override;
|
||||
virtual void Submit() override;
|
||||
private:
|
||||
CUtlSelfReferencingVector<CVkCommand*> g_commands;
|
||||
};
|
||||
|
||||
void CVkCommandBuffer::AddCommand( EVulkanCommandType eType, CVkCommand *pCommand )
|
||||
{
|
||||
g_commands.AppendTail(pCommand);
|
||||
}
|
||||
|
||||
void CVkCommandBuffer::Submit()
|
||||
{
|
||||
for (auto &pCommand: g_commands)
|
||||
{
|
||||
pCommand->Execute();
|
||||
delete pCommand;
|
||||
};
|
||||
};
|
||||
|
||||
static CVkCommandBuffer s_vkCommandBuffer;
|
||||
IVkCommandBuffer *VulkanCommandBuffer()
|
||||
{
|
||||
return &s_vkCommandBuffer;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#include "SDL3/SDL_vulkan.h"
|
||||
#include "materialsystem/materialsystem.h"
|
||||
#include "materialsystem/imaterialsystem.h"
|
||||
#include "tier0/lib.h"
|
||||
#include "tier0/platform.h"
|
||||
#include "tier1/utlstring.h"
|
||||
|
||||
@@ -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) \
|
||||
|
||||
Reference in New Issue
Block a user