working on rendering
This commit is contained in:
17
public/materialsystem/compiledshadermgr.h
Normal file
17
public/materialsystem/compiledshadermgr.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#ifndef SHADER_WRITER_H
|
||||
#define SHADER_WRITER_H
|
||||
|
||||
#include "tier1/interface.h"
|
||||
#include "shadercompiler/icompiler.h"
|
||||
|
||||
|
||||
abstract_class ICompiledShaderManager
|
||||
{
|
||||
public:
|
||||
virtual void WriteToFile( CCompiledShader *pShader, const char *szFile ) = 0;
|
||||
virtual void ReadFromFile( CCompiledShader *pShader, const char *szFile ) = 0;
|
||||
};
|
||||
|
||||
ICompiledShaderManager *CompiledShaderManager();
|
||||
|
||||
#endif
|
||||
@@ -78,18 +78,25 @@ enum ETopologyMode
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Basic rendering object
|
||||
//-----------------------------------------------------------------------------
|
||||
abstract_class IRenderingObject
|
||||
{
|
||||
public:
|
||||
virtual ~IRenderingObject() = 0;
|
||||
virtual void SetDebugName( const char *szName ) = 0;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Buffer object
|
||||
//-----------------------------------------------------------------------------
|
||||
abstract_class IBuffer : public IRenderingObject
|
||||
{
|
||||
public:
|
||||
virtual void Lock() = 0;
|
||||
virtual void Unlock() = 0;
|
||||
virtual void *Map() = 0;
|
||||
virtual void *Map() = 0;
|
||||
virtual void Unmap() = 0;
|
||||
|
||||
virtual uint32_t GetSize() = 0;
|
||||
@@ -98,6 +105,9 @@ virtual void *Map() = 0;
|
||||
typedef IBuffer IVertexBuffer;
|
||||
typedef IBuffer IIndexBuffer;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Image object
|
||||
//-----------------------------------------------------------------------------
|
||||
abstract_class IImage : public IRenderingObject
|
||||
{
|
||||
public:
|
||||
@@ -107,35 +117,83 @@ public:
|
||||
virtual EMultisampleType GetMultisampleType() = 0;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Shader object
|
||||
//-----------------------------------------------------------------------------
|
||||
abstract_class IShader
|
||||
{
|
||||
public:
|
||||
virtual ~IShader() = 0;
|
||||
virtual uint32_t PSGetResourceByName( const char *szName ) = 0;
|
||||
virtual uint32_t VSGetResourceByName( const char *szName ) = 0;
|
||||
};
|
||||
|
||||
|
||||
#define BEGIN_SHADER(name) \
|
||||
class CShader_##name \
|
||||
{
|
||||
|
||||
#define END_SHADER() \
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Material handle
|
||||
// It allows to specify resources in shaders such as textures, buffers etc.
|
||||
//
|
||||
// Resources must be updated prior to the frame, which can be done
|
||||
// prior to the frame.
|
||||
//-----------------------------------------------------------------------------
|
||||
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, IBuffer *pImage ) = 0;
|
||||
virtual ~IMaterial() = 0;
|
||||
virtual void VSSetShaderResource( uint32_t uRegister, IRenderingObject *pResource ) = 0;
|
||||
virtual void PSSetShaderResource( uint32_t uRegister, IRenderingObject *pResource ) = 0;
|
||||
virtual void VSSetConstantsBuffer( uint32_t uRegister, IBuffer *pImage ) = 0;
|
||||
virtual void PSSetConstantsBuffer( uint32_t uRegister, IBuffer *pImage ) = 0;
|
||||
};
|
||||
|
||||
abstract_class IRenderCommandList
|
||||
{
|
||||
public:
|
||||
virtual void ResetRendering() = 0;
|
||||
|
||||
virtual void SetRenderTarget( uint32_t uIndex, IImage *pImage ) = 0;
|
||||
virtual void SetClearColor( uint32_t uIndex, float r, float g, float b, float a ) = 0;
|
||||
|
||||
virtual void SetDepthTarget( IImage *pDepth ) = 0;
|
||||
virtual void SetClearDepth( float fVal ) = 0;
|
||||
|
||||
virtual void SetRenderResolution( uint32_t iWidth, uint32_t iHeight ) = 0;
|
||||
|
||||
virtual void SetScissors( uint32_t uX, uint32_t uY, uint32_t uWidth, uint32_t uHeight ) = 0;
|
||||
virtual void SetViewport( uint32_t uX, uint32_t uY, uint32_t uWidth, uint32_t uHeight, float fMinDepth, float fMaxDepth ) = 0;
|
||||
|
||||
virtual void SetMaterial( IMaterial *pMaterial ) = 0;
|
||||
virtual void SetVertexBuffer( uint32_t uBinding, IVertexBuffer *pBuffer ) = 0;
|
||||
virtual void SetIndexBuffer( IVertexBuffer *pBuffer ) = 0;
|
||||
virtual void DrawPrimitives( uint32_t nVertexCount, uint32_t nFirstVertex, uint32_t nInstanceCount, uint32_t nFirstInstance ) = 0;
|
||||
virtual void DrawPrimitivesIndexed( uint32_t nIndexCount, uint32_t nFirstIndex, uint32_t nVertexOffset, uint32_t nInstanceCount, uint32_t nFirstInstance ) = 0;
|
||||
|
||||
virtual void ResolveImage( IImage *pOriginal, IImage *pResolved ) = 0;
|
||||
|
||||
virtual void StartRecording() = 0;
|
||||
virtual void EndRecording() = 0;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Rendering context
|
||||
//
|
||||
// Responsible for the object handling
|
||||
//-----------------------------------------------------------------------------
|
||||
abstract_class IRenderContext: public IAppSystem
|
||||
{
|
||||
public:
|
||||
virtual void Frame( float fTime ) = 0;
|
||||
|
||||
virtual void SetOutputImage( IImage *pImage ) = 0;
|
||||
|
||||
virtual bool BIsOutputImageOutdated() = 0;
|
||||
virtual uint32_t GetNewOutputImageWidth() = 0;
|
||||
virtual uint32_t GetNewOutputImageHeight() = 0;
|
||||
virtual EImageFormat GetNewOutputImageFormat() = 0;
|
||||
|
||||
virtual IVertexBuffer *CreateVertexBuffer( uint32_t nSize ) = 0;
|
||||
virtual IIndexBuffer *CreateIndexBuffer( uint32_t nSize ) = 0;
|
||||
virtual IBuffer *CreateConstantBuffer( uint32_t nSize ) = 0;
|
||||
virtual IBuffer *CreateStorageBuffer( uint32_t nSize ) = 0;
|
||||
virtual IImage *CreateRenderTarget( uint32_t x, uint32_t y, EImageFormat eFormat, EMultisampleType eMultisampleType ) = 0;
|
||||
virtual IImage *CreateStorageImage( uint32_t x, uint32_t y, EImageFormat eFormat, EMultisampleType eMultisampleType ) = 0;
|
||||
|
||||
@@ -148,22 +206,22 @@ public:
|
||||
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( uint32_t nVertexCount, uint32_t nFirstVertex, uint32_t nInstanceCount, uint32_t nFirstInstance ) = 0;
|
||||
virtual void DrawPrimitivesIndexed( uint32_t nIndexCount, uint32_t nFirstIndex, uint32_t nVertexOffset, uint32_t nInstanceCount, uint32_t nFirstInstance ) = 0;
|
||||
virtual IRenderCommandList *CreateCommandList() = 0;
|
||||
virtual void DestroyCommandList( IRenderCommandList *pCommandList ) = 0;
|
||||
virtual void SubmitCommandList(IRenderCommandList *pList) = 0;
|
||||
|
||||
};
|
||||
|
||||
#define RENDER_CONTEXT_INTERFACE_NAME "RenderContext001"
|
||||
#define RENDER_CONTEXT_VULKAN_INTERFACE_NAME RENDER_CONTEXT_INTERFACE_NAME
|
||||
|
||||
abstract_class IMaterialSystem: public IAppSystem
|
||||
{
|
||||
public:
|
||||
virtual void Frame( float fTime ) = 0;
|
||||
|
||||
virtual IRenderContext *GetRenderContext( void ) = 0;
|
||||
};
|
||||
|
||||
extern IRenderContext *g_pRenderContext;
|
||||
IMaterialSystem *Materials( void );
|
||||
|
||||
#endif
|
||||
|
||||
70
public/materialsystem/shaderinternals.h
Normal file
70
public/materialsystem/shaderinternals.h
Normal file
@@ -0,0 +1,70 @@
|
||||
//================= Copyright kotofyt, All rights reserved ==================//
|
||||
// Purpose: Shader compilers.
|
||||
//
|
||||
// We kinda need to store shader contents in blobs so they can be parsed easily
|
||||
//
|
||||
// For now we store them like this
|
||||
// ShaderHeader_t
|
||||
// ShaderLump_t[m_nNumLump]
|
||||
// ShaderObject_t[m_nNumShaders]
|
||||
// ~An actual shader data~
|
||||
//===========================================================================//
|
||||
|
||||
#ifndef SHADER_INTERNALS_H
|
||||
#define SHADER_INTERNALS_H
|
||||
|
||||
#include "stdint.h"
|
||||
|
||||
enum EShaderBackend: uint32_t
|
||||
{
|
||||
SHADER_BACKEND_SPIRV_VULKAN,
|
||||
SHADER_BACKEND_CODE_METAL,
|
||||
};
|
||||
|
||||
enum EShaderStage: uint32_t
|
||||
{
|
||||
SHADER_STAGE_VERTEX,
|
||||
SHADER_STAGE_TESSELATION_CONTROL,
|
||||
SHADER_STAGE_TESSELATION_EVAL,
|
||||
SHADER_STAGE_GEOMETRY,
|
||||
SHADER_STAGE_PIXEL,
|
||||
|
||||
SHADER_STAGE_COMPUTE,
|
||||
|
||||
SHADER_STAGE_RAYGEN,
|
||||
SHADER_STAGE_ANY_HIT,
|
||||
SHADER_STAGE_CLOSEST_HIT,
|
||||
SHADER_STAGE_MISS,
|
||||
SHADER_STAGE_CALLABLE,
|
||||
|
||||
SHADER_STAGE_TASK,
|
||||
SHADER_STAGE_MESH,
|
||||
|
||||
SHADER_STAGE_COMMON_DATA,
|
||||
|
||||
SHADER_STAGE_MAX,
|
||||
SHADER_STAGE_COUNT = SHADER_STAGE_MAX
|
||||
};
|
||||
|
||||
struct ShaderHeader_t
|
||||
{
|
||||
char m_cSignature[4];
|
||||
uint32_t m_nNumLumps;
|
||||
uint32_t m_nNumShaders;
|
||||
};
|
||||
|
||||
struct ShaderLump_t
|
||||
{
|
||||
uint32_t m_nSize;
|
||||
uint32_t m_nOffset;
|
||||
};
|
||||
|
||||
struct ShaderObject_t
|
||||
{
|
||||
EShaderBackend m_eBackend;
|
||||
EShaderStage m_eStage;
|
||||
uint32_t m_nMetadataLump;
|
||||
uint32_t m_nDataLump;
|
||||
};
|
||||
|
||||
#endif
|
||||
20
public/materialsystem/vulkan_shadermeta.h
Normal file
20
public/materialsystem/vulkan_shadermeta.h
Normal file
@@ -0,0 +1,20 @@
|
||||
#ifndef VULKAN_METADATA_H
|
||||
#define VULKAN_METADATA_H
|
||||
|
||||
#include "shaderinternals.h"
|
||||
#include "vulkan/vulkan.h"
|
||||
|
||||
struct VulkanDescriptor_t
|
||||
{
|
||||
VkDescriptorType eDescriptorType;
|
||||
uint32_t uBinding;
|
||||
uint32_t uSet;
|
||||
};
|
||||
|
||||
struct VulkanInputMetaData_t
|
||||
{
|
||||
uint32_t nDescriptorsCount;
|
||||
uint32_t pDescriptorSets;
|
||||
};
|
||||
|
||||
#endif
|
||||
41
public/shadercompiler/icompiler.h
Normal file
41
public/shadercompiler/icompiler.h
Normal file
@@ -0,0 +1,41 @@
|
||||
#ifndef SHADER_COMPILER_H
|
||||
#define SHADER_COMPILER_H
|
||||
|
||||
#include "tier1/interface.h"
|
||||
#include "tier1/utlvector.h"
|
||||
#include "tier1/utlbuffer.h"
|
||||
#include "tier2/iappsystem.h"
|
||||
#include "materialsystem/shaderinternals.h"
|
||||
|
||||
struct HostShaderLump_t
|
||||
{
|
||||
void *m_pAddress;
|
||||
uint32_t m_nSize;
|
||||
};
|
||||
|
||||
class CCompiledShader
|
||||
{
|
||||
public:
|
||||
CUtlVector<ShaderObject_t> m_objects = {};
|
||||
CUtlVector<HostShaderLump_t> m_lumps = {};
|
||||
|
||||
~CCompiledShader();
|
||||
|
||||
uint32_t AllocateLump( uint32_t nSize );
|
||||
void *GetLumpPtr( uint32_t nLump );
|
||||
uint32_t GetLumpSize( uint32_t nLump );
|
||||
ShaderObject_t *AllocateShader();
|
||||
|
||||
ShaderObject_t *FindShaderObject( EShaderBackend eBackend, EShaderStage eStage );
|
||||
};
|
||||
|
||||
abstract_class IShaderCompiler: public IAppSystem
|
||||
{
|
||||
public:
|
||||
virtual void CompileShader( const char *szInput, CCompiledShader *pShader ) = 0;
|
||||
};
|
||||
|
||||
#define SLANG_SHADER_COMPILER_SPIRV_VULKAN "ShaderCompilerSlangVulkanSpirv"
|
||||
#define SLANG_SHADER_COMPILER_CODE_METAL "ShaderCompilerSlangMetalCode"
|
||||
|
||||
#endif
|
||||
@@ -58,6 +58,9 @@ typedef void( *ListDirCallbackFn )( const char *szPath );
|
||||
PLATFORM_INTERFACE void Plat_ListDirRecursive( const char *szPath, ListDirCallbackFn file, ListDirCallbackFn dir );
|
||||
PLATFORM_INTERFACE void Plat_ListDir( const char *szPath, ListDirCallbackFn file, ListDirCallbackFn dir );
|
||||
PLATFORM_INTERFACE char *Plat_GetExtension( const char *szPath );
|
||||
|
||||
PLATFORM_INTERFACE void Plat_MakeDir( const char *szPath, int iPermissions );
|
||||
|
||||
PLATFORM_INTERFACE void Plat_TrapSignals( void (*pfn)() );
|
||||
PLATFORM_INTERFACE void Plat_Backtrace( void );
|
||||
|
||||
@@ -65,6 +68,24 @@ PLATFORM_INTERFACE void *Plat_LoadLibrary( const char *psz );
|
||||
PLATFORM_INTERFACE void *Plat_GetProc( void *lib, const char *psz );
|
||||
PLATFORM_INTERFACE void Plat_UnloadLibrary( void *psz );
|
||||
|
||||
PLATFORM_INTERFACE void Plat_SetEnv( const char *szVar, const char *psz );
|
||||
PLATFORM_INTERFACE const char *Plat_GetEnv( const char *szVar );
|
||||
|
||||
PLATFORM_INTERFACE void Plat_SetWorkingDir( const char *psz );
|
||||
PLATFORM_INTERFACE const char *Plat_GetWorkingDir( void );
|
||||
|
||||
PLATFORM_INTERFACE const char *Plat_GetExecutablePath( void );
|
||||
PLATFORM_INTERFACE const char *Plat_GetParentDir( const char *psz );
|
||||
|
||||
PLATFORM_INTERFACE const char *Plat_GetUNIXExecutable( const char *psz );
|
||||
PLATFORM_INTERFACE const char *Plat_GetWindowsExecutable( const char *psz );
|
||||
PLATFORM_INTERFACE const char *Plat_GetPlatformExecutable( const char *psz );
|
||||
|
||||
PLATFORM_INTERFACE const char *Plat_GetDarwinSharedLib( const char *psz );
|
||||
PLATFORM_INTERFACE const char *Plat_GetUNIXSharedLib( const char *psz );
|
||||
PLATFORM_INTERFACE const char *Plat_GetWindowsSharedLib( const char *psz );
|
||||
PLATFORM_INTERFACE const char *Plat_GetPlatformSharedLib( const char *psz );
|
||||
|
||||
PLATFORM_INTERFACE double Plat_GetTime( void );
|
||||
PLATFORM_INTERFACE void Plat_Exit( int status );
|
||||
|
||||
|
||||
7
public/tier1/appinit.h
Normal file
7
public/tier1/appinit.h
Normal file
@@ -0,0 +1,7 @@
|
||||
#ifndef APPINIT_H
|
||||
#define APPINIT_H
|
||||
|
||||
|
||||
void AppInitializePath();
|
||||
|
||||
#endif
|
||||
@@ -6,6 +6,8 @@
|
||||
typedef void *( *CreateInterfaceFn )( const char *szName, int *pReturnCode );
|
||||
typedef void *( *InstantiateInterfaceFn )( void );
|
||||
|
||||
CreateInterfaceFn Plat_GetInterfaceFactory( void *lib );
|
||||
|
||||
class CInterfaceRegistry
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -23,6 +23,10 @@ public:
|
||||
void RemoveHead( size_t nCount );
|
||||
void RemoveAt( size_t nPosition, size_t nCount );
|
||||
|
||||
CUtlString GetFileName();
|
||||
CUtlString GetDirectory();
|
||||
CUtlString RemoveHeadFile();
|
||||
|
||||
char *GetString( void );
|
||||
size_t GetLenght( void );
|
||||
operator char*( void );
|
||||
|
||||
@@ -306,6 +306,9 @@ public:
|
||||
void RemoveTail( void );
|
||||
void RemoveAt( size_t nIndex );
|
||||
|
||||
T &GetFirst();
|
||||
T &GetLast();
|
||||
|
||||
size_t GetSize();
|
||||
|
||||
T operator[]( size_t nIndex );
|
||||
@@ -428,4 +431,17 @@ void CUtlSelfReferencingVector<T>::RemoveTail( void )
|
||||
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
T &CUtlSelfReferencingVector<T>::GetFirst()
|
||||
{
|
||||
return m_pHead->data;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
T &CUtlSelfReferencingVector<T>::GetLast()
|
||||
{
|
||||
return m_pTail->data;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -59,6 +59,10 @@ public:
|
||||
// Some cool stuff
|
||||
virtual CUtlBuffer<unsigned char> Read( IFileHandle *pFile ) = 0;
|
||||
|
||||
// Leaks memory
|
||||
// Should be cleaned by the user
|
||||
virtual const char *ReadString( IFileHandle *pFile ) = 0;
|
||||
|
||||
IFileSystem *m_pNext;
|
||||
|
||||
void RegisterFileSystem();
|
||||
|
||||
Reference in New Issue
Block a user