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.haeh...@amd.com> >> >> Cc: 12.0 <mesa-sta...@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 <bri...@vmware.com> > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev