summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuan A. Suarez Romero <[email protected]>2016-10-27 12:36:09 +0200
committerJuan A. Suarez Romero <[email protected]>2016-10-27 12:36:09 +0200
commit5d83820a1d4f6b2390520d2335848d351db13fd7 (patch)
tree0724f73a94579504af35c655c576d9d5be384527
parent66fcfa6894ab61a8cb70955f4a4113729e4a8099 (diff)
glsl: inspect interfaces in contains_foo()
When checking if a type contains doubles, integers, samples, etc. we check if the current type is a record or array, but not if it is an interface. This commit also inspects if the type is an interface. It fixes spec/arb_enhanced_layouts/compiler/transform-feedback-layout-qualifiers/xfb_offset/invalid-block-with-double.vert piglit test. Reviewed-by: Timothy Arceri <[email protected]>
-rw-r--r--src/compiler/glsl_types.cpp11
-rw-r--r--src/compiler/glsl_types.h16
2 files changed, 14 insertions, 13 deletions
diff --git a/src/compiler/glsl_types.cpp b/src/compiler/glsl_types.cpp
index 55e5285f6c1..44cd2acb61d 100644
--- a/src/compiler/glsl_types.cpp
+++ b/src/compiler/glsl_types.cpp
@@ -248,7 +248,7 @@ glsl_type::contains_sampler() const
{
if (this->is_array()) {
return this->fields.array->contains_sampler();
- } else if (this->is_record()) {
+ } else if (this->is_record() || this->is_interface()) {
for (unsigned int i = 0; i < this->length; i++) {
if (this->fields.structure[i].type->contains_sampler())
return true;
@@ -265,7 +265,7 @@ glsl_type::contains_integer() const
{
if (this->is_array()) {
return this->fields.array->contains_integer();
- } else if (this->is_record()) {
+ } else if (this->is_record() || this->is_interface()) {
for (unsigned int i = 0; i < this->length; i++) {
if (this->fields.structure[i].type->contains_integer())
return true;
@@ -281,7 +281,7 @@ glsl_type::contains_double() const
{
if (this->is_array()) {
return this->fields.array->contains_double();
- } else if (this->is_record()) {
+ } else if (this->is_record() || this->is_interface()) {
for (unsigned int i = 0; i < this->length; i++) {
if (this->fields.structure[i].type->contains_double())
return true;
@@ -302,6 +302,7 @@ glsl_type::contains_opaque() const {
case GLSL_TYPE_ARRAY:
return fields.array->contains_opaque();
case GLSL_TYPE_STRUCT:
+ case GLSL_TYPE_INTERFACE:
for (unsigned int i = 0; i < length; i++) {
if (fields.structure[i].type->contains_opaque())
return true;
@@ -317,7 +318,7 @@ glsl_type::contains_subroutine() const
{
if (this->is_array()) {
return this->fields.array->contains_subroutine();
- } else if (this->is_record()) {
+ } else if (this->is_record() || this->is_interface()) {
for (unsigned int i = 0; i < this->length; i++) {
if (this->fields.structure[i].type->contains_subroutine())
return true;
@@ -363,7 +364,7 @@ glsl_type::contains_image() const
{
if (this->is_array()) {
return this->fields.array->contains_image();
- } else if (this->is_record()) {
+ } else if (this->is_record() || this->is_interface()) {
for (unsigned int i = 0; i < this->length; i++) {
if (this->fields.structure[i].type->contains_image())
return true;
diff --git a/src/compiler/glsl_types.h b/src/compiler/glsl_types.h
index e5b9f3ba03d..f607dd8bc37 100644
--- a/src/compiler/glsl_types.h
+++ b/src/compiler/glsl_types.h
@@ -473,14 +473,14 @@ struct glsl_type {
}
/**
- * Query whether or not type is an integral type, or for struct and array
- * types, contains an integral type.
+ * Query whether or not type is an integral type, or for struct, interface
+ * and array types, contains an integral type.
*/
bool contains_integer() const;
/**
- * Query whether or not type is a double type, or for struct and array
- * types, contains a double type.
+ * Query whether or not type is a double type, or for struct, interface and
+ * array types, contains a double type.
*/
bool contains_double() const;
@@ -533,8 +533,8 @@ struct glsl_type {
}
/**
- * Query whether or not type is a sampler, or for struct and array
- * types, contains a sampler.
+ * Query whether or not type is a sampler, or for struct, interface and
+ * array types, contains a sampler.
*/
bool contains_sampler() const;
@@ -544,8 +544,8 @@ struct glsl_type {
gl_texture_index sampler_index() const;
/**
- * Query whether or not type is an image, or for struct and array
- * types, contains an image.
+ * Query whether or not type is an image, or for struct, interface and
+ * array types, contains an image.
*/
bool contains_image() const;