• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1//
2// Copyright 2019 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6// RenderTargetMtl.mm:
7//    Implements the class methods for RenderTargetMtl.
8//
9
10#include "libANGLE/renderer/metal/RenderTargetMtl.h"
11
12namespace rx
13{
14RenderTargetMtl::RenderTargetMtl() {}
15
16RenderTargetMtl::~RenderTargetMtl()
17{
18    reset();
19}
20
21RenderTargetMtl::RenderTargetMtl(RenderTargetMtl &&other)
22    : mTexture(std::move(other.mTexture)),
23      mImplicitMSTexture(std::move(other.mImplicitMSTexture)),
24      mLevelIndex(other.mLevelIndex),
25      mLayerIndex(other.mLayerIndex)
26{}
27
28void RenderTargetMtl::set(const mtl::TextureRef &texture,
29                          const mtl::MipmapNativeLevel &level,
30                          uint32_t layer,
31                          const mtl::Format &format)
32{
33    setWithImplicitMSTexture(texture, nullptr, level, layer, format);
34}
35
36void RenderTargetMtl::setWithImplicitMSTexture(const mtl::TextureRef &texture,
37                                               const mtl::TextureRef &implicitMSTexture,
38                                               const mtl::MipmapNativeLevel &level,
39                                               uint32_t layer,
40                                               const mtl::Format &format)
41{
42    mTexture           = texture;
43    mImplicitMSTexture = implicitMSTexture;
44    mLevelIndex        = level;
45    mLayerIndex        = layer;
46    mFormat            = &format;
47}
48
49void RenderTargetMtl::setTexture(const mtl::TextureRef &texture)
50{
51    mTexture = texture;
52}
53
54void RenderTargetMtl::setImplicitMSTexture(const mtl::TextureRef &implicitMSTexture)
55{
56    mImplicitMSTexture = implicitMSTexture;
57}
58
59void RenderTargetMtl::duplicateFrom(const RenderTargetMtl &src)
60{
61    setWithImplicitMSTexture(src.getTexture(), src.getImplicitMSTexture(), src.getLevelIndex(),
62                             src.getLayerIndex(), *src.getFormat());
63}
64
65void RenderTargetMtl::reset()
66{
67    mTexture.reset();
68    mImplicitMSTexture.reset();
69    mLevelIndex = mtl::kZeroNativeMipLevel;
70    mLayerIndex = 0;
71    mFormat     = nullptr;
72}
73
74uint32_t RenderTargetMtl::getRenderSamples() const
75{
76    mtl::TextureRef implicitMSTex = getImplicitMSTexture();
77    mtl::TextureRef tex           = getTexture();
78    return implicitMSTex ? implicitMSTex->samples() : (tex ? tex->samples() : 1);
79}
80void RenderTargetMtl::toRenderPassAttachmentDesc(mtl::RenderPassAttachmentDesc *rpaDescOut) const
81{
82    rpaDescOut->texture           = mTexture.lock();
83    rpaDescOut->implicitMSTexture = mImplicitMSTexture.lock();
84    rpaDescOut->level             = mLevelIndex;
85    rpaDescOut->sliceOrDepth      = mLayerIndex;
86    rpaDescOut->blendable         = mFormat ? mFormat->getCaps().blendable : false;
87}
88}
89