Use fetch_contant_word3 for exponent bias

Previously was using word4 which is LOD bias, fixes many graphic issues
with Vulkan backend
This commit is contained in:
Herman S
2025-12-06 22:12:03 +09:00
committed by Gliniak
parent 0af253e230
commit 32889f51be

View File

@@ -1477,9 +1477,23 @@ void SpirvShaderTranslator::ProcessTextureFetchInstruction(
spv::Id is_any_unsigned = builder_->createUnaryOp(
spv::OpLogicalNot, type_bool_, is_all_signed);
// Load the fetch constant word 3, needed for result exponent biasing.
// exp_adjust is in word 3, bits 13:18 (6-bit signed).
id_vector_temp_.clear();
id_vector_temp_.push_back(const_int_0_);
id_vector_temp_.push_back(builder_->makeIntConstant(
int((fetch_constant_word_0_index + 3) >> 2)));
id_vector_temp_.push_back(builder_->makeIntConstant(
int((fetch_constant_word_0_index + 3) & 3)));
spv::Id fetch_constant_word_3_signed = builder_->createUnaryOp(
spv::OpBitcast, type_int_,
builder_->createLoad(builder_->createAccessChain(
spv::StorageClassUniform,
uniform_fetch_constants_, id_vector_temp_),
spv::NoPrecision));
// Load the fetch constant word 4, needed unconditionally for LOD
// biasing, for result exponent biasing, and conditionally for stacked
// texture filtering.
// biasing, and conditionally for stacked texture filtering.
id_vector_temp_.clear();
id_vector_temp_.push_back(const_int_0_);
id_vector_temp_.push_back(builder_->makeIntConstant(
@@ -2198,12 +2212,12 @@ void SpirvShaderTranslator::ProcessTextureFetchInstruction(
}
// Apply the exponent bias from the bits 13:18 of the fetch constant
// word 4.
// word 3.
spv::Id result_exponent_bias = builder_->createBinBuiltinCall(
type_float_, ext_inst_glsl_std_450_, GLSLstd450Ldexp,
const_float_1_,
builder_->createTriOp(spv::OpBitFieldSExtract, type_int_,
fetch_constant_word_4_signed,
fetch_constant_word_3_signed,
builder_->makeUintConstant(13),
builder_->makeUintConstant(6)));
{