// Copyright 2018 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_PAPER_PAPER_RENDERER_CONFIG_H_
#define SRC_UI_LIB_ESCHER_PAPER_PAPER_RENDERER_CONFIG_H_

#include "src/ui/lib/escher/paper/paper_readme.h"
#include "src/ui/lib/escher/util/debug_print.h"
#include "src/ui/lib/escher/vk/shader_variant_args.h"

#include <vulkan/vulkan.hpp>

namespace escher {

// A list of shadow types which may be supported by |PaperRenderer|.  Some
// shadow techniques will not be supported on some target devices.
enum class PaperRendererShadowType {
  kNone = 0,
  kSsdo,
  kShadowMap,
  kMomentShadowMap,
  kShadowVolume,

  // For EnumCount<>().
  kEnumCount
};

ESCHER_DEBUG_PRINTABLE(PaperRendererShadowType);

// Allows clients to configure the behavior of a |PaperRenderer| by calling
// |SetConfig()| at any time except in the middle of a frame.
struct PaperRendererConfig {
  // Choose a shadow algorithm.
  PaperRendererShadowType shadow_type = PaperRendererShadowType::kNone;

  // Multisampling antialiasing (MSAA) sample count: 1, 2, or 4.
  uint8_t msaa_sample_count = 1;

  // Specify how many depth buffers the renderer should round-robin through.
  // TODO(SCN-486): this type of transient resource should be provided by a
  // "FrameGraph" which has global knowledge of the entire frame.
  uint8_t num_depth_buffers = 1;

  // Turn on some sort of debug visualization.
  bool debug = false;

  // Blit the current frame number to the output image.
  bool debug_frame_number = false;

  vk::Format depth_stencil_format = vk::Format::eD24UnormS8Uint;
};

ESCHER_DEBUG_PRINTABLE(PaperRendererConfig);

}  // namespace escher

#endif  // SRC_UI_LIB_ESCHER_PAPER_PAPER_RENDERER_CONFIG_H_
