// Copyright 2017 Dolphin Emulator Project // Licensed under GPLv2+ // Refer to the license.txt file included. #pragma once #include #include #include #include "Common/CommonTypes.h" #include "VideoBackends/Vulkan/VulkanLoader.h" #include "VideoCommon/AbstractShader.h" namespace Vulkan { class VKShader final : public AbstractShader { public: VKShader(ShaderStage stage, std::vector spv, VkShaderModule mod); VKShader(std::vector spv, VkPipeline compute_pipeline); ~VKShader() override; VkShaderModule GetShaderModule() const { return m_module; } VkPipeline GetComputePipeline() const { return m_compute_pipeline; } bool HasBinary() const override; BinaryData GetBinary() const override; static std::unique_ptr CreateFromSource(ShaderStage stage, const char* source, size_t length); static std::unique_ptr CreateFromBinary(ShaderStage stage, const void* data, size_t length); private: std::vector m_spv; VkShaderModule m_module; VkPipeline m_compute_pipeline; }; } // namespace Vulkan