A test for a corrupted unswizzled textures

This commit is contained in:
CamilleLaVey
2026-09-16 16:59:20 -04:00
parent 9bedcf6202
commit 43622f463d
2 changed files with 14 additions and 18 deletions
+9 -17
View File
@@ -164,27 +164,19 @@ uint FastReplicateTo8(uint value, uint num_bits) {
return ReplicateBits(value, num_bits, 8);
}
const uint REPLICATE_TO_6_ODD_HALVES = ((63u >> 1u) << 5u) | ((21u >> 1u) << 10u) |
((9u >> 1u) << 15u) | ((17u >> 1u) << 20u) |
((33u >> 1u) << 25u);
const uint REPLICATE_TO_6_SHIFTS = (2u << 16u) | (4u << 20u);
uint FastReplicateTo6(uint value, uint num_bits) {
if (num_bits == 0) {
return 0;
}
if (num_bits >= 6) {
if (num_bits >= 6u) {
return value;
}
const uint v = value & ((1u << num_bits) - 1u);
if (num_bits == 1) {
return v * 63u;
}
if (num_bits == 2) {
return v * 21u;
}
if (num_bits == 3) {
return v * 9u;
}
if (num_bits == 4) {
return (v << 2u) | (v >> 2u);
}
return (v << 1u) | (v >> 4u);
const uint c = ((REPLICATE_TO_6_ODD_HALVES >> (num_bits * 5u)) & 0x1fu) * 2u + 1u;
const uint s = (REPLICATE_TO_6_SHIFTS >> (num_bits * 4u)) & 0xfu;
return (v * c) >> s;
}
uint Div3Floor(uint v) {
@@ -57,7 +57,8 @@ using VideoCore::Surface::SurfaceType;
namespace {
constexpr bool ENABLE_MSAA_TILER_RESOLVE = true;
constexpr bool ENABLE_MSAA_RESOLVE_CONSUME = true;
constexpr bool ENABLE_ACCELERATED_UNSWIZZLE = false;
constexpr bool ENABLE_ACCELERATED_UNSWIZZLE = true;
constexpr bool ENABLE_ACCELERATED_UNSWIZZLE_DISPATCH = false;
constexpr bool ENABLE_MSAA_COLOR_DISCARD = true;
constexpr bool ENABLE_MSAA_DEPTH_STENCIL_DISCARD = true;
@@ -207,6 +208,9 @@ constexpr VkBorderColor ConvertBorderColor(const std::array<float, 4>& color) {
}
[[nodiscard]] bool WillUseAcceleratedUnswizzle(const Device& device, const ImageInfo& info) {
if (!ENABLE_ACCELERATED_UNSWIZZLE_DISPATCH) {
return false;
}
switch (info.type) {
case ImageType::e2D:
case ImageType::e3D: