// // 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(); } RenderTargetMtl::RenderTargetMtl(RenderTargetMtl &&other) : mTexture(std::move(other.mTexture)), mImplicitMSTexture(std::move(other.mImplicitMSTexture)), mLevelIndex(other.mLevelIndex), mLayerIndex(other.mLayerIndex) {} 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 = nullptr; } 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 ? mFormat->getCaps().blendable : false; } }