1// 2// Copyright (c) 2010-2013 The ANGLE Project Authors. All rights reserved. 3// Use of this source code is governed by a BSD-style license that can be 4// found in the LICENSE file. 5// 6 7#ifndef LIBGLESV2_UNIFORM_H_ 8#define LIBGLESV2_UNIFORM_H_ 9 10#include "common/debug.h" 11#include "common/blocklayout.h" 12 13#include "libGLESv2/angletypes.h" 14 15#include "angle_gl.h" 16 17#include <string> 18#include <vector> 19 20namespace gl 21{ 22 23// Helper struct representing a single shader uniform 24struct LinkedUniform 25{ 26 LinkedUniform(GLenum type, GLenum precision, const std::string &name, unsigned int arraySize, const int blockIndex, const sh::BlockMemberInfo &blockInfo); 27 28 ~LinkedUniform(); 29 30 bool isArray() const; 31 unsigned int elementCount() const; 32 bool isReferencedByVertexShader() const; 33 bool isReferencedByFragmentShader() const; 34 bool isInDefaultBlock() const; 35 size_t dataSize() const; 36 bool isSampler() const; 37 38 const GLenum type; 39 const GLenum precision; 40 const std::string name; 41 const unsigned int arraySize; 42 const int blockIndex; 43 const sh::BlockMemberInfo blockInfo; 44 45 unsigned char *data; 46 bool dirty; 47 48 unsigned int psRegisterIndex; 49 unsigned int vsRegisterIndex; 50 unsigned int registerCount; 51 52 // Register "elements" are used for uniform structs in ES3, to appropriately identify single uniforms 53 // inside aggregate types, which are packed according C-like structure rules. 54 unsigned int registerElement; 55}; 56 57// Helper struct representing a single shader uniform block 58struct UniformBlock 59{ 60 // use GL_INVALID_INDEX for non-array elements 61 UniformBlock(const std::string &name, unsigned int elementIndex, unsigned int dataSize); 62 63 bool isArrayElement() const; 64 bool isReferencedByVertexShader() const; 65 bool isReferencedByFragmentShader() const; 66 67 const std::string name; 68 const unsigned int elementIndex; 69 const unsigned int dataSize; 70 71 std::vector<unsigned int> memberUniformIndexes; 72 73 unsigned int psRegisterIndex; 74 unsigned int vsRegisterIndex; 75}; 76 77} 78 79#endif // LIBGLESV2_UNIFORM_H_ 80