17e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org// 27e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org// Copyright (c) 2010-2013 The ANGLE Project Authors. All rights reserved. 37e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org// Use of this source code is governed by a BSD-style license that can be 47e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org// found in the LICENSE file. 57e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org// 67e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org 77e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org#ifndef LIBGLESV2_UNIFORM_H_ 87e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org#define LIBGLESV2_UNIFORM_H_ 97e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org 100b7eef7c469bf717f7e1b57c6273f00d88e8b1d9Geoff Lang#include "common/debug.h" 110b7eef7c469bf717f7e1b57c6273f00d88e8b1d9Geoff Lang#include "common/blocklayout.h" 120b7eef7c469bf717f7e1b57c6273f00d88e8b1d9Geoff Lang 130b7eef7c469bf717f7e1b57c6273f00d88e8b1d9Geoff Lang#include "libGLESv2/angletypes.h" 147e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org 15f51639a4d10c6b31a813a8154ed2c489cc7e55f3Jamie Madill#include "angle_gl.h" 167e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org 170b7eef7c469bf717f7e1b57c6273f00d88e8b1d9Geoff Lang#include <string> 180b7eef7c469bf717f7e1b57c6273f00d88e8b1d9Geoff Lang#include <vector> 197e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org 207e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.orgnamespace gl 217e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org{ 227e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org 237e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org// Helper struct representing a single shader uniform 24834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madillstruct LinkedUniform 257e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org{ 26f257598999faf907a50d8a9f9eff28dad0ff2628Jamie Madill LinkedUniform(GLenum type, GLenum precision, const std::string &name, unsigned int arraySize, const int blockIndex, const sh::BlockMemberInfo &blockInfo); 277e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org 28834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madill ~LinkedUniform(); 297e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org 307e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org bool isArray() const; 317e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org unsigned int elementCount() const; 3238676dc14bd6136e9607e05825890ecf5cb402f1shannonwoods@chromium.org bool isReferencedByVertexShader() const; 3338676dc14bd6136e9607e05825890ecf5cb402f1shannonwoods@chromium.org bool isReferencedByFragmentShader() const; 34d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org bool isInDefaultBlock() const; 355b085dc344f1c7a54aa164c0db8eb7c9675f8c66Jamie Madill size_t dataSize() const; 368ff21aeaabebd0877c1cc48fdac718509f23617aJamie Madill bool isSampler() const; 377e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org 387e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org const GLenum type; 397e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org const GLenum precision; 407e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org const std::string name; 417e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org const unsigned int arraySize; 42d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org const int blockIndex; 43f257598999faf907a50d8a9f9eff28dad0ff2628Jamie Madill const sh::BlockMemberInfo blockInfo; 447e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org 457e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org unsigned char *data; 467e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org bool dirty; 477e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org 4838676dc14bd6136e9607e05825890ecf5cb402f1shannonwoods@chromium.org unsigned int psRegisterIndex; 4938676dc14bd6136e9607e05825890ecf5cb402f1shannonwoods@chromium.org unsigned int vsRegisterIndex; 507e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org unsigned int registerCount; 515b085dc344f1c7a54aa164c0db8eb7c9675f8c66Jamie Madill 525b085dc344f1c7a54aa164c0db8eb7c9675f8c66Jamie Madill // Register "elements" are used for uniform structs in ES3, to appropriately identify single uniforms 535b085dc344f1c7a54aa164c0db8eb7c9675f8c66Jamie Madill // inside aggregate types, which are packed according C-like structure rules. 545b085dc344f1c7a54aa164c0db8eb7c9675f8c66Jamie Madill unsigned int registerElement; 557e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org}; 567e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org 57d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org// Helper struct representing a single shader uniform block 58d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.orgstruct UniformBlock 59d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org{ 60d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org // use GL_INVALID_INDEX for non-array elements 61d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org UniformBlock(const std::string &name, unsigned int elementIndex, unsigned int dataSize); 62d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org 63d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org bool isArrayElement() const; 64d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org bool isReferencedByVertexShader() const; 65d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org bool isReferencedByFragmentShader() const; 66d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org 67d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org const std::string name; 68d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org const unsigned int elementIndex; 69d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org const unsigned int dataSize; 70d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org 71d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org std::vector<unsigned int> memberUniformIndexes; 72d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org 73d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org unsigned int psRegisterIndex; 74d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org unsigned int vsRegisterIndex; 75d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org}; 76d77841743376350e4e483a955cd94cf77d8bca63shannonwoods@chromium.org 777e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org} 787e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org 797e0904d3255fe2bc034e226cdf4761bf2f02c813shannonwoods@chromium.org#endif // LIBGLESV2_UNIFORM_H_ 80