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