mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-07 21:40:20 +01:00
nir: Add nir_texop_samples_identical opcode
This is the NIR analog to GLSL IR ir_samples_identical. v2: Don't add the second nir_tex_src_ms_index parameter. Suggested by Ken and Jason. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com> Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
This commit is contained in:
parent
06c56f443a
commit
457bb290ef
6 changed files with 18 additions and 1 deletions
|
|
@ -1624,6 +1624,7 @@ emit_tex(struct ir3_compile *ctx, nir_tex_instr *tex)
|
|||
case nir_texop_tg4:
|
||||
case nir_texop_query_levels:
|
||||
case nir_texop_texture_samples:
|
||||
case nir_texop_samples_identical:
|
||||
compile_error(ctx, "Unhandled NIR tex type: %d\n", tex->op);
|
||||
return;
|
||||
}
|
||||
|
|
@ -1889,6 +1890,8 @@ emit_instr(struct ir3_compile *ctx, nir_instr *instr)
|
|||
case nir_texop_query_levels:
|
||||
emit_tex_query_levels(ctx, tex);
|
||||
break;
|
||||
case nir_texop_samples_identical:
|
||||
unreachable("nir_texop_samples_identical");
|
||||
default:
|
||||
emit_tex(ctx, tex);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1798,6 +1798,11 @@ nir_visitor::visit(ir_texture *ir)
|
|||
num_srcs = 0;
|
||||
break;
|
||||
|
||||
case ir_samples_identical:
|
||||
op = nir_texop_samples_identical;
|
||||
num_srcs = 1; /* coordinate */
|
||||
break;
|
||||
|
||||
default:
|
||||
unreachable("not reached");
|
||||
}
|
||||
|
|
@ -1825,6 +1830,7 @@ nir_visitor::visit(ir_texture *ir)
|
|||
case GLSL_TYPE_INT:
|
||||
instr->dest_type = nir_type_int;
|
||||
break;
|
||||
case GLSL_TYPE_BOOL:
|
||||
case GLSL_TYPE_UINT:
|
||||
instr->dest_type = nir_type_unsigned;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -956,6 +956,9 @@ typedef enum {
|
|||
nir_texop_tg4, /**< Texture gather */
|
||||
nir_texop_query_levels, /**< Texture levels query */
|
||||
nir_texop_texture_samples, /**< Texture samples query */
|
||||
nir_texop_samples_identical, /**< Query whether all samples are definitely
|
||||
* identical.
|
||||
*/
|
||||
} nir_texop;
|
||||
|
||||
typedef struct {
|
||||
|
|
@ -1029,6 +1032,7 @@ nir_tex_instr_dest_size(nir_tex_instr *instr)
|
|||
|
||||
case nir_texop_texture_samples:
|
||||
case nir_texop_query_levels:
|
||||
case nir_texop_samples_identical:
|
||||
return 1;
|
||||
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -512,7 +512,9 @@ print_tex_instr(nir_tex_instr *instr, print_state *state)
|
|||
case nir_texop_texture_samples:
|
||||
fprintf(fp, "texture_samples ");
|
||||
break;
|
||||
|
||||
case nir_texop_samples_identical:
|
||||
fprintf(fp, "samples_identical ");
|
||||
break;
|
||||
default:
|
||||
unreachable("Invalid texture operation");
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -2733,6 +2733,7 @@ fs_visitor::nir_emit_texture(const fs_builder &bld, nir_tex_instr *instr)
|
|||
inst->base_mrf = -1;
|
||||
return;
|
||||
}
|
||||
case nir_texop_samples_identical: op = ir_samples_identical; break;
|
||||
default:
|
||||
unreachable("unknown texture opcode");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1545,6 +1545,7 @@ ir_texture_opcode_for_nir_texop(nir_texop texop)
|
|||
case nir_texop_txf_ms: op = ir_txf_ms; break;
|
||||
case nir_texop_txl: op = ir_txl; break;
|
||||
case nir_texop_txs: op = ir_txs; break;
|
||||
case nir_texop_samples_identical: op = ir_samples_identical; break;
|
||||
default:
|
||||
unreachable("unknown texture opcode");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue