mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-10-06 14:09:58 +00:00
A test for a corrupted unswizzled textures
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user