1 /*
2 * Copyright 2019 Google LLC
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 #include "src/gpu/ganesh/mock/GrMockCaps.h"
9
10 #include "src/base/SkMathPriv.h"
11 #include "src/gpu/ganesh/GrProgramDesc.h"
12 #include "src/gpu/ganesh/TestFormatColorTypeCombination.h"
13
getRenderTargetSampleCount(int requestCount,GrColorType ct) const14 int GrMockCaps::getRenderTargetSampleCount(int requestCount, GrColorType ct) const {
15 requestCount = std::max(requestCount, 1);
16
17 switch (fOptions.fConfigOptions[(int)ct].fRenderability) {
18 case GrMockOptions::ConfigOptions::Renderability::kNo:
19 return 0;
20 case GrMockOptions::ConfigOptions::Renderability::kNonMSAA:
21 return requestCount > 1 ? 0 : 1;
22 case GrMockOptions::ConfigOptions::Renderability::kMSAA:
23 return requestCount > kMaxSampleCnt ? 0 : GrNextPow2(requestCount);
24 }
25 return 0;
26 }
27
makeDesc(GrRenderTarget *,const GrProgramInfo & programInfo,ProgramDescOverrideFlags overrideFlags) const28 GrProgramDesc GrMockCaps::makeDesc(GrRenderTarget* /* rt */,
29 const GrProgramInfo& programInfo,
30 ProgramDescOverrideFlags overrideFlags) const {
31 SkASSERT(overrideFlags == ProgramDescOverrideFlags::kNone);
32 GrProgramDesc desc;
33 GrProgramDesc::Build(&desc, programInfo, *this);
34 return desc;
35 }
36
computeFormatKey(const GrBackendFormat & format) const37 uint64_t GrMockCaps::computeFormatKey(const GrBackendFormat& format) const {
38 #ifdef SK_DEBUG
39 SkImage::CompressionType compression = format.asMockCompressionType();
40 SkASSERT(compression == SkImage::CompressionType::kNone);
41 #endif
42 auto ct = format.asMockColorType();
43 return (uint64_t)ct;
44 }
45
46 #if GR_TEST_UTILS
getTestingCombinations() const47 std::vector<GrTest::TestFormatColorTypeCombination> GrMockCaps::getTestingCombinations() const {
48 // TODO: need to add compressed formats to this list
49 std::vector<GrTest::TestFormatColorTypeCombination> combos = {
50 { GrColorType::kAlpha_8, GrBackendFormat::MakeMock(GrColorType::kAlpha_8,
51 SkImage::CompressionType::kNone)},
52 { GrColorType::kBGR_565, GrBackendFormat::MakeMock(GrColorType::kBGR_565,
53 SkImage::CompressionType::kNone)},
54 { GrColorType::kABGR_4444, GrBackendFormat::MakeMock(GrColorType::kABGR_4444,
55 SkImage::CompressionType::kNone)},
56 { GrColorType::kRGBA_8888, GrBackendFormat::MakeMock(GrColorType::kRGBA_8888,
57 SkImage::CompressionType::kNone)},
58 { GrColorType::kRGBA_8888_SRGB, GrBackendFormat::MakeMock(GrColorType::kRGBA_8888_SRGB,
59 SkImage::CompressionType::kNone)},
60 { GrColorType::kRGB_888x, GrBackendFormat::MakeMock(GrColorType::kRGB_888x,
61 SkImage::CompressionType::kNone)},
62 { GrColorType::kRG_88, GrBackendFormat::MakeMock(GrColorType::kRG_88,
63 SkImage::CompressionType::kNone)},
64 { GrColorType::kBGRA_8888, GrBackendFormat::MakeMock(GrColorType::kBGRA_8888,
65 SkImage::CompressionType::kNone)},
66 { GrColorType::kRGBA_1010102, GrBackendFormat::MakeMock(GrColorType::kRGBA_1010102,
67 SkImage::CompressionType::kNone)},
68 { GrColorType::kBGRA_1010102, GrBackendFormat::MakeMock(GrColorType::kBGRA_1010102,
69 SkImage::CompressionType::kNone)},
70 { GrColorType::kGray_8, GrBackendFormat::MakeMock(GrColorType::kGray_8,
71 SkImage::CompressionType::kNone)},
72 { GrColorType::kAlpha_F16, GrBackendFormat::MakeMock(GrColorType::kAlpha_F16,
73 SkImage::CompressionType::kNone)},
74 { GrColorType::kRGBA_F16, GrBackendFormat::MakeMock(GrColorType::kRGBA_F16,
75 SkImage::CompressionType::kNone)},
76 { GrColorType::kRGBA_F16_Clamped,GrBackendFormat::MakeMock(GrColorType::kRGBA_F16_Clamped,
77 SkImage::CompressionType::kNone)},
78 { GrColorType::kAlpha_16, GrBackendFormat::MakeMock(GrColorType::kAlpha_16,
79 SkImage::CompressionType::kNone)},
80 { GrColorType::kRG_1616, GrBackendFormat::MakeMock(GrColorType::kRG_1616,
81 SkImage::CompressionType::kNone)},
82 { GrColorType::kRGBA_16161616, GrBackendFormat::MakeMock(GrColorType::kRGBA_16161616,
83 SkImage::CompressionType::kNone)},
84 { GrColorType::kRG_F16, GrBackendFormat::MakeMock(GrColorType::kRG_F16,
85 SkImage::CompressionType::kNone)},
86 // For these two compressed image formats the color type will effectively be RGB_888x
87 { GrColorType::kRGB_888x, GrBackendFormat::MakeMock(GrColorType::kUnknown,
88 SkImage::CompressionType::kETC2_RGB8_UNORM)},
89 { GrColorType::kRGB_888x, GrBackendFormat::MakeMock(GrColorType::kUnknown,
90 SkImage::CompressionType::kBC1_RGB8_UNORM)},
91 { GrColorType::kRGBA_8888, GrBackendFormat::MakeMock(GrColorType::kUnknown,
92 SkImage::CompressionType::kBC1_RGBA8_UNORM)},
93 };
94
95 #ifdef SK_DEBUG
96 for (const GrTest::TestFormatColorTypeCombination& combo : combos) {
97 SkASSERT(this->onAreColorTypeAndFormatCompatible(combo.fColorType, combo.fFormat));
98 }
99 #endif
100
101 return combos;
102 }
103
104 #endif
105