Vulkan stuff
This commit is contained in:
@@ -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"
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#include "materialsystem/materialsystem.h"
|
#include "materialsystem/imaterialsystem.h"
|
||||||
|
|
||||||
class CMaterialSystem: public IMaterialSystem
|
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 "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"
|
||||||
|
|||||||
@@ -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) \
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
|
||||||
@@ -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,14 +93,27 @@ 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:
|
||||||
virtual void Frame( float fTime ) = 0;
|
virtual void Frame( float fTime ) = 0;
|
||||||
|
|
||||||
virtual IRenderContext *GetRenderContext( void) = 0;
|
virtual IRenderContext *GetRenderContext( void ) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
IMaterialSystem *Materials( void );
|
IMaterialSystem *Materials( void );
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#ifndef MATERIAL_PIPELINE_H
|
|
||||||
#define MATERIAL_PIPELINE_H
|
|
||||||
|
|
||||||
#include "tier0/platform.h"
|
|
||||||
abstract_class IPipeline
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
@@ -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"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user