blob: 65aee425925722da96c00a106bee2f93c8b1cfbb [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"
Greg Daniel4065d452018-11-16 15:43:41 -050012#include "SkGr.h"
Brian Salomon8fe24272017-07-07 12:56:11 -040013#include "mock/GrMockTypes.h"
Brian Salomoncfe910d2017-07-06 16:40:18 -040014
15class GrMockCaps : public GrCaps {
16public:
17 GrMockCaps(const GrContextOptions& contextOptions, const GrMockOptions& options)
18 : INHERITED(contextOptions), fOptions(options) {
Chris Daltonfddb6c02017-11-04 15:22:22 -060019 fInstanceAttribSupport = options.fInstanceAttribSupport;
Brian Osmanc6444d22019-01-09 16:30:12 -050020 fHalfFloatVertexAttributeSupport = options.fHalfFloatVertexAttributeSupport;
Chris Daltonfddb6c02017-11-04 15:22:22 -060021 fMapBufferFlags = options.fMapBufferFlags;
22 fBufferMapThreshold = SK_MaxS32; // Overridable in GrContextOptions.
Brian Salomoncfe910d2017-07-06 16:40:18 -040023 fMaxTextureSize = options.fMaxTextureSize;
24 fMaxRenderTargetSize = SkTMin(options.fMaxRenderTargetSize, fMaxTextureSize);
Chris Dalton2612bae2018-02-22 13:41:37 -070025 fMaxPreferredRenderTargetSize = fMaxRenderTargetSize;
Brian Salomoncfe910d2017-07-06 16:40:18 -040026 fMaxVertexAttributes = options.fMaxVertexAttributes;
Chris Daltonfddb6c02017-11-04 15:22:22 -060027
Brian Salomoncfe910d2017-07-06 16:40:18 -040028 fShaderCaps.reset(new GrShaderCaps(contextOptions));
Chris Daltonfddb6c02017-11-04 15:22:22 -060029 fShaderCaps->fGeometryShaderSupport = options.fGeometryShaderSupport;
Chris Daltonfddb6c02017-11-04 15:22:22 -060030 fShaderCaps->fIntegerSupport = options.fIntegerSupport;
31 fShaderCaps->fFlatInterpolationSupport = options.fFlatInterpolationSupport;
Robert Phillips7ffbcf92017-12-04 12:52:46 -050032 fShaderCaps->fMaxFragmentSamplers = options.fMaxFragmentSamplers;
Brian Salomon821ef182017-11-07 16:41:11 -050033 fShaderCaps->fShaderDerivativeSupport = options.fShaderDerivativeSupport;
Chris Daltonfddb6c02017-11-04 15:22:22 -060034
Brian Salomon8fe24272017-07-07 12:56:11 -040035 this->applyOptionsOverrides(contextOptions);
Brian Salomoncfe910d2017-07-06 16:40:18 -040036 }
Brian Salomoncfe910d2017-07-06 16:40:18 -040037 bool isConfigTexturable(GrPixelConfig config) const override {
38 return fOptions.fConfigOptions[config].fTexturable;
39 }
Brian Salomonbdecacf2018-02-02 20:32:49 -050040
Greg Danielbb76ace2017-09-29 15:58:22 -040041 bool isConfigCopyable(GrPixelConfig config) const override {
42 return false;
43 }
44
Brian Salomonbdecacf2018-02-02 20:32:49 -050045 int getRenderTargetSampleCount(int requestCount, GrPixelConfig config) const override {
46 requestCount = SkTMax(requestCount, 1);
47 switch (fOptions.fConfigOptions[config].fRenderability) {
48 case GrMockOptions::ConfigOptions::Renderability::kNo:
49 return 0;
50 case GrMockOptions::ConfigOptions::Renderability::kNonMSAA:
51 return requestCount > 1 ? 0 : 1;
52 case GrMockOptions::ConfigOptions::Renderability::kMSAA:
53 return requestCount > kMaxSampleCnt ? 0 : GrNextPow2(requestCount);
54 }
55 return 0;
56 }
57
58 int maxRenderTargetSampleCount(GrPixelConfig config) const override {
59 switch (fOptions.fConfigOptions[config].fRenderability) {
60 case GrMockOptions::ConfigOptions::Renderability::kNo:
61 return 0;
62 case GrMockOptions::ConfigOptions::Renderability::kNonMSAA:
63 return 1;
64 case GrMockOptions::ConfigOptions::Renderability::kMSAA:
65 return kMaxSampleCnt;
66 }
67 return 0;
68 }
69
Brian Salomon19eaf2d2018-03-19 16:06:44 -040070 bool surfaceSupportsReadPixels(const GrSurface*) const override { return true; }
Brian Salomon5f33a8c2018-02-26 14:32:39 -050071
Brian Salomon2a4f9832018-03-03 22:43:43 -050072 bool initDescForDstCopy(const GrRenderTargetProxy* src, GrSurfaceDesc* desc, GrSurfaceOrigin*,
Brian Salomoncfe910d2017-07-06 16:40:18 -040073 bool* rectsMustMatch, bool* disallowSubrect) const override {
74 return false;
75 }
76
Brian Salomonf391d0f2018-12-14 09:18:50 -050077 GrPixelConfig validateBackendRenderTarget(const GrBackendRenderTarget&,
78 SkColorType) const override {
79 return kUnknown_GrPixelConfig;
Greg Danielf5d87582017-12-18 14:48:15 -050080 }
81
Brian Salomonf391d0f2018-12-14 09:18:50 -050082 GrPixelConfig getConfigFromBackendFormat(const GrBackendFormat& format,
83 SkColorType ct) const override {
Robert Phillipsfc711a22018-02-13 17:03:00 -050084 const GrPixelConfig* mockFormat = format.getMockFormat();
85 if (!mockFormat) {
Brian Salomonf391d0f2018-12-14 09:18:50 -050086 return kUnknown_GrPixelConfig;
Robert Phillipsfc711a22018-02-13 17:03:00 -050087 }
Brian Salomonf391d0f2018-12-14 09:18:50 -050088 return *mockFormat;
Robert Phillipsfc711a22018-02-13 17:03:00 -050089 }
90
Brian Salomonf391d0f2018-12-14 09:18:50 -050091 GrPixelConfig getYUVAConfigFromBackendFormat(const GrBackendFormat& format) const override {
Jim Van Verthb7f0b9c2018-10-22 14:12:03 -040092 const GrPixelConfig* mockFormat = format.getMockFormat();
93 if (!mockFormat) {
Brian Salomonf391d0f2018-12-14 09:18:50 -050094 return kUnknown_GrPixelConfig;
Jim Van Verthb7f0b9c2018-10-22 14:12:03 -040095 }
Brian Salomonf391d0f2018-12-14 09:18:50 -050096 return *mockFormat;
Jim Van Verthb7f0b9c2018-10-22 14:12:03 -040097 }
98
Greg Daniel4065d452018-11-16 15:43:41 -050099 GrBackendFormat getBackendFormatFromGrColorType(GrColorType ct,
100 GrSRGBEncoded srgbEncoded) const override {
101 GrPixelConfig config = GrColorTypeToPixelConfig(ct, srgbEncoded);
102 if (config == kUnknown_GrPixelConfig) {
103 return GrBackendFormat();
104 }
105 return GrBackendFormat::MakeMock(config);
106 }
107
Greg Danielfaa095e2017-12-19 13:15:02 -0500108private:
Brian Salomonc67c31c2018-12-06 10:00:03 -0500109 bool onSurfaceSupportsWritePixels(const GrSurface*) const override { return true; }
110 bool onCanCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
111 const SkIRect& srcRect, const SkIPoint& dstPoint) const override {
112 return true;
113 }
Timothy Liang036fdfe2018-06-28 15:50:36 -0400114
Brian Salomonbdecacf2018-02-02 20:32:49 -0500115 static const int kMaxSampleCnt = 16;
116
Brian Salomoncfe910d2017-07-06 16:40:18 -0400117 GrMockOptions fOptions;
118 typedef GrCaps INHERITED;
119};
120
121#endif