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