94 lines
2.1 KiB
C++
94 lines
2.1 KiB
C++
#ifndef VULKAN_STATE_H
|
|
#define VULKAN_STATE_H
|
|
|
|
|
|
#include "volk.h"
|
|
#include "vk_mem_alloc.h"
|
|
#include "tier0/platform.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;
|
|
extern struct SupportedVulkanExtensions_t
|
|
{
|
|
#include "device_extensions.h"
|
|
} g_vkAvailableExtensions;
|
|
#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_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,
|
|
};
|
|
|
|
#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:
|
|
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:
|
|
virtual void AddCommand( EVulkanCommandType eType, CVkCommand * ) = 0;
|
|
|
|
virtual void Submit() = 0;
|
|
};
|
|
|
|
IVkCommandBuffer *VulkanCommandBuffer();
|
|
|
|
#undef __cplusplus
|
|
#include "vulkan/vk_enum_string_helper.h"
|
|
#define __cplusplus 202400L
|
|
|
|
#define VULKAN_RESULT_PRINT(r, func) \
|
|
if (r != VK_SUCCESS) \
|
|
Plat_FatalErrorFunc(#func " failed: %s\n", string_VkResult(r))
|
|
|
|
#endif
|