Changeset 64665 in webkit


Ignore:
Timestamp:
Aug 4, 2010 12:31:44 PM (14 years ago)
Author:
kbr@google.com
Message:

2010-08-04 Kenneth Russell <kbr@google.com>

Reviewed by Dimitri Glazkov.

Update ANGLE to r352
https://bugs.webkit.org/show_bug.cgi?id=43500

Updated ANGLE to r352 (July 26, 2010). Built WebKit to test.

  • include/GLSLANG/ShaderLang.h:
  • src/compiler/Initialize.cpp: (BuiltInFunctionsCommon): (BuiltInFunctionsVertex): (BuiltInFunctionsFragment): (StandardUniforms): (DefaultPrecisionVertex): (DefaultPrecisionFragment): (BuiltInConstants): (TBuiltIns::initialize): (IdentifyBuiltIns):
  • src/compiler/Initialize.h: (TBuiltIns::getBuiltInStrings):
  • src/compiler/OutputGLSL.cpp: (TOutputGLSL::visitSelection):
  • src/compiler/ShHandle.h: (TCompiler::getLanguage): (TCompiler::getSpec): (TCompiler::getSymbolTable): (TCompiler::getInfoSink):
  • src/compiler/ShaderLang.cpp: (InitializeSymbolTable): (GenerateBuiltInSymbolTable): (ShInitialize): (ShConstructCompiler): (ShFinalize): (ShCompile):
  • src/compiler/SymbolTable.h: (TSymbolTable::atBuiltInLevel): (TSymbolTable::atGlobalLevel): (TSymbolTable::push): (TSymbolTable::getGlobalLevel): (TSymbolTable::currentLevel):
  • src/libGLESv2/Shader.cpp: (gl::Shader::Shader): (gl::Shader::compileToHLSL):
