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/gpu/GrProgramDesc.h"
11 
makeDesc(GrRenderTarget *,const GrProgramInfo & programInfo,ProgramDescOverrideFlags overrideFlags) const12 GrProgramDesc GrMockCaps::makeDesc(GrRenderTarget* /* rt */,
13                                    const GrProgramInfo& programInfo,
14                                    ProgramDescOverrideFlags overrideFlags) const {
15     SkASSERT(overrideFlags == ProgramDescOverrideFlags::kNone);
16     GrProgramDesc desc;
17     GrProgramDesc::Build(&desc, programInfo, *this);
18     return desc;
19 }
20 
computeFormatKey(const GrBackendFormat & format) const21 uint64_t GrMockCaps::computeFormatKey(const GrBackendFormat& format) const {
22 #ifdef SK_DEBUG
23     SkImage::CompressionType compression = format.asMockCompressionType();
24     SkASSERT(compression == SkImage::CompressionType::kNone);
25 #endif
26     auto ct = format.asMockColorType();
27     return (uint64_t)ct;
28 }
29 
30 #if GR_TEST_UTILS
getTestingCombinations() const31 std::vector<GrCaps::TestFormatColorTypeCombination> GrMockCaps::getTestingCombinations() const {
32     // TODO: need to add compressed formats to this list
33     std::vector<GrCaps::TestFormatColorTypeCombination> combos = {
34         { GrColorType::kAlpha_8,        GrBackendFormat::MakeMock(GrColorType::kAlpha_8,
35                                                                   SkImage::CompressionType::kNone)},
36         { GrColorType::kBGR_565,        GrBackendFormat::MakeMock(GrColorType::kBGR_565,
37                                                                   SkImage::CompressionType::kNone)},
38         { GrColorType::kABGR_4444,      GrBackendFormat::MakeMock(GrColorType::kABGR_4444,
39                                                                   SkImage::CompressionType::kNone)},
40         { GrColorType::kRGBA_8888,      GrBackendFormat::MakeMock(GrColorType::kRGBA_8888,
41                                                                   SkImage::CompressionType::kNone)},
42         { GrColorType::kRGBA_8888_SRGB, GrBackendFormat::MakeMock(GrColorType::kRGBA_8888_SRGB,
43                                                                   SkImage::CompressionType::kNone)},
44         { GrColorType::kRGB_888x,       GrBackendFormat::MakeMock(GrColorType::kRGB_888x,
45                                                                   SkImage::CompressionType::kNone)},
46         { GrColorType::kRG_88,          GrBackendFormat::MakeMock(GrColorType::kRG_88,
47                                                                   SkImage::CompressionType::kNone)},
48         { GrColorType::kBGRA_8888,      GrBackendFormat::MakeMock(GrColorType::kBGRA_8888,
49                                                                   SkImage::CompressionType::kNone)},
50         { GrColorType::kRGBA_1010102,   GrBackendFormat::MakeMock(GrColorType::kRGBA_1010102,
51                                                                   SkImage::CompressionType::kNone)},
52         { GrColorType::kBGRA_1010102,   GrBackendFormat::MakeMock(GrColorType::kBGRA_1010102,
53                                                                   SkImage::CompressionType::kNone)},
54         { GrColorType::kGray_8,         GrBackendFormat::MakeMock(GrColorType::kGray_8,
55                                                                   SkImage::CompressionType::kNone)},
56         { GrColorType::kAlpha_F16,      GrBackendFormat::MakeMock(GrColorType::kAlpha_F16,
57                                                                   SkImage::CompressionType::kNone)},
58         { GrColorType::kRGBA_F16,       GrBackendFormat::MakeMock(GrColorType::kRGBA_F16,
59                                                                   SkImage::CompressionType::kNone)},
60         { GrColorType::kRGBA_F16_Clamped,GrBackendFormat::MakeMock(GrColorType::kRGBA_F16_Clamped,
61                                                                   SkImage::CompressionType::kNone)},
62         { GrColorType::kAlpha_16,       GrBackendFormat::MakeMock(GrColorType::kAlpha_16,
63                                                                   SkImage::CompressionType::kNone)},
64         { GrColorType::kRG_1616,        GrBackendFormat::MakeMock(GrColorType::kRG_1616,
65                                                                   SkImage::CompressionType::kNone)},
66         { GrColorType::kRGBA_16161616,  GrBackendFormat::MakeMock(GrColorType::kRGBA_16161616,
67                                                                   SkImage::CompressionType::kNone)},
68         { GrColorType::kRG_F16,         GrBackendFormat::MakeMock(GrColorType::kRG_F16,
69                                                                   SkImage::CompressionType::kNone)},
70         // For these two compressed image formats the color type will effectively be RGB_888x
71         { GrColorType::kRGB_888x,       GrBackendFormat::MakeMock(GrColorType::kUnknown,
72                                                     SkImage::CompressionType::kETC2_RGB8_UNORM)},
73         { GrColorType::kRGB_888x,       GrBackendFormat::MakeMock(GrColorType::kUnknown,
74                                                     SkImage::CompressionType::kBC1_RGB8_UNORM)},
75         { GrColorType::kRGBA_8888,      GrBackendFormat::MakeMock(GrColorType::kUnknown,
76                                                     SkImage::CompressionType::kBC1_RGBA8_UNORM)},
77     };
78 
79 #ifdef SK_DEBUG
80     for (const GrCaps::TestFormatColorTypeCombination& combo : combos) {
81         SkASSERT(this->onAreColorTypeAndFormatCompatible(combo.fColorType, combo.fFormat));
82     }
83 #endif
84 
85     return combos;
86 }
87 
88 #endif
89