else UNREACHABLE(0);\r
break;\r
case EbtSampler2D:\r
+ return GL_SAMPLER_2D;\r
case EbtISampler2D:\r
+ return GL_INT_SAMPLER_2D;\r
case EbtUSampler2D:\r
- return GL_SAMPLER_2D;\r
+ return GL_UNSIGNED_INT_SAMPLER_2D;\r
case EbtSamplerCube:\r
+ return GL_SAMPLER_CUBE;\r
case EbtISamplerCube:\r
+ return GL_INT_SAMPLER_CUBE;\r
case EbtUSamplerCube:\r
- return GL_SAMPLER_CUBE;\r
+ return GL_UNSIGNED_INT_SAMPLER_CUBE;\r
case EbtSamplerExternalOES:\r
return GL_SAMPLER_EXTERNAL_OES;\r
case EbtSampler3D:\r
+ return GL_SAMPLER_3D_OES;\r
case EbtISampler3D:\r
+ return GL_INT_SAMPLER_3D;\r
case EbtUSampler3D:\r
- return GL_SAMPLER_3D_OES;\r
+ return GL_UNSIGNED_INT_SAMPLER_3D;\r
case EbtSampler2DArray:\r
+ return GL_SAMPLER_2D_ARRAY;\r
case EbtISampler2DArray:\r
+ return GL_INT_SAMPLER_2D_ARRAY;\r
case EbtUSampler2DArray:\r
- return GL_SAMPLER_2D_ARRAY;\r
+ return GL_UNSIGNED_INT_SAMPLER_2D_ARRAY;\r
+ case EbtSampler2DShadow:\r
+ return GL_SAMPLER_2D_SHADOW;\r
+ case EbtSamplerCubeShadow:\r
+ return GL_SAMPLER_CUBE_SHADOW;\r
+ case EbtSampler2DArrayShadow:\r
+ return GL_SAMPLER_2D_ARRAY_SHADOW;\r
default:\r
UNREACHABLE(type.getBasicType());\r
break;\r
\r
count = std::min(size - (int)uniformIndex[location].element, count);\r
\r
- if(targetUniform->type == GL_INT ||\r
- targetUniform->type == GL_SAMPLER_2D ||\r
- targetUniform->type == GL_SAMPLER_CUBE ||\r
- targetUniform->type == GL_SAMPLER_EXTERNAL_OES ||\r
- targetUniform->type == GL_SAMPLER_3D_OES)\r
+ if(targetUniform->type == GL_INT || IsSamplerUniform(targetUniform->type))\r
{\r
memcpy(targetUniform->data + uniformIndex[location].element * sizeof(GLint),\r
v, sizeof(GLint) * count);\r
\r
count = std::min(size - (int)uniformIndex[location].element, count);\r
\r
- if(targetUniform->type == GL_INT ||\r
- targetUniform->type == GL_SAMPLER_2D ||\r
- targetUniform->type == GL_SAMPLER_CUBE ||\r
- targetUniform->type == GL_SAMPLER_EXTERNAL_OES ||\r
- targetUniform->type == GL_SAMPLER_3D_OES)\r
+ if(targetUniform->type == GL_INT || IsSamplerUniform(targetUniform->type))\r
{\r
memcpy(targetUniform->data + uniformIndex[location].element * sizeof(GLuint),\r
v, sizeof(GLuint)* count);\r
case GL_SAMPLER_CUBE:\r
case GL_SAMPLER_EXTERNAL_OES:\r
case GL_SAMPLER_3D_OES:\r
+ case GL_SAMPLER_2D_ARRAY:\r
+ case GL_SAMPLER_2D_SHADOW:\r
+ case GL_SAMPLER_CUBE_SHADOW:\r
+ case GL_SAMPLER_2D_ARRAY_SHADOW:\r
+ case GL_INT_SAMPLER_2D:\r
+ case GL_UNSIGNED_INT_SAMPLER_2D:\r
+ case GL_INT_SAMPLER_CUBE:\r
+ case GL_UNSIGNED_INT_SAMPLER_CUBE:\r
+ case GL_INT_SAMPLER_3D:\r
+ case GL_UNSIGNED_INT_SAMPLER_3D:\r
+ case GL_INT_SAMPLER_2D_ARRAY:\r
+ case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:\r
case GL_INT: applyUniform1iv(location, size, i); break;\r
case GL_INT_VEC2: applyUniform2iv(location, size, i); break;\r
case GL_INT_VEC3: applyUniform3iv(location, size, i); break;\r
\r
bool Program::defineUniform(GLenum shader, GLenum type, GLenum precision, const std::string &name, unsigned int arraySize, int registerIndex)\r
{\r
- if(type == GL_SAMPLER_2D || type == GL_SAMPLER_CUBE || type == GL_SAMPLER_EXTERNAL_OES || type == GL_SAMPLER_3D_OES)\r
+ if(IsSamplerUniform(type))\r
{\r
int index = registerIndex;\r
\r
switch(type)\r
{\r
default: UNREACHABLE(type);\r
+ case GL_INT_SAMPLER_2D:\r
+ case GL_UNSIGNED_INT_SAMPLER_2D:\r
+ case GL_SAMPLER_2D_SHADOW:\r
case GL_SAMPLER_2D: samplersVS[index].textureType = TEXTURE_2D; break;\r
+ case GL_INT_SAMPLER_CUBE:\r
+ case GL_UNSIGNED_INT_SAMPLER_CUBE:\r
+ case GL_SAMPLER_CUBE_SHADOW:\r
case GL_SAMPLER_CUBE: samplersVS[index].textureType = TEXTURE_CUBE; break;\r
+ case GL_INT_SAMPLER_3D:\r
+ case GL_UNSIGNED_INT_SAMPLER_3D:\r
case GL_SAMPLER_3D_OES: samplersVS[index].textureType = TEXTURE_3D; break;\r
case GL_SAMPLER_EXTERNAL_OES: samplersVS[index].textureType = TEXTURE_EXTERNAL; break;\r
+ case GL_INT_SAMPLER_2D_ARRAY:\r
+ case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:\r
+ case GL_SAMPLER_2D_ARRAY_SHADOW:\r
+ case GL_SAMPLER_2D_ARRAY: samplersVS[index].textureType = TEXTURE_2D_ARRAY; break;\r
}\r
\r
samplersVS[index].logicalTextureUnit = 0;\r
switch(type)\r
{\r
default: UNREACHABLE(type);\r
+ case GL_INT_SAMPLER_2D:\r
+ case GL_UNSIGNED_INT_SAMPLER_2D:\r
+ case GL_SAMPLER_2D_SHADOW:\r
case GL_SAMPLER_2D: samplersPS[index].textureType = TEXTURE_2D; break;\r
+ case GL_INT_SAMPLER_CUBE:\r
+ case GL_UNSIGNED_INT_SAMPLER_CUBE:\r
+ case GL_SAMPLER_CUBE_SHADOW:\r
case GL_SAMPLER_CUBE: samplersPS[index].textureType = TEXTURE_CUBE; break;\r
+ case GL_INT_SAMPLER_3D:\r
+ case GL_UNSIGNED_INT_SAMPLER_3D:\r
case GL_SAMPLER_3D_OES: samplersPS[index].textureType = TEXTURE_3D; break;\r
case GL_SAMPLER_EXTERNAL_OES: samplersPS[index].textureType = TEXTURE_EXTERNAL; break;\r
+ case GL_INT_SAMPLER_2D_ARRAY:\r
+ case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:\r
+ case GL_SAMPLER_2D_ARRAY_SHADOW:\r
+ case GL_SAMPLER_2D_ARRAY: samplersPS[index].textureType = TEXTURE_2D_ARRAY; break;\r
}\r
\r
samplersPS[index].logicalTextureUnit = 0;\r
\r
if(targetUniform->psRegisterIndex != -1)\r
{\r
- if(targetUniform->type == GL_SAMPLER_2D ||\r
- targetUniform->type == GL_SAMPLER_CUBE ||\r
- targetUniform->type == GL_SAMPLER_EXTERNAL_OES ||\r
- targetUniform->type == GL_SAMPLER_3D_OES)\r
+ if(IsSamplerUniform(targetUniform->type))\r
{\r
for(int i = 0; i < count; i++)\r
{\r
\r
if(targetUniform->vsRegisterIndex != -1)\r
{\r
- if(targetUniform->type == GL_SAMPLER_2D ||\r
- targetUniform->type == GL_SAMPLER_CUBE ||\r
- targetUniform->type == GL_SAMPLER_EXTERNAL_OES ||\r
- targetUniform->type == GL_SAMPLER_3D_OES)\r
+ if(IsSamplerUniform(targetUniform->type))\r
{\r
for(int i = 0; i < count; i++)\r
{\r
\r
if(targetUniform->psRegisterIndex != -1)\r
{\r
- if(targetUniform->type == GL_SAMPLER_2D ||\r
- targetUniform->type == GL_SAMPLER_CUBE ||\r
- targetUniform->type == GL_SAMPLER_EXTERNAL_OES ||\r
- targetUniform->type == GL_SAMPLER_3D_OES)\r
+ if(IsSamplerUniform(targetUniform->type))\r
{\r
for(int i = 0; i < count; i++)\r
{\r
\r
if(targetUniform->vsRegisterIndex != -1)\r
{\r
- if(targetUniform->type == GL_SAMPLER_2D ||\r
- targetUniform->type == GL_SAMPLER_CUBE ||\r
- targetUniform->type == GL_SAMPLER_EXTERNAL_OES ||\r
- targetUniform->type == GL_SAMPLER_3D_OES)\r
+ if(IsSamplerUniform(targetUniform->type))\r
{\r
for(int i = 0; i < count; i++)\r
{\r
case GL_SAMPLER_CUBE:\r
case GL_SAMPLER_EXTERNAL_OES:\r
case GL_SAMPLER_3D_OES:\r
+ case GL_SAMPLER_2D_ARRAY:\r
+ case GL_SAMPLER_2D_SHADOW:\r
+ case GL_SAMPLER_CUBE_SHADOW:\r
+ case GL_SAMPLER_2D_ARRAY_SHADOW:\r
+ case GL_INT_SAMPLER_2D:\r
+ case GL_UNSIGNED_INT_SAMPLER_2D:\r
+ case GL_INT_SAMPLER_CUBE:\r
+ case GL_UNSIGNED_INT_SAMPLER_CUBE:\r
+ case GL_INT_SAMPLER_3D:\r
+ case GL_UNSIGNED_INT_SAMPLER_3D:\r
+ case GL_INT_SAMPLER_2D_ARRAY:\r
+ case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:\r
return 1;\r
case GL_BOOL_VEC2:\r
case GL_FLOAT_VEC2:\r
case GL_SAMPLER_CUBE:\r
case GL_SAMPLER_EXTERNAL_OES:\r
case GL_SAMPLER_3D_OES:\r
+ case GL_SAMPLER_2D_ARRAY:\r
+ case GL_SAMPLER_2D_SHADOW:\r
+ case GL_SAMPLER_CUBE_SHADOW:\r
+ case GL_SAMPLER_2D_ARRAY_SHADOW:\r
+ case GL_INT_SAMPLER_2D:\r
+ case GL_UNSIGNED_INT_SAMPLER_2D:\r
+ case GL_INT_SAMPLER_CUBE:\r
+ case GL_UNSIGNED_INT_SAMPLER_CUBE:\r
+ case GL_INT_SAMPLER_3D:\r
+ case GL_UNSIGNED_INT_SAMPLER_3D:\r
+ case GL_INT_SAMPLER_2D_ARRAY:\r
+ case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:\r
case GL_INT_VEC2:\r
case GL_INT_VEC3:\r
case GL_INT_VEC4:\r
return UniformTypeSize(UniformComponentType(type)) * UniformComponentCount(type);\r
}\r
\r
+ bool IsSamplerUniform(GLenum type)\r
+ {\r
+ switch(type)\r
+ {\r
+ case GL_SAMPLER_2D:\r
+ case GL_SAMPLER_CUBE:\r
+ case GL_SAMPLER_EXTERNAL_OES:\r
+ case GL_SAMPLER_3D_OES:\r
+ case GL_SAMPLER_2D_ARRAY:\r
+ case GL_SAMPLER_2D_SHADOW:\r
+ case GL_SAMPLER_CUBE_SHADOW:\r
+ case GL_SAMPLER_2D_ARRAY_SHADOW:\r
+ case GL_INT_SAMPLER_2D:\r
+ case GL_UNSIGNED_INT_SAMPLER_2D:\r
+ case GL_INT_SAMPLER_CUBE:\r
+ case GL_UNSIGNED_INT_SAMPLER_CUBE:\r
+ case GL_INT_SAMPLER_3D:\r
+ case GL_UNSIGNED_INT_SAMPLER_3D:\r
+ case GL_INT_SAMPLER_2D_ARRAY:\r
+ case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:\r
+ return true;\r
+ default:\r
+ return false;\r
+ }\r
+ }\r
+\r
int VariableRowCount(GLenum type)\r
{\r
switch(type)\r
case GL_SAMPLER_CUBE:\r
case GL_SAMPLER_EXTERNAL_OES:\r
case GL_SAMPLER_3D_OES:\r
+ case GL_SAMPLER_2D_ARRAY:\r
+ case GL_SAMPLER_2D_SHADOW:\r
+ case GL_SAMPLER_CUBE_SHADOW:\r
+ case GL_SAMPLER_2D_ARRAY_SHADOW:\r
+ case GL_INT_SAMPLER_2D:\r
+ case GL_UNSIGNED_INT_SAMPLER_2D:\r
+ case GL_INT_SAMPLER_CUBE:\r
+ case GL_UNSIGNED_INT_SAMPLER_CUBE:\r
+ case GL_INT_SAMPLER_3D:\r
+ case GL_UNSIGNED_INT_SAMPLER_3D:\r
+ case GL_INT_SAMPLER_2D_ARRAY:\r
+ case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:\r
return 1;\r
case GL_FLOAT_MAT2:\r
case GL_FLOAT_MAT3x2:\r