Browse Source

glsl: add helper for counting varyings

This will be used to get a count of the number of varying name
strings we are required to generate for use with the query api.

Reviewed-by: Dave Airlie <airlied@redhat.com>
tags/12.0-branchpoint
Timothy Arceri 9 years ago
parent
commit
8b6f8fe503
2 changed files with 38 additions and 0 deletions
  1. 32
    0
      src/compiler/glsl_types.cpp
  2. 6
    0
      src/compiler/glsl_types.h

+ 32
- 0
src/compiler/glsl_types.cpp View File

@@ -1350,6 +1350,38 @@ glsl_type::uniform_locations() const
}
}

unsigned
glsl_type::varying_count() const
{
unsigned size = 0;

switch (this->base_type) {
case GLSL_TYPE_UINT:
case GLSL_TYPE_INT:
case GLSL_TYPE_FLOAT:
case GLSL_TYPE_DOUBLE:
case GLSL_TYPE_BOOL:
return 1;

case GLSL_TYPE_STRUCT:
case GLSL_TYPE_INTERFACE:
for (unsigned i = 0; i < this->length; i++)
size += this->fields.structure[i].type->varying_count();
return size;
case GLSL_TYPE_ARRAY:
/* Don't count innermost array elements */
if (this->without_array()->is_record() ||
this->without_array()->is_interface() ||
this->fields.array->is_array())
return this->length * this->fields.array->varying_count();
else
return this->fields.array->varying_count();
default:
assert(!"unsupported varying type");
return 0;
}
}

bool
glsl_type::can_implicitly_convert_to(const glsl_type *desired,
_mesa_glsl_parse_state *state) const

+ 6
- 0
src/compiler/glsl_types.h View File

@@ -326,6 +326,12 @@ struct glsl_type {
*/
unsigned uniform_locations() const;

/**
* Used to count the number of varyings contained in the type ignoring
* innermost array elements.
*/
unsigned varying_count() const;

/**
* Calculate the number of attribute slots required to hold this type
*

Loading…
Cancel
Save