diff options
author | Paul Berry <[email protected]> | 2013-07-31 08:15:08 -0700 |
---|---|---|
committer | Paul Berry <[email protected]> | 2013-08-01 20:19:02 -0700 |
commit | 0026ad4994ca88a6cdd4e5ef4098469ab57bdcc1 (patch) | |
tree | b3ea77af8a0ae4c5a9482b3fe0b386b53ec4aa01 /src/glsl/linker.cpp | |
parent | 906eff09e374c75b0486011b73b7048f6070456e (diff) |
Move count_attribute_slots() out of the linker and into glsl_type.
Our previous justification for leaving this function out of glsl_type
was that it implemented counting rules that were specific to GLSL
1.50. However, these counting rules also describe the number of
varying slots that Mesa will assign to a varying in the absence of
varying packing. That's useful to be able to compute from outside of
the linker code (a future patch will use it from
ir_set_program_inouts.cpp). So go ahead and move it to glsl_type.
Reviewed-by: Ian Romanick <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/glsl/linker.cpp')
-rw-r--r-- | src/glsl/linker.cpp | 37 |
1 files changed, 1 insertions, 36 deletions
diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp index 942f9061596..82075cbc0e3 100644 --- a/src/glsl/linker.cpp +++ b/src/glsl/linker.cpp @@ -298,41 +298,6 @@ link_invalidate_variable_locations(gl_shader *sh, int input_base, /** - * Determine the number of attribute slots required for a particular type - * - * This code is here because it implements the language rules of a specific - * GLSL version. Since it's a property of the language and not a property of - * types in general, it doesn't really belong in glsl_type. - */ -unsigned -count_attribute_slots(const glsl_type *t) -{ - /* From page 31 (page 37 of the PDF) of the GLSL 1.50 spec: - * - * "A scalar input counts the same amount against this limit as a vec4, - * so applications may want to consider packing groups of four - * unrelated float inputs together into a vector to better utilize the - * capabilities of the underlying hardware. A matrix input will use up - * multiple locations. The number of locations used will equal the - * number of columns in the matrix." - * - * The spec does not explicitly say how arrays are counted. However, it - * should be safe to assume the total number of slots consumed by an array - * is the number of entries in the array multiplied by the number of slots - * consumed by a single element of the array. - */ - - if (t->is_array()) - return t->array_size() * count_attribute_slots(t->element_type()); - - if (t->is_matrix()) - return t->matrix_columns; - - return 1; -} - - -/** * Verify that a vertex shader executable meets all semantic requirements. * * Also sets prog->Vert.UsesClipDistance and prog->Vert.ClipDistanceArraySize @@ -1334,7 +1299,7 @@ assign_attribute_or_color_locations(gl_shader_program *prog, * that it doesn't collide with other assigned locations. Otherwise, * add it to the list of variables that need linker-assigned locations. */ - const unsigned slots = count_attribute_slots(var->type); + const unsigned slots = var->type->count_attribute_slots(); if (var->location != -1) { if (var->location >= generic_base && var->index < 1) { /* From page 61 of the OpenGL 4.0 spec: |