14f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 28cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved. 34f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be 44f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// found in the LICENSE file. 54f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 64f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 74f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 84f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Create strings that declare built-in definitions, add built-ins that 94f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// cannot be expressed in the files, and establish mappings between 104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// built-in functions and operators. 114f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 13bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com#include "compiler/Initialize.h" 14bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com 15bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com#include "compiler/intermediate.h" 164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 17d5c6abc474d0f7ec001ef2749dcaa0e958eeb4ddJamie Madillvoid InsertBuiltInFunctions(ShShaderType type, ShShaderSpec spec, const ShBuiltInResources &resources, TSymbolTable &symbolTable) 184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 198cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TType *float1 = new TType(EbtFloat, EbpUndefined, EvqGlobal, 1); 208cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TType *float2 = new TType(EbtFloat, EbpUndefined, EvqGlobal, 2); 218cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TType *float3 = new TType(EbtFloat, EbpUndefined, EvqGlobal, 3); 228cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TType *float4 = new TType(EbtFloat, EbpUndefined, EvqGlobal, 4); 238cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens 248cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TType *int2 = new TType(EbtInt, EbpUndefined, EvqGlobal, 2); 258cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TType *int3 = new TType(EbtInt, EbpUndefined, EvqGlobal, 3); 268cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TType *int4 = new TType(EbtInt, EbpUndefined, EvqGlobal, 4); 27e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 280578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com // 29e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // Angle and Trigonometric Functions. 300578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com // 31cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "radians", float1); 32cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "radians", float2); 33cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "radians", float3); 34cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "radians", float4); 35cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 36cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "degrees", float1); 37cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "degrees", float2); 38cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "degrees", float3); 39cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "degrees", float4); 40cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 41cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "sin", float1); 42cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "sin", float2); 43cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "sin", float3); 44cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "sin", float4); 45cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 46cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "cos", float1); 47cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "cos", float2); 48cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "cos", float3); 49cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "cos", float4); 50cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 51cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "tan", float1); 52cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "tan", float2); 53cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "tan", float3); 54cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "tan", float4); 55cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 56cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "asin", float1); 57cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "asin", float2); 58cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "asin", float3); 59cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "asin", float4); 60cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 61cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "acos", float1); 62cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "acos", float2); 63cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "acos", float3); 64cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "acos", float4); 65cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 66cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "atan", float1, float1); 67cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "atan", float2, float2); 68cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "atan", float3, float3); 69cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "atan", float4, float4); 70cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 71cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "atan", float1); 72cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "atan", float2); 73cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "atan", float3); 74cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "atan", float4); 750578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com 76e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // 77e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // Exponential Functions. 78e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // 79cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "pow", float1, float1); 80cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "pow", float2, float2); 81cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "pow", float3, float3); 82cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "pow", float4, float4); 83cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 84cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "exp", float1); 85cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "exp", float2); 86cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "exp", float3); 87cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "exp", float4); 88cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 89cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "log", float1); 90cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "log", float2); 91cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "log", float3); 92cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "log", float4); 93cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 94cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "exp2", float1); 95cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "exp2", float2); 96cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "exp2", float3); 97cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "exp2", float4); 98cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 99cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "log2", float1); 100cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "log2", float2); 101cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "log2", float3); 102cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "log2", float4); 103cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 104cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "sqrt", float1); 105cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "sqrt", float2); 106cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "sqrt", float3); 107cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "sqrt", float4); 108cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 109cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "inversesqrt", float1); 110cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "inversesqrt", float2); 111cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "inversesqrt", float3); 112cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "inversesqrt", float4); 113e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 114e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // 115e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // Common Functions. 116e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // 117cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "abs", float1); 118cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "abs", float2); 119cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "abs", float3); 120cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "abs", float4); 121cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 122cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "sign", float1); 123cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "sign", float2); 124cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "sign", float3); 125cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "sign", float4); 126cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 127cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "floor", float1); 128cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "floor", float2); 129cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "floor", float3); 130cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "floor", float4); 131cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 132cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "ceil", float1); 133cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "ceil", float2); 134cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "ceil", float3); 135cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "ceil", float4); 136cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 137cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "fract", float1); 138cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "fract", float2); 139cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "fract", float3); 140cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "fract", float4); 141cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 142cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "mod", float1, float1); 143cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "mod", float2, float1); 144cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "mod", float3, float1); 145cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "mod", float4, float1); 146cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "mod", float2, float2); 147cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "mod", float3, float3); 148cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "mod", float4, float4); 149cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 150cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "min", float1, float1); 151cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "min", float2, float1); 152cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "min", float3, float1); 153cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "min", float4, float1); 154cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "min", float2, float2); 155cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "min", float3, float3); 156cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "min", float4, float4); 157cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 158cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "max", float1, float1); 159cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "max", float2, float1); 160cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "max", float3, float1); 161cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "max", float4, float1); 162cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "max", float2, float2); 163cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "max", float3, float3); 164cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "max", float4, float4); 165cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 166cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "clamp", float1, float1, float1); 167cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "clamp", float2, float1, float1); 168cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "clamp", float3, float1, float1); 169cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "clamp", float4, float1, float1); 170cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "clamp", float2, float2, float2); 171cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "clamp", float3, float3, float3); 172cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "clamp", float4, float4, float4); 173cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 174cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "mix", float1, float1, float1); 175cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "mix", float2, float2, float1); 176cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "mix", float3, float3, float1); 177cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "mix", float4, float4, float1); 178cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "mix", float2, float2, float2); 179cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "mix", float3, float3, float3); 180cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "mix", float4, float4, float4); 181cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 182cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "step", float1, float1); 183cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "step", float2, float2); 184cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "step", float3, float3); 185cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "step", float4, float4); 186cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "step", float1, float2); 187cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "step", float1, float3); 188cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "step", float1, float4); 189cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 190cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "smoothstep", float1, float1, float1); 191cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "smoothstep", float2, float2, float2); 192cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "smoothstep", float3, float3, float3); 193cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "smoothstep", float4, float4, float4); 194cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "smoothstep", float1, float1, float2); 195cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "smoothstep", float1, float1, float3); 196cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "smoothstep", float1, float1, float4); 197e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 198e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // 199e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // Geometric Functions. 200e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // 201cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "length", float1); 202cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "length", float2); 203cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "length", float3); 204cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "length", float4); 205cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 206cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "distance", float1, float1); 207cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "distance", float2, float2); 208cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "distance", float3, float3); 209cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "distance", float4, float4); 210cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 211cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "dot", float1, float1); 212cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "dot", float2, float2); 213cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "dot", float3, float3); 214cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "dot", float4, float4); 215cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 216cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "cross", float3, float3); 217cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "normalize", float1); 218cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "normalize", float2); 219cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "normalize", float3); 220cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "normalize", float4); 221cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 222cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "faceforward", float1, float1, float1); 223cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "faceforward", float2, float2, float2); 224cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "faceforward", float3, float3, float3); 225cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "faceforward", float4, float4, float4); 226cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 227cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "reflect", float1, float1); 228cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "reflect", float2, float2); 229cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "reflect", float3, float3); 230cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "reflect", float4, float4); 231cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 232cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "refract", float1, float1, float1); 233cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "refract", float2, float2, float1); 234cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "refract", float3, float3, float1); 235cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "refract", float4, float4, float1); 2368cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens 2378cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TType *mat2 = new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, true); 2388cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TType *mat3 = new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, true); 2398cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TType *mat4 = new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, true); 240e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 241e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // 242e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // Matrix Functions. 243e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // 244cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(mat2, "matrixCompMult", mat2, mat2); 245cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(mat3, "matrixCompMult", mat3, mat3); 246cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(mat4, "matrixCompMult", mat4, mat4); 2478cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens 2488cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TType *bool1 = new TType(EbtBool, EbpUndefined, EvqGlobal, 1); 2498cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TType *bool2 = new TType(EbtBool, EbpUndefined, EvqGlobal, 2); 2508cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TType *bool3 = new TType(EbtBool, EbpUndefined, EvqGlobal, 3); 2518cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TType *bool4 = new TType(EbtBool, EbpUndefined, EvqGlobal, 4); 252e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 253e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // 254e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // Vector relational functions. 255e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // 256cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool2, "lessThan", float2, float2); 257cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool3, "lessThan", float3, float3); 258cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool4, "lessThan", float4, float4); 259e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 260cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool2, "lessThan", int2, int2); 261cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool3, "lessThan", int3, int3); 262cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool4, "lessThan", int4, int4); 263e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 264cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool2, "lessThanEqual", float2, float2); 265cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool3, "lessThanEqual", float3, float3); 266cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool4, "lessThanEqual", float4, float4); 267e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 268cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool2, "lessThanEqual", int2, int2); 269cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool3, "lessThanEqual", int3, int3); 270cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool4, "lessThanEqual", int4, int4); 271e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 272cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool2, "greaterThan", float2, float2); 273cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool3, "greaterThan", float3, float3); 274cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool4, "greaterThan", float4, float4); 275e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 276cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool2, "greaterThan", int2, int2); 277cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool3, "greaterThan", int3, int3); 278cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool4, "greaterThan", int4, int4); 279e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 280cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool2, "greaterThanEqual", float2, float2); 281cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool3, "greaterThanEqual", float3, float3); 282cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool4, "greaterThanEqual", float4, float4); 283e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 284cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool2, "greaterThanEqual", int2, int2); 285cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool3, "greaterThanEqual", int3, int3); 286cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool4, "greaterThanEqual", int4, int4); 287e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 288cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool2, "equal", float2, float2); 289cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool3, "equal", float3, float3); 290cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool4, "equal", float4, float4); 291e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 292cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool2, "equal", int2, int2); 293cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool3, "equal", int3, int3); 294cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool4, "equal", int4, int4); 295e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 296cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool2, "equal", bool2, bool2); 297cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool3, "equal", bool3, bool3); 298cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool4, "equal", bool4, bool4); 299e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 300cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool2, "notEqual", float2, float2); 301cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool3, "notEqual", float3, float3); 302cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool4, "notEqual", float4, float4); 303e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 304cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool2, "notEqual", int2, int2); 305cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool3, "notEqual", int3, int3); 306cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool4, "notEqual", int4, int4); 307e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 308cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool2, "notEqual", bool2, bool2); 309cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool3, "notEqual", bool3, bool3); 310cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool4, "notEqual", bool4, bool4); 311e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 312cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool1, "any", bool2); 313cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool1, "any", bool3); 314cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool1, "any", bool4); 315e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 316cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool1, "all", bool2); 317cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool1, "all", bool3); 318cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool1, "all", bool4); 319e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 320cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool2, "not", bool2); 321cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool3, "not", bool3); 322cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(bool4, "not", bool4); 323205fef3389c81637f689585431273cf83af02e94kbr@chromium.org 3248cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TType *sampler2D = new TType(EbtSampler2D, EbpUndefined, EvqGlobal, 1); 3258cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TType *samplerCube = new TType(EbtSamplerCube, EbpUndefined, EvqGlobal, 1); 326205fef3389c81637f689585431273cf83af02e94kbr@chromium.org 327205fef3389c81637f689585431273cf83af02e94kbr@chromium.org // 328cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens // Texture Functions for GLSL ES 1.0 329e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // 330cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "texture2D", sampler2D, float2); 331cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "texture2DProj", sampler2D, float3); 332cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "texture2DProj", sampler2D, float4); 333cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "textureCube", samplerCube, float3); 3344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 3358cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens if (resources.OES_EGL_image_external) 3368cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens { 3378cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TType *samplerExternalOES = new TType(EbtSamplerExternalOES, EbpUndefined, EvqGlobal, 1); 338e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 339cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "texture2D", samplerExternalOES, float2); 340cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "texture2DProj", samplerExternalOES, float3); 341cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "texture2DProj", samplerExternalOES, float4); 3428cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens } 3434e4facd4a1120f77e35b53cd4ba7d5a8adefddcfalokp@chromium.org 3448cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens if (resources.ARB_texture_rectangle) 3458cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens { 3468cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TType *sampler2DRect = new TType(EbtSampler2DRect, EbpUndefined, EvqGlobal, 1); 3474e4facd4a1120f77e35b53cd4ba7d5a8adefddcfalokp@chromium.org 348cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "texture2DRect", sampler2DRect, float2); 349cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "texture2DRectProj", sampler2DRect, float3); 350cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "texture2DRectProj", sampler2DRect, float4); 35106098890abb48bf02b1fc77c67ed373ce2268151alokp@chromium.org } 352e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 353cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens if (type == SH_FRAGMENT_SHADER) 3548cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens { 355cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "texture2D", sampler2D, float2, float1); 356cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "texture2DProj", sampler2D, float3, float1); 357cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "texture2DProj", sampler2D, float4, float1); 358cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "textureCube", samplerCube, float3, float1); 3598cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens 3608cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens if (resources.OES_standard_derivatives) 3618cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens { 362cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "dFdx", float1); 363cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "dFdx", float2); 364cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "dFdx", float3); 365cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "dFdx", float4); 3668cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens 367cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "dFdy", float1); 368cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "dFdy", float2); 369cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "dFdy", float3); 370cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "dFdy", float4); 371cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens 372cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float1, "fwidth", float1); 373cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float2, "fwidth", float2); 374cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float3, "fwidth", float3); 375cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "fwidth", float4); 3768cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens } 3778cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens } 3784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 3798cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens if(type == SH_VERTEX_SHADER) 3808cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens { 381cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "texture2DLod", sampler2D, float2, float1); 382cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "texture2DProjLod", sampler2D, float3, float1); 383cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "texture2DProjLod", sampler2D, float4, float1); 384cc89bc1202c5be25ba079dfb8ad03a8d48e6a5e2Nicolas Capens symbolTable.insertBuiltIn(float4, "textureCubeLod", samplerCube, float3, float1); 3858cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens } 386e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 387e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // 388e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // Depth range in window coordinates 389e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // 3900600ff1a7cf112aba06f71120b5bef88bf906351Jamie Madill TFieldList *fields = NewPoolTFieldList(); 3910600ff1a7cf112aba06f71120b5bef88bf906351Jamie Madill TField *near = new TField(new TType(EbtFloat, EbpHigh, EvqGlobal, 1), NewPoolTString("near")); 3920600ff1a7cf112aba06f71120b5bef88bf906351Jamie Madill TField *far = new TField(new TType(EbtFloat, EbpHigh, EvqGlobal, 1), NewPoolTString("far")); 3930600ff1a7cf112aba06f71120b5bef88bf906351Jamie Madill TField *diff = new TField(new TType(EbtFloat, EbpHigh, EvqGlobal, 1), NewPoolTString("diff")); 3940600ff1a7cf112aba06f71120b5bef88bf906351Jamie Madill fields->push_back(near); 3950600ff1a7cf112aba06f71120b5bef88bf906351Jamie Madill fields->push_back(far); 3960600ff1a7cf112aba06f71120b5bef88bf906351Jamie Madill fields->push_back(diff); 3970600ff1a7cf112aba06f71120b5bef88bf906351Jamie Madill TStructure *depthRangeStruct = new TStructure(NewPoolTString("gl_DepthRangeParameters"), fields); 3980600ff1a7cf112aba06f71120b5bef88bf906351Jamie Madill TVariable *depthRangeParameters = new TVariable(&depthRangeStruct->name(), depthRangeStruct, true); 3998cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens symbolTable.insert(*depthRangeParameters); 4000600ff1a7cf112aba06f71120b5bef88bf906351Jamie Madill TVariable *depthRange = new TVariable(NewPoolTString("gl_DepthRange"), TType(depthRangeStruct)); 4018cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens depthRange->setQualifier(EvqUniform); 4028cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens symbolTable.insert(*depthRange); 403e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 4048cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens // 4058cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens // Implementation dependent built-in constants. 4068cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens // 4078cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens symbolTable.insertConstInt("gl_MaxVertexAttribs", resources.MaxVertexAttribs); 4088cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens symbolTable.insertConstInt("gl_MaxVertexUniformVectors", resources.MaxVertexUniformVectors); 4098cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens symbolTable.insertConstInt("gl_MaxVaryingVectors", resources.MaxVaryingVectors); 4108cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens symbolTable.insertConstInt("gl_MaxVertexTextureImageUnits", resources.MaxVertexTextureImageUnits); 4118cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens symbolTable.insertConstInt("gl_MaxCombinedTextureImageUnits", resources.MaxCombinedTextureImageUnits); 4128cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens symbolTable.insertConstInt("gl_MaxTextureImageUnits", resources.MaxTextureImageUnits); 4138cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens symbolTable.insertConstInt("gl_MaxFragmentUniformVectors", resources.MaxFragmentUniformVectors); 414430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com 415430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com if (spec != SH_CSS_SHADERS_SPEC) 416d11ef0592c3ee151dd39ce8e507f8176e7178a77shannon.woods%transgaming.com@gtempaccount.com { 417d5c6abc474d0f7ec001ef2749dcaa0e958eeb4ddJamie Madill symbolTable.insertConstInt("gl_MaxDrawBuffers", resources.MaxDrawBuffers); 418e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org } 419e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org} 420e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 4214888ceb6681c3668d3afcbdafdbe2b7efdaa3d04alokp@chromium.orgvoid IdentifyBuiltIns(ShShaderType type, ShShaderSpec spec, 4228cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens const ShBuiltInResources &resources, 4238cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens TSymbolTable &symbolTable) 4244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 4250578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com // 4260578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com // First, insert some special built-in variables that are not in 4270578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com // the built-in header files. 4280578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com // 4294888ceb6681c3668d3afcbdafdbe2b7efdaa3d04alokp@chromium.org switch(type) { 4304888ceb6681c3668d3afcbdafdbe2b7efdaa3d04alokp@chromium.org case SH_FRAGMENT_SHADER: 431430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com symbolTable.insert(*new TVariable(NewPoolTString("gl_FragCoord"), TType(EbtFloat, EbpMedium, EvqFragCoord, 4))); 432430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com symbolTable.insert(*new TVariable(NewPoolTString("gl_FrontFacing"), TType(EbtBool, EbpUndefined, EvqFrontFacing, 1))); 433430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com symbolTable.insert(*new TVariable(NewPoolTString("gl_PointCoord"), TType(EbtFloat, EbpMedium, EvqPointCoord, 2))); 434430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com 435430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com // 436430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com // In CSS Shaders, gl_FragColor, gl_FragData, and gl_MaxDrawBuffers are not available. 437430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com // Instead, css_MixColor and css_ColorMatrix are available. 438430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com // 439430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com if (spec != SH_CSS_SHADERS_SPEC) { 440430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com symbolTable.insert(*new TVariable(NewPoolTString("gl_FragColor"), TType(EbtFloat, EbpMedium, EvqFragColor, 4))); 441430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com symbolTable.insert(*new TVariable(NewPoolTString("gl_FragData[gl_MaxDrawBuffers]"), TType(EbtFloat, EbpMedium, EvqFragData, 4))); 44238fee6f1956ec0c5cb1eecfb2ae165f378cfbed9bajones@chromium.org if (resources.EXT_frag_depth) { 44338fee6f1956ec0c5cb1eecfb2ae165f378cfbed9bajones@chromium.org symbolTable.insert(*new TVariable(NewPoolTString("gl_FragDepthEXT"), TType(EbtFloat, resources.FragmentPrecisionHigh ? EbpHigh : EbpMedium, EvqFragDepth, 1))); 44438fee6f1956ec0c5cb1eecfb2ae165f378cfbed9bajones@chromium.org symbolTable.relateToExtension("gl_FragDepthEXT", "GL_EXT_frag_depth"); 44538fee6f1956ec0c5cb1eecfb2ae165f378cfbed9bajones@chromium.org } 446430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com } else { 447430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com symbolTable.insert(*new TVariable(NewPoolTString("css_MixColor"), TType(EbtFloat, EbpMedium, EvqGlobal, 4))); 448430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com symbolTable.insert(*new TVariable(NewPoolTString("css_ColorMatrix"), TType(EbtFloat, EbpMedium, EvqGlobal, 4, true))); 449430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com } 450430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com 4510578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com break; 4520578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com 4534888ceb6681c3668d3afcbdafdbe2b7efdaa3d04alokp@chromium.org case SH_VERTEX_SHADER: 454a5d7623d5974736daee11c08dc2d705194f3a89fdaniel@transgaming.com symbolTable.insert(*new TVariable(NewPoolTString("gl_Position"), TType(EbtFloat, EbpHigh, EvqPosition, 4))); 455a5d7623d5974736daee11c08dc2d705194f3a89fdaniel@transgaming.com symbolTable.insert(*new TVariable(NewPoolTString("gl_PointSize"), TType(EbtFloat, EbpMedium, EvqPointSize, 1))); 4560578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com break; 457e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 458e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org default: assert(false && "Language not supported"); 4590578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com } 4600578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com 4610578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com // 4620578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com // Next, identify which built-ins from the already loaded headers have 4630578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com // a mapping to an operator. Those that are not identified as such are 4640578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com // expected to be resolved through a library of functions, versus as 4650578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com // operations. 4660578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com // 4670578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("matrixCompMult", EOpMul); 4680578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com 4690578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("equal", EOpVectorEqual); 4700578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("notEqual", EOpVectorNotEqual); 4710578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("lessThan", EOpLessThan); 4720578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("greaterThan", EOpGreaterThan); 4730578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("lessThanEqual", EOpLessThanEqual); 4740578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("greaterThanEqual", EOpGreaterThanEqual); 4750578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com 4760578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("radians", EOpRadians); 4770578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("degrees", EOpDegrees); 4780578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("sin", EOpSin); 4790578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("cos", EOpCos); 4800578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("tan", EOpTan); 4810578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("asin", EOpAsin); 4820578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("acos", EOpAcos); 4830578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("atan", EOpAtan); 4840578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com 4850578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("pow", EOpPow); 4860578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("exp2", EOpExp2); 4870578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("log", EOpLog); 4880578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("exp", EOpExp); 4890578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("log2", EOpLog2); 4900578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("sqrt", EOpSqrt); 4910578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("inversesqrt", EOpInverseSqrt); 4920578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com 4930578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("abs", EOpAbs); 4940578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("sign", EOpSign); 4950578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("floor", EOpFloor); 4960578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("ceil", EOpCeil); 4970578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("fract", EOpFract); 4980578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("mod", EOpMod); 4990578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("min", EOpMin); 5000578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("max", EOpMax); 5010578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("clamp", EOpClamp); 5020578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("mix", EOpMix); 5030578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("step", EOpStep); 5040578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("smoothstep", EOpSmoothStep); 5050578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com 5060578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("length", EOpLength); 5070578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("distance", EOpDistance); 5080578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("dot", EOpDot); 5090578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("cross", EOpCross); 5100578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("normalize", EOpNormalize); 5110578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("faceforward", EOpFaceForward); 5120578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("reflect", EOpReflect); 5130578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("refract", EOpRefract); 5140578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com 5150578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("any", EOpAny); 5160578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.relateToOperator("all", EOpAll); 5178cf3a7ec683903e3c7425c563fd77e620e7a45a2Nicolas Capens symbolTable.relateToOperator("not", EOpVectorLogicalNot); 5180578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com 519e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // Map language-specific operators. 5204888ceb6681c3668d3afcbdafdbe2b7efdaa3d04alokp@chromium.org switch(type) { 5214888ceb6681c3668d3afcbdafdbe2b7efdaa3d04alokp@chromium.org case SH_VERTEX_SHADER: 52258e54298613fdba6967399a66c453385e44c7db2alokp@chromium.org break; 5234888ceb6681c3668d3afcbdafdbe2b7efdaa3d04alokp@chromium.org case SH_FRAGMENT_SHADER: 52406098890abb48bf02b1fc77c67ed373ce2268151alokp@chromium.org if (resources.OES_standard_derivatives) { 52506098890abb48bf02b1fc77c67ed373ce2268151alokp@chromium.org symbolTable.relateToOperator("dFdx", EOpDFdx); 52606098890abb48bf02b1fc77c67ed373ce2268151alokp@chromium.org symbolTable.relateToOperator("dFdy", EOpDFdy); 52706098890abb48bf02b1fc77c67ed373ce2268151alokp@chromium.org symbolTable.relateToOperator("fwidth", EOpFwidth); 5288815d7f2964301987a72e7a3a431f5df059f3e37alokp@chromium.org 5298815d7f2964301987a72e7a3a431f5df059f3e37alokp@chromium.org symbolTable.relateToExtension("dFdx", "GL_OES_standard_derivatives"); 5308815d7f2964301987a72e7a3a431f5df059f3e37alokp@chromium.org symbolTable.relateToExtension("dFdy", "GL_OES_standard_derivatives"); 5318815d7f2964301987a72e7a3a431f5df059f3e37alokp@chromium.org symbolTable.relateToExtension("fwidth", "GL_OES_standard_derivatives"); 53206098890abb48bf02b1fc77c67ed373ce2268151alokp@chromium.org } 53358e54298613fdba6967399a66c453385e44c7db2alokp@chromium.org break; 53458e54298613fdba6967399a66c453385e44c7db2alokp@chromium.org default: break; 53558e54298613fdba6967399a66c453385e44c7db2alokp@chromium.org } 536e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org 537e4249f0217bed043d645b6e01ae7d26f7c3e0093alokp@chromium.org // Finally add resource-specific variables. 5384888ceb6681c3668d3afcbdafdbe2b7efdaa3d04alokp@chromium.org switch(type) { 539430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com case SH_FRAGMENT_SHADER: 540430f5e0c75ade69935befb55d2592635f70255cemaxvujovic@gmail.com if (spec != SH_CSS_SHADERS_SPEC) { 5410578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com // Set up gl_FragData. The array size. 5421625d7d4022d89c87934487e1d9f7f10d2cee744daniel@transgaming.com TType fragData(EbtFloat, EbpMedium, EvqFragData, 4, false, true); 54394a86ad8f1ace86e9dc08088cd2e85d0b9f842f0alokp@chromium.org fragData.setArraySize(resources.MaxDrawBuffers); 5440578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com symbolTable.insert(*new TVariable(NewPoolTString("gl_FragData"), fragData)); 5450578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com } 5460578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com break; 5470578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com default: break; 5480578f81c9adb4697a783ee620fae4ebabf42f1dddaniel@transgaming.com } 5494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 5504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 5514888ceb6681c3668d3afcbdafdbe2b7efdaa3d04alokp@chromium.orgvoid InitExtensionBehavior(const ShBuiltInResources& resources, 552ad771eb2cf60b25e20ad52fd3562c5426b3f5981alokp@chromium.org TExtensionBehavior& extBehavior) 553ad771eb2cf60b25e20ad52fd3562c5426b3f5981alokp@chromium.org{ 554ad771eb2cf60b25e20ad52fd3562c5426b3f5981alokp@chromium.org if (resources.OES_standard_derivatives) 55509c323a40ad0de489eee946bfe171d337616e09czmo@google.com extBehavior["GL_OES_standard_derivatives"] = EBhUndefined; 55609c323a40ad0de489eee946bfe171d337616e09czmo@google.com if (resources.OES_EGL_image_external) 55709c323a40ad0de489eee946bfe171d337616e09czmo@google.com extBehavior["GL_OES_EGL_image_external"] = EBhUndefined; 558205fef3389c81637f689585431273cf83af02e94kbr@chromium.org if (resources.ARB_texture_rectangle) 559205fef3389c81637f689585431273cf83af02e94kbr@chromium.org extBehavior["GL_ARB_texture_rectangle"] = EBhUndefined; 560550cd0988989cc3e117fb300c919504f7bd99c48shannon.woods@transgaming.com if (resources.EXT_draw_buffers) 561550cd0988989cc3e117fb300c919504f7bd99c48shannon.woods@transgaming.com extBehavior["GL_EXT_draw_buffers"] = EBhUndefined; 56238fee6f1956ec0c5cb1eecfb2ae165f378cfbed9bajones@chromium.org if (resources.EXT_frag_depth) 56338fee6f1956ec0c5cb1eecfb2ae165f378cfbed9bajones@chromium.org extBehavior["GL_EXT_frag_depth"] = EBhUndefined; 564ad771eb2cf60b25e20ad52fd3562c5426b3f5981alokp@chromium.org} 565