[Mesa-stable] [Mesa-dev] [PATCH 1/2] tgsi/scan: add uses_derivatives

Roland Scheidegger sroland at vmware.com
Wed Jun 1 15:06:19 UTC 2016


Am 01.06.2016 um 15:51 schrieb Brian Paul:
> On 06/01/2016 05:28 AM, Nicolai Hähnle wrote:
>> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>>
>> Cc: 12.0 <mesa-stable at lists.freedesktop.org>
>> ---
>>   src/gallium/auxiliary/tgsi/tgsi_scan.c | 26 ++++++++++++++++++++++++++
>>   src/gallium/auxiliary/tgsi/tgsi_scan.h |  1 +
>>   2 files changed, 27 insertions(+)
>>
>> diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c
>> b/src/gallium/auxiliary/tgsi/tgsi_scan.c
>> index 1baf031..d202ab1 100644
>> --- a/src/gallium/auxiliary/tgsi/tgsi_scan.c
>> +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c
>> @@ -68,6 +68,29 @@ is_texture_inst(unsigned opcode)
>>              tgsi_get_opcode_info(opcode)->is_tex);
>>   }
>>
>> +
>> +/**
>> + * Is the opcode an instruction which computes a derivative
>> explicitly or
>> + * implicitly?
>> + */
>> +static bool
>> +computes_derivative(unsigned opcode)
>> +{
>> +   if (tgsi_get_opcode_info(opcode)->is_tex) {
>> +      return opcode != TGSI_OPCODE_TXD &&
>> +             opcode != TGSI_OPCODE_TXL &&
>> +             opcode != TGSI_OPCODE_TXL2 &&
>> +             opcode != TGSI_OPCODE_TXF &&
>> +             opcode != TGSI_OPCODE_TXQ &&
>> +             opcode != TGSI_OPCODE_TXQ_LZ &&
>> +             opcode != TGSI_OPCODE_TXQS;
>> +   }
>> +
>> +   return opcode == TGSI_OPCODE_DDX || opcode == TGSI_OPCODE_DDX_FINE ||
>> +          opcode == TGSI_OPCODE_DDY || opcode == TGSI_OPCODE_DDY_FINE;
>> +}
Maybe it should handle the sample opcodes correctly too?

Roland


>> +
>> +
>>   static void
>>   scan_instruction(struct tgsi_shader_info *info,
>>                    const struct tgsi_full_instruction *fullinst,
>> @@ -263,6 +286,9 @@ scan_instruction(struct tgsi_shader_info *info,
>>      if (is_mem_inst)
>>         info->num_memory_instructions++;
>>
>> +   if (computes_derivative(fullinst->Instruction.Opcode))
>> +      info->uses_derivatives = true;
>> +
>>      info->num_instructions++;
>>   }
>>
>> diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.h
>> b/src/gallium/auxiliary/tgsi/tgsi_scan.h
>> index 31adce7..f7eefa4 100644
>> --- a/src/gallium/auxiliary/tgsi/tgsi_scan.h
>> +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.h
>> @@ -115,6 +115,7 @@ struct tgsi_shader_info
>>      boolean writes_memory; /**< contains stores or atomics to buffers
>> or images */
>>      boolean is_msaa_sampler[PIPE_MAX_SAMPLERS];
>>      boolean uses_doubles; /**< uses any of the double instructions */
>> +   boolean uses_derivatives;
>>      unsigned clipdist_writemask;
>>      unsigned culldist_writemask;
>>      unsigned num_written_culldistance;
>>
> 
> Reviewed-by: Brian Paul <brianp at vmware.com>
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev



More information about the mesa-stable mailing list