• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // GENERATED FILE - DO NOT EDIT.
2 // Generated by gen_vk_internal_shaders.py using data from shaders/src/*
3 //
4 // Copyright 2018 The ANGLE Project Authors. All rights reserved.
5 // Use of this source code is governed by a BSD-style license that can be
6 // found in the LICENSE file.
7 //
8 // vk_internal_shaders_autogen.cpp:
9 //   Pre-generated shader library for the ANGLE Vulkan back-end.
10 
11 #include "libANGLE/renderer/vulkan/vk_internal_shaders_autogen.h"
12 
13 #define USE_SYSTEM_ZLIB
14 #include "compression_utils_portable.h"
15 
16 namespace rx
17 {
18 namespace vk
19 {
20 namespace
21 {
22 #include "libANGLE/renderer/vulkan/shaders/gen/Blit3DSrc.frag.00000000.inc"
23 #include "libANGLE/renderer/vulkan/shaders/gen/Blit3DSrc.frag.00000001.inc"
24 #include "libANGLE/renderer/vulkan/shaders/gen/Blit3DSrc.frag.00000002.inc"
25 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000000.inc"
26 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000001.inc"
27 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000002.inc"
28 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000003.inc"
29 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000004.inc"
30 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000005.inc"
31 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000006.inc"
32 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000007.inc"
33 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000008.inc"
34 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000009.inc"
35 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.0000000A.inc"
36 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.0000000B.inc"
37 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.0000000C.inc"
38 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.0000000D.inc"
39 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.0000000E.inc"
40 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.0000000F.inc"
41 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000010.inc"
42 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000011.inc"
43 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000012.inc"
44 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000013.inc"
45 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000014.inc"
46 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000015.inc"
47 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000016.inc"
48 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000017.inc"
49 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolveStencilNoExport.comp.00000000.inc"
50 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolveStencilNoExport.comp.00000001.inc"
51 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolveStencilNoExport.comp.00000002.inc"
52 #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolveStencilNoExport.comp.00000003.inc"
53 #include "libANGLE/renderer/vulkan/shaders/gen/ConvertIndex.comp.00000000.inc"
54 #include "libANGLE/renderer/vulkan/shaders/gen/ConvertIndex.comp.00000001.inc"
55 #include "libANGLE/renderer/vulkan/shaders/gen/ConvertIndex.comp.00000002.inc"
56 #include "libANGLE/renderer/vulkan/shaders/gen/ConvertIndex.comp.00000003.inc"
57 #include "libANGLE/renderer/vulkan/shaders/gen/ConvertIndexIndirectLineLoop.comp.00000000.inc"
58 #include "libANGLE/renderer/vulkan/shaders/gen/ConvertIndexIndirectLineLoop.comp.00000001.inc"
59 #include "libANGLE/renderer/vulkan/shaders/gen/ConvertIndexIndirectLineLoop.comp.00000002.inc"
60 #include "libANGLE/renderer/vulkan/shaders/gen/ConvertIndirectLineLoop.comp.00000000.inc"
61 #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000000.inc"
62 #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000001.inc"
63 #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000002.inc"
64 #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000003.inc"
65 #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000004.inc"
66 #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000005.inc"
67 #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000006.inc"
68 #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000007.inc"
69 #include "libANGLE/renderer/vulkan/shaders/gen/CopyImageToBuffer.comp.00000000.inc"
70 #include "libANGLE/renderer/vulkan/shaders/gen/CopyImageToBuffer.comp.00000001.inc"
71 #include "libANGLE/renderer/vulkan/shaders/gen/EtcToBc.comp.00000000.inc"
72 #include "libANGLE/renderer/vulkan/shaders/gen/EtcToBc.comp.00000001.inc"
73 #include "libANGLE/renderer/vulkan/shaders/gen/ExportStencil.frag.00000000.inc"
74 #include "libANGLE/renderer/vulkan/shaders/gen/FullScreenTri.vert.00000000.inc"
75 #include "libANGLE/renderer/vulkan/shaders/gen/GenerateMipmap.comp.00000000.inc"
76 #include "libANGLE/renderer/vulkan/shaders/gen/GenerateMipmap.comp.00000001.inc"
77 #include "libANGLE/renderer/vulkan/shaders/gen/GenerateMipmap.comp.00000002.inc"
78 #include "libANGLE/renderer/vulkan/shaders/gen/GenerateMipmap.comp.00000003.inc"
79 #include "libANGLE/renderer/vulkan/shaders/gen/GenerateMipmap.comp.00000004.inc"
80 #include "libANGLE/renderer/vulkan/shaders/gen/GenerateMipmap.comp.00000005.inc"
81 #include "libANGLE/renderer/vulkan/shaders/gen/GenerateMipmap.comp.00000006.inc"
82 #include "libANGLE/renderer/vulkan/shaders/gen/GenerateMipmap.comp.00000007.inc"
83 #include "libANGLE/renderer/vulkan/shaders/gen/GenerateMipmap.comp.00000008.inc"
84 #include "libANGLE/renderer/vulkan/shaders/gen/GenerateMipmap.comp.00000009.inc"
85 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000000.inc"
86 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000001.inc"
87 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000002.inc"
88 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000003.inc"
89 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000004.inc"
90 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000005.inc"
91 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000006.inc"
92 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000007.inc"
93 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000008.inc"
94 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000009.inc"
95 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000000A.inc"
96 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000000B.inc"
97 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000000C.inc"
98 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000000D.inc"
99 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000000E.inc"
100 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000000F.inc"
101 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000010.inc"
102 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000011.inc"
103 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000012.inc"
104 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000013.inc"
105 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000014.inc"
106 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000015.inc"
107 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000016.inc"
108 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000017.inc"
109 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000018.inc"
110 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000019.inc"
111 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000001A.inc"
112 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000001B.inc"
113 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000001C.inc"
114 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000001D.inc"
115 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000001E.inc"
116 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000001F.inc"
117 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000020.inc"
118 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000021.inc"
119 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000022.inc"
120 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000023.inc"
121 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000024.inc"
122 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000025.inc"
123 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000026.inc"
124 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000027.inc"
125 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000028.inc"
126 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000029.inc"
127 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000002A.inc"
128 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000002B.inc"
129 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000002C.inc"
130 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000002D.inc"
131 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000002E.inc"
132 #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000002F.inc"
133 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000000.inc"
134 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000001.inc"
135 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000002.inc"
136 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000003.inc"
137 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000004.inc"
138 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000005.inc"
139 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000006.inc"
140 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000007.inc"
141 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000008.inc"
142 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000009.inc"
143 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.0000000A.inc"
144 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.0000000B.inc"
145 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000010.inc"
146 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000011.inc"
147 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000012.inc"
148 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000013.inc"
149 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000014.inc"
150 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000015.inc"
151 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000016.inc"
152 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000017.inc"
153 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000018.inc"
154 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000019.inc"
155 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.0000001A.inc"
156 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.0000001B.inc"
157 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000020.inc"
158 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000021.inc"
159 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000022.inc"
160 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000023.inc"
161 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000024.inc"
162 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000025.inc"
163 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000026.inc"
164 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000027.inc"
165 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000028.inc"
166 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000029.inc"
167 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.0000002A.inc"
168 #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.0000002B.inc"
169 #include "libANGLE/renderer/vulkan/shaders/gen/OverlayDraw.frag.00000000.inc"
170 #include "libANGLE/renderer/vulkan/shaders/gen/OverlayDraw.vert.00000000.inc"
171 
172 // This is compressed SPIR-V binary blob and size
173 struct CompressedShaderBlob
174 {
175     const uint8_t *code;
176     uint32_t size;
177 };
178 
179 constexpr CompressedShaderBlob kBlit3DSrc_frag_shaders[] = {
180     {kBlit3DSrc_frag_00000000, sizeof(kBlit3DSrc_frag_00000000)},
181     {kBlit3DSrc_frag_00000001, sizeof(kBlit3DSrc_frag_00000001)},
182     {kBlit3DSrc_frag_00000002, sizeof(kBlit3DSrc_frag_00000002)},
183 };
184 constexpr CompressedShaderBlob kBlitResolve_frag_shaders[] = {
185     {kBlitResolve_frag_00000000, sizeof(kBlitResolve_frag_00000000)},
186     {kBlitResolve_frag_00000001, sizeof(kBlitResolve_frag_00000001)},
187     {kBlitResolve_frag_00000002, sizeof(kBlitResolve_frag_00000002)},
188     {kBlitResolve_frag_00000003, sizeof(kBlitResolve_frag_00000003)},
189     {kBlitResolve_frag_00000004, sizeof(kBlitResolve_frag_00000004)},
190     {kBlitResolve_frag_00000005, sizeof(kBlitResolve_frag_00000005)},
191     {kBlitResolve_frag_00000006, sizeof(kBlitResolve_frag_00000006)},
192     {kBlitResolve_frag_00000007, sizeof(kBlitResolve_frag_00000007)},
193     {kBlitResolve_frag_00000008, sizeof(kBlitResolve_frag_00000008)},
194     {kBlitResolve_frag_00000009, sizeof(kBlitResolve_frag_00000009)},
195     {kBlitResolve_frag_0000000A, sizeof(kBlitResolve_frag_0000000A)},
196     {kBlitResolve_frag_0000000B, sizeof(kBlitResolve_frag_0000000B)},
197     {kBlitResolve_frag_0000000C, sizeof(kBlitResolve_frag_0000000C)},
198     {kBlitResolve_frag_0000000D, sizeof(kBlitResolve_frag_0000000D)},
199     {kBlitResolve_frag_0000000E, sizeof(kBlitResolve_frag_0000000E)},
200     {kBlitResolve_frag_0000000F, sizeof(kBlitResolve_frag_0000000F)},
201     {kBlitResolve_frag_00000010, sizeof(kBlitResolve_frag_00000010)},
202     {kBlitResolve_frag_00000011, sizeof(kBlitResolve_frag_00000011)},
203     {kBlitResolve_frag_00000012, sizeof(kBlitResolve_frag_00000012)},
204     {kBlitResolve_frag_00000013, sizeof(kBlitResolve_frag_00000013)},
205     {kBlitResolve_frag_00000014, sizeof(kBlitResolve_frag_00000014)},
206     {kBlitResolve_frag_00000015, sizeof(kBlitResolve_frag_00000015)},
207     {kBlitResolve_frag_00000016, sizeof(kBlitResolve_frag_00000016)},
208     {kBlitResolve_frag_00000017, sizeof(kBlitResolve_frag_00000017)},
209 };
210 constexpr CompressedShaderBlob kBlitResolveStencilNoExport_comp_shaders[] = {
211     {kBlitResolveStencilNoExport_comp_00000000, sizeof(kBlitResolveStencilNoExport_comp_00000000)},
212     {kBlitResolveStencilNoExport_comp_00000001, sizeof(kBlitResolveStencilNoExport_comp_00000001)},
213     {kBlitResolveStencilNoExport_comp_00000002, sizeof(kBlitResolveStencilNoExport_comp_00000002)},
214     {kBlitResolveStencilNoExport_comp_00000003, sizeof(kBlitResolveStencilNoExport_comp_00000003)},
215 };
216 constexpr CompressedShaderBlob kConvertIndex_comp_shaders[] = {
217     {kConvertIndex_comp_00000000, sizeof(kConvertIndex_comp_00000000)},
218     {kConvertIndex_comp_00000001, sizeof(kConvertIndex_comp_00000001)},
219     {kConvertIndex_comp_00000002, sizeof(kConvertIndex_comp_00000002)},
220     {kConvertIndex_comp_00000003, sizeof(kConvertIndex_comp_00000003)},
221 };
222 constexpr CompressedShaderBlob kConvertIndexIndirectLineLoop_comp_shaders[] = {
223     {kConvertIndexIndirectLineLoop_comp_00000000,
224      sizeof(kConvertIndexIndirectLineLoop_comp_00000000)},
225     {kConvertIndexIndirectLineLoop_comp_00000001,
226      sizeof(kConvertIndexIndirectLineLoop_comp_00000001)},
227     {kConvertIndexIndirectLineLoop_comp_00000002,
228      sizeof(kConvertIndexIndirectLineLoop_comp_00000002)},
229 };
230 constexpr CompressedShaderBlob kConvertIndirectLineLoop_comp_shaders[] = {
231     {kConvertIndirectLineLoop_comp_00000000, sizeof(kConvertIndirectLineLoop_comp_00000000)},
232 };
233 constexpr CompressedShaderBlob kConvertVertex_comp_shaders[] = {
234     {kConvertVertex_comp_00000000, sizeof(kConvertVertex_comp_00000000)},
235     {kConvertVertex_comp_00000001, sizeof(kConvertVertex_comp_00000001)},
236     {kConvertVertex_comp_00000002, sizeof(kConvertVertex_comp_00000002)},
237     {kConvertVertex_comp_00000003, sizeof(kConvertVertex_comp_00000003)},
238     {kConvertVertex_comp_00000004, sizeof(kConvertVertex_comp_00000004)},
239     {kConvertVertex_comp_00000005, sizeof(kConvertVertex_comp_00000005)},
240     {kConvertVertex_comp_00000006, sizeof(kConvertVertex_comp_00000006)},
241     {kConvertVertex_comp_00000007, sizeof(kConvertVertex_comp_00000007)},
242 };
243 constexpr CompressedShaderBlob kCopyImageToBuffer_comp_shaders[] = {
244     {kCopyImageToBuffer_comp_00000000, sizeof(kCopyImageToBuffer_comp_00000000)},
245     {kCopyImageToBuffer_comp_00000001, sizeof(kCopyImageToBuffer_comp_00000001)},
246 };
247 constexpr CompressedShaderBlob kEtcToBc_comp_shaders[] = {
248     {kEtcToBc_comp_00000000, sizeof(kEtcToBc_comp_00000000)},
249     {kEtcToBc_comp_00000001, sizeof(kEtcToBc_comp_00000001)},
250 };
251 constexpr CompressedShaderBlob kExportStencil_frag_shaders[] = {
252     {kExportStencil_frag_00000000, sizeof(kExportStencil_frag_00000000)},
253 };
254 constexpr CompressedShaderBlob kFullScreenTri_vert_shaders[] = {
255     {kFullScreenTri_vert_00000000, sizeof(kFullScreenTri_vert_00000000)},
256 };
257 constexpr CompressedShaderBlob kGenerateMipmap_comp_shaders[] = {
258     {kGenerateMipmap_comp_00000000, sizeof(kGenerateMipmap_comp_00000000)},
259     {kGenerateMipmap_comp_00000001, sizeof(kGenerateMipmap_comp_00000001)},
260     {kGenerateMipmap_comp_00000002, sizeof(kGenerateMipmap_comp_00000002)},
261     {kGenerateMipmap_comp_00000003, sizeof(kGenerateMipmap_comp_00000003)},
262     {kGenerateMipmap_comp_00000004, sizeof(kGenerateMipmap_comp_00000004)},
263     {kGenerateMipmap_comp_00000005, sizeof(kGenerateMipmap_comp_00000005)},
264     {kGenerateMipmap_comp_00000006, sizeof(kGenerateMipmap_comp_00000006)},
265     {kGenerateMipmap_comp_00000007, sizeof(kGenerateMipmap_comp_00000007)},
266     {kGenerateMipmap_comp_00000008, sizeof(kGenerateMipmap_comp_00000008)},
267     {kGenerateMipmap_comp_00000009, sizeof(kGenerateMipmap_comp_00000009)},
268 };
269 constexpr CompressedShaderBlob kImageClear_frag_shaders[] = {
270     {kImageClear_frag_00000000, sizeof(kImageClear_frag_00000000)},
271     {kImageClear_frag_00000001, sizeof(kImageClear_frag_00000001)},
272     {kImageClear_frag_00000002, sizeof(kImageClear_frag_00000002)},
273     {kImageClear_frag_00000003, sizeof(kImageClear_frag_00000003)},
274     {kImageClear_frag_00000004, sizeof(kImageClear_frag_00000004)},
275     {kImageClear_frag_00000005, sizeof(kImageClear_frag_00000005)},
276     {kImageClear_frag_00000006, sizeof(kImageClear_frag_00000006)},
277     {kImageClear_frag_00000007, sizeof(kImageClear_frag_00000007)},
278     {kImageClear_frag_00000008, sizeof(kImageClear_frag_00000008)},
279     {kImageClear_frag_00000009, sizeof(kImageClear_frag_00000009)},
280     {kImageClear_frag_0000000A, sizeof(kImageClear_frag_0000000A)},
281     {kImageClear_frag_0000000B, sizeof(kImageClear_frag_0000000B)},
282     {kImageClear_frag_0000000C, sizeof(kImageClear_frag_0000000C)},
283     {kImageClear_frag_0000000D, sizeof(kImageClear_frag_0000000D)},
284     {kImageClear_frag_0000000E, sizeof(kImageClear_frag_0000000E)},
285     {kImageClear_frag_0000000F, sizeof(kImageClear_frag_0000000F)},
286     {kImageClear_frag_00000010, sizeof(kImageClear_frag_00000010)},
287     {kImageClear_frag_00000011, sizeof(kImageClear_frag_00000011)},
288     {kImageClear_frag_00000012, sizeof(kImageClear_frag_00000012)},
289     {kImageClear_frag_00000013, sizeof(kImageClear_frag_00000013)},
290     {kImageClear_frag_00000014, sizeof(kImageClear_frag_00000014)},
291     {kImageClear_frag_00000015, sizeof(kImageClear_frag_00000015)},
292     {kImageClear_frag_00000016, sizeof(kImageClear_frag_00000016)},
293     {kImageClear_frag_00000017, sizeof(kImageClear_frag_00000017)},
294     {kImageClear_frag_00000018, sizeof(kImageClear_frag_00000018)},
295     {kImageClear_frag_00000019, sizeof(kImageClear_frag_00000019)},
296     {kImageClear_frag_0000001A, sizeof(kImageClear_frag_0000001A)},
297     {kImageClear_frag_0000001B, sizeof(kImageClear_frag_0000001B)},
298     {kImageClear_frag_0000001C, sizeof(kImageClear_frag_0000001C)},
299     {kImageClear_frag_0000001D, sizeof(kImageClear_frag_0000001D)},
300     {kImageClear_frag_0000001E, sizeof(kImageClear_frag_0000001E)},
301     {kImageClear_frag_0000001F, sizeof(kImageClear_frag_0000001F)},
302     {kImageClear_frag_00000020, sizeof(kImageClear_frag_00000020)},
303     {kImageClear_frag_00000021, sizeof(kImageClear_frag_00000021)},
304     {kImageClear_frag_00000022, sizeof(kImageClear_frag_00000022)},
305     {kImageClear_frag_00000023, sizeof(kImageClear_frag_00000023)},
306     {kImageClear_frag_00000024, sizeof(kImageClear_frag_00000024)},
307     {kImageClear_frag_00000025, sizeof(kImageClear_frag_00000025)},
308     {kImageClear_frag_00000026, sizeof(kImageClear_frag_00000026)},
309     {kImageClear_frag_00000027, sizeof(kImageClear_frag_00000027)},
310     {kImageClear_frag_00000028, sizeof(kImageClear_frag_00000028)},
311     {kImageClear_frag_00000029, sizeof(kImageClear_frag_00000029)},
312     {kImageClear_frag_0000002A, sizeof(kImageClear_frag_0000002A)},
313     {kImageClear_frag_0000002B, sizeof(kImageClear_frag_0000002B)},
314     {kImageClear_frag_0000002C, sizeof(kImageClear_frag_0000002C)},
315     {kImageClear_frag_0000002D, sizeof(kImageClear_frag_0000002D)},
316     {kImageClear_frag_0000002E, sizeof(kImageClear_frag_0000002E)},
317     {kImageClear_frag_0000002F, sizeof(kImageClear_frag_0000002F)},
318 };
319 constexpr CompressedShaderBlob kImageCopy_frag_shaders[] = {
320     {kImageCopy_frag_00000000, sizeof(kImageCopy_frag_00000000)},
321     {kImageCopy_frag_00000001, sizeof(kImageCopy_frag_00000001)},
322     {kImageCopy_frag_00000002, sizeof(kImageCopy_frag_00000002)},
323     {kImageCopy_frag_00000003, sizeof(kImageCopy_frag_00000003)},
324     {kImageCopy_frag_00000004, sizeof(kImageCopy_frag_00000004)},
325     {kImageCopy_frag_00000005, sizeof(kImageCopy_frag_00000005)},
326     {kImageCopy_frag_00000006, sizeof(kImageCopy_frag_00000006)},
327     {kImageCopy_frag_00000007, sizeof(kImageCopy_frag_00000007)},
328     {kImageCopy_frag_00000008, sizeof(kImageCopy_frag_00000008)},
329     {kImageCopy_frag_00000009, sizeof(kImageCopy_frag_00000009)},
330     {kImageCopy_frag_0000000A, sizeof(kImageCopy_frag_0000000A)},
331     {kImageCopy_frag_0000000B, sizeof(kImageCopy_frag_0000000B)},
332     {nullptr, 0},  // 0x0000000C
333     {nullptr, 0},  // 0x0000000D
334     {nullptr, 0},  // 0x0000000E
335     {nullptr, 0},  // 0x0000000F
336     {kImageCopy_frag_00000010, sizeof(kImageCopy_frag_00000010)},
337     {kImageCopy_frag_00000011, sizeof(kImageCopy_frag_00000011)},
338     {kImageCopy_frag_00000012, sizeof(kImageCopy_frag_00000012)},
339     {kImageCopy_frag_00000013, sizeof(kImageCopy_frag_00000013)},
340     {kImageCopy_frag_00000014, sizeof(kImageCopy_frag_00000014)},
341     {kImageCopy_frag_00000015, sizeof(kImageCopy_frag_00000015)},
342     {kImageCopy_frag_00000016, sizeof(kImageCopy_frag_00000016)},
343     {kImageCopy_frag_00000017, sizeof(kImageCopy_frag_00000017)},
344     {kImageCopy_frag_00000018, sizeof(kImageCopy_frag_00000018)},
345     {kImageCopy_frag_00000019, sizeof(kImageCopy_frag_00000019)},
346     {kImageCopy_frag_0000001A, sizeof(kImageCopy_frag_0000001A)},
347     {kImageCopy_frag_0000001B, sizeof(kImageCopy_frag_0000001B)},
348     {nullptr, 0},  // 0x0000001C
349     {nullptr, 0},  // 0x0000001D
350     {nullptr, 0},  // 0x0000001E
351     {nullptr, 0},  // 0x0000001F
352     {kImageCopy_frag_00000020, sizeof(kImageCopy_frag_00000020)},
353     {kImageCopy_frag_00000021, sizeof(kImageCopy_frag_00000021)},
354     {kImageCopy_frag_00000022, sizeof(kImageCopy_frag_00000022)},
355     {kImageCopy_frag_00000023, sizeof(kImageCopy_frag_00000023)},
356     {kImageCopy_frag_00000024, sizeof(kImageCopy_frag_00000024)},
357     {kImageCopy_frag_00000025, sizeof(kImageCopy_frag_00000025)},
358     {kImageCopy_frag_00000026, sizeof(kImageCopy_frag_00000026)},
359     {kImageCopy_frag_00000027, sizeof(kImageCopy_frag_00000027)},
360     {kImageCopy_frag_00000028, sizeof(kImageCopy_frag_00000028)},
361     {kImageCopy_frag_00000029, sizeof(kImageCopy_frag_00000029)},
362     {kImageCopy_frag_0000002A, sizeof(kImageCopy_frag_0000002A)},
363     {kImageCopy_frag_0000002B, sizeof(kImageCopy_frag_0000002B)},
364 };
365 constexpr CompressedShaderBlob kOverlayDraw_frag_shaders[] = {
366     {kOverlayDraw_frag_00000000, sizeof(kOverlayDraw_frag_00000000)},
367 };
368 constexpr CompressedShaderBlob kOverlayDraw_vert_shaders[] = {
369     {kOverlayDraw_vert_00000000, sizeof(kOverlayDraw_vert_00000000)},
370 };
371 
GetShader(Context * context,RefCounted<ShaderModule> * shaders,const CompressedShaderBlob * compressedShaderBlobs,size_t shadersCount,uint32_t shaderFlags,RefCounted<ShaderModule> ** shaderOut)372 angle::Result GetShader(Context *context,
373                         RefCounted<ShaderModule> *shaders,
374                         const CompressedShaderBlob *compressedShaderBlobs,
375                         size_t shadersCount,
376                         uint32_t shaderFlags,
377                         RefCounted<ShaderModule> **shaderOut)
378 {
379     ASSERT(shaderFlags < shadersCount);
380     RefCounted<ShaderModule> &shader = shaders[shaderFlags];
381     *shaderOut                       = &shader;
382 
383     if (shader.get().valid())
384     {
385         return angle::Result::Continue;
386     }
387 
388     // Create shader lazily. Access will need to be locked for multi-threading.
389     const CompressedShaderBlob &compressedShaderCode = compressedShaderBlobs[shaderFlags];
390     ASSERT(compressedShaderCode.code != nullptr);
391 
392     uLong uncompressedSize = zlib_internal::GetGzipUncompressedSize(compressedShaderCode.code,
393                                                                     compressedShaderCode.size);
394     std::vector<uint32_t> shaderCode((uncompressedSize + 3) / 4, 0);
395 
396     // Note: we assume a little-endian environment throughout ANGLE.
397     int zResult = zlib_internal::GzipUncompressHelper(
398         reinterpret_cast<uint8_t *>(shaderCode.data()), &uncompressedSize,
399         compressedShaderCode.code, compressedShaderCode.size);
400 
401     if (zResult != Z_OK)
402     {
403         ERR() << "Failure to decompressed internal shader: " << zResult << "\n";
404         return angle::Result::Stop;
405     }
406 
407     return InitShaderModule(context, &shader.get(), shaderCode.data(), shaderCode.size() * 4);
408 }
409 }  // anonymous namespace
410 
ShaderLibrary()411 ShaderLibrary::ShaderLibrary() {}
412 
~ShaderLibrary()413 ShaderLibrary::~ShaderLibrary() {}
414 
destroy(VkDevice device)415 void ShaderLibrary::destroy(VkDevice device)
416 {
417     for (RefCounted<ShaderModule> &shader : mBlit3DSrc_frag_shaders)
418     {
419         shader.get().destroy(device);
420     }
421     for (RefCounted<ShaderModule> &shader : mBlitResolve_frag_shaders)
422     {
423         shader.get().destroy(device);
424     }
425     for (RefCounted<ShaderModule> &shader : mBlitResolveStencilNoExport_comp_shaders)
426     {
427         shader.get().destroy(device);
428     }
429     for (RefCounted<ShaderModule> &shader : mConvertIndex_comp_shaders)
430     {
431         shader.get().destroy(device);
432     }
433     for (RefCounted<ShaderModule> &shader : mConvertIndexIndirectLineLoop_comp_shaders)
434     {
435         shader.get().destroy(device);
436     }
437     for (RefCounted<ShaderModule> &shader : mConvertIndirectLineLoop_comp_shaders)
438     {
439         shader.get().destroy(device);
440     }
441     for (RefCounted<ShaderModule> &shader : mConvertVertex_comp_shaders)
442     {
443         shader.get().destroy(device);
444     }
445     for (RefCounted<ShaderModule> &shader : mCopyImageToBuffer_comp_shaders)
446     {
447         shader.get().destroy(device);
448     }
449     for (RefCounted<ShaderModule> &shader : mEtcToBc_comp_shaders)
450     {
451         shader.get().destroy(device);
452     }
453     for (RefCounted<ShaderModule> &shader : mExportStencil_frag_shaders)
454     {
455         shader.get().destroy(device);
456     }
457     for (RefCounted<ShaderModule> &shader : mFullScreenTri_vert_shaders)
458     {
459         shader.get().destroy(device);
460     }
461     for (RefCounted<ShaderModule> &shader : mGenerateMipmap_comp_shaders)
462     {
463         shader.get().destroy(device);
464     }
465     for (RefCounted<ShaderModule> &shader : mImageClear_frag_shaders)
466     {
467         shader.get().destroy(device);
468     }
469     for (RefCounted<ShaderModule> &shader : mImageCopy_frag_shaders)
470     {
471         shader.get().destroy(device);
472     }
473     for (RefCounted<ShaderModule> &shader : mOverlayDraw_frag_shaders)
474     {
475         shader.get().destroy(device);
476     }
477     for (RefCounted<ShaderModule> &shader : mOverlayDraw_vert_shaders)
478     {
479         shader.get().destroy(device);
480     }
481 }
482 
getBlit3DSrc_frag(Context * context,uint32_t shaderFlags,RefCounted<ShaderModule> ** shaderOut)483 angle::Result ShaderLibrary::getBlit3DSrc_frag(Context *context,
484                                                uint32_t shaderFlags,
485                                                RefCounted<ShaderModule> **shaderOut)
486 {
487     return GetShader(context, mBlit3DSrc_frag_shaders, kBlit3DSrc_frag_shaders,
488                      ArraySize(kBlit3DSrc_frag_shaders), shaderFlags, shaderOut);
489 }
490 
getBlitResolve_frag(Context * context,uint32_t shaderFlags,RefCounted<ShaderModule> ** shaderOut)491 angle::Result ShaderLibrary::getBlitResolve_frag(Context *context,
492                                                  uint32_t shaderFlags,
493                                                  RefCounted<ShaderModule> **shaderOut)
494 {
495     return GetShader(context, mBlitResolve_frag_shaders, kBlitResolve_frag_shaders,
496                      ArraySize(kBlitResolve_frag_shaders), shaderFlags, shaderOut);
497 }
498 
getBlitResolveStencilNoExport_comp(Context * context,uint32_t shaderFlags,RefCounted<ShaderModule> ** shaderOut)499 angle::Result ShaderLibrary::getBlitResolveStencilNoExport_comp(
500     Context *context,
501     uint32_t shaderFlags,
502     RefCounted<ShaderModule> **shaderOut)
503 {
504     return GetShader(context, mBlitResolveStencilNoExport_comp_shaders,
505                      kBlitResolveStencilNoExport_comp_shaders,
506                      ArraySize(kBlitResolveStencilNoExport_comp_shaders), shaderFlags, shaderOut);
507 }
508 
getConvertIndex_comp(Context * context,uint32_t shaderFlags,RefCounted<ShaderModule> ** shaderOut)509 angle::Result ShaderLibrary::getConvertIndex_comp(Context *context,
510                                                   uint32_t shaderFlags,
511                                                   RefCounted<ShaderModule> **shaderOut)
512 {
513     return GetShader(context, mConvertIndex_comp_shaders, kConvertIndex_comp_shaders,
514                      ArraySize(kConvertIndex_comp_shaders), shaderFlags, shaderOut);
515 }
516 
getConvertIndexIndirectLineLoop_comp(Context * context,uint32_t shaderFlags,RefCounted<ShaderModule> ** shaderOut)517 angle::Result ShaderLibrary::getConvertIndexIndirectLineLoop_comp(
518     Context *context,
519     uint32_t shaderFlags,
520     RefCounted<ShaderModule> **shaderOut)
521 {
522     return GetShader(context, mConvertIndexIndirectLineLoop_comp_shaders,
523                      kConvertIndexIndirectLineLoop_comp_shaders,
524                      ArraySize(kConvertIndexIndirectLineLoop_comp_shaders), shaderFlags, shaderOut);
525 }
526 
getConvertIndirectLineLoop_comp(Context * context,uint32_t shaderFlags,RefCounted<ShaderModule> ** shaderOut)527 angle::Result ShaderLibrary::getConvertIndirectLineLoop_comp(Context *context,
528                                                              uint32_t shaderFlags,
529                                                              RefCounted<ShaderModule> **shaderOut)
530 {
531     return GetShader(context, mConvertIndirectLineLoop_comp_shaders,
532                      kConvertIndirectLineLoop_comp_shaders,
533                      ArraySize(kConvertIndirectLineLoop_comp_shaders), shaderFlags, shaderOut);
534 }
535 
getConvertVertex_comp(Context * context,uint32_t shaderFlags,RefCounted<ShaderModule> ** shaderOut)536 angle::Result ShaderLibrary::getConvertVertex_comp(Context *context,
537                                                    uint32_t shaderFlags,
538                                                    RefCounted<ShaderModule> **shaderOut)
539 {
540     return GetShader(context, mConvertVertex_comp_shaders, kConvertVertex_comp_shaders,
541                      ArraySize(kConvertVertex_comp_shaders), shaderFlags, shaderOut);
542 }
543 
getCopyImageToBuffer_comp(Context * context,uint32_t shaderFlags,RefCounted<ShaderModule> ** shaderOut)544 angle::Result ShaderLibrary::getCopyImageToBuffer_comp(Context *context,
545                                                        uint32_t shaderFlags,
546                                                        RefCounted<ShaderModule> **shaderOut)
547 {
548     return GetShader(context, mCopyImageToBuffer_comp_shaders, kCopyImageToBuffer_comp_shaders,
549                      ArraySize(kCopyImageToBuffer_comp_shaders), shaderFlags, shaderOut);
550 }
551 
getEtcToBc_comp(Context * context,uint32_t shaderFlags,RefCounted<ShaderModule> ** shaderOut)552 angle::Result ShaderLibrary::getEtcToBc_comp(Context *context,
553                                              uint32_t shaderFlags,
554                                              RefCounted<ShaderModule> **shaderOut)
555 {
556     return GetShader(context, mEtcToBc_comp_shaders, kEtcToBc_comp_shaders,
557                      ArraySize(kEtcToBc_comp_shaders), shaderFlags, shaderOut);
558 }
559 
getExportStencil_frag(Context * context,uint32_t shaderFlags,RefCounted<ShaderModule> ** shaderOut)560 angle::Result ShaderLibrary::getExportStencil_frag(Context *context,
561                                                    uint32_t shaderFlags,
562                                                    RefCounted<ShaderModule> **shaderOut)
563 {
564     return GetShader(context, mExportStencil_frag_shaders, kExportStencil_frag_shaders,
565                      ArraySize(kExportStencil_frag_shaders), shaderFlags, shaderOut);
566 }
567 
getFullScreenTri_vert(Context * context,uint32_t shaderFlags,RefCounted<ShaderModule> ** shaderOut)568 angle::Result ShaderLibrary::getFullScreenTri_vert(Context *context,
569                                                    uint32_t shaderFlags,
570                                                    RefCounted<ShaderModule> **shaderOut)
571 {
572     return GetShader(context, mFullScreenTri_vert_shaders, kFullScreenTri_vert_shaders,
573                      ArraySize(kFullScreenTri_vert_shaders), shaderFlags, shaderOut);
574 }
575 
getGenerateMipmap_comp(Context * context,uint32_t shaderFlags,RefCounted<ShaderModule> ** shaderOut)576 angle::Result ShaderLibrary::getGenerateMipmap_comp(Context *context,
577                                                     uint32_t shaderFlags,
578                                                     RefCounted<ShaderModule> **shaderOut)
579 {
580     return GetShader(context, mGenerateMipmap_comp_shaders, kGenerateMipmap_comp_shaders,
581                      ArraySize(kGenerateMipmap_comp_shaders), shaderFlags, shaderOut);
582 }
583 
getImageClear_frag(Context * context,uint32_t shaderFlags,RefCounted<ShaderModule> ** shaderOut)584 angle::Result ShaderLibrary::getImageClear_frag(Context *context,
585                                                 uint32_t shaderFlags,
586                                                 RefCounted<ShaderModule> **shaderOut)
587 {
588     return GetShader(context, mImageClear_frag_shaders, kImageClear_frag_shaders,
589                      ArraySize(kImageClear_frag_shaders), shaderFlags, shaderOut);
590 }
591 
getImageCopy_frag(Context * context,uint32_t shaderFlags,RefCounted<ShaderModule> ** shaderOut)592 angle::Result ShaderLibrary::getImageCopy_frag(Context *context,
593                                                uint32_t shaderFlags,
594                                                RefCounted<ShaderModule> **shaderOut)
595 {
596     return GetShader(context, mImageCopy_frag_shaders, kImageCopy_frag_shaders,
597                      ArraySize(kImageCopy_frag_shaders), shaderFlags, shaderOut);
598 }
599 
getOverlayDraw_frag(Context * context,uint32_t shaderFlags,RefCounted<ShaderModule> ** shaderOut)600 angle::Result ShaderLibrary::getOverlayDraw_frag(Context *context,
601                                                  uint32_t shaderFlags,
602                                                  RefCounted<ShaderModule> **shaderOut)
603 {
604     return GetShader(context, mOverlayDraw_frag_shaders, kOverlayDraw_frag_shaders,
605                      ArraySize(kOverlayDraw_frag_shaders), shaderFlags, shaderOut);
606 }
607 
getOverlayDraw_vert(Context * context,uint32_t shaderFlags,RefCounted<ShaderModule> ** shaderOut)608 angle::Result ShaderLibrary::getOverlayDraw_vert(Context *context,
609                                                  uint32_t shaderFlags,
610                                                  RefCounted<ShaderModule> **shaderOut)
611 {
612     return GetShader(context, mOverlayDraw_vert_shaders, kOverlayDraw_vert_shaders,
613                      ArraySize(kOverlayDraw_vert_shaders), shaderFlags, shaderOut);
614 }
615 
616 }  // namespace vk
617 }  // namespace rx
618