Location:
trunk/ANGLE
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/ANGLE/ChangeLog

    r64598 r64665  
     12010-08-04  Kenneth Russell  <kbr@google.com>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        Update ANGLE to r352
     6        https://bugs.webkit.org/show_bug.cgi?id=43500
     7
     8        Updated ANGLE to r352 (July 26, 2010). Built WebKit to test.
     9
     10        * include/GLSLANG/ShaderLang.h:
     11        * src/compiler/Initialize.cpp:
     12        (BuiltInFunctionsCommon):
     13        (BuiltInFunctionsVertex):
     14        (BuiltInFunctionsFragment):
     15        (StandardUniforms):
     16        (DefaultPrecisionVertex):
     17        (DefaultPrecisionFragment):
     18        (BuiltInConstants):
     19        (TBuiltIns::initialize):
     20        (IdentifyBuiltIns):
     21        * src/compiler/Initialize.h:
     22        (TBuiltIns::getBuiltInStrings):
     23        * src/compiler/OutputGLSL.cpp:
     24        (TOutputGLSL::visitSelection):
     25        * src/compiler/ShHandle.h:
     26        (TCompiler::getLanguage):
     27        (TCompiler::getSpec):
     28        (TCompiler::getSymbolTable):
     29        (TCompiler::getInfoSink):
     30        * src/compiler/ShaderLang.cpp:
     31        (InitializeSymbolTable):
     32        (GenerateBuiltInSymbolTable):
     33        (ShInitialize):
     34        (ShConstructCompiler):
     35        (ShFinalize):
     36        (ShCompile):
     37        * src/compiler/SymbolTable.h:
     38        (TSymbolTable::atBuiltInLevel):
     39        (TSymbolTable::atGlobalLevel):
     40        (TSymbolTable::push):
     41        (TSymbolTable::getGlobalLevel):
     42        (TSymbolTable::currentLevel):
     43        * src/libGLESv2/Shader.cpp:
     44        (gl::Shader::Shader):
     45        (gl::Shader::compileToHLSL):
     46
    1472010-08-03  Mark Rowe  <mrowe@apple.com>
    248
  • trunk/ANGLE/include/GLSLANG/ShaderLang.h

    r64560 r64665  
    7171// Driver calls these to create and destroy compiler objects.
    7272//
    73 ShHandle ShConstructCompiler(EShLanguage, EShSpec);  // one per shader
     73ShHandle ShConstructCompiler(EShLanguage, EShSpec, const TBuiltInResource*);
    7474void ShDestruct(ShHandle);
    7575
     
    8686    const int numStrings,
    8787    const EShOptimizationLevel,
    88     const TBuiltInResource *resources,
    8988    int debugOptions
    9089    );
  • trunk/ANGLE/src/compiler/Initialize.cpp

    r64560 r64665  
    1515#include "compiler/intermediate.h"
    1616
    17 void TBuiltIns::initialize()
    18 {
    19     //
    20     // Initialize all the built-in strings for parsing.
    21     //
    22     TString BuiltInFunctions;
    23     TString BuiltInFunctionsVertex;
    24     TString BuiltInFunctionsFragment;
    25     TString StandardUniforms;
    26     TString VertexDefaultPrecision;
    27     TString FragmentDefaultPrecision;
    28 
    29     {
    30         //============================================================================
    31         //
    32         // Prototypes for built-in functions seen by both vertex and fragment shaders.
    33         //
    34         //============================================================================
    35 
    36         TString& s = BuiltInFunctions;
    37 
    38         //
    39         // Angle and Trigonometric Functions.
    40         //
    41         s.append(TString("float radians(float degrees);"));
    42         s.append(TString("vec2  radians(vec2  degrees);"));
    43         s.append(TString("vec3  radians(vec3  degrees);"));
    44         s.append(TString("vec4  radians(vec4  degrees);"));
    45 
    46         s.append(TString("float degrees(float radians);"));
    47         s.append(TString("vec2  degrees(vec2  radians);"));
    48         s.append(TString("vec3  degrees(vec3  radians);"));
    49         s.append(TString("vec4  degrees(vec4  radians);"));
    50 
    51         s.append(TString("float sin(float angle);"));
    52         s.append(TString("vec2  sin(vec2  angle);"));
    53         s.append(TString("vec3  sin(vec3  angle);"));
    54         s.append(TString("vec4  sin(vec4  angle);"));
    55 
    56         s.append(TString("float cos(float angle);"));
    57         s.append(TString("vec2  cos(vec2  angle);"));
    58         s.append(TString("vec3  cos(vec3  angle);"));
    59         s.append(TString("vec4  cos(vec4  angle);"));
    60 
    61         s.append(TString("float tan(float angle);"));
    62         s.append(TString("vec2  tan(vec2  angle);"));
    63         s.append(TString("vec3  tan(vec3  angle);"));
    64         s.append(TString("vec4  tan(vec4  angle);"));
    65 
    66         s.append(TString("float asin(float x);"));
    67         s.append(TString("vec2  asin(vec2  x);"));
    68         s.append(TString("vec3  asin(vec3  x);"));
    69         s.append(TString("vec4  asin(vec4  x);"));
    70 
    71         s.append(TString("float acos(float x);"));
    72         s.append(TString("vec2  acos(vec2  x);"));
    73         s.append(TString("vec3  acos(vec3  x);"));
    74         s.append(TString("vec4  acos(vec4  x);"));
    75 
    76         s.append(TString("float atan(float y, float x);"));
    77         s.append(TString("vec2  atan(vec2  y, vec2  x);"));
    78         s.append(TString("vec3  atan(vec3  y, vec3  x);"));
    79         s.append(TString("vec4  atan(vec4  y, vec4  x);"));
    80 
    81         s.append(TString("float atan(float y_over_x);"));
    82         s.append(TString("vec2  atan(vec2  y_over_x);"));
    83         s.append(TString("vec3  atan(vec3  y_over_x);"));
    84         s.append(TString("vec4  atan(vec4  y_over_x);"));
    85 
    86         //
    87         // Exponential Functions.
    88         //
    89         s.append(TString("float pow(float x, float y);"));
    90         s.append(TString("vec2  pow(vec2  x, vec2  y);"));
    91         s.append(TString("vec3  pow(vec3  x, vec3  y);"));
    92         s.append(TString("vec4  pow(vec4  x, vec4  y);"));
    93 
    94         s.append(TString("float exp(float x);"));
    95         s.append(TString("vec2  exp(vec2  x);"));
    96         s.append(TString("vec3  exp(vec3  x);"));
    97         s.append(TString("vec4  exp(vec4  x);"));
    98 
    99         s.append(TString("float log(float x);"));
    100         s.append(TString("vec2  log(vec2  x);"));
    101         s.append(TString("vec3  log(vec3  x);"));
    102         s.append(TString("vec4  log(vec4  x);"));
    103 
    104         s.append(TString("float exp2(float x);"));
    105         s.append(TString("vec2  exp2(vec2  x);"));
    106         s.append(TString("vec3  exp2(vec3  x);"));
    107         s.append(TString("vec4  exp2(vec4  x);"));
    108 
    109         s.append(TString("float log2(float x);"));
    110         s.append(TString("vec2  log2(vec2  x);"));
    111         s.append(TString("vec3  log2(vec3  x);"));
    112         s.append(TString("vec4  log2(vec4  x);"));
    113 
    114         s.append(TString("float sqrt(float x);"));
    115         s.append(TString("vec2  sqrt(vec2  x);"));
    116         s.append(TString("vec3  sqrt(vec3  x);"));
    117         s.append(TString("vec4  sqrt(vec4  x);"));
    118 
    119         s.append(TString("float inversesqrt(float x);"));
    120         s.append(TString("vec2  inversesqrt(vec2  x);"));
    121         s.append(TString("vec3  inversesqrt(vec3  x);"));
    122         s.append(TString("vec4  inversesqrt(vec4  x);"));
    123 
    124         //
    125         // Common Functions.
    126         //
    127         s.append(TString("float abs(float x);"));
    128         s.append(TString("vec2  abs(vec2  x);"));
    129         s.append(TString("vec3  abs(vec3  x);"));
    130         s.append(TString("vec4  abs(vec4  x);"));
    131 
    132         s.append(TString("float sign(float x);"));
    133         s.append(TString("vec2  sign(vec2  x);"));
    134         s.append(TString("vec3  sign(vec3  x);"));
    135         s.append(TString("vec4  sign(vec4  x);"));
    136 
    137         s.append(TString("float floor(float x);"));
    138         s.append(TString("vec2  floor(vec2  x);"));
    139         s.append(TString("vec3  floor(vec3  x);"));
    140         s.append(TString("vec4  floor(vec4  x);"));
    141 
    142         s.append(TString("float ceil(float x);"));
    143         s.append(TString("vec2  ceil(vec2  x);"));
    144         s.append(TString("vec3  ceil(vec3  x);"));
    145         s.append(TString("vec4  ceil(vec4  x);"));
    146 
    147         s.append(TString("float fract(float x);"));
    148         s.append(TString("vec2  fract(vec2  x);"));
    149         s.append(TString("vec3  fract(vec3  x);"));
    150         s.append(TString("vec4  fract(vec4  x);"));
    151 
    152         s.append(TString("float mod(float x, float y);"));
    153         s.append(TString("vec2  mod(vec2  x, float y);"));
    154         s.append(TString("vec3  mod(vec3  x, float y);"));
    155         s.append(TString("vec4  mod(vec4  x, float y);"));
    156         s.append(TString("vec2  mod(vec2  x, vec2  y);"));
    157         s.append(TString("vec3  mod(vec3  x, vec3  y);"));
    158         s.append(TString("vec4  mod(vec4  x, vec4  y);"));
    159 
    160         s.append(TString("float min(float x, float y);"));
    161         s.append(TString("vec2  min(vec2  x, float y);"));
    162         s.append(TString("vec3  min(vec3  x, float y);"));
    163         s.append(TString("vec4  min(vec4  x, float y);"));
    164         s.append(TString("vec2  min(vec2  x, vec2  y);"));
    165         s.append(TString("vec3  min(vec3  x, vec3  y);"));
    166         s.append(TString("vec4  min(vec4  x, vec4  y);"));
    167 
    168         s.append(TString("float max(float x, float y);"));
    169         s.append(TString("vec2  max(vec2  x, float y);"));
    170         s.append(TString("vec3  max(vec3  x, float y);"));
    171         s.append(TString("vec4  max(vec4  x, float y);"));
    172         s.append(TString("vec2  max(vec2  x, vec2  y);"));
    173         s.append(TString("vec3  max(vec3  x, vec3  y);"));
    174         s.append(TString("vec4  max(vec4  x, vec4  y);"));
    175 
    176         s.append(TString("float clamp(float x, float minVal, float maxVal);"));
    177         s.append(TString("vec2  clamp(vec2  x, float minVal, float maxVal);"));
    178         s.append(TString("vec3  clamp(vec3  x, float minVal, float maxVal);"));
    179         s.append(TString("vec4  clamp(vec4  x, float minVal, float maxVal);"));
    180         s.append(TString("vec2  clamp(vec2  x, vec2  minVal, vec2  maxVal);"));
    181         s.append(TString("vec3  clamp(vec3  x, vec3  minVal, vec3  maxVal);"));
    182         s.append(TString("vec4  clamp(vec4  x, vec4  minVal, vec4  maxVal);"));
    183 
    184         s.append(TString("float mix(float x, float y, float a);"));
    185         s.append(TString("vec2  mix(vec2  x, vec2  y, float a);"));
    186         s.append(TString("vec3  mix(vec3  x, vec3  y, float a);"));
    187         s.append(TString("vec4  mix(vec4  x, vec4  y, float a);"));
    188         s.append(TString("vec2  mix(vec2  x, vec2  y, vec2  a);"));
    189         s.append(TString("vec3  mix(vec3  x, vec3  y, vec3  a);"));
    190         s.append(TString("vec4  mix(vec4  x, vec4  y, vec4  a);"));
    191 
    192         s.append(TString("float step(float edge, float x);"));
    193         s.append(TString("vec2  step(vec2  edge, vec2  x);"));
    194         s.append(TString("vec3  step(vec3  edge, vec3  x);"));
    195         s.append(TString("vec4  step(vec4  edge, vec4  x);"));
    196         s.append(TString("vec2  step(float edge, vec2  x);"));
    197         s.append(TString("vec3  step(float edge, vec3  x);"));
    198         s.append(TString("vec4  step(float edge, vec4  x);"));
    199 
    200         s.append(TString("float smoothstep(float edge0, float edge1, float x);"));
    201         s.append(TString("vec2  smoothstep(vec2  edge0, vec2  edge1, vec2  x);"));
    202         s.append(TString("vec3  smoothstep(vec3  edge0, vec3  edge1, vec3  x);"));
    203         s.append(TString("vec4  smoothstep(vec4  edge0, vec4  edge1, vec4  x);"));
    204         s.append(TString("vec2  smoothstep(float edge0, float edge1, vec2  x);"));
    205         s.append(TString("vec3  smoothstep(float edge0, float edge1, vec3  x);"));
    206         s.append(TString("vec4  smoothstep(float edge0, float edge1, vec4  x);"));
    207 
    208         //
    209         // Geometric Functions.
    210         //
    211         s.append(TString("float length(float x);"));
    212         s.append(TString("float length(vec2  x);"));
    213         s.append(TString("float length(vec3  x);"));
    214         s.append(TString("float length(vec4  x);"));
    215 
    216         s.append(TString("float distance(float p0, float p1);"));
    217         s.append(TString("float distance(vec2  p0, vec2  p1);"));
    218         s.append(TString("float distance(vec3  p0, vec3  p1);"));
    219         s.append(TString("float distance(vec4  p0, vec4  p1);"));
    220 
    221         s.append(TString("float dot(float x, float y);"));
    222         s.append(TString("float dot(vec2  x, vec2  y);"));
    223         s.append(TString("float dot(vec3  x, vec3  y);"));
    224         s.append(TString("float dot(vec4  x, vec4  y);"));
    225 
    226         s.append(TString("vec3 cross(vec3 x, vec3 y);"));
    227         s.append(TString("float normalize(float x);"));
    228         s.append(TString("vec2  normalize(vec2  x);"));
    229         s.append(TString("vec3  normalize(vec3  x);"));
    230         s.append(TString("vec4  normalize(vec4  x);"));
    231 
    232         s.append(TString("float faceforward(float N, float I, float Nref);"));
    233         s.append(TString("vec2  faceforward(vec2  N, vec2  I, vec2  Nref);"));
    234         s.append(TString("vec3  faceforward(vec3  N, vec3  I, vec3  Nref);"));
    235         s.append(TString("vec4  faceforward(vec4  N, vec4  I, vec4  Nref);"));
    236 
    237         s.append(TString("float reflect(float I, float N);"));
    238         s.append(TString("vec2  reflect(vec2  I, vec2  N);"));
    239         s.append(TString("vec3  reflect(vec3  I, vec3  N);"));
    240         s.append(TString("vec4  reflect(vec4  I, vec4  N);"));
    241 
    242         s.append(TString("float refract(float I, float N, float eta);"));
    243         s.append(TString("vec2  refract(vec2  I, vec2  N, float eta);"));
    244         s.append(TString("vec3  refract(vec3  I, vec3  N, float eta);"));
    245         s.append(TString("vec4  refract(vec4  I, vec4  N, float eta);"));
    246 
    247         //
    248         // Matrix Functions.
    249         //
    250         s.append(TString("mat2 matrixCompMult(mat2 x, mat2 y);"));
    251         s.append(TString("mat3 matrixCompMult(mat3 x, mat3 y);"));
    252         s.append(TString("mat4 matrixCompMult(mat4 x, mat4 y);"));
    253 
    254         //
    255         // Vector relational functions.
    256         //
    257         s.append(TString("bvec2 lessThan(vec2 x, vec2 y);"));
    258         s.append(TString("bvec3 lessThan(vec3 x, vec3 y);"));
    259         s.append(TString("bvec4 lessThan(vec4 x, vec4 y);"));
    260 
    261         s.append(TString("bvec2 lessThan(ivec2 x, ivec2 y);"));
    262         s.append(TString("bvec3 lessThan(ivec3 x, ivec3 y);"));
    263         s.append(TString("bvec4 lessThan(ivec4 x, ivec4 y);"));
    264 
    265         s.append(TString("bvec2 lessThanEqual(vec2 x, vec2 y);"));
    266         s.append(TString("bvec3 lessThanEqual(vec3 x, vec3 y);"));
    267         s.append(TString("bvec4 lessThanEqual(vec4 x, vec4 y);"));
    268 
    269         s.append(TString("bvec2 lessThanEqual(ivec2 x, ivec2 y);"));
    270         s.append(TString("bvec3 lessThanEqual(ivec3 x, ivec3 y);"));
    271         s.append(TString("bvec4 lessThanEqual(ivec4 x, ivec4 y);"));
    272 
    273         s.append(TString("bvec2 greaterThan(vec2 x, vec2 y);"));
    274         s.append(TString("bvec3 greaterThan(vec3 x, vec3 y);"));
    275         s.append(TString("bvec4 greaterThan(vec4 x, vec4 y);"));
    276 
    277         s.append(TString("bvec2 greaterThan(ivec2 x, ivec2 y);"));
    278         s.append(TString("bvec3 greaterThan(ivec3 x, ivec3 y);"));
    279         s.append(TString("bvec4 greaterThan(ivec4 x, ivec4 y);"));
    280 
    281         s.append(TString("bvec2 greaterThanEqual(vec2 x, vec2 y);"));
    282         s.append(TString("bvec3 greaterThanEqual(vec3 x, vec3 y);"));
    283         s.append(TString("bvec4 greaterThanEqual(vec4 x, vec4 y);"));
    284 
    285         s.append(TString("bvec2 greaterThanEqual(ivec2 x, ivec2 y);"));
    286         s.append(TString("bvec3 greaterThanEqual(ivec3 x, ivec3 y);"));
    287         s.append(TString("bvec4 greaterThanEqual(ivec4 x, ivec4 y);"));
    288 
    289         s.append(TString("bvec2 equal(vec2 x, vec2 y);"));
    290         s.append(TString("bvec3 equal(vec3 x, vec3 y);"));
    291         s.append(TString("bvec4 equal(vec4 x, vec4 y);"));
    292 
    293         s.append(TString("bvec2 equal(ivec2 x, ivec2 y);"));
    294         s.append(TString("bvec3 equal(ivec3 x, ivec3 y);"));
    295         s.append(TString("bvec4 equal(ivec4 x, ivec4 y);"));
    296 
    297         s.append(TString("bvec2 equal(bvec2 x, bvec2 y);"));
    298         s.append(TString("bvec3 equal(bvec3 x, bvec3 y);"));
    299         s.append(TString("bvec4 equal(bvec4 x, bvec4 y);"));
    300 
    301         s.append(TString("bvec2 notEqual(vec2 x, vec2 y);"));
    302         s.append(TString("bvec3 notEqual(vec3 x, vec3 y);"));
    303         s.append(TString("bvec4 notEqual(vec4 x, vec4 y);"));
    304 
    305         s.append(TString("bvec2 notEqual(ivec2 x, ivec2 y);"));
    306         s.append(TString("bvec3 notEqual(ivec3 x, ivec3 y);"));
    307         s.append(TString("bvec4 notEqual(ivec4 x, ivec4 y);"));
    308 
    309         s.append(TString("bvec2 notEqual(bvec2 x, bvec2 y);"));
    310         s.append(TString("bvec3 notEqual(bvec3 x, bvec3 y);"));
    311         s.append(TString("bvec4 notEqual(bvec4 x, bvec4 y);"));
    312 
    313         s.append(TString("bool any(bvec2 x);"));
    314         s.append(TString("bool any(bvec3 x);"));
    315         s.append(TString("bool any(bvec4 x);"));
    316 
    317         s.append(TString("bool all(bvec2 x);"));
    318         s.append(TString("bool all(bvec3 x);"));
    319         s.append(TString("bool all(bvec4 x);"));
    320 
    321         s.append(TString("bvec2 not(bvec2 x);"));
    322         s.append(TString("bvec3 not(bvec3 x);"));
    323         s.append(TString("bvec4 not(bvec4 x);"));
    324 
    325         //
    326         // Texture Functions.
    327         //
    328         s.append(TString("vec4 texture2D(sampler2D sampler, vec2 coord);"));
    329         s.append(TString("vec4 texture2DProj(sampler2D sampler, vec3 coord);"));
    330         s.append(TString("vec4 texture2DProj(sampler2D sampler, vec4 coord);"));
    331 
    332         s.append(TString("vec4 textureCube(samplerCube sampler, vec3 coord);"));
    333 
    334         //
    335         // Noise functions.
    336         //
    337     //  s.append(TString("float noise1(float x);"));
    338     //  s.append(TString("float noise1(vec2  x);"));
    339     //  s.append(TString("float noise1(vec3  x);"));
    340     //  s.append(TString("float noise1(vec4  x);"));
    341 
    342     //  s.append(TString("vec2 noise2(float x);"));
    343     //  s.append(TString("vec2 noise2(vec2  x);"));
    344     //  s.append(TString("vec2 noise2(vec3  x);"));
    345     //  s.append(TString("vec2 noise2(vec4  x);"));
    346 
    347     //  s.append(TString("vec3 noise3(float x);"));
    348     //  s.append(TString("vec3 noise3(vec2  x);"));
    349     //  s.append(TString("vec3 noise3(vec3  x);"));
    350     //  s.append(TString("vec3 noise3(vec4  x);"));
    351 
    352     //  s.append(TString("vec4 noise4(float x);"));
    353     //  s.append(TString("vec4 noise4(vec2  x);"));
    354     //  s.append(TString("vec4 noise4(vec3  x);"));
    355     //  s.append(TString("vec4 noise4(vec4  x);"));
    356 
    357         s.append(TString("\n"));
     17//============================================================================
     18//
     19// Prototypes for built-in functions seen by both vertex and fragment shaders.
     20//
     21//============================================================================
     22static TString BuiltInFunctionsCommon()
     23{
     24    TString s;
     25
     26    //
     27    // Angle and Trigonometric Functions.
     28    //
     29    s.append(TString("float radians(float degrees);"));
     30    s.append(TString("vec2  radians(vec2  degrees);"));
     31    s.append(TString("vec3  radians(vec3  degrees);"));
     32    s.append(TString("vec4  radians(vec4  degrees);"));
     33
     34    s.append(TString("float degrees(float radians);"));
     35    s.append(TString("vec2  degrees(vec2  radians);"));
     36    s.append(TString("vec3  degrees(vec3  radians);"));
     37    s.append(TString("vec4  degrees(vec4  radians);"));
     38
     39    s.append(TString("float sin(float angle);"));
     40    s.append(TString("vec2  sin(vec2  angle);"));
     41    s.append(TString("vec3  sin(vec3  angle);"));
     42    s.append(TString("vec4  sin(vec4  angle);"));
     43
     44    s.append(TString("float cos(float angle);"));
     45    s.append(TString("vec2  cos(vec2  angle);"));
     46    s.append(TString("vec3  cos(vec3  angle);"));
     47    s.append(TString("vec4  cos(vec4  angle);"));
     48
     49    s.append(TString("float tan(float angle);"));
     50    s.append(TString("vec2  tan(vec2  angle);"));
     51    s.append(TString("vec3  tan(vec3  angle);"));
     52    s.append(TString("vec4  tan(vec4  angle);"));
     53
     54    s.append(TString("float asin(float x);"));
     55    s.append(TString("vec2  asin(vec2  x);"));
     56    s.append(TString("vec3  asin(vec3  x);"));
     57    s.append(TString("vec4  asin(vec4  x);"));
     58
     59    s.append(TString("float acos(float x);"));
     60    s.append(TString("vec2  acos(vec2  x);"));
     61    s.append(TString("vec3  acos(vec3  x);"));
     62    s.append(TString("vec4  acos(vec4  x);"));
     63
     64    s.append(TString("float atan(float y, float x);"));
     65    s.append(TString("vec2  atan(vec2  y, vec2  x);"));
     66    s.append(TString("vec3  atan(vec3  y, vec3  x);"));
     67    s.append(TString("vec4  atan(vec4  y, vec4  x);"));
     68
     69    s.append(TString("float atan(float y_over_x);"));
     70    s.append(TString("vec2  atan(vec2  y_over_x);"));
     71    s.append(TString("vec3  atan(vec3  y_over_x);"));
     72    s.append(TString("vec4  atan(vec4  y_over_x);"));
     73
     74    //
     75    // Exponential Functions.
     76    //
     77    s.append(TString("float pow(float x, float y);"));
     78    s.append(TString("vec2  pow(vec2  x, vec2  y);"));
     79    s.append(TString("vec3  pow(vec3  x, vec3  y);"));
     80    s.append(TString("vec4  pow(vec4  x, vec4  y);"));
     81
     82    s.append(TString("float exp(float x);"));
     83    s.append(TString("vec2  exp(vec2  x);"));
     84    s.append(TString("vec3  exp(vec3  x);"));
     85    s.append(TString("vec4  exp(vec4  x);"));
     86
     87    s.append(TString("float log(float x);"));
     88    s.append(TString("vec2  log(vec2  x);"));
     89    s.append(TString("vec3  log(vec3  x);"));
     90    s.append(TString("vec4  log(vec4  x);"));
     91
     92    s.append(TString("float exp2(float x);"));
     93    s.append(TString("vec2  exp2(vec2  x);"));
     94    s.append(TString("vec3  exp2(vec3  x);"));
     95    s.append(TString("vec4  exp2(vec4  x);"));
     96
     97    s.append(TString("float log2(float x);"));
     98    s.append(TString("vec2  log2(vec2  x);"));
     99    s.append(TString("vec3  log2(vec3  x);"));
     100    s.append(TString("vec4  log2(vec4  x);"));
     101
     102    s.append(TString("float sqrt(float x);"));
     103    s.append(TString("vec2  sqrt(vec2  x);"));
     104    s.append(TString("vec3  sqrt(vec3  x);"));
     105    s.append(TString("vec4  sqrt(vec4  x);"));
     106
     107    s.append(TString("float inversesqrt(float x);"));
     108    s.append(TString("vec2  inversesqrt(vec2  x);"));
     109    s.append(TString("vec3  inversesqrt(vec3  x);"));
     110    s.append(TString("vec4  inversesqrt(vec4  x);"));
     111
     112    //
     113    // Common Functions.
     114    //
     115    s.append(TString("float abs(float x);"));
     116    s.append(TString("vec2  abs(vec2  x);"));
     117    s.append(TString("vec3  abs(vec3  x);"));
     118    s.append(TString("vec4  abs(vec4  x);"));
     119
     120    s.append(TString("float sign(float x);"));
     121    s.append(TString("vec2  sign(vec2  x);"));
     122    s.append(TString("vec3  sign(vec3  x);"));
     123    s.append(TString("vec4  sign(vec4  x);"));
     124
     125    s.append(TString("float floor(float x);"));
     126    s.append(TString("vec2  floor(vec2  x);"));
     127    s.append(TString("vec3  floor(vec3  x);"));
     128    s.append(TString("vec4  floor(vec4  x);"));
     129
     130    s.append(TString("float ceil(float x);"));
     131    s.append(TString("vec2  ceil(vec2  x);"));
     132    s.append(TString("vec3  ceil(vec3  x);"));
     133    s.append(TString("vec4  ceil(vec4  x);"));
     134
     135    s.append(TString("float fract(float x);"));
     136    s.append(TString("vec2  fract(vec2  x);"));
     137    s.append(TString("vec3  fract(vec3  x);"));
     138    s.append(TString("vec4  fract(vec4  x);"));
     139
     140    s.append(TString("float mod(float x, float y);"));
     141    s.append(TString("vec2  mod(vec2  x, float y);"));
     142    s.append(TString("vec3  mod(vec3  x, float y);"));
     143    s.append(TString("vec4  mod(vec4  x, float y);"));
     144    s.append(TString("vec2  mod(vec2  x, vec2  y);"));
     145    s.append(TString("vec3  mod(vec3  x, vec3  y);"));
     146    s.append(TString("vec4  mod(vec4  x, vec4  y);"));
     147
     148    s.append(TString("float min(float x, float y);"));
     149    s.append(TString("vec2  min(vec2  x, float y);"));
     150    s.append(TString("vec3  min(vec3  x, float y);"));
     151    s.append(TString("vec4  min(vec4  x, float y);"));
     152    s.append(TString("vec2  min(vec2  x, vec2  y);"));
     153    s.append(TString("vec3  min(vec3  x, vec3  y);"));
     154    s.append(TString("vec4  min(vec4  x, vec4  y);"));
     155
     156    s.append(TString("float max(float x, float y);"));
     157    s.append(TString("vec2  max(vec2  x, float y);"));
     158    s.append(TString("vec3  max(vec3  x, float y);"));
     159    s.append(TString("vec4  max(vec4  x, float y);"));
     160    s.append(TString("vec2  max(vec2  x, vec2  y);"));
     161    s.append(TString("vec3  max(vec3  x, vec3  y);"));
     162    s.append(TString("vec4  max(vec4  x, vec4  y);"));
     163
     164    s.append(TString("float clamp(float x, float minVal, float maxVal);"));
     165    s.append(TString("vec2  clamp(vec2  x, float minVal, float maxVal);"));
     166    s.append(TString("vec3  clamp(vec3  x, float minVal, float maxVal);"));
     167    s.append(TString("vec4  clamp(vec4  x, float minVal, float maxVal);"));
     168    s.append(TString("vec2  clamp(vec2  x, vec2  minVal, vec2  maxVal);"));
     169    s.append(TString("vec3  clamp(vec3  x, vec3  minVal, vec3  maxVal);"));
     170    s.append(TString("vec4  clamp(vec4  x, vec4  minVal, vec4  maxVal);"));
     171
     172    s.append(TString("float mix(float x, float y, float a);"));
     173    s.append(TString("vec2  mix(vec2  x, vec2  y, float a);"));
     174    s.append(TString("vec3  mix(vec3  x, vec3  y, float a);"));
     175    s.append(TString("vec4  mix(vec4  x, vec4  y, float a);"));
     176    s.append(TString("vec2  mix(vec2  x, vec2  y, vec2  a);"));
     177    s.append(TString("vec3  mix(vec3  x, vec3  y, vec3  a);"));
     178    s.append(TString("vec4  mix(vec4  x, vec4  y, vec4  a);"));
     179
     180    s.append(TString("float step(float edge, float x);"));
     181    s.append(TString("vec2  step(vec2  edge, vec2  x);"));
     182    s.append(TString("vec3  step(vec3  edge, vec3  x);"));
     183    s.append(TString("vec4  step(vec4  edge, vec4  x);"));
     184    s.append(TString("vec2  step(float edge, vec2  x);"));
     185    s.append(TString("vec3  step(float edge, vec3  x);"));
     186    s.append(TString("vec4  step(float edge, vec4  x);"));
     187
     188    s.append(TString("float smoothstep(float edge0, float edge1, float x);"));
     189    s.append(TString("vec2  smoothstep(vec2  edge0, vec2  edge1, vec2  x);"));
     190    s.append(TString("vec3  smoothstep(vec3  edge0, vec3  edge1, vec3  x);"));
     191    s.append(TString("vec4  smoothstep(vec4  edge0, vec4  edge1, vec4  x);"));
     192    s.append(TString("vec2  smoothstep(float edge0, float edge1, vec2  x);"));
     193    s.append(TString("vec3  smoothstep(float edge0, float edge1, vec3  x);"));
     194    s.append(TString("vec4  smoothstep(float edge0, float edge1, vec4  x);"));
     195
     196    //
     197    // Geometric Functions.
     198    //
     199    s.append(TString("float length(float x);"));
     200    s.append(TString("float length(vec2  x);"));
     201    s.append(TString("float length(vec3  x);"));
     202    s.append(TString("float length(vec4  x);"));
     203
     204    s.append(TString("float distance(float p0, float p1);"));
     205    s.append(TString("float distance(vec2  p0, vec2  p1);"));
     206    s.append(TString("float distance(vec3  p0, vec3  p1);"));
     207    s.append(TString("float distance(vec4  p0, vec4  p1);"));
     208
     209    s.append(TString("float dot(float x, float y);"));
     210    s.append(TString("float dot(vec2  x, vec2  y);"));
     211    s.append(TString("float dot(vec3  x, vec3  y);"));
     212    s.append(TString("float dot(vec4  x, vec4  y);"));
     213
     214    s.append(TString("vec3 cross(vec3 x, vec3 y);"));
     215    s.append(TString("float normalize(float x);"));
     216    s.append(TString("vec2  normalize(vec2  x);"));
     217    s.append(TString("vec3  normalize(vec3  x);"));
     218    s.append(TString("vec4  normalize(vec4  x);"));
     219
     220    s.append(TString("float faceforward(float N, float I, float Nref);"));
     221    s.append(TString("vec2  faceforward(vec2  N, vec2  I, vec2  Nref);"));
     222    s.append(TString("vec3  faceforward(vec3  N, vec3  I, vec3  Nref);"));
     223    s.append(TString("vec4  faceforward(vec4  N, vec4  I, vec4  Nref);"));
     224
     225    s.append(TString("float reflect(float I, float N);"));
     226    s.append(TString("vec2  reflect(vec2  I, vec2  N);"));
     227    s.append(TString("vec3  reflect(vec3  I, vec3  N);"));
     228    s.append(TString("vec4  reflect(vec4  I, vec4  N);"));
     229
     230    s.append(TString("float refract(float I, float N, float eta);"));
     231    s.append(TString("vec2  refract(vec2  I, vec2  N, float eta);"));
     232    s.append(TString("vec3  refract(vec3  I, vec3  N, float eta);"));
     233    s.append(TString("vec4  refract(vec4  I, vec4  N, float eta);"));
     234
     235    //
     236    // Matrix Functions.
     237    //
     238    s.append(TString("mat2 matrixCompMult(mat2 x, mat2 y);"));
     239    s.append(TString("mat3 matrixCompMult(mat3 x, mat3 y);"));
     240    s.append(TString("mat4 matrixCompMult(mat4 x, mat4 y);"));
     241
     242    //
     243    // Vector relational functions.
     244    //
     245    s.append(TString("bvec2 lessThan(vec2 x, vec2 y);"));
     246    s.append(TString("bvec3 lessThan(vec3 x, vec3 y);"));
     247    s.append(TString("bvec4 lessThan(vec4 x, vec4 y);"));
     248
     249    s.append(TString("bvec2 lessThan(ivec2 x, ivec2 y);"));
     250    s.append(TString("bvec3 lessThan(ivec3 x, ivec3 y);"));
     251    s.append(TString("bvec4 lessThan(ivec4 x, ivec4 y);"));
     252
     253    s.append(TString("bvec2 lessThanEqual(vec2 x, vec2 y);"));
     254    s.append(TString("bvec3 lessThanEqual(vec3 x, vec3 y);"));
     255    s.append(TString("bvec4 lessThanEqual(vec4 x, vec4 y);"));
     256
     257    s.append(TString("bvec2 lessThanEqual(ivec2 x, ivec2 y);"));
     258    s.append(TString("bvec3 lessThanEqual(ivec3 x, ivec3 y);"));
     259    s.append(TString("bvec4 lessThanEqual(ivec4 x, ivec4 y);"));
     260
     261    s.append(TString("bvec2 greaterThan(vec2 x, vec2 y);"));
     262    s.append(TString("bvec3 greaterThan(vec3 x, vec3 y);"));
     263    s.append(TString("bvec4 greaterThan(vec4 x, vec4 y);"));
     264
     265    s.append(TString("bvec2 greaterThan(ivec2 x, ivec2 y);"));
     266    s.append(TString("bvec3 greaterThan(ivec3 x, ivec3 y);"));
     267    s.append(TString("bvec4 greaterThan(ivec4 x, ivec4 y);"));
     268
     269    s.append(TString("bvec2 greaterThanEqual(vec2 x, vec2 y);"));
     270    s.append(TString("bvec3 greaterThanEqual(vec3 x, vec3 y);"));
     271    s.append(TString("bvec4 greaterThanEqual(vec4 x, vec4 y);"));
     272
     273    s.append(TString("bvec2 greaterThanEqual(ivec2 x, ivec2 y);"));
     274    s.append(TString("bvec3 greaterThanEqual(ivec3 x, ivec3 y);"));
     275    s.append(TString("bvec4 greaterThanEqual(ivec4 x, ivec4 y);"));
     276
     277    s.append(TString("bvec2 equal(vec2 x, vec2 y);"));
     278    s.append(TString("bvec3 equal(vec3 x, vec3 y);"));
     279    s.append(TString("bvec4 equal(vec4 x, vec4 y);"));
     280
     281    s.append(TString("bvec2 equal(ivec2 x, ivec2 y);"));
     282    s.append(TString("bvec3 equal(ivec3 x, ivec3 y);"));
     283    s.append(TString("bvec4 equal(ivec4 x, ivec4 y);"));
     284
     285    s.append(TString("bvec2 equal(bvec2 x, bvec2 y);"));
     286    s.append(TString("bvec3 equal(bvec3 x, bvec3 y);"));
     287    s.append(TString("bvec4 equal(bvec4 x, bvec4 y);"));
     288
     289    s.append(TString("bvec2 notEqual(vec2 x, vec2 y);"));
     290    s.append(TString("bvec3 notEqual(vec3 x, vec3 y);"));
     291    s.append(TString("bvec4 notEqual(vec4 x, vec4 y);"));
     292
     293    s.append(TString("bvec2 notEqual(ivec2 x, ivec2 y);"));
     294    s.append(TString("bvec3 notEqual(ivec3 x, ivec3 y);"));
     295    s.append(TString("bvec4 notEqual(ivec4 x, ivec4 y);"));
     296
     297    s.append(TString("bvec2 notEqual(bvec2 x, bvec2 y);"));
     298    s.append(TString("bvec3 notEqual(bvec3 x, bvec3 y);"));
     299    s.append(TString("bvec4 notEqual(bvec4 x, bvec4 y);"));
     300
     301    s.append(TString("bool any(bvec2 x);"));
     302    s.append(TString("bool any(bvec3 x);"));
     303    s.append(TString("bool any(bvec4 x);"));
     304
     305    s.append(TString("bool all(bvec2 x);"));
     306    s.append(TString("bool all(bvec3 x);"));
     307    s.append(TString("bool all(bvec4 x);"));
     308
     309    s.append(TString("bvec2 not(bvec2 x);"));
     310    s.append(TString("bvec3 not(bvec3 x);"));
     311    s.append(TString("bvec4 not(bvec4 x);"));
     312
     313    //
     314    // Texture Functions.
     315    //
     316    s.append(TString("vec4 texture2D(sampler2D sampler, vec2 coord);"));
     317    s.append(TString("vec4 texture2DProj(sampler2D sampler, vec3 coord);"));
     318    s.append(TString("vec4 texture2DProj(sampler2D sampler, vec4 coord);"));
     319
     320    s.append(TString("vec4 textureCube(samplerCube sampler, vec3 coord);"));
     321
     322    //
     323    // Noise functions.
     324    //
     325    //s.append(TString("float noise1(float x);"));
     326    //s.append(TString("float noise1(vec2  x);"));
     327    //s.append(TString("float noise1(vec3  x);"));
     328    //s.append(TString("float noise1(vec4  x);"));
     329
     330    //s.append(TString("vec2 noise2(float x);"));
     331    //s.append(TString("vec2 noise2(vec2  x);"));
     332    //s.append(TString("vec2 noise2(vec3  x);"));
     333    //s.append(TString("vec2 noise2(vec4  x);"));
     334
     335    //s.append(TString("vec3 noise3(float x);"));
     336    //s.append(TString("vec3 noise3(vec2  x);"));
     337    //s.append(TString("vec3 noise3(vec3  x);"));
     338    //s.append(TString("vec3 noise3(vec4  x);"));
     339
     340    //s.append(TString("vec4 noise4(float x);"));
     341    //s.append(TString("vec4 noise4(vec2  x);"));
     342    //s.append(TString("vec4 noise4(vec3  x);"));
     343    //s.append(TString("vec4 noise4(vec4  x);"));
     344
     345    s.append(TString("\n"));
     346    return s;
     347}
     348
     349//============================================================================
     350//
     351// Prototypes for built-in functions seen by vertex shaders only.
     352//
     353//============================================================================
     354static TString BuiltInFunctionsVertex()
     355{
     356    TString s;
     357
     358    //
     359    // Geometric Functions.
     360    //
     361    //s.append(TString("vec4 ftransform();"));
     362
     363    //
     364    // Texture Functions.
     365    //
     366    s.append(TString("vec4 texture2DLod(sampler2D sampler, vec2 coord, float lod);"));
     367    s.append(TString("vec4 texture2DProjLod(sampler2D sampler, vec3 coord, float lod);"));
     368    s.append(TString("vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod);"));
     369    s.append(TString("vec4 textureCubeLod(samplerCube sampler, vec3 coord, float lod);"));
     370
     371    s.append(TString("\n"));
     372    return s;
     373}
     374
     375//============================================================================
     376//
     377// Prototypes for built-in functions seen by fragment shaders only.
     378//
     379//============================================================================
     380static TString BuiltInFunctionsFragment()
     381{
     382    TString s;
     383
     384    //
     385    // Texture Functions.
     386    //
     387    s.append(TString("vec4 texture2D(sampler2D sampler, vec2 coord, float bias);"));
     388    s.append(TString("vec4 texture2DProj(sampler2D sampler, vec3 coord, float bias);"));
     389    s.append(TString("vec4 texture2DProj(sampler2D sampler, vec4 coord, float bias);"));
     390    s.append(TString("vec4 textureCube(samplerCube sampler, vec3 coord, float bias);"));
     391
     392    //s.append(TString("float dFdx(float p);"));
     393    //s.append(TString("vec2  dFdx(vec2  p);"));
     394    //s.append(TString("vec3  dFdx(vec3  p);"));
     395    //s.append(TString("vec4  dFdx(vec4  p);"));
     396
     397    //s.append(TString("float dFdy(float p);"));
     398    //s.append(TString("vec2  dFdy(vec2  p);"));
     399    //s.append(TString("vec3  dFdy(vec3  p);"));
     400    //s.append(TString("vec4  dFdy(vec4  p);"));
     401
     402    s.append(TString("float fwidth(float p);"));
     403    s.append(TString("vec2  fwidth(vec2  p);"));
     404    s.append(TString("vec3  fwidth(vec3  p);"));
     405    s.append(TString("vec4  fwidth(vec4  p);"));
     406
     407    s.append(TString("\n"));
     408    return s;
     409}
     410
     411//============================================================================
     412//
     413// Standard uniforms.
     414//
     415//============================================================================
     416static TString StandardUniforms()
     417{
     418    TString s;
     419
     420    //
     421    // Depth range in window coordinates
     422    //
     423    s.append(TString("struct gl_DepthRangeParameters {"));
     424    s.append(TString("    highp float near;"));        // n
     425    s.append(TString("    highp float far;"));         // f
     426    s.append(TString("    highp float diff;"));        // f - n
     427    s.append(TString("};"));
     428    s.append(TString("uniform gl_DepthRangeParameters gl_DepthRange;"));
     429
     430    s.append(TString("\n"));
     431    return s;
     432}
     433
     434//============================================================================
     435//
     436// Default precision for vertex shaders.
     437//
     438//============================================================================
     439static TString DefaultPrecisionVertex()
     440{
     441    TString s;
     442
     443    s.append(TString("precision highp int;"));
     444    s.append(TString("precision highp float;"));
     445
     446    s.append(TString("\n"));
     447    return s;
     448}
     449
     450//============================================================================
     451//
     452// Default precision for fragment shaders.
     453//
     454//============================================================================
     455static TString DefaultPrecisionFragment()
     456{
     457    TString s;
     458
     459    s.append(TString("precision mediump int;"));
     460    // No default precision for float in fragment shaders
     461
     462    s.append(TString("\n"));
     463    return s;
     464}
     465
     466//============================================================================
     467//
     468// Implementation dependent built-in constants.
     469//
     470//============================================================================
     471static TString BuiltInConstants(const TBuiltInResource &resources)
     472{
     473    TStringStream s;
     474
     475    s << "const int gl_MaxVertexAttribs = " << resources.maxVertexAttribs << ";";
     476    s << "const int gl_MaxVertexUniformVectors = " << resources.maxVertexUniformVectors << ";";
     477
     478    s << "const int gl_MaxVaryingVectors = " << resources.maxVaryingVectors << ";";
     479    s << "const int gl_MaxVertexTextureImageUnits = " << resources.maxVertexTextureImageUnits << ";";
     480    s << "const int gl_MaxCombinedTextureImageUnits = " << resources.maxCombinedTextureImageUnits << ";";
     481    s << "const int gl_MaxTextureImageUnits = " << resources.maxTextureImageUnits << ";";
     482    s << "const int gl_MaxFragmentUniformVectors = " << resources.maxFragmentUniformVectors << ";";
     483    s << "const int gl_MaxDrawBuffers = " << resources.maxDrawBuffers << ";";
     484
     485    return s.str();
     486}
     487
     488void TBuiltIns::initialize(EShLanguage language, EShSpec spec, const TBuiltInResource& resources)
     489{
     490    switch (language) {
     491    case EShLangFragment:
     492        builtInStrings.push_back(DefaultPrecisionFragment());
     493        builtInStrings.push_back(BuiltInFunctionsCommon());
     494        builtInStrings.push_back(BuiltInFunctionsFragment());
     495        builtInStrings.push_back(StandardUniforms());
     496        break;
     497
     498    case EShLangVertex:
     499        builtInStrings.push_back(DefaultPrecisionVertex());
     500        builtInStrings.push_back(BuiltInFunctionsCommon());
     501        builtInStrings.push_back(BuiltInFunctionsVertex());
     502        builtInStrings.push_back(StandardUniforms());
     503        break;
     504
     505    default: assert(false && "Language not supported");
    358506    }
    359     {
    360         //============================================================================
    361         //
    362         // Prototypes for built-in functions seen by vertex shaders only.
    363         //
    364         //============================================================================
    365 
    366         TString& s = BuiltInFunctionsVertex;
    367 
    368         //
    369         // Geometric Functions.
    370         //
    371         s.append(TString("vec4 ftransform();"));
    372 
    373         //
    374         // Texture Functions.
    375         //
    376         s.append(TString("vec4 texture2DLod(sampler2D sampler, vec2 coord, float lod);"));
    377         s.append(TString("vec4 texture2DProjLod(sampler2D sampler, vec3 coord, float lod);"));
    378         s.append(TString("vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod);"));
    379 
    380         s.append(TString("vec4 textureCubeLod(samplerCube sampler, vec3 coord, float lod);"));
    381 
    382         s.append(TString("\n"));
    383     }
    384     {
    385         //============================================================================
    386         //
    387         // Prototypes for built-in functions seen by fragment shaders only.
    388         //
    389         //============================================================================
    390 
    391         TString& s = BuiltInFunctionsFragment;
    392 
    393         //
    394         // Texture Functions.
    395         //
    396         s.append(TString("vec4 texture2D(sampler2D sampler, vec2 coord, float bias);"));
    397         s.append(TString("vec4 texture2DProj(sampler2D sampler, vec3 coord, float bias);"));
    398         s.append(TString("vec4 texture2DProj(sampler2D sampler, vec4 coord, float bias);"));
    399 
    400         s.append(TString("vec4 textureCube(samplerCube sampler, vec3 coord, float bias);"));
    401 
    402     //  s.append(TString("float dFdx(float p);"));
    403     //  s.append(TString("vec2  dFdx(vec2  p);"));
    404     //  s.append(TString("vec3  dFdx(vec3  p);"));
    405     //  s.append(TString("vec4  dFdx(vec4  p);"));
    406 
    407     //  s.append(TString("float dFdy(float p);"));
    408     //  s.append(TString("vec2  dFdy(vec2  p);"));
    409     //  s.append(TString("vec3  dFdy(vec3  p);"));
    410     //  s.append(TString("vec4  dFdy(vec4  p);"));
    411 
    412         s.append(TString("float fwidth(float p);"));
    413         s.append(TString("vec2  fwidth(vec2  p);"));
    414         s.append(TString("vec3  fwidth(vec3  p);"));
    415         s.append(TString("vec4  fwidth(vec4  p);"));
    416 
    417         s.append(TString("\n"));
    418     }
    419     {
    420         //============================================================================
    421         //
    422         // Standard Uniforms
    423         //
    424         //============================================================================
    425 
    426         TString& s = StandardUniforms;
    427 
    428         //
    429         // Depth range in window coordinates
    430         //
    431         s.append(TString("struct gl_DepthRangeParameters {"));
    432         s.append(TString("    highp float near;"));        // n
    433         s.append(TString("    highp float far;"));         // f
    434         s.append(TString("    highp float diff;"));        // f - n
    435         s.append(TString("};"));
    436         s.append(TString("uniform gl_DepthRangeParameters gl_DepthRange;"));
    437 
    438         s.append(TString("\n"));
    439     }
    440     {
    441         //============================================================================
    442         //
    443         // Default precision for vertex shaders.
    444         //
    445         //============================================================================
    446 
    447         TString& s = VertexDefaultPrecision;
    448 
    449         s.append(TString("precision highp int;"));
    450         s.append(TString("precision highp float;"));
    451         s.append(TString("\n"));
    452     }
    453     {
    454         //============================================================================
    455         //
    456         // Default precision for fragment shaders.
    457         //
    458         //============================================================================
    459        
    460         TString& s = FragmentDefaultPrecision;
    461        
    462         s.append(TString("precision mediump int;"));
    463         // No default precision for float in fragment shaders
    464         s.append(TString("\n"));
    465     }
    466 
    467     builtInStrings[EShLangFragment].push_back(FragmentDefaultPrecision);
    468     builtInStrings[EShLangFragment].push_back(BuiltInFunctions.c_str());
    469     builtInStrings[EShLangFragment].push_back(BuiltInFunctionsFragment);
    470     builtInStrings[EShLangFragment].push_back(StandardUniforms);
    471    
    472     builtInStrings[EShLangVertex].push_back(VertexDefaultPrecision);
    473     builtInStrings[EShLangVertex].push_back(BuiltInFunctions);
    474     builtInStrings[EShLangVertex].push_back(BuiltInFunctionsVertex);
    475     builtInStrings[EShLangVertex].push_back(StandardUniforms);
    476 }
    477 
    478 void TBuiltIns::initialize(const TBuiltInResource &resources)
    479 {
    480     TStringStream builtIns;
    481 
    482     // Implementation dependent constants
    483     builtIns << "const int gl_MaxVertexAttribs = " << resources.maxVertexAttribs << ";";
    484     builtIns << "const int gl_MaxVertexUniformVectors = " << resources.maxVertexUniformVectors << ";";
    485 
    486     builtIns << "const int gl_MaxVaryingVectors = " << resources.maxVaryingVectors << ";";
    487     builtIns << "const int gl_MaxVertexTextureImageUnits = " << resources.maxVertexTextureImageUnits << ";";
    488     builtIns << "const int gl_MaxCombinedTextureImageUnits = " << resources.maxCombinedTextureImageUnits << ";";
    489     builtIns << "const int gl_MaxTextureImageUnits = " << resources.maxTextureImageUnits << ";";
    490     builtIns << "const int gl_MaxFragmentUniformVectors = " << resources.maxFragmentUniformVectors << ";";
    491     builtIns << "const int gl_MaxDrawBuffers = " << resources.maxDrawBuffers << ";";
    492 
    493     builtInStrings[EShLangFragment].push_back(builtIns.str());
    494     builtInStrings[EShLangVertex].push_back(builtIns.str());
    495 }
    496 
    497 void IdentifyBuiltIns(EShLanguage language, TSymbolTable& symbolTable)
     507
     508    builtInStrings.push_back(BuiltInConstants(resources));
     509}
     510
     511void IdentifyBuiltIns(EShLanguage language, EShSpec spec, const TBuiltInResource& resources, TSymbolTable& symbolTable)
    498512{
    499513    //
     
    502516    //
    503517    switch(language) {
    504 
    505     case EShLangFragment: {
    506             symbolTable.insert(*new TVariable(NewPoolTString("gl_FragCoord"),                   TType(EbtFloat, EbpMedium, EvqFragCoord,   4)));
    507             symbolTable.insert(*new TVariable(NewPoolTString("gl_FrontFacing"),                 TType(EbtBool,  EbpUndefined, EvqFrontFacing, 1)));
    508             symbolTable.insert(*new TVariable(NewPoolTString("gl_FragColor"),                   TType(EbtFloat, EbpMedium, EvqFragColor,   4)));
    509             symbolTable.insert(*new TVariable(NewPoolTString("gl_FragData[gl_MaxDrawBuffers]"), TType(EbtFloat, EbpMedium, EvqFragData,    4)));
    510             symbolTable.insert(*new TVariable(NewPoolTString("gl_PointCoord"),                  TType(EbtFloat, EbpMedium, EvqPointCoord,  2)));
    511 
    512         }
     518    case EShLangFragment:
     519        symbolTable.insert(*new TVariable(NewPoolTString("gl_FragCoord"),                   TType(EbtFloat, EbpMedium, EvqFragCoord,   4)));
     520        symbolTable.insert(*new TVariable(NewPoolTString("gl_FrontFacing"),                 TType(EbtBool,  EbpUndefined, EvqFrontFacing, 1)));
     521        symbolTable.insert(*new TVariable(NewPoolTString("gl_FragColor"),                   TType(EbtFloat, EbpMedium, EvqFragColor,   4)));
     522        symbolTable.insert(*new TVariable(NewPoolTString("gl_FragData[gl_MaxDrawBuffers]"), TType(EbtFloat, EbpMedium, EvqFragData,    4)));
     523        symbolTable.insert(*new TVariable(NewPoolTString("gl_PointCoord"),                  TType(EbtFloat, EbpMedium, EvqPointCoord,  2)));
    513524        break;
    514525
     
    517528        symbolTable.insert(*new TVariable(NewPoolTString("gl_PointSize"),   TType(EbtFloat, EbpMedium, EvqPointSize,   1)));
    518529        break;
    519     default: break;
     530
     531    default: assert(false && "Language not supported");
    520532    }
    521533
     
    579591    symbolTable.relateToOperator("all",          EOpAll);
    580592
    581     switch(language)
    582     {
     593    // Map language-specific operators.
     594    switch(language) {
    583595    case EShLangVertex:
    584596        break;
    585597    case EShLangFragment:
    586     //  symbolTable.relateToOperator("dFdx",         EOpDPdx);     // OES_standard_derivatives extension
    587     //  symbolTable.relateToOperator("dFdy",         EOpDPdy);     // OES_standard_derivatives extension
    588     //  symbolTable.relateToOperator("fwidth",       EOpFwidth);   // OES_standard_derivatives extension
     598        //symbolTable.relateToOperator("dFdx",   EOpDPdx);    // OES_standard_derivatives extension
     599        //symbolTable.relateToOperator("dFdy",   EOpDPdy);    // OES_standard_derivatives extension
     600        //symbolTable.relateToOperator("fwidth", EOpFwidth);  // OES_standard_derivatives extension
    589601        break;
    590     default: assert(false && "Language not supported");
     602    default: break;
    591603    }
    592 }
    593 
    594 void IdentifyBuiltIns(EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources)
    595 {
    596     //
    597     // First, insert some special built-in variables that are not in
    598     // the built-in header files.
    599     //
     604
     605    // Finally add resource-specific variables.
    600606    switch(language) {
    601 
    602607    case EShLangFragment: {
    603608            // Set up gl_FragData.  The array size.
     
    607612        }
    608613        break;
    609 
    610614    default: break;
    611615    }
    612616}
    613617
    614 const char* GetPreprocessorBuiltinString()
    615 {
    616     static const char *PreprocessorBuiltinString = "";
    617 
    618     return PreprocessorBuiltinString;
    619 }
  • trunk/ANGLE/src/compiler/Initialize.h

    r64560 r64665  
    1818class TBuiltIns {
    1919public:
    20         POOL_ALLOCATOR_NEW_DELETE(GlobalPoolAllocator)
    21         void initialize();
    22         void initialize(const TBuiltInResource& resources);
    23         TBuiltInStrings* getBuiltInStrings() { return builtInStrings; }
     20    POOL_ALLOCATOR_NEW_DELETE(GlobalPoolAllocator)
     21
     22    void initialize(EShLanguage language, EShSpec spec, const TBuiltInResource& resources);
     23    const TBuiltInStrings& getBuiltInStrings() { return builtInStrings; }
     24
    2425protected:
    25         TBuiltInStrings builtInStrings[EShLangCount];
     26    TBuiltInStrings builtInStrings;
    2627};
    2728
    28 void IdentifyBuiltIns(EShLanguage, TSymbolTable&);
    29 void IdentifyBuiltIns(EShLanguage, TSymbolTable&, const TBuiltInResource &resources);
    30 bool GenerateBuiltInSymbolTable(const TBuiltInResource* resources, TInfoSink&, TSymbolTable*, EShLanguage language = EShLangCount);
    31 bool InitializeSymbolTable(TBuiltInStrings* BuiltInStrings, EShLanguage language, TInfoSink& infoSink, const TBuiltInResource *resources, TSymbolTable*);
    32 const char* GetPreprocessorBuiltinString();
     29void IdentifyBuiltIns(EShLanguage language, EShSpec spec, const TBuiltInResource& resources,
     30                      TSymbolTable& symbolTable);
     31
    3332extern "C" int InitPreprocessor(void);
    3433extern "C" int FinalizePreprocessor(void);
  • trunk/ANGLE/src/compiler/OutputGLSL.cpp

    r64560 r64665  
    392392    if (node->usesTernaryOperator())
    393393    {
    394         out << "(";
     394        // Notice two brackets at the beginning and end. The outer ones
     395        // encapsulate the whole ternary expression. This preserves the
     396        // order of precedence when ternary expressions are used in a
     397        // compound expression, i.e., c = 2 * (a < b ? 1 : 2).
     398        out << "((";
    395399        node->getCondition()->traverse(this);
    396400        out << ") ? (";
     
    398402        out << ") : (";
    399403        node->getFalseBlock()->traverse(this);
    400         out << ")";
     404        out << "))";
    401405    }
    402406    else
  • trunk/ANGLE/src/compiler/ShHandle.h

    r64560 r64665  
    1818
    1919#include "compiler/InfoSink.h"
     20#include "compiler/SymbolTable.h"
    2021
    2122class TCompiler;
     
    4142    virtual ~TCompiler() { }
    4243
    43     EShLanguage getLanguage() { return language; }
    44     EShSpec getSpec() { return spec; }
    45     virtual TInfoSink& getInfoSink() { return infoSink; }
     44    EShLanguage getLanguage() const { return language; }
     45    EShSpec getSpec() const { return spec; }
     46    TSymbolTable& getSymbolTable() { return symbolTable; }
     47    TInfoSink& getInfoSink() { return infoSink; }
    4648
    4749    virtual bool compile(TIntermNode* root) = 0;
     
    4951    virtual TCompiler* getAsCompiler() { return this; }
    5052
    51     TInfoSink infoSink;
    5253protected:
    5354    EShLanguage language;
    5455    EShSpec spec;
     56
     57    // Built-in symbol table for the given language, spec, and resources.
     58    // It is preserved from compile-to-compile.
     59    TSymbolTable symbolTable;
     60    // Output sink.
     61    TInfoSink infoSink;
    5562};
    5663
  • trunk/ANGLE/src/compiler/ShaderLang.cpp

    r64560 r64665  
    1818#include "compiler/SymbolTable.h"
    1919
    20 //
    21 // A symbol table for each language.  Each has a different
    22 // set of built-ins, and we want to preserve that from
    23 // compile to compile.
    24 //
    25 TSymbolTable* SymbolTables[EShLangCount];
    26 
    27 
    28 TPoolAllocator* PerProcessGPA = 0;
    29 //
    30 // This is the platform independent interface between an OGL driver
    31 // and the shading language compiler.
    32 //
    33 
    34 //
    35 // Driver must call this first, once, before doing any other
    36 // compiler operations.
    37 //
    38 int ShInitialize()
    39 {
    40     TInfoSink infoSink;
    41     bool ret = true;
    42 
    43     if (!InitProcess())
    44         return 0;
    45 
    46     // This method should be called once per process. If its called by multiple threads, then
    47     // we need to have thread synchronization code around the initialization of per process
    48     // global pool allocator
    49     if (!PerProcessGPA) {
    50         TPoolAllocator *builtInPoolAllocator = new TPoolAllocator(true);
    51         builtInPoolAllocator->push();
    52         TPoolAllocator* gPoolAllocator = &GlobalPoolAllocator;
    53         SetGlobalPoolAllocatorPtr(builtInPoolAllocator);
    54 
    55         TSymbolTable symTables[EShLangCount];
    56         GenerateBuiltInSymbolTable(0, infoSink, symTables);
    57 
    58         PerProcessGPA = new TPoolAllocator(true);
    59         PerProcessGPA->push();
    60         SetGlobalPoolAllocatorPtr(PerProcessGPA);
    61 
    62         SymbolTables[EShLangVertex] = new TSymbolTable;
    63         SymbolTables[EShLangVertex]->copyTable(symTables[EShLangVertex]);
    64         SymbolTables[EShLangFragment] = new TSymbolTable;
    65         SymbolTables[EShLangFragment]->copyTable(symTables[EShLangFragment]);
    66 
    67         SetGlobalPoolAllocatorPtr(gPoolAllocator);
    68 
    69         symTables[EShLangVertex].pop();
    70         symTables[EShLangFragment].pop();
    71 
    72         builtInPoolAllocator->popAll();
    73         delete builtInPoolAllocator;       
    74 
    75     }
    76 
    77     return ret ? 1 : 0;
    78 }
    79 
    80 //
    81 // Driver calls these to create and destroy compiler objects.
    82 //
    83 
    84 ShHandle ShConstructCompiler(EShLanguage language, EShSpec spec)
    85 {
    86     if (!InitThread())
    87         return 0;
    88 
    89     TShHandleBase* base = static_cast<TShHandleBase*>(ConstructCompiler(language, spec));
    90    
    91     return reinterpret_cast<void*>(base);
    92 }
    93 
    94 void ShDestruct(ShHandle handle)
    95 {
    96     if (handle == 0)
    97         return;
    98 
    99     TShHandleBase* base = static_cast<TShHandleBase*>(handle);
    100 
    101     if (base->getAsCompiler())
    102         DeleteCompiler(base->getAsCompiler());
    103 }
    104 
    105 //
    106 // Cleanup symbol tables
    107 //
    108 int ShFinalize()
    109 
    110   if (PerProcessGPA) {
    111     PerProcessGPA->popAll();
    112     delete PerProcessGPA;
    113     PerProcessGPA = 0;
    114   }
    115   for (int i = 0; i < EShLangCount; ++i) {
    116     delete SymbolTables[i];
    117     SymbolTables[i] = 0;
    118   }
    119   return 1;
    120 }
    121 
    122 bool GenerateBuiltInSymbolTable(const TBuiltInResource* resources, TInfoSink& infoSink, TSymbolTable* symbolTables, EShLanguage language)
    123 {
    124     TBuiltIns builtIns;
    125    
    126         if (resources) {
    127                 builtIns.initialize(*resources);
    128                 InitializeSymbolTable(builtIns.getBuiltInStrings(), language, infoSink, resources, symbolTables);
    129         } else {
    130                 builtIns.initialize();
    131                 InitializeSymbolTable(builtIns.getBuiltInStrings(), EShLangVertex, infoSink, resources, symbolTables);
    132                 InitializeSymbolTable(builtIns.getBuiltInStrings(), EShLangFragment, infoSink, resources, symbolTables);
    133         }
    134 
    135     return true;
    136 }
    137 
    138 bool InitializeSymbolTable(TBuiltInStrings* BuiltInStrings, EShLanguage language, TInfoSink& infoSink, const TBuiltInResource* resources, TSymbolTable* symbolTables)
    139 {
    140     TIntermediate intermediate(infoSink);       
    141     TSymbolTable* symbolTable;
    142        
    143         if (resources)
    144                 symbolTable = symbolTables;
    145         else
    146                 symbolTable = &symbolTables[language];
    147 
    148     // TODO(alokp): Investigate if a parse-context is necessary here and
    149     // if symbol-table can be shared between GLES2 and WebGL specs.
    150     TParseContext parseContext(*symbolTable, intermediate, language, EShSpecGLES2, infoSink);
     20static bool InitializeSymbolTable(
     21        const TBuiltInStrings& builtInStrings,
     22        EShLanguage language, EShSpec spec, const TBuiltInResource& resources,
     23        TInfoSink& infoSink, TSymbolTable& symbolTable)
     24{
     25    TIntermediate intermediate(infoSink);
     26    TParseContext parseContext(symbolTable, intermediate, language, spec, infoSink);
    15127
    15228    GlobalParseContext = &parseContext;
    153    
     29
    15430    setInitialState();
    15531
    156     assert(symbolTable->isEmpty() || symbolTable->atSharedBuiltInLevel());
    157        
     32    assert(symbolTable.isEmpty());       
    15833    //
    15934    // Parse the built-ins.  This should only happen once per
     
    16439    // are preserved, and the test for an empty table fails.
    16540    //
    166 
    167     symbolTable->push();
     41    symbolTable.push();
    16842   
    16943    //Initialize the Preprocessor
    170     int ret = InitPreprocessor();
    171     if (ret) {
     44    if (InitPreprocessor())
     45    {
    17246        infoSink.info.message(EPrefixInternalError,  "Unable to intialize the Preprocessor");
    17347        return false;
    17448    }
    175    
    176     for (TBuiltInStrings::iterator i  = BuiltInStrings[parseContext.language].begin();
    177                                     i != BuiltInStrings[parseContext.language].end();
    178                                     ++i) {
     49
     50    for (TBuiltInStrings::const_iterator i = builtInStrings.begin(); i != builtInStrings.end(); ++i)
     51    {
    17952        const char* builtInShaders[1];
    18053        int builtInLengths[1];
     
    18356        builtInLengths[0] = (int) (*i).size();
    18457
    185         if (PaParseStrings(const_cast<char**>(builtInShaders), builtInLengths, 1, parseContext) != 0) {
     58        if (PaParseStrings(const_cast<char**>(builtInShaders), builtInLengths, 1, parseContext) != 0)
     59        {
    18660            infoSink.info.message(EPrefixInternalError, "Unable to parse built-ins");
    18761            return false;
     
    18963    }
    19064
    191         if (resources) {
    192                 IdentifyBuiltIns(parseContext.language, *symbolTable, *resources);
    193         } else {                                                                           
    194                 IdentifyBuiltIns(parseContext.language, *symbolTable);
    195         }
     65    IdentifyBuiltIns(language, spec, resources, symbolTable);
    19666
    19767    FinalizePreprocessor();
    19868
    19969    return true;
     70}
     71
     72static bool GenerateBuiltInSymbolTable(
     73        EShLanguage language, EShSpec spec, const TBuiltInResource& resources,
     74        TInfoSink& infoSink, TSymbolTable& symbolTable)
     75{
     76    TBuiltIns builtIns;
     77
     78    builtIns.initialize(language, spec, resources);
     79    return InitializeSymbolTable(builtIns.getBuiltInStrings(), language, spec, resources, infoSink, symbolTable);
     80}
     81
     82//
     83// This is the platform independent interface between an OGL driver
     84// and the shading language compiler.
     85//
     86
     87//
     88// Driver must call this first, once, before doing any other
     89// compiler operations.
     90//
     91int ShInitialize()
     92{
     93    bool ret = InitProcess();
     94
     95    return ret ? 1 : 0;
     96}
     97
     98//
     99// Driver calls these to create and destroy compiler objects.
     100//
     101
     102ShHandle ShConstructCompiler(EShLanguage language, EShSpec spec, const TBuiltInResource* resources)
     103{
     104    if (!InitThread())
     105        return 0;
     106
     107    TShHandleBase* base = static_cast<TShHandleBase*>(ConstructCompiler(language, spec));
     108    TCompiler* compiler = base->getAsCompiler();
     109    if (compiler == 0)
     110        return 0;
     111
     112    // Generate built-in symbol table.
     113    if (!GenerateBuiltInSymbolTable(language, spec, *resources, compiler->getInfoSink(), compiler->getSymbolTable())) {
     114        ShDestruct(base);
     115        return 0;
     116    }
     117
     118    return reinterpret_cast<void*>(base);
     119}
     120
     121void ShDestruct(ShHandle handle)
     122{
     123    if (handle == 0)
     124        return;
     125
     126    TShHandleBase* base = static_cast<TShHandleBase*>(handle);
     127
     128    if (base->getAsCompiler())
     129        DeleteCompiler(base->getAsCompiler());
     130}
     131
     132//
     133// Cleanup symbol tables
     134//
     135int ShFinalize()
     136{
     137    return 1;
    200138}
    201139
     
    212150    const int numStrings,
    213151    const EShOptimizationLevel optLevel,
    214     const TBuiltInResource* resources,
    215152    int debugOptions
    216153    )
     
    228165   
    229166    GlobalPoolAllocator.push();
    230     TInfoSink& infoSink = compiler->infoSink;
     167    TInfoSink& infoSink = compiler->getInfoSink();
    231168    infoSink.info.erase();
    232169    infoSink.debug.erase();
     
    237174
    238175    TIntermediate intermediate(infoSink);
    239     TSymbolTable symbolTable(*SymbolTables[compiler->getLanguage()]);
    240    
    241     GenerateBuiltInSymbolTable(resources, infoSink, &symbolTable, compiler->getLanguage());
     176    TSymbolTable& symbolTable = compiler->getSymbolTable();
    242177
    243178    TParseContext parseContext(symbolTable, intermediate, compiler->getLanguage(), compiler->getSpec(), infoSink);
    244179    parseContext.initializeExtensionBehavior();
    245 
    246180    GlobalParseContext = &parseContext;
    247     
     181 
    248182    setInitialState();
    249183
    250     InitPreprocessor();   
     184    InitPreprocessor();
    251185    //
    252186    // Parse the application's shaders.  All the following symbol table
     
    255189    //
    256190    bool success = true;
    257    
     191
    258192    symbolTable.push();
    259193    if (!symbolTable.atGlobalLevel())
     
    302236    // throwing away all but the built-ins.
    303237    //
    304     while (! symbolTable.atSharedBuiltInLevel())
     238    while (!symbolTable.atBuiltInLevel())
    305239        symbolTable.pop();
    306240
  • trunk/ANGLE/src/compiler/SymbolTable.h

    r64560 r64665  
    3232
    3333#include <assert.h>
    34 #include "compiler/Common.h"
     34
     35#include "compiler/InfoSink.h"
    3536#include "compiler/intermediate.h"
    36 #include "compiler/InfoSink.h"
    3737
    3838//
     
    240240    }
    241241
    242     TSymbolTable(TSymbolTable& symTable)
    243     {
    244         table.push_back(symTable.table[0]);
    245         precisionStack.push_back( symTable.precisionStack[0] );
    246         uniqueId = symTable.uniqueId;
    247     }
    248 
    249242    ~TSymbolTable()
    250243    {
     
    260253    //
    261254    bool isEmpty() { return table.size() == 0; }
    262     bool atBuiltInLevel() { return atSharedBuiltInLevel() || atDynamicBuiltInLevel(); }
    263     bool atSharedBuiltInLevel() { return table.size() == 1; }   
    264     bool atGlobalLevel() { return table.size() <= 3; }
     255    bool atBuiltInLevel() { return table.size() == 1; }
     256    bool atGlobalLevel() { return table.size() <= 2; }
    265257    void push()
    266     { 
     258    {
    267259        table.push_back(new TSymbolTableLevel);
    268260        precisionStack.push_back( PrecisionStackLevel() );
     
    298290    }
    299291
    300     TSymbolTableLevel* getGlobalLevel() { assert(table.size() >= 3); return table[2]; }
     292    TSymbolTableLevel* getGlobalLevel() { assert(table.size() >= 2); return table[1]; }
    301293    void relateToOperator(const char* name, TOperator op) { table[0]->relateToOperator(name, op); }
    302294    int getMaxSymbolId() { return uniqueId; }
     
    330322protected:   
    331323    int currentLevel() const { return static_cast<int>(table.size()) - 1; }
    332     bool atDynamicBuiltInLevel() { return table.size() == 2; }
    333324
    334325    std::vector<TSymbolTableLevel*> table;
  • trunk/ANGLE/src/libGLESv2/Shader.cpp

    r64560 r64665  
    3535        if (result)
    3636        {
    37             mFragmentCompiler = ShConstructCompiler(EShLangFragment, EShSpecGLES2);
    38             mVertexCompiler = ShConstructCompiler(EShLangVertex, EShSpecGLES2);
     37            TBuiltInResource resources;
     38            resources.maxVertexAttribs = MAX_VERTEX_ATTRIBS;
     39            resources.maxVertexUniformVectors = MAX_VERTEX_UNIFORM_VECTORS;
     40            resources.maxVaryingVectors = MAX_VARYING_VECTORS;
     41            resources.maxVertexTextureImageUnits = MAX_VERTEX_TEXTURE_IMAGE_UNITS;
     42            resources.maxCombinedTextureImageUnits = MAX_COMBINED_TEXTURE_IMAGE_UNITS;
     43            resources.maxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS;
     44            resources.maxFragmentUniformVectors = MAX_FRAGMENT_UNIFORM_VECTORS;
     45            resources.maxDrawBuffers = MAX_DRAW_BUFFERS;
     46
     47            mFragmentCompiler = ShConstructCompiler(EShLangFragment, EShSpecGLES2, &resources);
     48            mVertexCompiler = ShConstructCompiler(EShLangVertex, EShSpecGLES2, &resources);
    3949        }
    4050    }
     
    268278    mInfoLog = NULL;
    269279
    270     TBuiltInResource resources;
    271 
    272     resources.maxVertexAttribs = MAX_VERTEX_ATTRIBS;
    273     resources.maxVertexUniformVectors = MAX_VERTEX_UNIFORM_VECTORS;
    274     resources.maxVaryingVectors = MAX_VARYING_VECTORS;
    275     resources.maxVertexTextureImageUnits = MAX_VERTEX_TEXTURE_IMAGE_UNITS;
    276     resources.maxCombinedTextureImageUnits = MAX_COMBINED_TEXTURE_IMAGE_UNITS;
    277     resources.maxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS;
    278     resources.maxFragmentUniformVectors = MAX_FRAGMENT_UNIFORM_VECTORS;
    279     resources.maxDrawBuffers = MAX_DRAW_BUFFERS;
    280 
    281     int result = ShCompile(compiler, &mSource, 1, EShOptNone, &resources, EDebugOpNone);
     280    int result = ShCompile(compiler, &mSource, 1, EShOptNone, EDebugOpNone);
    282281    const char *obj = ShGetObjectCode(compiler);
    283282    const char *info = ShGetInfoLog(compiler);
Note: See TracChangeset for help on using the changeset viewer.