• 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/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