Commit ceb1048f by Olli Etuaho Committed by Commit Bot

Add classification of image type enums

Implement classifying image enums in utilities and plumb the image type check to Uniform objects as well. This functionality will be used to add API support for images. BUG=angleproject:1442 Change-Id: Idd2ee5ebacd38290aeeace1177165c740bc42c7e Reviewed-on: https://chromium-review.googlesource.com/441585 Commit-Queue: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org>
parent dbffdfbd
...@@ -145,7 +145,19 @@ GLenum VariableComponentType(GLenum type) ...@@ -145,7 +145,19 @@ GLenum VariableComponentType(GLenum type)
case GL_INT_VEC2: case GL_INT_VEC2:
case GL_INT_VEC3: case GL_INT_VEC3:
case GL_INT_VEC4: case GL_INT_VEC4:
return GL_INT; case GL_IMAGE_2D:
case GL_INT_IMAGE_2D:
case GL_UNSIGNED_INT_IMAGE_2D:
case GL_IMAGE_3D:
case GL_INT_IMAGE_3D:
case GL_UNSIGNED_INT_IMAGE_3D:
case GL_IMAGE_2D_ARRAY:
case GL_INT_IMAGE_2D_ARRAY:
case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:
case GL_IMAGE_CUBE:
case GL_INT_IMAGE_CUBE:
case GL_UNSIGNED_INT_IMAGE_CUBE:
return GL_INT;
case GL_UNSIGNED_INT: case GL_UNSIGNED_INT:
case GL_UNSIGNED_INT_VEC2: case GL_UNSIGNED_INT_VEC2:
case GL_UNSIGNED_INT_VEC3: case GL_UNSIGNED_INT_VEC3:
...@@ -316,7 +328,19 @@ int VariableColumnCount(GLenum type) ...@@ -316,7 +328,19 @@ int VariableColumnCount(GLenum type)
case GL_SAMPLER_2D_SHADOW: case GL_SAMPLER_2D_SHADOW:
case GL_SAMPLER_CUBE_SHADOW: case GL_SAMPLER_CUBE_SHADOW:
case GL_SAMPLER_2D_ARRAY_SHADOW: case GL_SAMPLER_2D_ARRAY_SHADOW:
return 1; case GL_IMAGE_2D:
case GL_INT_IMAGE_2D:
case GL_UNSIGNED_INT_IMAGE_2D:
case GL_IMAGE_3D:
case GL_INT_IMAGE_3D:
case GL_UNSIGNED_INT_IMAGE_3D:
case GL_IMAGE_2D_ARRAY:
case GL_INT_IMAGE_2D_ARRAY:
case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:
case GL_IMAGE_CUBE:
case GL_INT_IMAGE_CUBE:
case GL_UNSIGNED_INT_IMAGE_CUBE:
return 1;
case GL_BOOL_VEC2: case GL_BOOL_VEC2:
case GL_FLOAT_VEC2: case GL_FLOAT_VEC2:
case GL_INT_VEC2: case GL_INT_VEC2:
...@@ -377,6 +401,34 @@ bool IsSamplerType(GLenum type) ...@@ -377,6 +401,34 @@ bool IsSamplerType(GLenum type)
return false; return false;
} }
bool IsImageType(GLenum type)
{
switch (type)
{
case GL_IMAGE_2D:
case GL_INT_IMAGE_2D:
case GL_UNSIGNED_INT_IMAGE_2D:
case GL_IMAGE_3D:
case GL_INT_IMAGE_3D:
case GL_UNSIGNED_INT_IMAGE_3D:
case GL_IMAGE_2D_ARRAY:
case GL_INT_IMAGE_2D_ARRAY:
case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:
case GL_IMAGE_CUBE:
case GL_INT_IMAGE_CUBE:
case GL_UNSIGNED_INT_IMAGE_CUBE:
return true;
}
return false;
}
bool IsOpaqueType(GLenum type)
{
// ESSL 3.10 section 4.1.7 defines opaque types as: samplers, images and atomic counters.
// TODO(oetuaho): add atomic types
return IsImageType(type) || IsSamplerType(type);
}
GLenum SamplerTypeToTextureType(GLenum samplerType) GLenum SamplerTypeToTextureType(GLenum samplerType)
{ {
switch (samplerType) switch (samplerType)
......
...@@ -30,6 +30,8 @@ GLenum VariableBoolVectorType(GLenum type); ...@@ -30,6 +30,8 @@ GLenum VariableBoolVectorType(GLenum type);
int VariableRowCount(GLenum type); int VariableRowCount(GLenum type);
int VariableColumnCount(GLenum type); int VariableColumnCount(GLenum type);
bool IsSamplerType(GLenum type); bool IsSamplerType(GLenum type);
bool IsImageType(GLenum type);
bool IsOpaqueType(GLenum type);
GLenum SamplerTypeToTextureType(GLenum samplerType); GLenum SamplerTypeToTextureType(GLenum samplerType);
bool IsMatrixType(GLenum type); bool IsMatrixType(GLenum type);
GLenum TransposeMatrixType(GLenum type); GLenum TransposeMatrixType(GLenum type);
......
...@@ -99,6 +99,11 @@ bool LinkedUniform::isSampler() const ...@@ -99,6 +99,11 @@ bool LinkedUniform::isSampler() const
return IsSamplerType(type); return IsSamplerType(type);
} }
bool LinkedUniform::isImage() const
{
return IsImageType(type);
}
bool LinkedUniform::isField() const bool LinkedUniform::isField() const
{ {
return name.find('.') != std::string::npos; return name.find('.') != std::string::npos;
......
...@@ -33,6 +33,7 @@ struct LinkedUniform : public sh::Uniform ...@@ -33,6 +33,7 @@ struct LinkedUniform : public sh::Uniform
uint8_t *data(); uint8_t *data();
const uint8_t *data() const; const uint8_t *data() const;
bool isSampler() const; bool isSampler() const;
bool isImage() const;
bool isInDefaultBlock() const; bool isInDefaultBlock() const;
bool isField() const; bool isField() const;
size_t getElementSize() const; size_t getElementSize() const;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment