|
|
@@ -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 |