<p dir="ltr"><br>
On Jun 1, 2016 7:29 AM, "Nicolai Hähnle" <<a href="mailto:nhaehnle@gmail.com">nhaehnle@gmail.com</a>> wrote:<br>
><br>
> From: Nicolai Hähnle <<a href="mailto:nicolai.haehnle@amd.com">nicolai.haehnle@amd.com</a>><br>
><br>
> Cc: 12.0 <<a href="mailto:mesa-stable@lists.freedesktop.org">mesa-stable@lists.freedesktop.org</a>><br>
> ---<br>
>  src/gallium/auxiliary/tgsi/tgsi_scan.c | 26 ++++++++++++++++++++++++++<br>
>  src/gallium/auxiliary/tgsi/tgsi_scan.h |  1 +<br>
>  2 files changed, 27 insertions(+)<br>
><br>
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c b/src/gallium/auxiliary/tgsi/tgsi_scan.c<br>
> index 1baf031..d202ab1 100644<br>
> --- a/src/gallium/auxiliary/tgsi/tgsi_scan.c<br>
> +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c<br>
> @@ -68,6 +68,29 @@ is_texture_inst(unsigned opcode)<br>
>             tgsi_get_opcode_info(opcode)->is_tex);<br>
>  }<br>
><br>
> +<br>
> +/**<br>
> + * Is the opcode an instruction which computes a derivative explicitly or<br>
> + * implicitly?<br>
> + */<br>
> +static bool<br>
> +computes_derivative(unsigned opcode)<br>
> +{<br>
> +   if (tgsi_get_opcode_info(opcode)->is_tex) {<br>
> +      return opcode != TGSI_OPCODE_TXD &&<br>
> +             opcode != TGSI_OPCODE_TXL &&<br>
> +             opcode != TGSI_OPCODE_TXL2 &&<br>
> +             opcode != TGSI_OPCODE_TXF &&<br>
> +             opcode != TGSI_OPCODE_TXQ &&<br>
> +             opcode != TGSI_OPCODE_TXQ_LZ &&<br>
> +             opcode != TGSI_OPCODE_TXQS;</p>
<p dir="ltr">Tg4 too, I think </p>
<p dir="ltr">> +   }<br>
> +<br>
> +   return opcode == TGSI_OPCODE_DDX || opcode == TGSI_OPCODE_DDX_FINE ||<br>
> +          opcode == TGSI_OPCODE_DDY || opcode == TGSI_OPCODE_DDY_FINE;<br>
> +}<br>
> +<br>
> +<br>
>  static void<br>
>  scan_instruction(struct tgsi_shader_info *info,<br>
>                   const struct tgsi_full_instruction *fullinst,<br>
> @@ -263,6 +286,9 @@ scan_instruction(struct tgsi_shader_info *info,<br>
>     if (is_mem_inst)<br>
>        info->num_memory_instructions++;<br>
><br>
> +   if (computes_derivative(fullinst->Instruction.Opcode))<br>
> +      info->uses_derivatives = true;<br>
> +<br>
>     info->num_instructions++;<br>
>  }<br>
><br>
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.h b/src/gallium/auxiliary/tgsi/tgsi_scan.h<br>
> index 31adce7..f7eefa4 100644<br>
> --- a/src/gallium/auxiliary/tgsi/tgsi_scan.h<br>
> +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.h<br>
> @@ -115,6 +115,7 @@ struct tgsi_shader_info<br>
>     boolean writes_memory; /**< contains stores or atomics to buffers or images */<br>
>     boolean is_msaa_sampler[PIPE_MAX_SAMPLERS];<br>
>     boolean uses_doubles; /**< uses any of the double instructions */<br>
> +   boolean uses_derivatives;<br>
>     unsigned clipdist_writemask;<br>
>     unsigned culldist_writemask;<br>
>     unsigned num_written_culldistance;<br>
> --<br>
> 2.7.4<br>
><br>
> _______________________________________________<br>
> mesa-dev mailing list<br>
> <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
> <a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</p>