14f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 22494c97a0e266f7c7795bd71e1686904a75087e3shannon.woods@transgaming.com// 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// utilities.cpp: Conversion functions and other utility routines. 84f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 9a2ecfcccf1d1a85e6054a7314ce1f9de0648ac7fshannonwoods@chromium.org#include "common/utilities.h" 10a2ecfcccf1d1a85e6054a7314ce1f9de0648ac7fshannonwoods@chromium.org#include "common/mathutil.h" 11a2ecfcccf1d1a85e6054a7314ce1f9de0648ac7fshannonwoods@chromium.org 1283217796ed57efe8954fc3b53d743aae1a6cfe6bGeoff Lang#if defined(_WIN32) 1383217796ed57efe8954fc3b53d743aae1a6cfe6bGeoff Lang#include <windows.h> 1483217796ed57efe8954fc3b53d743aae1a6cfe6bGeoff Lang#endif 1583217796ed57efe8954fc3b53d743aae1a6cfe6bGeoff Lang 16a2ecfcccf1d1a85e6054a7314ce1f9de0648ac7fshannonwoods@chromium.org#include <set> 174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 181b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.comnamespace gl 191b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com{ 201b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com 212494c97a0e266f7c7795bd71e1686904a75087e3shannon.woods@transgaming.comint UniformComponentCount(GLenum type) 221b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com{ 231b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com switch (type) 241b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com { 251b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_BOOL: 261b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_FLOAT: 271b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_INT: 28a9cd70acc3ed442d45ee0ac37b04db8f44ee625cdaniel@transgaming.com case GL_SAMPLER_2D: 29e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_SAMPLER_3D: 30a9cd70acc3ed442d45ee0ac37b04db8f44ee625cdaniel@transgaming.com case GL_SAMPLER_CUBE: 31e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_SAMPLER_2D_ARRAY: 32e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_2D: 33e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_3D: 34e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_CUBE: 35e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_2D_ARRAY: 36e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_2D: 37e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_3D: 38e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_CUBE: 39e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY: 40cb127d3d185a5073962cc58bb13e1ee8b5458be7Nicolas Capens case GL_SAMPLER_2D_SHADOW: 41cb127d3d185a5073962cc58bb13e1ee8b5458be7Nicolas Capens case GL_SAMPLER_CUBE_SHADOW: 42cb127d3d185a5073962cc58bb13e1ee8b5458be7Nicolas Capens case GL_SAMPLER_2D_ARRAY_SHADOW: 4344ce5b11b8cf4ee5f03c2ead116a27369fe99e0eshannon.woods%transgaming.com@gtempaccount.com case GL_UNSIGNED_INT: 44e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens return 1; 451b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_BOOL_VEC2: 461b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_FLOAT_VEC2: 471b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_INT_VEC2: 4844ce5b11b8cf4ee5f03c2ead116a27369fe99e0eshannon.woods%transgaming.com@gtempaccount.com case GL_UNSIGNED_INT_VEC2: 49e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens return 2; 501b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_INT_VEC3: 511b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_FLOAT_VEC3: 521b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_BOOL_VEC3: 5344ce5b11b8cf4ee5f03c2ead116a27369fe99e0eshannon.woods%transgaming.com@gtempaccount.com case GL_UNSIGNED_INT_VEC3: 54e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens return 3; 551b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_BOOL_VEC4: 561b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_FLOAT_VEC4: 571b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_INT_VEC4: 5844ce5b11b8cf4ee5f03c2ead116a27369fe99e0eshannon.woods%transgaming.com@gtempaccount.com case GL_UNSIGNED_INT_VEC4: 591b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_FLOAT_MAT2: 60e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens return 4; 61e6ca670973fdf798173ef5f875e8544e7351f1b4shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT2x3: 62e6ca670973fdf798173ef5f875e8544e7351f1b4shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT3x2: 63e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens return 6; 64e6ca670973fdf798173ef5f875e8544e7351f1b4shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT2x4: 65e6ca670973fdf798173ef5f875e8544e7351f1b4shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT4x2: 66e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens return 8; 671b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_FLOAT_MAT3: 68e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens return 9; 69e6ca670973fdf798173ef5f875e8544e7351f1b4shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT3x4: 70e6ca670973fdf798173ef5f875e8544e7351f1b4shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT4x3: 71e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens return 12; 721b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_FLOAT_MAT4: 73e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens return 16; 741b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com default: 75e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens UNREACHABLE(); 761b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com } 771b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com 781b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com return 0; 791b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com} 801b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com 811b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.comGLenum UniformComponentType(GLenum type) 821b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com{ 831b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com switch(type) 841b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com { 851b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_BOOL: 861b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_BOOL_VEC2: 871b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_BOOL_VEC3: 881b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_BOOL_VEC4: 89e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens return GL_BOOL; 901b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_FLOAT: 911b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_FLOAT_VEC2: 921b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_FLOAT_VEC3: 931b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_FLOAT_VEC4: 941b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_FLOAT_MAT2: 951b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_FLOAT_MAT3: 961b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_FLOAT_MAT4: 97e6ca670973fdf798173ef5f875e8544e7351f1b4shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT2x3: 98e6ca670973fdf798173ef5f875e8544e7351f1b4shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT3x2: 99e6ca670973fdf798173ef5f875e8544e7351f1b4shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT2x4: 100e6ca670973fdf798173ef5f875e8544e7351f1b4shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT4x2: 101e6ca670973fdf798173ef5f875e8544e7351f1b4shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT3x4: 102e6ca670973fdf798173ef5f875e8544e7351f1b4shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT4x3: 103e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens return GL_FLOAT; 1041b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_INT: 105a9cd70acc3ed442d45ee0ac37b04db8f44ee625cdaniel@transgaming.com case GL_SAMPLER_2D: 106e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_SAMPLER_3D: 107a9cd70acc3ed442d45ee0ac37b04db8f44ee625cdaniel@transgaming.com case GL_SAMPLER_CUBE: 108e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_SAMPLER_2D_ARRAY: 109e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_2D: 110e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_3D: 111e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_CUBE: 112e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_2D_ARRAY: 113e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_2D: 114e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_3D: 115e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_CUBE: 116e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY: 117cb127d3d185a5073962cc58bb13e1ee8b5458be7Nicolas Capens case GL_SAMPLER_2D_SHADOW: 118cb127d3d185a5073962cc58bb13e1ee8b5458be7Nicolas Capens case GL_SAMPLER_CUBE_SHADOW: 119cb127d3d185a5073962cc58bb13e1ee8b5458be7Nicolas Capens case GL_SAMPLER_2D_ARRAY_SHADOW: 1201b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_INT_VEC2: 1211b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_INT_VEC3: 1221b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com case GL_INT_VEC4: 123e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens return GL_INT; 12444ce5b11b8cf4ee5f03c2ead116a27369fe99e0eshannon.woods%transgaming.com@gtempaccount.com case GL_UNSIGNED_INT: 12544ce5b11b8cf4ee5f03c2ead116a27369fe99e0eshannon.woods%transgaming.com@gtempaccount.com case GL_UNSIGNED_INT_VEC2: 12644ce5b11b8cf4ee5f03c2ead116a27369fe99e0eshannon.woods%transgaming.com@gtempaccount.com case GL_UNSIGNED_INT_VEC3: 12744ce5b11b8cf4ee5f03c2ead116a27369fe99e0eshannon.woods%transgaming.com@gtempaccount.com case GL_UNSIGNED_INT_VEC4: 128e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens return GL_UNSIGNED_INT; 1291b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com default: 130e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens UNREACHABLE(); 1311b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com } 1321b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com 1331b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com return GL_NONE; 1341b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com} 1351b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com 13672e8f447228e682f07cbf31e9a54f85d9843c6e5jbauman@chromium.orgsize_t UniformComponentSize(GLenum type) 1371b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com{ 1381b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com switch(type) 1391b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com { 14044ce5b11b8cf4ee5f03c2ead116a27369fe99e0eshannon.woods%transgaming.com@gtempaccount.com case GL_BOOL: return sizeof(GLint); 14144ce5b11b8cf4ee5f03c2ead116a27369fe99e0eshannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT: return sizeof(GLfloat); 14244ce5b11b8cf4ee5f03c2ead116a27369fe99e0eshannon.woods%transgaming.com@gtempaccount.com case GL_INT: return sizeof(GLint); 14344ce5b11b8cf4ee5f03c2ead116a27369fe99e0eshannon.woods%transgaming.com@gtempaccount.com case GL_UNSIGNED_INT: return sizeof(GLuint); 14472e8f447228e682f07cbf31e9a54f85d9843c6e5jbauman@chromium.org default: UNREACHABLE(); 1451b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com } 1461b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com 14772e8f447228e682f07cbf31e9a54f85d9843c6e5jbauman@chromium.org return 0; 14872e8f447228e682f07cbf31e9a54f85d9843c6e5jbauman@chromium.org} 14972e8f447228e682f07cbf31e9a54f85d9843c6e5jbauman@chromium.org 150e918ea2df83a3acaa2bd4f515f085471a1212321daniel@transgaming.comsize_t UniformInternalSize(GLenum type) 15172e8f447228e682f07cbf31e9a54f85d9843c6e5jbauman@chromium.org{ 1522494c97a0e266f7c7795bd71e1686904a75087e3shannon.woods@transgaming.com // Expanded to 4-element vectors 1532494c97a0e266f7c7795bd71e1686904a75087e3shannon.woods@transgaming.com return UniformComponentSize(UniformComponentType(type)) * VariableRowCount(type) * 4; 1541b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com} 1551b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com 15647c600530e42280955cc0db7801e137c239b596ddaniel@transgaming.comsize_t UniformExternalSize(GLenum type) 15747c600530e42280955cc0db7801e137c239b596ddaniel@transgaming.com{ 1582494c97a0e266f7c7795bd71e1686904a75087e3shannon.woods@transgaming.com return UniformComponentSize(UniformComponentType(type)) * UniformComponentCount(type); 15947c600530e42280955cc0db7801e137c239b596ddaniel@transgaming.com} 16047c600530e42280955cc0db7801e137c239b596ddaniel@transgaming.com 1618a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.comGLenum UniformBoolVectorType(GLenum type) 1628a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com{ 1638a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com switch (type) 1648a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com { 1658a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT: 1668a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com case GL_INT: 16744ce5b11b8cf4ee5f03c2ead116a27369fe99e0eshannon.woods%transgaming.com@gtempaccount.com case GL_UNSIGNED_INT: 1688a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com return GL_BOOL; 1698a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_VEC2: 1708a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com case GL_INT_VEC2: 17144ce5b11b8cf4ee5f03c2ead116a27369fe99e0eshannon.woods%transgaming.com@gtempaccount.com case GL_UNSIGNED_INT_VEC2: 1728a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com return GL_BOOL_VEC2; 1738a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_VEC3: 1748a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com case GL_INT_VEC3: 17544ce5b11b8cf4ee5f03c2ead116a27369fe99e0eshannon.woods%transgaming.com@gtempaccount.com case GL_UNSIGNED_INT_VEC3: 1768a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com return GL_BOOL_VEC3; 1778a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_VEC4: 1788a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com case GL_INT_VEC4: 17944ce5b11b8cf4ee5f03c2ead116a27369fe99e0eshannon.woods%transgaming.com@gtempaccount.com case GL_UNSIGNED_INT_VEC4: 1808a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com return GL_BOOL_VEC4; 1818a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com 1828a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com default: 1838a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com UNREACHABLE(); 1848a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com return GL_NONE; 1858a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com } 1868a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com} 1878a19eed917b5f0354937567ca15fa755e0116ffashannon.woods%transgaming.com@gtempaccount.com 1884af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.comint VariableRowCount(GLenum type) 1890b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com{ 1900b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com switch (type) 1910b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com { 1924af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com case GL_NONE: 19366192b3e00d6b239b744f0ccb86d3bc98c6454eeJamie Madill case GL_STRUCT_ANGLEX: 1944af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com return 0; 1950b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com case GL_BOOL: 1960b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com case GL_FLOAT: 1970b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com case GL_INT: 1986b7099111f6f00493b24dd05680f60c30b60cb7cshannonwoods@chromium.org case GL_UNSIGNED_INT: 1990b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com case GL_BOOL_VEC2: 2000b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com case GL_FLOAT_VEC2: 2010b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com case GL_INT_VEC2: 2028c788e8d35ba20ca19afacbcfe4a6f326b8ecb60shannonwoods@chromium.org case GL_UNSIGNED_INT_VEC2: 2030b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com case GL_BOOL_VEC3: 2048c788e8d35ba20ca19afacbcfe4a6f326b8ecb60shannonwoods@chromium.org case GL_FLOAT_VEC3: 2058c788e8d35ba20ca19afacbcfe4a6f326b8ecb60shannonwoods@chromium.org case GL_INT_VEC3: 2068c788e8d35ba20ca19afacbcfe4a6f326b8ecb60shannonwoods@chromium.org case GL_UNSIGNED_INT_VEC3: 2070b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com case GL_BOOL_VEC4: 2080b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com case GL_FLOAT_VEC4: 2090b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com case GL_INT_VEC4: 2108c788e8d35ba20ca19afacbcfe4a6f326b8ecb60shannonwoods@chromium.org case GL_UNSIGNED_INT_VEC4: 211da8d38015a6b80501f6f4b8912105e626e88086fdaniel@transgaming.com case GL_SAMPLER_2D: 212e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_SAMPLER_3D: 213da8d38015a6b80501f6f4b8912105e626e88086fdaniel@transgaming.com case GL_SAMPLER_CUBE: 214e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_SAMPLER_2D_ARRAY: 215e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_2D: 216e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_3D: 217e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_CUBE: 218e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_2D_ARRAY: 219e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_2D: 220e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_3D: 221e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_CUBE: 222e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY: 223cb127d3d185a5073962cc58bb13e1ee8b5458be7Nicolas Capens case GL_SAMPLER_2D_SHADOW: 224cb127d3d185a5073962cc58bb13e1ee8b5458be7Nicolas Capens case GL_SAMPLER_CUBE_SHADOW: 225cb127d3d185a5073962cc58bb13e1ee8b5458be7Nicolas Capens case GL_SAMPLER_2D_ARRAY_SHADOW: 2260b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com return 1; 2270b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com case GL_FLOAT_MAT2: 22802e11f3a8a3afae0f96752762800d430b0a2a3d7shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT3x2: 22902e11f3a8a3afae0f96752762800d430b0a2a3d7shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT4x2: 2300b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com return 2; 2310b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com case GL_FLOAT_MAT3: 23202e11f3a8a3afae0f96752762800d430b0a2a3d7shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT2x3: 23302e11f3a8a3afae0f96752762800d430b0a2a3d7shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT4x3: 2340b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com return 3; 2350b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com case GL_FLOAT_MAT4: 23602e11f3a8a3afae0f96752762800d430b0a2a3d7shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT2x4: 23702e11f3a8a3afae0f96752762800d430b0a2a3d7shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT3x4: 2380b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com return 4; 2390b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com default: 2400b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com UNREACHABLE(); 2414af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com } 2424af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com 2434af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com return 0; 2444af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com} 2454af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com 2464af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.comint VariableColumnCount(GLenum type) 2474af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com{ 2484af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com switch (type) 2494af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com { 2504af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com case GL_NONE: 25166192b3e00d6b239b744f0ccb86d3bc98c6454eeJamie Madill case GL_STRUCT_ANGLEX: 2520b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com return 0; 2534af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com case GL_BOOL: 2544af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com case GL_FLOAT: 2554af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com case GL_INT: 2566b7099111f6f00493b24dd05680f60c30b60cb7cshannonwoods@chromium.org case GL_UNSIGNED_INT: 2572494c97a0e266f7c7795bd71e1686904a75087e3shannon.woods@transgaming.com case GL_SAMPLER_2D: 258e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_SAMPLER_3D: 2592494c97a0e266f7c7795bd71e1686904a75087e3shannon.woods@transgaming.com case GL_SAMPLER_CUBE: 260e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_SAMPLER_2D_ARRAY: 261e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_2D: 262e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_3D: 263e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_CUBE: 264e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_2D_ARRAY: 265e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_2D: 266e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_3D: 267e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_CUBE: 268e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY: 269cb127d3d185a5073962cc58bb13e1ee8b5458be7Nicolas Capens case GL_SAMPLER_2D_SHADOW: 270cb127d3d185a5073962cc58bb13e1ee8b5458be7Nicolas Capens case GL_SAMPLER_CUBE_SHADOW: 271cb127d3d185a5073962cc58bb13e1ee8b5458be7Nicolas Capens case GL_SAMPLER_2D_ARRAY_SHADOW: 2724af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com return 1; 2734af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com case GL_BOOL_VEC2: 2744af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com case GL_FLOAT_VEC2: 2754af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com case GL_INT_VEC2: 2768c788e8d35ba20ca19afacbcfe4a6f326b8ecb60shannonwoods@chromium.org case GL_UNSIGNED_INT_VEC2: 2774af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com case GL_FLOAT_MAT2: 27802e11f3a8a3afae0f96752762800d430b0a2a3d7shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT2x3: 27902e11f3a8a3afae0f96752762800d430b0a2a3d7shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT2x4: 2804af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com return 2; 2814af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com case GL_BOOL_VEC3: 2828c788e8d35ba20ca19afacbcfe4a6f326b8ecb60shannonwoods@chromium.org case GL_FLOAT_VEC3: 2838c788e8d35ba20ca19afacbcfe4a6f326b8ecb60shannonwoods@chromium.org case GL_INT_VEC3: 2848c788e8d35ba20ca19afacbcfe4a6f326b8ecb60shannonwoods@chromium.org case GL_UNSIGNED_INT_VEC3: 2854af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com case GL_FLOAT_MAT3: 28602e11f3a8a3afae0f96752762800d430b0a2a3d7shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT3x2: 28702e11f3a8a3afae0f96752762800d430b0a2a3d7shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT3x4: 2884af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com return 3; 2894af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com case GL_BOOL_VEC4: 2904af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com case GL_FLOAT_VEC4: 2914af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com case GL_INT_VEC4: 2928c788e8d35ba20ca19afacbcfe4a6f326b8ecb60shannonwoods@chromium.org case GL_UNSIGNED_INT_VEC4: 2934af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com case GL_FLOAT_MAT4: 29402e11f3a8a3afae0f96752762800d430b0a2a3d7shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT4x2: 29502e11f3a8a3afae0f96752762800d430b0a2a3d7shannon.woods%transgaming.com@gtempaccount.com case GL_FLOAT_MAT4x3: 2964af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com return 4; 2974af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com default: 2984af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com UNREACHABLE(); 2990b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com } 3004af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com 3014af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com return 0; 3020b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com} 3030b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com 304e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capensbool IsSampler(GLenum type) 305e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens{ 306e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens switch (type) 307e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens { 308e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_SAMPLER_2D: 309e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_SAMPLER_3D: 310e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_SAMPLER_CUBE: 311e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_SAMPLER_2D_ARRAY: 312e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_2D: 313e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_3D: 314e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_CUBE: 315e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_INT_SAMPLER_2D_ARRAY: 316e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_2D: 317e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_3D: 318e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_CUBE: 319e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY: 320cb127d3d185a5073962cc58bb13e1ee8b5458be7Nicolas Capens case GL_SAMPLER_2D_SHADOW: 321cb127d3d185a5073962cc58bb13e1ee8b5458be7Nicolas Capens case GL_SAMPLER_CUBE_SHADOW: 322cb127d3d185a5073962cc58bb13e1ee8b5458be7Nicolas Capens case GL_SAMPLER_2D_ARRAY_SHADOW: 323e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens return true; 324e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens } 325e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens 326e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens return false; 327e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens} 328e60508840c2cf59c0fd6f8986d8c80c9f7425615Nicolas Capens 32902e11f3a8a3afae0f96752762800d430b0a2a3d7shannon.woods%transgaming.com@gtempaccount.combool IsMatrixType(GLenum type) 33002e11f3a8a3afae0f96752762800d430b0a2a3d7shannon.woods%transgaming.com@gtempaccount.com{ 33102e11f3a8a3afae0f96752762800d430b0a2a3d7shannon.woods%transgaming.com@gtempaccount.com return VariableRowCount(type) > 1; 33202e11f3a8a3afae0f96752762800d430b0a2a3d7shannon.woods%transgaming.com@gtempaccount.com} 33302e11f3a8a3afae0f96752762800d430b0a2a3d7shannon.woods%transgaming.com@gtempaccount.com 3349bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.orgGLenum TransposeMatrixType(GLenum type) 3359bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org{ 3369bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org if (!IsMatrixType(type)) 3379bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org { 3389bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org return type; 3399bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org } 3409bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org 3419bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org switch (type) 3429bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org { 3439bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org case GL_FLOAT_MAT2: return GL_FLOAT_MAT2; 3449bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org case GL_FLOAT_MAT3: return GL_FLOAT_MAT3; 3459bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org case GL_FLOAT_MAT4: return GL_FLOAT_MAT4; 3469bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org case GL_FLOAT_MAT2x3: return GL_FLOAT_MAT3x2; 3479bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org case GL_FLOAT_MAT3x2: return GL_FLOAT_MAT2x3; 3489bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org case GL_FLOAT_MAT2x4: return GL_FLOAT_MAT4x2; 3499bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org case GL_FLOAT_MAT4x2: return GL_FLOAT_MAT2x4; 3509bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org case GL_FLOAT_MAT3x4: return GL_FLOAT_MAT4x3; 3519bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org case GL_FLOAT_MAT4x3: return GL_FLOAT_MAT3x4; 3529bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org default: UNREACHABLE(); return GL_NONE; 3539bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org } 3549bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org} 3559bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org 3568c6befc2f976d095d39d3033379838bf79e5637dJamie Madillint MatrixRegisterCount(GLenum type, bool isRowMajorMatrix) 3578c6befc2f976d095d39d3033379838bf79e5637dJamie Madill{ 3588c6befc2f976d095d39d3033379838bf79e5637dJamie Madill ASSERT(IsMatrixType(type)); 3598c6befc2f976d095d39d3033379838bf79e5637dJamie Madill return isRowMajorMatrix ? VariableRowCount(type) : VariableColumnCount(type); 3608c6befc2f976d095d39d3033379838bf79e5637dJamie Madill} 3618c6befc2f976d095d39d3033379838bf79e5637dJamie Madill 3628c6befc2f976d095d39d3033379838bf79e5637dJamie Madillint MatrixComponentCount(GLenum type, bool isRowMajorMatrix) 3638c6befc2f976d095d39d3033379838bf79e5637dJamie Madill{ 3648c6befc2f976d095d39d3033379838bf79e5637dJamie Madill ASSERT(IsMatrixType(type)); 3658c6befc2f976d095d39d3033379838bf79e5637dJamie Madill return isRowMajorMatrix ? VariableColumnCount(type) : VariableRowCount(type); 3668c6befc2f976d095d39d3033379838bf79e5637dJamie Madill} 3678c6befc2f976d095d39d3033379838bf79e5637dJamie Madill 3689bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.orgint AttributeRegisterCount(GLenum type) 3699bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org{ 3709bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org return IsMatrixType(type) ? VariableColumnCount(type) : 1; 3719bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org} 3729bd22fa90f6a16ae279330c802ebdb5e608d9348shannonwoods@chromium.org 3730b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.comint AllocateFirstFreeBits(unsigned int *bits, unsigned int allocationSize, unsigned int bitsSize) 3740b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com{ 3750b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com ASSERT(allocationSize <= bitsSize); 3760b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com 3770b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com unsigned int mask = std::numeric_limits<unsigned int>::max() >> (std::numeric_limits<unsigned int>::digits - allocationSize); 3780b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com 3790b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com for (unsigned int i = 0; i < bitsSize - allocationSize + 1; i++) 3800b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com { 3810b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com if ((*bits & mask) == 0) 3820b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com { 3830b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com *bits |= mask; 3840b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com return i; 3850b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com } 3860b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com 3870b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com mask <<= 1; 3880b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com } 3890b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com 3900b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com return -1; 3910b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com} 3920b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com 39319ffc24b0e886710aa6052c01ea93fc923f059c4daniel@transgaming.combool IsCubemapTextureTarget(GLenum target) 39419ffc24b0e886710aa6052c01ea93fc923f059c4daniel@transgaming.com{ 39519ffc24b0e886710aa6052c01ea93fc923f059c4daniel@transgaming.com return (target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X && target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z); 39619ffc24b0e886710aa6052c01ea93fc923f059c4daniel@transgaming.com} 39719ffc24b0e886710aa6052c01ea93fc923f059c4daniel@transgaming.com 3980fe1949dc05aba67e0815a3532e5993d7ea25ef8Geoff Langbool IsInternalTextureTarget(GLenum target, GLuint clientVersion) 39919ffc24b0e886710aa6052c01ea93fc923f059c4daniel@transgaming.com{ 4000fe1949dc05aba67e0815a3532e5993d7ea25ef8Geoff Lang if (clientVersion == 2) 4010fe1949dc05aba67e0815a3532e5993d7ea25ef8Geoff Lang { 4020fe1949dc05aba67e0815a3532e5993d7ea25ef8Geoff Lang return target == GL_TEXTURE_2D || IsCubemapTextureTarget(target); 4030fe1949dc05aba67e0815a3532e5993d7ea25ef8Geoff Lang } 4040fe1949dc05aba67e0815a3532e5993d7ea25ef8Geoff Lang else if (clientVersion == 3) 4050fe1949dc05aba67e0815a3532e5993d7ea25ef8Geoff Lang { 4060fe1949dc05aba67e0815a3532e5993d7ea25ef8Geoff Lang return target == GL_TEXTURE_2D || IsCubemapTextureTarget(target) || 4070fe1949dc05aba67e0815a3532e5993d7ea25ef8Geoff Lang target == GL_TEXTURE_3D || target == GL_TEXTURE_2D_ARRAY; 4080fe1949dc05aba67e0815a3532e5993d7ea25ef8Geoff Lang } 4090fe1949dc05aba67e0815a3532e5993d7ea25ef8Geoff Lang else 4100fe1949dc05aba67e0815a3532e5993d7ea25ef8Geoff Lang { 4110fe1949dc05aba67e0815a3532e5993d7ea25ef8Geoff Lang UNREACHABLE(); 4120fe1949dc05aba67e0815a3532e5993d7ea25ef8Geoff Lang return false; 4130fe1949dc05aba67e0815a3532e5993d7ea25ef8Geoff Lang } 41419ffc24b0e886710aa6052c01ea93fc923f059c4daniel@transgaming.com} 41519ffc24b0e886710aa6052c01ea93fc923f059c4daniel@transgaming.com 41697c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.combool IsTriangleMode(GLenum drawMode) 41797c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.com{ 41897c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.com switch (drawMode) 41997c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.com { 42097c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.com case GL_TRIANGLES: 42197c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.com case GL_TRIANGLE_FAN: 42297c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.com case GL_TRIANGLE_STRIP: 42397c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.com return true; 42497c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.com case GL_POINTS: 42597c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.com case GL_LINES: 42697c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.com case GL_LINE_LOOP: 42797c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.com case GL_LINE_STRIP: 42897c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.com return false; 42997c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.com default: UNREACHABLE(); 43097c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.com } 43197c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.com 43297c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.com return false; 43397c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.com} 43497c852b2e2fc61b2712be3c00cd4ba4b14dadeb6daniel@transgaming.com 4351b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com} 4361b3a8155c2181971bbd6671331826d420a707220daniel@transgaming.com 4370f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.orgstd::string getTempPath() 4380f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org{ 43983217796ed57efe8954fc3b53d743aae1a6cfe6bGeoff Lang#if defined (_WIN32) 440d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com char path[MAX_PATH]; 441d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com DWORD pathLen = GetTempPathA(sizeof(path) / sizeof(path[0]), path); 442d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com if (pathLen == 0) 443d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com { 444d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com UNREACHABLE(); 445d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com return std::string(); 446d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com } 447d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com 448d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com UINT unique = GetTempFileNameA(path, "sh", 0, path); 449d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com if (unique == 0) 450d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com { 451d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com UNREACHABLE(); 452d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com return std::string(); 453d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com } 454a2ecfcccf1d1a85e6054a7314ce1f9de0648ac7fshannonwoods@chromium.org 455d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com return path; 45683217796ed57efe8954fc3b53d743aae1a6cfe6bGeoff Lang#else 45783217796ed57efe8954fc3b53d743aae1a6cfe6bGeoff Lang UNIMPLEMENTED(); 45883217796ed57efe8954fc3b53d743aae1a6cfe6bGeoff Lang return ""; 45983217796ed57efe8954fc3b53d743aae1a6cfe6bGeoff Lang#endif 4600f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org} 4610f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org 4620f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.orgvoid writeFile(const char* path, const void* content, size_t size) 463d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com{ 464d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com FILE* file = fopen(path, "w"); 465d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com if (!file) 466d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com { 467d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com UNREACHABLE(); 468d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com return; 469d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com } 470d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com 471d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com fwrite(content, sizeof(char), size, file); 472d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com fclose(file); 4730f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org} 474