[Mesa-dev] [PATCH v3 05/10] tgsi/text: parse _PRECISE modifier

Nicolai Hähnle nhaehnle at gmail.com
Tue Jun 20 10:22:18 UTC 2017


On 16.06.2017 21:08, Karol Herbst wrote:
> v2: use str_match_no_case to fix _SAT_PRECISE detection
> 
> Signed-off-by: Karol Herbst <karolherbst at gmail.com>
> ---
>   src/gallium/auxiliary/tgsi/tgsi_text.c | 17 ++++++++++++++---
>   1 file changed, 14 insertions(+), 3 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_text.c b/src/gallium/auxiliary/tgsi/tgsi_text.c
> index 93a05568f4..70ec0e4bc9 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_text.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_text.c
> @@ -999,6 +999,7 @@ parse_texoffset_operand(
>   static boolean
>   match_inst(const char **pcur,
>              unsigned *saturate,
> +           unsigned *precise,
>              const struct tgsi_opcode_info *info)
>   {
>      const char *cur = *pcur;
> @@ -1007,16 +1008,24 @@ match_inst(const char **pcur,
>      if (str_match_nocase_whole(&cur, info->mnemonic)) {
>         *pcur = cur;
>         *saturate = 0;
> +      *precise = 0;
>         return TRUE;
>      }
>   
>      if (str_match_no_case(&cur, info->mnemonic)) {
>         /* the instruction has a suffix, figure it out */
> -      if (str_match_nocase_whole(&cur, "_SAT")) {
> +      if (str_match_no_case(&cur, "_SAT")) {
>            *pcur = cur;
>            *saturate = 1;
> -         return TRUE;
>         }
> +
> +      if (str_match_no_case(&cur, "_PRECISE")) {
> +         *pcur = cur;
> +         *precise = 1;
> +      }
> +
> +      if (*precise || *saturate)
> +         return TRUE;

I think this should instead be

if (!is_digit_alpha_underscore(cur))
    return TRUE;

to mirror what str_match_nocase_whole does. Otherwise, we wouldn't flag 
garbage after the suffixes.

With that fixed, patches 1-5:

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


>      }
>   
>      return FALSE;
> @@ -1029,6 +1038,7 @@ parse_instruction(
>   {
>      uint i;
>      uint saturate = 0;
> +   uint precise = 0;
>      const struct tgsi_opcode_info *info;
>      struct tgsi_full_instruction inst;
>      const char *cur;
> @@ -1043,7 +1053,7 @@ parse_instruction(
>         cur = ctx->cur;
>   
>         info = tgsi_get_opcode_info( i );
> -      if (match_inst(&cur, &saturate, info)) {
> +      if (match_inst(&cur, &saturate, &precise, info)) {
>            if (info->num_dst + info->num_src + info->is_tex == 0) {
>               ctx->cur = cur;
>               break;
> @@ -1064,6 +1074,7 @@ parse_instruction(
>   
>      inst.Instruction.Opcode = i;
>      inst.Instruction.Saturate = saturate;
> +   inst.Instruction.Precise = precise;
>      inst.Instruction.NumDstRegs = info->num_dst;
>      inst.Instruction.NumSrcRegs = info->num_src;
>   
> 


-- 
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.


More information about the mesa-dev mailing list