[Mesa-dev] [PATCH 3/3] tgsi/scan: set which color components are read by a fragment shader

Nicolai Hähnle nhaehnle at gmail.com
Wed Jan 6 06:35:32 PST 2016


On 05.01.2016 20:46, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> This will be used by radeonsi.
> ---
>   src/gallium/auxiliary/tgsi/tgsi_scan.c | 30 ++++++++++++++++++++++--------
>   src/gallium/auxiliary/tgsi/tgsi_scan.h |  1 +
>   2 files changed, 23 insertions(+), 8 deletions(-)
>
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c b/src/gallium/auxiliary/tgsi/tgsi_scan.c
> index e3a6fb0..6ea32ee 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_scan.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c
> @@ -187,14 +187,28 @@ tgsi_scan_shader(const struct tgsi_token *tokens,
>                     }
>
>                     if (procType == TGSI_PROCESSOR_FRAGMENT &&
> -		      !src->Register.Indirect &&
> -		      info->input_semantic_name[src->Register.Index] ==
> -		      TGSI_SEMANTIC_POSITION &&
> -                      (src->Register.SwizzleX == TGSI_SWIZZLE_Z ||
> -                       src->Register.SwizzleY == TGSI_SWIZZLE_Z ||
> -                       src->Register.SwizzleZ == TGSI_SWIZZLE_Z ||
> -                       src->Register.SwizzleW == TGSI_SWIZZLE_Z)) {
> -                     info->reads_z = TRUE;
> +                      !src->Register.Indirect) {
> +                     unsigned name =
> +                        info->input_semantic_name[src->Register.Index];
> +                     unsigned index =
> +                        info->input_semantic_index[src->Register.Index];

Move index down into the TGSI_SEMANTIC_COLOR branch? Either way,

Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>

> +
> +                     if (name == TGSI_SEMANTIC_POSITION &&
> +                         (src->Register.SwizzleX == TGSI_SWIZZLE_Z ||
> +                          src->Register.SwizzleY == TGSI_SWIZZLE_Z ||
> +                          src->Register.SwizzleZ == TGSI_SWIZZLE_Z ||
> +                          src->Register.SwizzleW == TGSI_SWIZZLE_Z))
> +                        info->reads_z = TRUE;
> +
> +                     if (name == TGSI_SEMANTIC_COLOR) {
> +                        unsigned mask =
> +                              (1 << src->Register.SwizzleX) |
> +                              (1 << src->Register.SwizzleY) |
> +                              (1 << src->Register.SwizzleZ) |
> +                              (1 << src->Register.SwizzleW);
> +
> +                        info->colors_read |= mask << (index * 4);
> +                     }
>                     }
>                  }
>
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.h b/src/gallium/auxiliary/tgsi/tgsi_scan.h
> index a3e4378..b0b423a 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_scan.h
> +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.h
> @@ -77,6 +77,7 @@ struct tgsi_shader_info
>
>      uint opcode_count[TGSI_OPCODE_LAST];  /**< opcode histogram */
>
> +   ubyte colors_read; /**< which color components are read by the FS */
>      ubyte colors_written;
>      boolean reads_position; /**< does fragment shader read position? */
>      boolean reads_z; /**< does fragment shader read depth? */
>


More information about the mesa-dev mailing list