#ifndef VULKAN_STATE_H #define VULKAN_STATE_H #include "volk.h" #include "vk_mem_alloc.h" #include "tier0/platform.h" #include "iappsystem.h" #include "materialsystem/materialsystem.h" #define REQUIRED_EXTENSION(ext) bool bIsSupported_##ext; #define OPTIONAL_EXTENSION(ext) bool bIsSupported_##ext; struct SupportedVulkanExtensions_t { #include "device_extensions.h" }; #undef REQUIRED_EXTENSION #undef OPTIONAL_EXTENSION enum EDependencyMode { DEPENDENCY_MODE_SHADER_IMAGE, DEPENDENCY_MODE_SHADER_BUFFER, DEPENDENCY_MODE_SHADER_ACCELERATION_STRUCTURE, DEPENDENCY_MODE_DRAWCALL_VERTEX_BUFFER, DEPENDENCY_MODE_DRAWCALL_INDEX_BUFFER, DEPENDENCY_MODE_DRAWCALL_OUTPUT_IMAGE, }; abstract_class IVkCommand { public: virtual void Call() = 0; void AddDependency( IRenderingObject *pObject, EDependencyMode eDependencyMode ); }; abstract_class IVkCommandBuffer: public IAppSystem { public: void PushCommand( IVkCommand *pCommand ); void Submit(); }; extern IVkCommandBuffer *vkcommandbuffer; #undef __cplusplus #include "vulkan/vk_enum_string_helper.h" #define __cplusplus #define VULKAN_RESULT_PRINT(r, func) \ if (r != VK_SUCCESS) \ Plat_FatalErrorFunc(#func " failed: %s\n", string_VkResult(r)); #endif