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

@@ -1,7 +1,7 @@
#include "tier2/ifilesystem.h" #include "tier2/ifilesystem.h"
#include "igamewindow.h" #include "igamewindow.h"
#include "materialsystem/materialsystem.h" #include "materialsystem/imaterialsystem.h"
#include "tier1/interface.h" #include "tier1/interface.h"
#include "tier1/commandline.h" #include "tier1/commandline.h"
#include "tier0/mem.h" #include "tier0/mem.h"

View File

@@ -8,6 +8,7 @@ CUtlVector<CUtlString> MaterialSystem_CompiledFiles = {
"materialsystem/materialsystem.cpp", "materialsystem/materialsystem.cpp",
"materialsystem/vulkan/rendercontext.cpp", "materialsystem/vulkan/rendercontext.cpp",
"materialsystem/vulkan/material.cpp", "materialsystem/vulkan/material.cpp",
"materialsystem/vulkan/commandbuffer.cpp",
"external/volk/volk.c", "external/volk/volk.c",
}; };
CUtlString material_lib; CUtlString material_lib;

View File

@@ -1,4 +1,4 @@
#include "materialsystem/materialsystem.h" #include "materialsystem/imaterialsystem.h"
class CMaterialSystem: public IMaterialSystem class CMaterialSystem: public IMaterialSystem
{ {

View File

@@ -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;
}

View File

@@ -1,5 +1,5 @@
#include "SDL3/SDL_vulkan.h" #include "SDL3/SDL_vulkan.h"
#include "materialsystem/materialsystem.h" #include "materialsystem/imaterialsystem.h"
#include "tier0/lib.h" #include "tier0/lib.h"
#include "tier0/platform.h" #include "tier0/platform.h"
#include "tier1/utlstring.h" #include "tier1/utlstring.h"

View File

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

View File

@@ -1,7 +1,7 @@
#ifndef CONSOLE_H #ifndef CONSOLE_H
#define CONSOLE_H #define CONSOLE_H
#include "iappsystem.h" #include "tier2/iappsystem.h"
#include "tier0/platform.h" #include "tier0/platform.h"
#include "tier1/utlstring.h" #include "tier1/utlstring.h"
#include "tier1/utlvector.h" #include "tier1/utlvector.h"

View File

@@ -1,7 +1,7 @@
#ifndef GAME_WINDOW_H #ifndef GAME_WINDOW_H
#define GAME_WINDOW_H #define GAME_WINDOW_H
#include "iappsystem.h" #include "tier2/iappsystem.h"
#include "tier0/platform.h" #include "tier0/platform.h"
enum EGraphicsAPI enum EGraphicsAPI

View File

@@ -1,25 +0,0 @@
#ifndef MATERIAL_COMPUTE_SHADER_H
#define MATERIAL_COMPUTE_SHADER_H
#include "ishader.h"
enum EShaderOutput {
SHADER_TEXTURE0,
SHADER_TEXTURE1,
SHADER_TEXTURE2,
SHADER_TEXTURE3,
SHADER_TEXTURE4,
SHADER_TEXTURE5,
SHADER_TEXTURE6,
SHADER_TEXTURE7,
SHADER_DEPTH,
};
abstract_class IComputeShader : public IShader
{
public:
virtual void SetShaderSource( const char *szPath ) = 0;
};
#endif

View File

@@ -1,44 +1,9 @@
#ifndef MATERIAL_SYSTEM_H #ifndef MATERIAL_SYSTEM_H
#define MATERIAL_SYSTEM_H #define MATERIAL_SYSTEM_H
#include "iappsystem.h" #include "tier2/iappsystem.h"
#include "tier0/platform.h" #include "tier0/platform.h"
abstract_class IRenderingObject
{
public:
virtual void SetDebugName( const char *szName ) = 0;
};
abstract_class IBuffer : public IRenderingObject
{
public:
virtual void Lock() = 0;
virtual void Unlock() = 0;
virtual void *Map() = 0;
virtual void Unmap() = 0;
virtual uint32_t GetSize() = 0;
};
abstract_class IVertexBuffer : public IBuffer
{
public:
};
abstract_class IIndexBuffer : public IBuffer
{
public:
};
abstract_class IMesh
{
public:
};
enum EImageFormat enum EImageFormat
{ {
IMAGE_FORMAT_R8_UINT, IMAGE_FORMAT_R8_UINT,
@@ -73,6 +38,26 @@ enum EMultisampleType
MULTISAMPLE_TYPE_8_SAMPLES, MULTISAMPLE_TYPE_8_SAMPLES,
}; };
abstract_class IRenderingObject
{
public:
virtual void SetDebugName( const char *szName ) = 0;
};
abstract_class IBuffer : public IRenderingObject
{
public:
virtual void Lock() = 0;
virtual void Unlock() = 0;
virtual void *Map() = 0;
virtual void Unmap() = 0;
virtual uint32_t GetSize() = 0;
};
typedef IBuffer IVertexBuffer;
typedef IBuffer IIndexBuffer;
abstract_class IImage : public IRenderingObject abstract_class IImage : public IRenderingObject
{ {
public: public:
@@ -81,6 +66,21 @@ public:
virtual EImageFormat GetImageFormat() = 0; virtual EImageFormat GetImageFormat() = 0;
virtual EMultisampleType GetMultisampleType() = 0; virtual EMultisampleType GetMultisampleType() = 0;
}; };
abstract_class IShader
{
public:
};
abstract_class IMaterial
{
public:
virtual void SetConstants( void *pData ) = 0;
virtual void SetTexture( const char *szName, IImage *pImage ) = 0;
virtual void SetBuffer( const char *szName, IImage *pImage ) = 0;
};
abstract_class IRenderContext: public IAppSystem abstract_class IRenderContext: public IAppSystem
{ {
public: public:
@@ -93,8 +93,21 @@ public:
virtual void DestroyBuffer( IBuffer *pBuffer ) = 0; virtual void DestroyBuffer( IBuffer *pBuffer ) = 0;
virtual void DestroyImage( IImage *pImage ) = 0; virtual void DestroyImage( IImage *pImage ) = 0;
virtual IShader *CreateShader( const char *szName );
virtual void DestroyShader( IShader *pMaterial ) = 0;
virtual IMaterial *CreateMaterial( IShader *pShader ) = 0;
virtual void DestroyMaterial( IMaterial *pMaterial ) = 0;
virtual void SetMaterial( IMaterial *pMaterial ) = 0;
virtual void SetVertexBuffer( IVertexBuffer *pBuffer ) = 0;
virtual void SetIndexBuffer( IVertexBuffer *pBuffer ) = 0;
virtual void DrawPrimitives( ) = 0;
virtual void DrawPrimitivesIndexed( ) = 0;
}; };
abstract_class IMaterialSystem: public IAppSystem abstract_class IMaterialSystem: public IAppSystem
{ {
public: public:

View File

@@ -1,10 +0,0 @@
#ifndef MATERIAL_PIPELINE_H
#define MATERIAL_PIPELINE_H
#include "tier0/platform.h"
abstract_class IPipeline
{
public:
};
#endif

View File

@@ -1,27 +0,0 @@
#ifndef MATERIAL_RASTER_SHADER_H
#define MATERIAL_RASTER_SHADER_H
#include "ishader.h"
enum EShaderOutput {
SHADER_TEXTURE0,
SHADER_TEXTURE1,
SHADER_TEXTURE2,
SHADER_TEXTURE3,
SHADER_TEXTURE4,
SHADER_TEXTURE5,
SHADER_TEXTURE6,
SHADER_TEXTURE7,
SHADER_DEPTH,
};
abstract_class IRasterShader : public IShader
{
public:
virtual void SetVertexShader( const char *szPath ) = 0;
virtual void SetPixelShader( const char *szPath ) = 0;
virtual void EnableTexture( EShaderOutput eTextureID, bool bEnabled ) = 0;
};
#endif

View File

@@ -1,36 +0,0 @@
#ifndef MATERIAL_SHADER_H
#define MATERIAL_SHADER_H
#include "tier0/platform.h"
enum EShaderInputType
{
SHADER_INPUT_TYPE_POINTER,
SHADER_INPUT_TYPE_INT,
SHADER_INPUT_TYPE_FLOAT,
SHADER_INPUT_TYPE_FLOAT2,
SHADER_INPUT_TYPE_FLOAT3,
SHADER_INPUT_TYPE_FLOAT4,
SHADER_INPUT_TYPE_MATRIX,
SHADER_INPUT_TYPE_IMAGE,
SHADER_INPUT_TYPE_TEXTURE,
SHADER_INPUT_TYPE_MODEL,
};
abstract_class IShader
{
public:
virtual void CreateShaderParameter( const char *szName, uint32_t binding, EShaderInputType eType, bool bArray ) = 0;
virtual void CreateMaterialParameter( const char *szName, uint32_t binding, EShaderInputType eType, bool bArray ) = 0;
virtual void CreateConstants( uint32_t nSize ) = 0;
virtual void SetShaderParameter( const char *szName, void *pData ) = 0;
};
#endif

View File

@@ -1,7 +1,7 @@
#ifndef SV_DLL_H #ifndef SV_DLL_H
#define SV_DLL_H #define SV_DLL_H
#include "iappsystem.h" #include "tier2/iappsystem.h"
#define SERVER_DLL_INTERFACE_NAME "ServerGameDLL001" #define SERVER_DLL_INTERFACE_NAME "ServerGameDLL001"