// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SRC_UI_LIB_ESCHER_FORWARD_DECLARATIONS_H_
#define SRC_UI_LIB_ESCHER_FORWARD_DECLARATIONS_H_

#include "src/lib/fxl/memory/ref_ptr.h"
#include "src/lib/fxl/memory/weak_ptr.h"

namespace escher {

class BatchGpuDownloader;
class BatchGpuUploader;
class BlockAllocator;
class Buffer;
class BufferCache;
class Camera;
class ChainedSemaphoreGenerator;
struct ClipPlanes;
class CommandBuffer;
class DebugFont;
class DefaultShaderProgramFactory;
class Escher;
class Frame;
class Framebuffer;
class GpuAllocator;
class GpuMem;
class HackFilesystem;
class Image;
class ImageFactory;
class ImageLayoutUpdater;
class ImageView;
class MeshBuilder;
class MeshBuilderFactory;
struct MeshSpec;
class Material;
class Mesh;
class Model;
class Object;
// TODO(ES-83): move to vk/impl.  Cannot do this yet because there is already
// a PipelineLayout in impl/vk.
class PipelineLayout;
class PaperRenderer;
class PaperRenderQueue;
class PaperShapeCache;
class Resource;
class ResourceRecycler;
class Renderer;
class RenderPass;
struct RenderPassInfo;
struct RenderQueueItem;
class Semaphore;
class ShaderProgram;
class ShadowMap;
class ShadowMapRenderer;
class Shape;
class Stage;
class Texture;
class Timestamper;
class TimestampProfiler;
struct UniformAllocation;
class ViewingVolume;
struct VulkanContext;
struct VulkanSwapchain;

typedef fxl::RefPtr<BatchGpuUploader> BatchGpuUploaderPtr;
typedef fxl::RefPtr<Buffer> BufferPtr;
typedef fxl::RefPtr<CommandBuffer> CommandBufferPtr;
typedef fxl::WeakPtr<Escher> EscherWeakPtr;
typedef fxl::RefPtr<Frame> FramePtr;
typedef fxl::RefPtr<Framebuffer> FramebufferPtr;
typedef fxl::RefPtr<GpuMem> GpuMemPtr;
typedef fxl::RefPtr<HackFilesystem> HackFilesystemPtr;
typedef fxl::RefPtr<Image> ImagePtr;
typedef fxl::RefPtr<ImageView> ImageViewPtr;
typedef fxl::RefPtr<Material> MaterialPtr;
typedef fxl::RefPtr<Mesh> MeshPtr;
typedef fxl::RefPtr<MeshBuilder> MeshBuilderPtr;
typedef fxl::RefPtr<PaperRenderer> PaperRendererPtr;
// TODO(ES-83): move to vk/impl.  Cannot do this yet because there is already
// a PipelineLayout in impl/vk.
typedef fxl::RefPtr<PipelineLayout> PipelineLayoutPtr;
typedef fxl::RefPtr<Resource> ResourcePtr;
typedef fxl::RefPtr<Renderer> RendererPtr;
typedef fxl::RefPtr<RenderPass> RenderPassPtr;
typedef fxl::RefPtr<Semaphore> SemaphorePtr;
typedef fxl::RefPtr<ShaderProgram> ShaderProgramPtr;
typedef fxl::RefPtr<ShadowMap> ShadowMapPtr;
typedef fxl::RefPtr<ShadowMapRenderer> ShadowMapRendererPtr;
typedef fxl::RefPtr<Texture> TexturePtr;
typedef fxl::RefPtr<TimestampProfiler> TimestampProfilerPtr;

namespace hmd {
class PoseBufferLatchingShader;
}  // namespace hmd

namespace impl {
// From deprecated escher/impl directory.
class CommandBuffer;
class CommandBufferPool;
class CommandBufferSequencer;
class ComputeShader;
class FrameManager;
class GlslToSpirvCompiler;
class GpuUploader;
class ImageCache;
class MeshManager;
class MeshShaderBinding;
class ModelData;
class ModelDisplayList;
class ModelPipeline;
class ModelPipelineCache;
class ModelRenderer;
class ModelRenderPass;
class Pipeline;
class SsdoAccelerator;
class SsdoSampler;
class UniformBufferPool;

typedef fxl::RefPtr<ModelData> ModelDataPtr;
typedef fxl::RefPtr<ModelDisplayList> ModelDisplayListPtr;
typedef fxl::RefPtr<ModelPipelineCache> ModelPipelineCachePtr;
typedef fxl::RefPtr<ModelRenderer> ModelRendererPtr;
typedef fxl::RefPtr<ModelRenderPass> ModelRenderPassPtr;
typedef fxl::RefPtr<Pipeline> PipelinePtr;
typedef fxl::WeakPtr<UniformBufferPool> UniformBufferPoolWeakPtr;

// From escher/vk/impl
class DescriptorSetAllocator;
class Framebuffer;
class FramebufferAllocator;
class PipelineLayoutCache;
class RenderPass;
class RenderPassCache;

typedef fxl::RefPtr<Framebuffer> FramebufferPtr;
typedef fxl::RefPtr<RenderPass> RenderPassPtr;

// From escher/third_party/granite
struct DescriptorSetLayout;
struct ShaderModuleResourceLayout;

}  // namespace impl
}  // namespace escher

namespace shaderc {
class Compiler;
}

#endif  // SRC_UI_LIB_ESCHER_FORWARD_DECLARATIONS_H_
