diff options
author | Jason Ekstrand <[email protected]> | 2014-10-15 12:18:25 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2015-01-15 07:18:59 -0800 |
commit | c181ff268e4787056fdee417d30d52b1098fe211 (patch) | |
tree | ebec7a4aef91300aa494adee49a3ad599d3b4ae4 | |
parent | c2ded36bb60d3dfad0036dac7adbf7718968ccf2 (diff) |
i965/fs_nir: Use the correct types for texture inputs
Reviewed-by: Connor Abbott <[email protected]>
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp index 6d1fbf6a354..2f2ebe80cf5 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp @@ -1563,29 +1563,47 @@ fs_visitor::nir_emit_texture(nir_tex_instr *instr) fs_reg src = get_nir_src(instr->src[i]); switch (instr->src_type[i]) { case nir_tex_src_bias: - lod = src; + lod = retype(src, BRW_REGISTER_TYPE_F); break; case nir_tex_src_comparitor: - shadow_comparitor = src; + shadow_comparitor = retype(src, BRW_REGISTER_TYPE_F); break; case nir_tex_src_coord: - coordinate = src; + switch (instr->op) { + case nir_texop_txf: + case nir_texop_txf_ms: + coordinate = retype(src, BRW_REGISTER_TYPE_D); + break; + default: + coordinate = retype(src, BRW_REGISTER_TYPE_F); + break; + } break; case nir_tex_src_ddx: - lod = src; + lod = retype(src, BRW_REGISTER_TYPE_F); lod_components = nir_tex_instr_src_size(instr, i); break; case nir_tex_src_ddy: - lod2 = src; + lod2 = retype(src, BRW_REGISTER_TYPE_F); break; case nir_tex_src_lod: - lod = src; + switch (instr->op) { + case nir_texop_txs: + lod = retype(src, BRW_REGISTER_TYPE_UD); + break; + case nir_texop_txf: + lod = retype(src, BRW_REGISTER_TYPE_D); + break; + default: + lod = retype(src, BRW_REGISTER_TYPE_F); + break; + } break; case nir_tex_src_ms_index: sample_index = retype(src, BRW_REGISTER_TYPE_UD); break; case nir_tex_src_offset: - offset = src; + offset = retype(src, BRW_REGISTER_TYPE_D); if (instr->is_array) offset_components = instr->coord_components - 1; else |