[Mesa-dev] [PATCH 15/34] glsl/linker: Properly error check VS-GS linkage.

Paul Berry stereotype441 at gmail.com
Thu Aug 1 07:12:23 PDT 2013


On 31 July 2013 17:22, Ian Romanick <idr at freedesktop.org> wrote:

> On 07/28/2013 11:03 PM, Paul Berry wrote:
>
>>  From section 4.3.4 (Inputs) of the GLSL 1.50 spec:
>>
>>      Geometry shader input variables get the per-vertex values written
>>      out by vertex shader output variables of the same names. Since a
>>      geometry shader operates on a set of vertices, each input varying
>>      variable (or input block, see interface blocks below) needs to be
>>      declared as an array.
>>
>> Therefore, the element type of each geometry shader input array should
>> match the type of the corresponding vertex shader output.
>> ---
>>   src/glsl/link_varyings.cpp | 11 ++++++++++-
>>   1 file changed, 10 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/glsl/link_varyings.cpp b/src/glsl/link_varyings.cpp
>> index 2c7e451..07b5699 100644
>> --- a/src/glsl/link_varyings.cpp
>> +++ b/src/glsl/link_varyings.cpp
>> @@ -68,6 +68,10 @@ cross_validate_outputs_to_**inputs(struct
>> gl_shader_program *prog,
>>      /* Find all shader inputs in the "consumer" stage.  Any variables
>> that have
>>       * matching outputs already in the symbol table must have the same
>> type and
>>       * qualifiers.
>> +    *
>> +    * Exception: if the consumer is the geometry shader, then the inputs
>> +    * should be arrays and the type of the array element should match
>> the type
>> +    * of the corresponding producer output.
>>       */
>>      foreach_list(node, consumer->ir) {
>>         ir_variable *const input = ((ir_instruction *)
>> node)->as_variable();
>> @@ -79,7 +83,12 @@ cross_validate_outputs_to_**inputs(struct
>> gl_shader_program *prog,
>>         if (output != NULL) {
>>          /* Check that the types match between stages.
>>           */
>> -        if (input->type != output->type) {
>> +         const glsl_type *type_to_match = input->type;
>> +         if (consumer->Type == GL_GEOMETRY_SHADER_ARB) {
>>
>
> Use the undecorated name.


Fixed (as well as similar corrections to patches 11, 18, and 29).


>
>
>  +            assert(type_to_match->is_**array()); /* Enforced by
>> ast_to_hir */
>> +            type_to_match = type_to_match->element_type();
>> +         }
>> +        if (type_to_match != output->type) {
>>             /* There is a bit of a special case for gl_TexCoord.  This
>>              * built-in is unsized by default.  Applications that variable
>>              * access it must redeclare it with a size.  There is some
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20130801/9d3d35eb/attachment.html>


More information about the mesa-dev mailing list