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 21void RenderTargetMtl::set(const mtl::TextureRef &texture, 22 const mtl::MipmapNativeLevel &level, 23 uint32_t layer, 24 const mtl::Format &format) 25{ 26 setWithImplicitMSTexture(texture, nullptr, level, layer, format); 27} 28 29void RenderTargetMtl::setWithImplicitMSTexture(const mtl::TextureRef &texture, 30 const mtl::TextureRef &implicitMSTexture, 31 const mtl::MipmapNativeLevel &level, 32 uint32_t layer, 33 const mtl::Format &format) 34{ 35 mTexture = texture; 36 mImplicitMSTexture = implicitMSTexture; 37 mLevelIndex = level; 38 mLayerIndex = layer; 39 mFormat = format; 40} 41 42void RenderTargetMtl::setTexture(const mtl::TextureRef &texture) 43{ 44 mTexture = texture; 45} 46 47void RenderTargetMtl::setImplicitMSTexture(const mtl::TextureRef &implicitMSTexture) 48{ 49 mImplicitMSTexture = implicitMSTexture; 50} 51 52void RenderTargetMtl::duplicateFrom(const RenderTargetMtl &src) 53{ 54 setWithImplicitMSTexture(src.getTexture(), src.getImplicitMSTexture(), src.getLevelIndex(), 55 src.getLayerIndex(), src.getFormat()); 56} 57 58void RenderTargetMtl::reset() 59{ 60 mTexture.reset(); 61 mImplicitMSTexture.reset(); 62 mLevelIndex = mtl::kZeroNativeMipLevel; 63 mLayerIndex = 0; 64 mFormat = mtl::Format(); 65} 66 67uint32_t RenderTargetMtl::getRenderSamples() const 68{ 69 mtl::TextureRef implicitMSTex = getImplicitMSTexture(); 70 mtl::TextureRef tex = getTexture(); 71 return implicitMSTex ? implicitMSTex->samples() : (tex ? tex->samples() : 1); 72} 73 74void RenderTargetMtl::toRenderPassAttachmentDesc(mtl::RenderPassAttachmentDesc *rpaDescOut) const 75{ 76 rpaDescOut->texture = mTexture.lock(); 77 rpaDescOut->implicitMSTexture = mImplicitMSTexture.lock(); 78 rpaDescOut->level = mLevelIndex; 79 rpaDescOut->sliceOrDepth = mLayerIndex; 80 rpaDescOut->blendable = mFormat.getCaps().blendable; 81} 82} // namespace rx 83