#pragma once
#include <string>
#include <vector>
#include <thread>
#include "Common/File/Path.h"
#include "GPU/GPUCommonHW.h"
#include "GPU/Vulkan/DrawEngineVulkan.h"
#include "GPU/Vulkan/PipelineManagerVulkan.h"
#include "GPU/Common/TextureShaderCommon.h"
class FramebufferManagerVulkan;
class ShaderManagerVulkan;
class LinkedShader;
class TextureCacheVulkan;
class GPU_Vulkan : public GPUCommonHW {
public:
GPU_Vulkan(GraphicsContext *gfxCtx, Draw::DrawContext *draw);
~GPU_Vulkan();
void FinishInitOnMainThread() override;
u32 CheckGPUFeatures() const override;
void BeginHostFrame() override;
void EndHostFrame() override;
void GetStats(char *buffer, size_t bufsize) override;
void DeviceLost() override;
void DeviceRestore(Draw::DrawContext *draw) override;
std::vector<std::string> DebugGetShaderIDs(DebugShaderType shader) override;
std::string DebugGetShaderString(std::string id, DebugShaderType shader, DebugShaderStringType stringType) override;
TextureCacheVulkan *GetTextureCache() {
return textureCacheVulkan_;
}
protected:
void FinishDeferred() override;
void CheckRenderResized() override;
private:
void BuildReportingInfo() override;
void InitDeviceObjects();
void DestroyDeviceObjects();
void LoadCache(const Path &filename);
void SaveCache(const Path &filename);
FramebufferManagerVulkan *framebufferManagerVulkan_;
TextureCacheVulkan *textureCacheVulkan_;
DrawEngineVulkan drawEngine_;
ShaderManagerVulkan *shaderManagerVulkan_;
PipelineManagerVulkan *pipelineManager_;
Path shaderCachePath_;
};