blob: c5459b21275a91617e579e3cab2c0a63c3becb5a [file] [log] [blame]
Brian Salomoncfe910d2017-07-06 16:40:18 -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 GrMockCaps_DEFINED
9#define GrMockCaps_DEFINED
10
11#include "GrCaps.h"
Brian Salomon8fe24272017-07-07 12:56:11 -040012#include "mock/GrMockTypes.h"
Brian Salomoncfe910d2017-07-06 16:40:18 -040013
14class GrMockCaps : public GrCaps {
15public:
16 GrMockCaps(const GrContextOptions& contextOptions, const GrMockOptions& options)
17 : INHERITED(contextOptions), fOptions(options) {
Chris Daltonfddb6c02017-11-04 15:22:22 -060018 fInstanceAttribSupport = options.fInstanceAttribSupport;
19 fMapBufferFlags = options.fMapBufferFlags;
20 fBufferMapThreshold = SK_MaxS32; // Overridable in GrContextOptions.
Brian Salomoncfe910d2017-07-06 16:40:18 -040021 fMaxTextureSize = options.fMaxTextureSize;
22 fMaxRenderTargetSize = SkTMin(options.fMaxRenderTargetSize, fMaxTextureSize);
Chris Dalton2612bae2018-02-22 13:41:37 -070023 fMaxPreferredRenderTargetSize = fMaxRenderTargetSize;
Brian Salomoncfe910d2017-07-06 16:40:18 -040024 fMaxVertexAttributes = options.fMaxVertexAttributes;
Chris Daltonfddb6c02017-11-04 15:22:22 -060025
Brian Salomoncfe910d2017-07-06 16:40:18 -040026 fShaderCaps.reset(new GrShaderCaps(contextOptions));
Chris Daltonfddb6c02017-11-04 15:22:22 -060027 fShaderCaps->fGeometryShaderSupport = options.fGeometryShaderSupport;
Chris Daltonfddb6c02017-11-04 15:22:22 -060028 fShaderCaps->fIntegerSupport = options.fIntegerSupport;
29 fShaderCaps->fFlatInterpolationSupport = options.fFlatInterpolationSupport;
Robert Phillips7ffbcf92017-12-04 12:52:46 -050030 fShaderCaps->fMaxFragmentSamplers = options.fMaxFragmentSamplers;
Brian Salomon821ef182017-11-07 16:41:11 -050031 fShaderCaps->fShaderDerivativeSupport = options.fShaderDerivativeSupport;
Chris Daltonfddb6c02017-11-04 15:22:22 -060032
Brian Salomon8fe24272017-07-07 12:56:11 -040033 this->applyOptionsOverrides(contextOptions);
Brian Salomoncfe910d2017-07-06 16:40:18 -040034 }
Brian Salomoncfe910d2017-07-06 16:40:18 -040035 bool isConfigTexturable(GrPixelConfig config) const override {
36 return fOptions.fConfigOptions[config].fTexturable;
37 }
Brian Salomonbdecacf2018-02-02 20:32:49 -050038
Greg Danielbb76ace2017-09-29 15:58:22 -040039 bool isConfigCopyable(GrPixelConfig config) const override {
40 return false;
41 }
42
Brian Salomonbdecacf2018-02-02 20:32:49 -050043 int getRenderTargetSampleCount(int requestCount, GrPixelConfig config) const override {
44 requestCount = SkTMax(requestCount, 1);
45 switch (fOptions.fConfigOptions[config].fRenderability) {
46 case GrMockOptions::ConfigOptions::Renderability::kNo:
47 return 0;
48 case GrMockOptions::ConfigOptions::Renderability::kNonMSAA:
49 return requestCount > 1 ? 0 : 1;
50 case GrMockOptions::ConfigOptions::Renderability::kMSAA:
51 return requestCount > kMaxSampleCnt ? 0 : GrNextPow2(requestCount);
52 }
53 return 0;
54 }
55
56 int maxRenderTargetSampleCount(GrPixelConfig config) const override {
57 switch (fOptions.fConfigOptions[config].fRenderability) {
58 case GrMockOptions::ConfigOptions::Renderability::kNo:
59 return 0;
60 case GrMockOptions::ConfigOptions::Renderability::kNonMSAA:
61 return 1;
62 case GrMockOptions::ConfigOptions::Renderability::kMSAA:
63 return kMaxSampleCnt;
64 }
65 return 0;
66 }
67
Brian Salomon19eaf2d2018-03-19 16:06:44 -040068 bool surfaceSupportsWritePixels(const GrSurface*) const override { return true; }
69 bool surfaceSupportsReadPixels(const GrSurface*) const override { return true; }
Brian Salomon5f33a8c2018-02-26 14:32:39 -050070
Greg Danielba2c8262018-05-03 15:28:58 -040071 bool canCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
72 const SkIRect& srcRect, const SkIPoint& dstPoint) const override {
73 return true;
74 }
75
Brian Salomon2a4f9832018-03-03 22:43:43 -050076 bool initDescForDstCopy(const GrRenderTargetProxy* src, GrSurfaceDesc* desc, GrSurfaceOrigin*,
Brian Salomoncfe910d2017-07-06 16:40:18 -040077 bool* rectsMustMatch, bool* disallowSubrect) const override {
78 return false;
79 }
80
Greg Danielfaa095e2017-12-19 13:15:02 -050081 bool validateBackendTexture(const GrBackendTexture& tex, SkColorType,
Robert Phillipsfc711a22018-02-13 17:03:00 -050082 GrPixelConfig* config) const override {
Greg Daniel52e16d92018-04-10 09:34:07 -040083 GrMockTextureInfo texInfo;
84 if (!tex.getMockTextureInfo(&texInfo)) {
Robert Phillipsfc711a22018-02-13 17:03:00 -050085 return false;
86 }
87
Greg Daniel52e16d92018-04-10 09:34:07 -040088 *config = texInfo.fConfig;
Robert Phillipsfc711a22018-02-13 17:03:00 -050089 return true;
Greg Danielf5d87582017-12-18 14:48:15 -050090 }
91
Greg Danielfaa095e2017-12-19 13:15:02 -050092 bool validateBackendRenderTarget(const GrBackendRenderTarget& rt, SkColorType,
93 GrPixelConfig*) const override {
94 return false;
95 }
96
Robert Phillipsfc711a22018-02-13 17:03:00 -050097 bool getConfigFromBackendFormat(const GrBackendFormat& format, SkColorType ct,
98 GrPixelConfig* config) const override {
99 const GrPixelConfig* mockFormat = format.getMockFormat();
100 if (!mockFormat) {
101 return false;
102 }
103 *config = *mockFormat;
104 return true;
105 }
106
Jim Van Verth9bf81202018-10-30 15:53:36 -0400107 bool getYUVAConfigFromBackendTexture(const GrBackendTexture& tex,
108 GrPixelConfig* config) const override {
109 GrMockTextureInfo texInfo;
110 if (!tex.getMockTextureInfo(&texInfo)) {
111 return false;
112 }
113
114 *config = texInfo.fConfig;
115 return true;
116 }
117
Jim Van Verthb7f0b9c2018-10-22 14:12:03 -0400118 bool getYUVAConfigFromBackendFormat(const GrBackendFormat& format,
119 GrPixelConfig* config) const override {
120 const GrPixelConfig* mockFormat = format.getMockFormat();
121 if (!mockFormat) {
122 return false;
123 }
124 *config = *mockFormat;
125 return true;
126 }
127
Greg Danielfaa095e2017-12-19 13:15:02 -0500128private:
Timothy Liang036fdfe2018-06-28 15:50:36 -0400129#ifdef GR_TEST_UTILS
130 GrBackendFormat onCreateFormatFromBackendTexture(
131 const GrBackendTexture& backendTex) const override {
132 GrMockTextureInfo mockInfo;
133 SkAssertResult(backendTex.getMockTextureInfo(&mockInfo));
134 return GrBackendFormat::MakeMock(mockInfo.fConfig);
135 }
136#endif
137
Brian Salomonbdecacf2018-02-02 20:32:49 -0500138 static const int kMaxSampleCnt = 16;
139
Brian Salomoncfe910d2017-07-06 16:40:18 -0400140 GrMockOptions fOptions;
141 typedef GrCaps INHERITED;
142};
143
144#endif