• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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