nir: Make nir_gather_info collect a uses_fddx_fddy flag.
i965 turns fddx/fddy into their coarse/fine variants based on the ctx->Hint.FragmentShaderDerivative setting. It needs to know whether this can impact a shader in order to better guess NOS settings. Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
@@ -280,11 +280,27 @@ gather_tex_info(nir_tex_instr *instr, nir_shader *shader)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gather_alu_info(nir_alu_instr *instr, nir_shader *shader)
|
||||||
|
{
|
||||||
|
switch (instr->op) {
|
||||||
|
case nir_op_fddx:
|
||||||
|
case nir_op_fddy:
|
||||||
|
shader->info.uses_fddx_fddy = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gather_info_block(nir_block *block, nir_shader *shader)
|
gather_info_block(nir_block *block, nir_shader *shader)
|
||||||
{
|
{
|
||||||
nir_foreach_instr(instr, block) {
|
nir_foreach_instr(instr, block) {
|
||||||
switch (instr->type) {
|
switch (instr->type) {
|
||||||
|
case nir_instr_type_alu:
|
||||||
|
gather_alu_info(nir_instr_as_alu(instr), shader);
|
||||||
|
break;
|
||||||
case nir_instr_type_intrinsic:
|
case nir_instr_type_intrinsic:
|
||||||
gather_intrinsic_info(nir_instr_as_intrinsic(instr), shader);
|
gather_intrinsic_info(nir_instr_as_intrinsic(instr), shader);
|
||||||
break;
|
break;
|
||||||
|
@@ -73,6 +73,13 @@ typedef struct shader_info {
|
|||||||
/** Bitfield of which textures are used by texelFetch() */
|
/** Bitfield of which textures are used by texelFetch() */
|
||||||
uint32_t textures_used_by_txf;
|
uint32_t textures_used_by_txf;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* True if this shader uses the fddx/fddy opcodes.
|
||||||
|
*
|
||||||
|
* Note that this does not include the "fine" and "coarse" variants.
|
||||||
|
*/
|
||||||
|
bool uses_fddx_fddy;
|
||||||
|
|
||||||
/* The size of the gl_ClipDistance[] array, if declared. */
|
/* The size of the gl_ClipDistance[] array, if declared. */
|
||||||
unsigned clip_distance_array_size;
|
unsigned clip_distance_array_size;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user