mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 11:48:06 +02:00
i965/fs: Implement texture projection support.
Our fragment program backend implements support for TXP directly, and there's no NIR lowering pass to remove the projection. When we switch fragment program support over to NIR, we need to support it somehow. It's easy enough to support directly. v2: Split out offset/tex_offset rename (requested by Jordan). Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
parent
0a9bcf9e39
commit
649173b473
1 changed files with 10 additions and 1 deletions
|
|
@ -1744,6 +1744,7 @@ fs_visitor::nir_emit_texture(nir_tex_instr *instr)
|
|||
int lod_components = 0, offset_components = 0;
|
||||
|
||||
fs_reg coordinate, shadow_comparitor, lod, lod2, sample_index, mcs, tex_offset;
|
||||
fs_reg projector;
|
||||
|
||||
for (unsigned i = 0; i < instr->num_srcs; i++) {
|
||||
fs_reg src = get_nir_src(instr->src[i].src);
|
||||
|
|
@ -1796,7 +1797,8 @@ fs_visitor::nir_emit_texture(nir_tex_instr *instr)
|
|||
offset_components = instr->coord_components;
|
||||
break;
|
||||
case nir_tex_src_projector:
|
||||
unreachable("should be lowered");
|
||||
projector = retype(src, BRW_REGISTER_TYPE_F);
|
||||
break;
|
||||
|
||||
case nir_tex_src_sampler_offset: {
|
||||
/* Figure out the highest possible sampler index and mark it as used */
|
||||
|
|
@ -1820,6 +1822,13 @@ fs_visitor::nir_emit_texture(nir_tex_instr *instr)
|
|||
}
|
||||
}
|
||||
|
||||
if (projector.file != BAD_FILE) {
|
||||
fs_reg invproj = vgrf(glsl_type::float_type);
|
||||
emit_math(SHADER_OPCODE_RCP, invproj, projector);
|
||||
for (int i = 0; i < 3; i++)
|
||||
emit(MUL(offset(coordinate, i), offset(coordinate, i), invproj));
|
||||
}
|
||||
|
||||
if (instr->op == nir_texop_txf_ms) {
|
||||
if (brw->gen >= 7 &&
|
||||
key_tex->compressed_multisample_layout_mask & (1 << sampler)) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue