tgsi/scan: add uses_derivatives (v2)
v2: - TG4 does not calculate derivatives (Ilia) - also handle SAMPLE* instructions (Roland) Cc: 12.0 <mesa-stable@lists.freedesktop.org> Reviewed-by: Marek Olšák <marek.olsak@amd.com> (v1) Reviewed-by: Brian Paul <brianp@vmware.com> (v1) Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Roland Scheidegger <sroland@vmware.com>
This commit is contained in:
parent
b7a0c0ec7f
commit
d3a584defe
|
@ -68,6 +68,33 @@ 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_TG4 &&
|
||||
opcode != TGSI_OPCODE_TXD &&
|
||||
opcode != TGSI_OPCODE_TXF &&
|
||||
opcode != TGSI_OPCODE_TXL &&
|
||||
opcode != TGSI_OPCODE_TXL2 &&
|
||||
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 ||
|
||||
opcode == TGSI_OPCODE_SAMPLE ||
|
||||
opcode == TGSI_OPCODE_SAMPLE_B ||
|
||||
opcode == TGSI_OPCODE_SAMPLE_C;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
scan_instruction(struct tgsi_shader_info *info,
|
||||
const struct tgsi_full_instruction *fullinst,
|
||||
|
@ -263,6 +290,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++;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue