| // |
| // Copyright 2019 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. |
| // |
| // RenderTargetMtl.mm: |
| // Implements the class methods for RenderTargetMtl. |
| // |
| |
| #include "libANGLE/renderer/metal/RenderTargetMtl.h" |
| |
| namespace rx |
| { |
| RenderTargetMtl::RenderTargetMtl() {} |
| |
| RenderTargetMtl::~RenderTargetMtl() |
| { |
| reset(); |
| } |
| |
| void RenderTargetMtl::set(const mtl::TextureRef &texture, |
| const mtl::MipmapNativeLevel &level, |
| uint32_t layer, |
| const mtl::Format &format) |
| { |
| setWithImplicitMSTexture(texture, nullptr, level, layer, format); |
| } |
| |
| void RenderTargetMtl::setWithImplicitMSTexture(const mtl::TextureRef &texture, |
| const mtl::TextureRef &implicitMSTexture, |
| const mtl::MipmapNativeLevel &level, |
| uint32_t layer, |
| const mtl::Format &format) |
| { |
| mTexture = texture; |
| mImplicitMSTexture = implicitMSTexture; |
| mLevelIndex = level; |
| mLayerIndex = layer; |
| mFormat = format; |
| } |
| |
| void RenderTargetMtl::setTexture(const mtl::TextureRef &texture) |
| { |
| mTexture = texture; |
| } |
| |
| void RenderTargetMtl::setImplicitMSTexture(const mtl::TextureRef &implicitMSTexture) |
| { |
| mImplicitMSTexture = implicitMSTexture; |
| } |
| |
| void RenderTargetMtl::duplicateFrom(const RenderTargetMtl &src) |
| { |
| setWithImplicitMSTexture(src.getTexture(), src.getImplicitMSTexture(), src.getLevelIndex(), |
| src.getLayerIndex(), src.getFormat()); |
| } |
| |
| void RenderTargetMtl::reset() |
| { |
| mTexture.reset(); |
| mImplicitMSTexture.reset(); |
| mLevelIndex = mtl::kZeroNativeMipLevel; |
| mLayerIndex = 0; |
| mFormat = mtl::Format(); |
| } |
| |
| uint32_t RenderTargetMtl::getRenderSamples() const |
| { |
| mtl::TextureRef implicitMSTex = getImplicitMSTexture(); |
| mtl::TextureRef tex = getTexture(); |
| return implicitMSTex ? implicitMSTex->samples() : (tex ? tex->samples() : 1); |
| } |
| |
| void RenderTargetMtl::toRenderPassAttachmentDesc(mtl::RenderPassAttachmentDesc *rpaDescOut) const |
| { |
| rpaDescOut->texture = mTexture.lock(); |
| rpaDescOut->implicitMSTexture = mImplicitMSTexture.lock(); |
| rpaDescOut->level = mLevelIndex; |
| rpaDescOut->sliceOrDepth = mLayerIndex; |
| rpaDescOut->blendable = mFormat.getCaps().blendable; |
| } |
| } // namespace rx |