1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2019 Google LLC
3*c8dee2aaSAndroid Build Coastguard Worker *
4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker */
7*c8dee2aaSAndroid Build Coastguard Worker
8*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/mock/GrMockCaps.h"
9*c8dee2aaSAndroid Build Coastguard Worker
10*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkDebug.h"
11*c8dee2aaSAndroid Build Coastguard Worker #include "src/base/SkMathPriv.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrProgramDesc.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/TestFormatColorTypeCombination.h"
14*c8dee2aaSAndroid Build Coastguard Worker
getRenderTargetSampleCount(int requestCount,GrColorType ct) const15*c8dee2aaSAndroid Build Coastguard Worker int GrMockCaps::getRenderTargetSampleCount(int requestCount, GrColorType ct) const {
16*c8dee2aaSAndroid Build Coastguard Worker requestCount = std::max(requestCount, 1);
17*c8dee2aaSAndroid Build Coastguard Worker
18*c8dee2aaSAndroid Build Coastguard Worker switch (fOptions.fConfigOptions[(int)ct].fRenderability) {
19*c8dee2aaSAndroid Build Coastguard Worker case GrMockOptions::ConfigOptions::Renderability::kNo:
20*c8dee2aaSAndroid Build Coastguard Worker return 0;
21*c8dee2aaSAndroid Build Coastguard Worker case GrMockOptions::ConfigOptions::Renderability::kNonMSAA:
22*c8dee2aaSAndroid Build Coastguard Worker return requestCount > 1 ? 0 : 1;
23*c8dee2aaSAndroid Build Coastguard Worker case GrMockOptions::ConfigOptions::Renderability::kMSAA:
24*c8dee2aaSAndroid Build Coastguard Worker return requestCount > kMaxSampleCnt ? 0 : SkNextPow2(requestCount);
25*c8dee2aaSAndroid Build Coastguard Worker }
26*c8dee2aaSAndroid Build Coastguard Worker return 0;
27*c8dee2aaSAndroid Build Coastguard Worker }
28*c8dee2aaSAndroid Build Coastguard Worker
makeDesc(GrRenderTarget *,const GrProgramInfo & programInfo,ProgramDescOverrideFlags overrideFlags) const29*c8dee2aaSAndroid Build Coastguard Worker GrProgramDesc GrMockCaps::makeDesc(GrRenderTarget* /* rt */,
30*c8dee2aaSAndroid Build Coastguard Worker const GrProgramInfo& programInfo,
31*c8dee2aaSAndroid Build Coastguard Worker ProgramDescOverrideFlags overrideFlags) const {
32*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(overrideFlags == ProgramDescOverrideFlags::kNone);
33*c8dee2aaSAndroid Build Coastguard Worker GrProgramDesc desc;
34*c8dee2aaSAndroid Build Coastguard Worker GrProgramDesc::Build(&desc, programInfo, *this);
35*c8dee2aaSAndroid Build Coastguard Worker return desc;
36*c8dee2aaSAndroid Build Coastguard Worker }
37*c8dee2aaSAndroid Build Coastguard Worker
computeFormatKey(const GrBackendFormat & format) const38*c8dee2aaSAndroid Build Coastguard Worker uint64_t GrMockCaps::computeFormatKey(const GrBackendFormat& format) const {
39*c8dee2aaSAndroid Build Coastguard Worker #ifdef SK_DEBUG
40*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType compression = format.asMockCompressionType();
41*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(compression == SkTextureCompressionType::kNone);
42*c8dee2aaSAndroid Build Coastguard Worker #endif
43*c8dee2aaSAndroid Build Coastguard Worker auto ct = format.asMockColorType();
44*c8dee2aaSAndroid Build Coastguard Worker return (uint64_t)ct;
45*c8dee2aaSAndroid Build Coastguard Worker }
46*c8dee2aaSAndroid Build Coastguard Worker
47*c8dee2aaSAndroid Build Coastguard Worker #if defined(GPU_TEST_UTILS)
getTestingCombinations() const48*c8dee2aaSAndroid Build Coastguard Worker std::vector<GrTest::TestFormatColorTypeCombination> GrMockCaps::getTestingCombinations() const {
49*c8dee2aaSAndroid Build Coastguard Worker // TODO: need to add compressed formats to this list
50*c8dee2aaSAndroid Build Coastguard Worker std::vector<GrTest::TestFormatColorTypeCombination> combos = {
51*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kAlpha_8, GrBackendFormat::MakeMock(GrColorType::kAlpha_8,
52*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
53*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kBGR_565, GrBackendFormat::MakeMock(GrColorType::kBGR_565,
54*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
55*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kRGB_565, GrBackendFormat::MakeMock(GrColorType::kRGB_565,
56*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
57*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kABGR_4444, GrBackendFormat::MakeMock(GrColorType::kABGR_4444,
58*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
59*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kRGBA_8888, GrBackendFormat::MakeMock(GrColorType::kRGBA_8888,
60*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
61*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kRGBA_8888_SRGB, GrBackendFormat::MakeMock(GrColorType::kRGBA_8888_SRGB,
62*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
63*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kRGB_888x, GrBackendFormat::MakeMock(GrColorType::kRGB_888x,
64*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
65*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kRG_88, GrBackendFormat::MakeMock(GrColorType::kRG_88,
66*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
67*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kBGRA_8888, GrBackendFormat::MakeMock(GrColorType::kBGRA_8888,
68*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
69*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kRGBA_1010102, GrBackendFormat::MakeMock(GrColorType::kRGBA_1010102,
70*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
71*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kBGRA_1010102, GrBackendFormat::MakeMock(GrColorType::kBGRA_1010102,
72*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
73*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kGray_8, GrBackendFormat::MakeMock(GrColorType::kGray_8,
74*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
75*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kAlpha_F16, GrBackendFormat::MakeMock(GrColorType::kAlpha_F16,
76*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
77*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kRGBA_F16, GrBackendFormat::MakeMock(GrColorType::kRGBA_F16,
78*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
79*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kRGBA_F16_Clamped,GrBackendFormat::MakeMock(GrColorType::kRGBA_F16_Clamped,
80*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
81*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kRGB_F16F16F16x, GrBackendFormat::MakeMock(GrColorType::kRGB_F16F16F16x,
82*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
83*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kAlpha_16, GrBackendFormat::MakeMock(GrColorType::kAlpha_16,
84*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
85*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kRG_1616, GrBackendFormat::MakeMock(GrColorType::kRG_1616,
86*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
87*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kRGBA_16161616, GrBackendFormat::MakeMock(GrColorType::kRGBA_16161616,
88*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
89*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kRG_F16, GrBackendFormat::MakeMock(GrColorType::kRG_F16,
90*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kNone)},
91*c8dee2aaSAndroid Build Coastguard Worker // For these two compressed image formats the color type will effectively be RGB_888x
92*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kRGB_888x, GrBackendFormat::MakeMock(GrColorType::kUnknown,
93*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kETC2_RGB8_UNORM)},
94*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kRGB_888x, GrBackendFormat::MakeMock(GrColorType::kUnknown,
95*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kBC1_RGB8_UNORM)},
96*c8dee2aaSAndroid Build Coastguard Worker { GrColorType::kRGBA_8888, GrBackendFormat::MakeMock(GrColorType::kUnknown,
97*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType::kBC1_RGBA8_UNORM)},
98*c8dee2aaSAndroid Build Coastguard Worker };
99*c8dee2aaSAndroid Build Coastguard Worker
100*c8dee2aaSAndroid Build Coastguard Worker #ifdef SK_DEBUG
101*c8dee2aaSAndroid Build Coastguard Worker for (const GrTest::TestFormatColorTypeCombination& combo : combos) {
102*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(this->onAreColorTypeAndFormatCompatible(combo.fColorType, combo.fFormat));
103*c8dee2aaSAndroid Build Coastguard Worker }
104*c8dee2aaSAndroid Build Coastguard Worker #endif
105*c8dee2aaSAndroid Build Coastguard Worker
106*c8dee2aaSAndroid Build Coastguard Worker return combos;
107*c8dee2aaSAndroid Build Coastguard Worker }
108*c8dee2aaSAndroid Build Coastguard Worker
109*c8dee2aaSAndroid Build Coastguard Worker #endif
110