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