1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
/*
* Copyright 2017 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef GrMtlCaps_DEFINED
#define GrMtlCaps_DEFINED
#include "GrCaps.h"
#include "SkTDArray.h"
#import <Metal/Metal.h>
class GrShaderCaps;
/**
* Stores some capabilities of a Mtl backend.
*/
class GrMtlCaps : public GrCaps {
public:
GrMtlCaps(const GrContextOptions& contextOptions, id<MTLDevice> device,
MTLFeatureSet featureSet);
bool isConfigTexturable(GrPixelConfig config) const override {
return SkToBool(fConfigTable[config].fFlags & ConfigInfo::kTextureable_Flag);
}
int getRenderTargetSampleCount(int requestedCount, GrPixelConfig) const override;
int maxRenderTargetSampleCount(GrPixelConfig) const override;
bool surfaceSupportsWritePixels(const GrSurface* surface) const override { return true; }
bool isConfigCopyable(GrPixelConfig config) const override {
return true;
}
#if 0
/**
* Returns both a supported and most prefered stencil format to use in draws.
*/
const StencilFormat& preferedStencilFormat() const {
return fPreferedStencilFormat;
}
#endif
bool initDescForDstCopy(const GrRenderTargetProxy* src, GrSurfaceDesc* desc, GrSurfaceOrigin*,
bool* rectsMustMatch, bool* disallowSubrect) const override {
return false;
}
bool validateBackendTexture(const GrBackendTexture&, SkColorType,
GrPixelConfig*) const override {
return false;
}
bool validateBackendRenderTarget(const GrBackendRenderTarget&, SkColorType,
GrPixelConfig*) const override {
return false;
}
bool getConfigFromBackendFormat(const GrBackendFormat&, SkColorType,
GrPixelConfig*) const override {
return false;
}
private:
void initFeatureSet(MTLFeatureSet featureSet);
void initGrCaps(const id<MTLDevice> device);
void initShaderCaps();
void initConfigTable();
struct ConfigInfo {
ConfigInfo() : fFlags(0) {}
enum {
kTextureable_Flag = 0x1,
kRenderable_Flag = 0x2, // Color attachment and blendable
kMSAA_Flag = 0x4,
kResolve_Flag = 0x8,
};
static const uint16_t kAllFlags = kTextureable_Flag | kRenderable_Flag |
kMSAA_Flag | kResolve_Flag;
uint16_t fFlags;
};
ConfigInfo fConfigTable[kGrPixelConfigCnt];
enum class Platform {
kMac,
kIOS
};
bool isMac() { return Platform::kMac == fPlatform; }
bool isIOS() { return Platform::kIOS == fPlatform; }
Platform fPlatform;
int fFamilyGroup;
int fVersion;
SkTDArray<int> fSampleCounts;
typedef GrCaps INHERITED;
};
#endif
|