xref: /aosp_15_r20/external/angle/util/shader_utils.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2014 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker 
7*8975f5c5SAndroid Build Coastguard Worker #ifndef SAMPLE_UTIL_SHADER_UTILS_H
8*8975f5c5SAndroid Build Coastguard Worker #define SAMPLE_UTIL_SHADER_UTILS_H
9*8975f5c5SAndroid Build Coastguard Worker 
10*8975f5c5SAndroid Build Coastguard Worker #include <functional>
11*8975f5c5SAndroid Build Coastguard Worker #include <map>
12*8975f5c5SAndroid Build Coastguard Worker #include <string>
13*8975f5c5SAndroid Build Coastguard Worker #include <vector>
14*8975f5c5SAndroid Build Coastguard Worker 
15*8975f5c5SAndroid Build Coastguard Worker #include "common/angleutils.h"
16*8975f5c5SAndroid Build Coastguard Worker #include "util/util_export.h"
17*8975f5c5SAndroid Build Coastguard Worker #include "util/util_gl.h"
18*8975f5c5SAndroid Build Coastguard Worker 
19*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT GLuint CheckLinkStatusAndReturnProgram(GLuint program, bool outputErrorMessages);
20*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT GLuint GetProgramShader(GLuint program, GLint requestedType);
21*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT GLuint CompileShader(GLenum type, const char *source);
22*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT GLuint CompileShaderFromFile(GLenum type, const std::string &sourcePath);
23*8975f5c5SAndroid Build Coastguard Worker 
24*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT GLuint
25*8975f5c5SAndroid Build Coastguard Worker CompileProgramWithTransformFeedback(const char *vsSource,
26*8975f5c5SAndroid Build Coastguard Worker                                     const char *fsSource,
27*8975f5c5SAndroid Build Coastguard Worker                                     const std::vector<std::string> &transformFeedbackVaryings,
28*8975f5c5SAndroid Build Coastguard Worker                                     GLenum bufferMode);
29*8975f5c5SAndroid Build Coastguard Worker 
30*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT GLuint CompileProgram(const char *vsSource, const char *fsSource);
31*8975f5c5SAndroid Build Coastguard Worker 
32*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT GLuint CompileProgram(const char *vsSource,
33*8975f5c5SAndroid Build Coastguard Worker                                         const char *fsSource,
34*8975f5c5SAndroid Build Coastguard Worker                                         const std::function<void(GLuint)> &preLinkCallback);
35*8975f5c5SAndroid Build Coastguard Worker 
36*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT GLuint CompileProgramWithGS(const char *vsSource,
37*8975f5c5SAndroid Build Coastguard Worker                                               const char *gsSource,
38*8975f5c5SAndroid Build Coastguard Worker                                               const char *fsSource);
39*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT GLuint CompileProgramWithTESS(const char *vsSource,
40*8975f5c5SAndroid Build Coastguard Worker                                                 const char *tcsSource,
41*8975f5c5SAndroid Build Coastguard Worker                                                 const char *tesSource,
42*8975f5c5SAndroid Build Coastguard Worker                                                 const char *fsSource);
43*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT GLuint CompileProgramFromFiles(const std::string &vsPath,
44*8975f5c5SAndroid Build Coastguard Worker                                                  const std::string &fsPath);
45*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT GLuint CompileComputeProgram(const char *csSource,
46*8975f5c5SAndroid Build Coastguard Worker                                                bool outputErrorMessages = true);
47*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT bool LinkAttachedProgram(GLuint program);
48*8975f5c5SAndroid Build Coastguard Worker 
49*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT GLuint LoadBinaryProgramOES(const std::vector<uint8_t> &binary,
50*8975f5c5SAndroid Build Coastguard Worker                                               GLenum binaryFormat);
51*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT GLuint LoadBinaryProgramES3(const std::vector<uint8_t> &binary,
52*8975f5c5SAndroid Build Coastguard Worker                                               GLenum binaryFormat);
53*8975f5c5SAndroid Build Coastguard Worker 
54*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT void EnableDebugCallback(GLDEBUGPROC callbackChain, const void *userParam);
55*8975f5c5SAndroid Build Coastguard Worker 
56*8975f5c5SAndroid Build Coastguard Worker using CounterNameToIndexMap = std::map<std::string, GLuint>;
57*8975f5c5SAndroid Build Coastguard Worker using CounterNameToValueMap = std::map<std::string, GLuint64>;
58*8975f5c5SAndroid Build Coastguard Worker 
59*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT CounterNameToIndexMap BuildCounterNameToIndexMap();
60*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT angle::VulkanPerfCounters GetPerfCounters(const CounterNameToIndexMap &indexMap);
61*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT CounterNameToValueMap BuildCounterNameToValueMap();
62*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT std::vector<angle::PerfMonitorTriplet> GetPerfMonitorTriplets();
63*8975f5c5SAndroid Build Coastguard Worker 
64*8975f5c5SAndroid Build Coastguard Worker namespace angle
65*8975f5c5SAndroid Build Coastguard Worker {
66*8975f5c5SAndroid Build Coastguard Worker 
67*8975f5c5SAndroid Build Coastguard Worker namespace essl1_shaders
68*8975f5c5SAndroid Build Coastguard Worker {
69*8975f5c5SAndroid Build Coastguard Worker 
70*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *PositionAttrib();
71*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *ColorUniform();
72*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Texture2DUniform();
73*8975f5c5SAndroid Build Coastguard Worker 
74*8975f5c5SAndroid Build Coastguard Worker namespace vs
75*8975f5c5SAndroid Build Coastguard Worker {
76*8975f5c5SAndroid Build Coastguard Worker 
77*8975f5c5SAndroid Build Coastguard Worker // A shader that sets gl_Position to zero.
78*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Zero();
79*8975f5c5SAndroid Build Coastguard Worker 
80*8975f5c5SAndroid Build Coastguard Worker // A shader that sets gl_Position to attribute a_position.
81*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Simple();
82*8975f5c5SAndroid Build Coastguard Worker 
83*8975f5c5SAndroid Build Coastguard Worker // A shader that sets gl_Position to attribute a_position, and sets gl_PointSize to 1.
84*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *SimpleForPoints();
85*8975f5c5SAndroid Build Coastguard Worker 
86*8975f5c5SAndroid Build Coastguard Worker // A shader that passes through attribute a_position, setting it to gl_Position and varying
87*8975f5c5SAndroid Build Coastguard Worker // v_position.
88*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Passthrough();
89*8975f5c5SAndroid Build Coastguard Worker 
90*8975f5c5SAndroid Build Coastguard Worker // A shader that simply passes through attribute a_position, setting it to gl_Position and varying
91*8975f5c5SAndroid Build Coastguard Worker // texcoord.
92*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Texture2D();
93*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Texture2DArray();
94*8975f5c5SAndroid Build Coastguard Worker 
95*8975f5c5SAndroid Build Coastguard Worker }  // namespace vs
96*8975f5c5SAndroid Build Coastguard Worker 
97*8975f5c5SAndroid Build Coastguard Worker namespace fs
98*8975f5c5SAndroid Build Coastguard Worker {
99*8975f5c5SAndroid Build Coastguard Worker 
100*8975f5c5SAndroid Build Coastguard Worker // A shader that renders a simple checker pattern of different colors. X axis and Y axis separate
101*8975f5c5SAndroid Build Coastguard Worker // the different colors. Needs varying v_position.
102*8975f5c5SAndroid Build Coastguard Worker //
103*8975f5c5SAndroid Build Coastguard Worker // - X < 0 && y < 0: Red
104*8975f5c5SAndroid Build Coastguard Worker // - X < 0 && y >= 0: Green
105*8975f5c5SAndroid Build Coastguard Worker // - X >= 0 && y < 0: Blue
106*8975f5c5SAndroid Build Coastguard Worker // - X >= 0 && y >= 0: Yellow
107*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Checkered();
108*8975f5c5SAndroid Build Coastguard Worker 
109*8975f5c5SAndroid Build Coastguard Worker // A shader that fills with color taken from uniform named "color".
110*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *UniformColor();
111*8975f5c5SAndroid Build Coastguard Worker 
112*8975f5c5SAndroid Build Coastguard Worker // A shader that fills with 100% opaque red.
113*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Red();
114*8975f5c5SAndroid Build Coastguard Worker 
115*8975f5c5SAndroid Build Coastguard Worker // A shader that fills with 100% opaque green.
116*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Green();
117*8975f5c5SAndroid Build Coastguard Worker 
118*8975f5c5SAndroid Build Coastguard Worker // A shader that fills with 100% opaque blue.
119*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Blue();
120*8975f5c5SAndroid Build Coastguard Worker 
121*8975f5c5SAndroid Build Coastguard Worker // A shader that samples the texture
122*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Texture2D();
123*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Texture2DArray();
124*8975f5c5SAndroid Build Coastguard Worker 
125*8975f5c5SAndroid Build Coastguard Worker }  // namespace fs
126*8975f5c5SAndroid Build Coastguard Worker }  // namespace essl1_shaders
127*8975f5c5SAndroid Build Coastguard Worker 
128*8975f5c5SAndroid Build Coastguard Worker namespace essl3_shaders
129*8975f5c5SAndroid Build Coastguard Worker {
130*8975f5c5SAndroid Build Coastguard Worker 
131*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *PositionAttrib();
132*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Texture2DUniform();
133*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *LodUniform();
134*8975f5c5SAndroid Build Coastguard Worker 
135*8975f5c5SAndroid Build Coastguard Worker namespace vs
136*8975f5c5SAndroid Build Coastguard Worker {
137*8975f5c5SAndroid Build Coastguard Worker 
138*8975f5c5SAndroid Build Coastguard Worker // A shader that sets gl_Position to zero.
139*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Zero();
140*8975f5c5SAndroid Build Coastguard Worker 
141*8975f5c5SAndroid Build Coastguard Worker // A shader that sets gl_Position to attribute a_position.
142*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Simple();
143*8975f5c5SAndroid Build Coastguard Worker 
144*8975f5c5SAndroid Build Coastguard Worker // A shader that sets gl_Position to attribute a_position, and sets gl_PointSize to 1.
145*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *SimpleForPoints();
146*8975f5c5SAndroid Build Coastguard Worker 
147*8975f5c5SAndroid Build Coastguard Worker // A shader that simply passes through attribute a_position, setting it to gl_Position and varying
148*8975f5c5SAndroid Build Coastguard Worker // v_position.
149*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Passthrough();
150*8975f5c5SAndroid Build Coastguard Worker 
151*8975f5c5SAndroid Build Coastguard Worker // A shader that simply passes through attribute a_position, setting it to gl_Position and varying
152*8975f5c5SAndroid Build Coastguard Worker // texcoord.
153*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Texture2DLod();
154*8975f5c5SAndroid Build Coastguard Worker 
155*8975f5c5SAndroid Build Coastguard Worker }  // namespace vs
156*8975f5c5SAndroid Build Coastguard Worker 
157*8975f5c5SAndroid Build Coastguard Worker namespace fs
158*8975f5c5SAndroid Build Coastguard Worker {
159*8975f5c5SAndroid Build Coastguard Worker 
160*8975f5c5SAndroid Build Coastguard Worker // A shader that fills with 100% opaque red.
161*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Red();
162*8975f5c5SAndroid Build Coastguard Worker 
163*8975f5c5SAndroid Build Coastguard Worker // A shader that fills with 100% opaque green.
164*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Green();
165*8975f5c5SAndroid Build Coastguard Worker 
166*8975f5c5SAndroid Build Coastguard Worker // A shader that fills with 100% opaque blue.
167*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Blue();
168*8975f5c5SAndroid Build Coastguard Worker 
169*8975f5c5SAndroid Build Coastguard Worker // A shader that samples the texture at a given lod.
170*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Texture2DLod();
171*8975f5c5SAndroid Build Coastguard Worker 
172*8975f5c5SAndroid Build Coastguard Worker }  // namespace fs
173*8975f5c5SAndroid Build Coastguard Worker }  // namespace essl3_shaders
174*8975f5c5SAndroid Build Coastguard Worker 
175*8975f5c5SAndroid Build Coastguard Worker namespace essl31_shaders
176*8975f5c5SAndroid Build Coastguard Worker {
177*8975f5c5SAndroid Build Coastguard Worker 
178*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *PositionAttrib();
179*8975f5c5SAndroid Build Coastguard Worker 
180*8975f5c5SAndroid Build Coastguard Worker namespace vs
181*8975f5c5SAndroid Build Coastguard Worker {
182*8975f5c5SAndroid Build Coastguard Worker 
183*8975f5c5SAndroid Build Coastguard Worker // A shader that sets gl_Position to zero.
184*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Zero();
185*8975f5c5SAndroid Build Coastguard Worker 
186*8975f5c5SAndroid Build Coastguard Worker // A shader that sets gl_Position to attribute a_position.
187*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Simple();
188*8975f5c5SAndroid Build Coastguard Worker 
189*8975f5c5SAndroid Build Coastguard Worker // A shader that simply passes through attribute a_position, setting it to gl_Position and varying
190*8975f5c5SAndroid Build Coastguard Worker // v_position.
191*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Passthrough();
192*8975f5c5SAndroid Build Coastguard Worker 
193*8975f5c5SAndroid Build Coastguard Worker }  // namespace vs
194*8975f5c5SAndroid Build Coastguard Worker 
195*8975f5c5SAndroid Build Coastguard Worker namespace fs
196*8975f5c5SAndroid Build Coastguard Worker {
197*8975f5c5SAndroid Build Coastguard Worker 
198*8975f5c5SAndroid Build Coastguard Worker // A shader that fills with 100% opaque red.
199*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Red();
200*8975f5c5SAndroid Build Coastguard Worker 
201*8975f5c5SAndroid Build Coastguard Worker // A shader that fills with 100% opaque green.
202*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *Green();
203*8975f5c5SAndroid Build Coastguard Worker 
204*8975f5c5SAndroid Build Coastguard Worker // A shader that renders a simple gradient of red to green. Needs varying v_position.
205*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT const char *RedGreenGradient();
206*8975f5c5SAndroid Build Coastguard Worker 
207*8975f5c5SAndroid Build Coastguard Worker }  // namespace fs
208*8975f5c5SAndroid Build Coastguard Worker }  // namespace essl31_shaders
209*8975f5c5SAndroid Build Coastguard Worker }  // namespace angle
210*8975f5c5SAndroid Build Coastguard Worker 
211*8975f5c5SAndroid Build Coastguard Worker #endif  // SAMPLE_UTIL_SHADER_UTILS_H
212