// // Copyright 2016 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // ProgramVk.h: // Defines the class interface for ProgramVk, implementing ProgramImpl. // #ifndef LIBANGLE_RENDERER_VULKAN_PROGRAMVK_H_ #define LIBANGLE_RENDERER_VULKAN_PROGRAMVK_H_ #include #include "common/utilities.h" #include "libANGLE/renderer/ProgramImpl.h" #include "libANGLE/renderer/vulkan/ContextVk.h" #include "libANGLE/renderer/vulkan/ProgramExecutableVk.h" #include "libANGLE/renderer/vulkan/TransformFeedbackVk.h" #include "libANGLE/renderer/vulkan/vk_helpers.h" #include "libANGLE/renderer/vulkan/vk_renderer.h" namespace rx { class ProgramVk : public ProgramImpl { public: ProgramVk(const gl::ProgramState &state); ~ProgramVk() override; void destroy(const gl::Context *context) override; angle::Result load(const gl::Context *context, gl::BinaryInputStream *stream, std::shared_ptr *loadTaskOut, egl::CacheGetResult *resultOut) override; void save(const gl::Context *context, gl::BinaryOutputStream *stream) override; void setBinaryRetrievableHint(bool retrievable) override; void setSeparable(bool separable) override; angle::Result link(const gl::Context *context, std::shared_ptr *linkTaskOut) override; GLboolean validate(const gl::Caps &caps) override; const ProgramExecutableVk *getExecutable() const { return vk::GetImpl(&mState.getExecutable()); } ProgramExecutableVk *getExecutable() { return vk::GetImpl(&mState.getExecutable()); } private: angle::Result createGraphicsPipelineWithDefaultState(const gl::Context *context, vk::PipelineCacheAccess *pipelineCache); }; } // namespace rx #endif // LIBANGLE_RENDERER_VULKAN_PROGRAMVK_H_