[Mesa-dev] [PATCH 1/2] glsl: move max_index calc to assign_attribute_or_color_locations

Timothy Arceri t_arceri at yahoo.com.au
Tue Jul 28 15:37:42 PDT 2015


On Tue, 2015-07-28 at 13:37 +0300, Tapani Pälli wrote:
> Change function to get all gl_constants for inspection, this is used
> by follow-up patch.
> 
> v2: rebase, update function documentation
> 
> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
> ---
>  src/glsl/linker.cpp | 23 +++++++++++++++--------
>  1 file changed, 15 insertions(+), 8 deletions(-)
> 
> diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
> index 8f2c8ee..c8d2e8e 100644
> --- a/src/glsl/linker.cpp
> +++ b/src/glsl/linker.cpp
> @@ -2313,12 +2313,10 @@ find_available_slots(unsigned used_mask, unsigned 
> needed_count)
>   * Assign locations for either VS inputs or FS outputs
>   *
>   * \param prog          Shader program whose variables need locations 
> assigned
> + * \param constants     Driver specific constant values for the program.
>   * \param target_index  Selector for the program target to receive location
>   *                      assignmnets.  Must be either \c MESA_SHADER_VERTEX 
> or
>   *                      \c MESA_SHADER_FRAGMENT.
> - * \param max_index     Maximum number of generic locations.  This 
> corresponds
> - *                      to either the maximum number of draw buffers or the
> - *                      maximum number of generic attributes.
>   *
>   * \return
>   * If locations are successfully assigned, true is returned.  Otherwise an
> @@ -2326,9 +2324,17 @@ find_available_slots(unsigned used_mask, unsigned 
> needed_count)
>   */
>  bool
>  assign_attribute_or_color_locations(gl_shader_program *prog,
> -				    unsigned target_index,
> -				    unsigned max_index)
> +                                    struct gl_constants *constants,
> +                                    unsigned target_index)
>  {
> +   /* Maximum number of generic locations.  This corresponds to either the
> +    * maximum number of draw buffers or the maximum number of generic
> +    * attributes.
> +    */
> +   unsigned max_index = (target_index == MESA_SHADER_VERTEX) ?
> +      constants->Program[target_index].MaxAttribs :
> +      MAX2(constants->MaxDrawBuffers, constants->MaxDualSourceDrawBuffers);
> +
>     /* Mark invalid locations as being used.
>      */
>     unsigned used_locations = (max_index >= 32)
> @@ -3648,12 +3654,13 @@ link_shaders(struct gl_context *ctx, struct 
> gl_shader_program *prog)
>        }
>     }
>  
> -   if (!assign_attribute_or_color_locations(prog, MESA_SHADER_VERTEX,
> -                                            ctx
> ->Const.Program[MESA_SHADER_VERTEX].MaxAttribs)) {
> +   if (!assign_attribute_or_color_locations(prog, &ctx->Const,
> +                                            MESA_SHADER_VERTEX)) {
>        goto done;
>     }

It might be nice to combine the if statements.

   if (!assign_attribute_or_color_locations(prog, &ctx->Const,
                                            MESA_SHADER_VERTEX) ||
       !assign_attribute_or_color_locations(prog, &ctx->Const,
                                            MESA_SHADER_FRAGMENT)) {
        goto done;
   }
But not a big deal. Either way both are Reviewed-by: Timothy Arceri
<t_arceri at yahoo.com.au>


>  
> -   if (!assign_attribute_or_color_locations(prog, MESA_SHADER_FRAGMENT, 
> MAX2(ctx->Const.MaxDrawBuffers, ctx->Const.MaxDualSourceDrawBuffers))) {
> +   if (!assign_attribute_or_color_locations(prog, &ctx->Const,
> +                                            MESA_SHADER_FRAGMENT)) {
>        goto done;
>     }
>  


More information about the mesa-dev mailing list