mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-08-27 01:17:40 +00:00
[vulkan] Re-adjusting ASTC resolve (#4250)
This is an adjustment made due to problems caused by my ASTC changes some pr's earlier; added sanity to decoded blocks, removes the inconditional storage view for ASTC formats (verified against MaxwellToVk logic), added support to VK_EXT_astc_decode_mode which will ensure a better way to resolve RGFA16/RGFA32 on tilers, simplified ASTC HDR decoding into LDR valid formats. This fixes some issues with SteamDeck, Fire Emblem: Engage washed colors and other problems related to ASTC. _Special Thanks_ 1.- Meowly The Smol (@Gidoly) 2.- @simply0001 for the actual idea on the redundant storage views on the transcoded ASTC path. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4250
This commit is contained in:
@@ -1769,6 +1769,12 @@ static void DecompressBlock(std::span<const u8, 16> inBuf, const u32 blockWidth,
|
||||
return;
|
||||
}
|
||||
|
||||
if (weightParams.GetNumWeightValues() > 64) {
|
||||
assert(false && "Too many weights in the weight grid");
|
||||
FillError(outBuf, blockWidth, blockHeight);
|
||||
return;
|
||||
}
|
||||
|
||||
// Read num partitions
|
||||
u32 nPartitions = strm.ReadBits<2>() + 1;
|
||||
assert(nPartitions <= 4);
|
||||
@@ -1805,6 +1811,11 @@ static void DecompressBlock(std::span<const u8, 16> inBuf, const u32 blockWidth,
|
||||
|
||||
// Remaining bits are color endpoint data...
|
||||
u32 nWeightBits = weightParams.GetPackedBitSize();
|
||||
if (nWeightBits < 24 || nWeightBits > 96) {
|
||||
assert(false && "Invalid weight bit count");
|
||||
FillError(outBuf, blockWidth, blockHeight);
|
||||
return;
|
||||
}
|
||||
s32 remainingBits = 128 - nWeightBits - static_cast<int>(strm.GetBitsRead());
|
||||
|
||||
// Consider extra bits prior to texel data...
|
||||
|
||||
Reference in New Issue
Block a user