blob: 7bd53e1a7f11c01ed79bf9626958a77d2f155d5d [file] [log] [blame]
Timothy Liang2df9b452018-06-27 14:58:12 -04001/*
2 * Copyright 2018 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "GrMtlTextureRenderTarget.h"
9#include "GrMtlGpu.h"
10#include "GrMtlUtil.h"
11
12GrMtlTextureRenderTarget::GrMtlTextureRenderTarget(GrMtlGpu* gpu,
13 SkBudgeted budgeted,
14 const GrSurfaceDesc& desc,
15 id<MTLTexture> renderTexture,
16 GrMipMapsStatus mipMapsStatus)
17 : GrSurface(gpu, desc)
18 , GrMtlTexture(gpu, desc, renderTexture, mipMapsStatus)
19 , GrMtlRenderTarget(gpu, desc, renderTexture) {
20 this->registerWithCache(budgeted);
21}
22
Timothy Liange886e802018-07-02 16:03:28 -040023GrMtlTextureRenderTarget::GrMtlTextureRenderTarget(GrMtlGpu* gpu,
24 const GrSurfaceDesc& desc,
25 id<MTLTexture> renderTexture,
Brian Salomonaa6ca0a2019-01-24 16:03:07 -050026 GrMipMapsStatus mipMapsStatus,
27 GrWrapCacheable cacheable)
Timothy Liange886e802018-07-02 16:03:28 -040028 : GrSurface(gpu, desc)
29 , GrMtlTexture(gpu, desc, renderTexture, mipMapsStatus)
30 , GrMtlRenderTarget(gpu, desc, renderTexture) {
Brian Salomonaa6ca0a2019-01-24 16:03:07 -050031 this->registerWithCacheWrapped(cacheable);
Timothy Liange886e802018-07-02 16:03:28 -040032}
33
Timothy Liang2df9b452018-06-27 14:58:12 -040034sk_sp<GrMtlTextureRenderTarget>
Timothy Liang2df9b452018-06-27 14:58:12 -040035GrMtlTextureRenderTarget::CreateNewTextureRenderTarget(GrMtlGpu* gpu,
36 SkBudgeted budgeted,
37 const GrSurfaceDesc& desc,
Timothy Liang58f153d2018-07-02 17:36:20 -040038 MTLTextureDescriptor* texDesc,
39 GrMipMapsStatus mipMapsStatus) {
Brian Salomonaa6ca0a2019-01-24 16:03:07 -050040 id<MTLTexture> renderTexture = [gpu->device() newTextureWithDescriptor:texDesc];
41 SkASSERT(nil != renderTexture);
42 if (desc.fSampleCnt > 1) {
43 return nullptr;
44 }
45 SkASSERT((MTLTextureUsageShaderRead | MTLTextureUsageRenderTarget) & renderTexture.usage);
46 return sk_sp<GrMtlTextureRenderTarget>(
47 new GrMtlTextureRenderTarget(gpu, budgeted, desc, renderTexture, mipMapsStatus));
Timothy Liang2df9b452018-06-27 14:58:12 -040048}
49
Brian Salomonaa6ca0a2019-01-24 16:03:07 -050050sk_sp<GrMtlTextureRenderTarget> GrMtlTextureRenderTarget::MakeWrappedTextureRenderTarget(
51 GrMtlGpu* gpu,
52 const GrSurfaceDesc& desc,
53 id<MTLTexture> renderTexture,
54 GrWrapCacheable cacheable) {
55 SkASSERT(nil != renderTexture);
56 GrMipMapsStatus mipMapsStatus = renderTexture.mipmapLevelCount > 1
57 ? GrMipMapsStatus::kDirty
58 : GrMipMapsStatus::kNotAllocated;
59 if (desc.fSampleCnt > 1) {
60 return nullptr;
61 }
62 SkASSERT((MTLTextureUsageShaderRead | MTLTextureUsageRenderTarget) & renderTexture.usage);
63 return sk_sp<GrMtlTextureRenderTarget>(
64 new GrMtlTextureRenderTarget(gpu, desc, renderTexture, mipMapsStatus, cacheable));
Timothy Liang2df9b452018-06-27 14:58:12 -040065}