diff options
author | Jason Ekstrand <jason.ekstrand@intel.com> | 2017-03-29 15:16:15 -0700 |
---|---|---|
committer | Emil Velikov <emil.l.velikov@gmail.com> | 2017-04-12 11:32:27 +0100 |
commit | f77cecf08cf9fba5e8f62e8ac1731c1916a97618 (patch) | |
tree | c19459150438e4ca02961e396461195cf6c95857 /src/mesa/drivers | |
parent | d20d8fdc1d4241d364627e2298d1ed0bc8d72013 (diff) |
i965/fs: Always provide a default LOD of 0 for TXS and TXL
We already provide a default LOD for textureQueryLevels and texture() on
non-fragment stages. However, there are more cases where one is needed
such as textureSize(gsampler2DMS*) in SPIR-V. Instead of trying to list
out all of the cases one at a time, just provide the default for all TXS
and TXL operations. This fixes a shader validation error in the new
Sascha deferredmultisampling demo which uses textureSize(gsampler2DMS).
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100391
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Cc: "13.0 17.0" <mesa-stable@lists.freedesktop.org>
(cherry picked from commit 3503b2714b98684a2ceba5f4fd9a5bfbfbcaad38)
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp index b84ecc9ac49..66e2f0cb9e6 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp @@ -4377,15 +4377,6 @@ fs_visitor::nir_emit_texture(const fs_builder &bld, nir_tex_instr *instr) srcs[TEX_LOGICAL_SRC_COORD_COMPONENTS] = brw_imm_d(instr->coord_components); srcs[TEX_LOGICAL_SRC_GRAD_COMPONENTS] = brw_imm_d(lod_components); - if (instr->op == nir_texop_query_levels || - (instr->op == nir_texop_tex && stage != MESA_SHADER_FRAGMENT)) { - /* textureQueryLevels() and texture() are implemented in terms of TXS - * and TXL respectively, so we need to pass a valid LOD argument. - */ - assert(srcs[TEX_LOGICAL_SRC_LOD].file == BAD_FILE); - srcs[TEX_LOGICAL_SRC_LOD] = brw_imm_ud(0u); - } - enum opcode opcode; switch (instr->op) { case nir_texop_tex: @@ -4452,6 +4443,15 @@ fs_visitor::nir_emit_texture(const fs_builder &bld, nir_tex_instr *instr) unreachable("unknown texture opcode"); } + /* TXS and TXL require a LOD but not everything we implement using those + * two opcodes provides one. Provide a default LOD of 0. + */ + if ((opcode == SHADER_OPCODE_TXS_LOGICAL || + opcode == SHADER_OPCODE_TXL_LOGICAL) && + srcs[TEX_LOGICAL_SRC_LOD].file == BAD_FILE) { + srcs[TEX_LOGICAL_SRC_LOD] = brw_imm_ud(0u); + } + if (instr->op == nir_texop_tg4) { if (instr->component == 1 && key_tex->gather_channel_quirk_mask & (1 << texture)) { |