blob: 130af67c7070a7d6733d9ed7f34c70030e0dc476 [file] [log] [blame]
Greg Danielcebcb842017-07-31 10:45:52 -04001/*
2 * Copyright 2017 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#ifndef GrMtlCaps_DEFINED
9#define GrMtlCaps_DEFINED
10
11#include "GrCaps.h"
12
13#include "SkTDArray.h"
14
15#import <Metal/Metal.h>
16
17class GrShaderCaps;
18
19/**
20 * Stores some capabilities of a Mtl backend.
21 */
22class GrMtlCaps : public GrCaps {
23public:
24 GrMtlCaps(const GrContextOptions& contextOptions, id<MTLDevice> device,
25 MTLFeatureSet featureSet);
26
Greg Danielcebcb842017-07-31 10:45:52 -040027 bool isConfigTexturable(GrPixelConfig config) const override {
28 return SkToBool(fConfigTable[config].fFlags & ConfigInfo::kTextureable_Flag);
29 }
30
Brian Salomonbdecacf2018-02-02 20:32:49 -050031 int getRenderTargetSampleCount(int requestedCount, GrPixelConfig) const override;
32 int maxRenderTargetSampleCount(GrPixelConfig) const override;
Greg Danielcebcb842017-07-31 10:45:52 -040033
Brian Salomon3d86a192018-02-27 16:46:11 -050034 bool surfaceSupportsWritePixels(const GrSurface* surface) const override { return true; }
Brian Salomon5f33a8c2018-02-26 14:32:39 -050035
Greg Danielbb76ace2017-09-29 15:58:22 -040036 bool isConfigCopyable(GrPixelConfig config) const override {
37 return true;
38 }
39
Greg Danielcebcb842017-07-31 10:45:52 -040040#if 0
41 /**
42 * Returns both a supported and most prefered stencil format to use in draws.
43 */
44 const StencilFormat& preferedStencilFormat() const {
45 return fPreferedStencilFormat;
46 }
47#endif
Brian Salomon2a4f9832018-03-03 22:43:43 -050048 bool initDescForDstCopy(const GrRenderTargetProxy* src, GrSurfaceDesc* desc, GrSurfaceOrigin*,
Greg Danielcebcb842017-07-31 10:45:52 -040049 bool* rectsMustMatch, bool* disallowSubrect) const override {
50 return false;
51 }
52
Greg Danielfaa095e2017-12-19 13:15:02 -050053 bool validateBackendTexture(const GrBackendTexture&, SkColorType,
54 GrPixelConfig*) const override {
55 return false;
56 }
57 bool validateBackendRenderTarget(const GrBackendRenderTarget&, SkColorType,
58 GrPixelConfig*) const override {
Greg Danielf5d87582017-12-18 14:48:15 -050059 return false;
60 }
61
Robert Phillipsfc711a22018-02-13 17:03:00 -050062 bool getConfigFromBackendFormat(const GrBackendFormat&, SkColorType,
63 GrPixelConfig*) const override {
64 return false;
65 }
66
Greg Danielfaa095e2017-12-19 13:15:02 -050067private:
Greg Danielcebcb842017-07-31 10:45:52 -040068 void initFeatureSet(MTLFeatureSet featureSet);
Ben Wagner63fd7602017-10-09 15:45:33 -040069
Greg Danielcebcb842017-07-31 10:45:52 -040070 void initGrCaps(const id<MTLDevice> device);
71 void initShaderCaps();
Greg Danielcebcb842017-07-31 10:45:52 -040072 void initConfigTable();
73
74 struct ConfigInfo {
75 ConfigInfo() : fFlags(0) {}
76
77 enum {
78 kTextureable_Flag = 0x1,
79 kRenderable_Flag = 0x2, // Color attachment and blendable
80 kMSAA_Flag = 0x4,
81 kResolve_Flag = 0x8,
82 };
83 static const uint16_t kAllFlags = kTextureable_Flag | kRenderable_Flag |
84 kMSAA_Flag | kResolve_Flag;
85
86 uint16_t fFlags;
87 };
88 ConfigInfo fConfigTable[kGrPixelConfigCnt];
89
90 enum class Platform {
91 kMac,
92 kIOS
93 };
94 bool isMac() { return Platform::kMac == fPlatform; }
95 bool isIOS() { return Platform::kIOS == fPlatform; }
96
97 Platform fPlatform;
98 int fFamilyGroup;
99 int fVersion;
100
101 SkTDArray<int> fSampleCounts;
102
103 typedef GrCaps INHERITED;
104};
105
106#endif