shader/texture: Properly shrink unused entries in size mismatches
When a image format mismatches we were inserting zeroes to the texture itself. This was not handling cases were the mismatch uses less coordinates than the guest shader code. Address that by resizing the vector.
This commit is contained in:
parent
8825b88a45
commit
15a753b9a5
1 changed files with 9 additions and 4 deletions
|
@ -743,15 +743,20 @@ Node4 ShaderIR::GetTldsCode(Instruction instr, TextureType texture_type, bool is
|
||||||
// When lod is used always is in gpr20
|
// When lod is used always is in gpr20
|
||||||
const Node lod = lod_enabled ? GetRegister(instr.gpr20) : Immediate(0);
|
const Node lod = lod_enabled ? GetRegister(instr.gpr20) : Immediate(0);
|
||||||
|
|
||||||
// Fill empty entries from the guest sampler.
|
// Fill empty entries from the guest sampler
|
||||||
const std::size_t entry_coord_count = GetCoordCount(sampler.GetType());
|
const std::size_t entry_coord_count = GetCoordCount(sampler.GetType());
|
||||||
if (type_coord_count != entry_coord_count) {
|
if (type_coord_count != entry_coord_count) {
|
||||||
LOG_WARNING(HW_GPU, "Bound and built texture types mismatch");
|
LOG_WARNING(HW_GPU, "Bound and built texture types mismatch");
|
||||||
}
|
|
||||||
|
// When the size is higher we insert zeroes
|
||||||
for (std::size_t i = type_coord_count; i < entry_coord_count; ++i) {
|
for (std::size_t i = type_coord_count; i < entry_coord_count; ++i) {
|
||||||
coords.push_back(GetRegister(Register::ZeroIndex));
|
coords.push_back(GetRegister(Register::ZeroIndex));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Then we ensure the size matches the number of entries (dropping unused values)
|
||||||
|
coords.resize(entry_coord_count);
|
||||||
|
}
|
||||||
|
|
||||||
Node4 values;
|
Node4 values;
|
||||||
for (u32 element = 0; element < values.size(); ++element) {
|
for (u32 element = 0; element < values.size(); ++element) {
|
||||||
auto coords_copy = coords;
|
auto coords_copy = coords;
|
||||||
|
|
Loading…
Reference in a new issue