mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-08-04 16:32:39 +00:00
Add swap handling
This commit is contained in:
parent
6de8e29550
commit
9834a5ea75
@ -736,6 +736,12 @@ vk::ClearValue ColorBufferClearValue(const AmdGpu::Liverpool::ColorBuffer& color
|
|||||||
const auto& c0 = color_buffer.clear_word0;
|
const auto& c0 = color_buffer.clear_word0;
|
||||||
const auto& c1 = color_buffer.clear_word1;
|
const auto& c1 = color_buffer.clear_word1;
|
||||||
const auto num_bits = AmdGpu::NumBits(color_buffer.info.format);
|
const auto num_bits = AmdGpu::NumBits(color_buffer.info.format);
|
||||||
|
auto num_components = AmdGpu::NumComponents(format);
|
||||||
|
|
||||||
|
const bool comp_swap_alt = comp_swap == AmdGpu::Liverpool::ColorBuffer::SwapMode::Alternate ||
|
||||||
|
comp_swap == AmdGpu::Liverpool::ColorBuffer::SwapMode::AlternateReverse;
|
||||||
|
const bool comp_swap_reverse = comp_swap == AmdGpu::Liverpool::ColorBuffer::SwapMode::StandardReverse ||
|
||||||
|
comp_swap == AmdGpu::Liverpool::ColorBuffer::SwapMode::AlternateReverse;
|
||||||
|
|
||||||
vk::ClearColorValue color{};
|
vk::ClearColorValue color{};
|
||||||
|
|
||||||
@ -1035,6 +1041,22 @@ vk::ClearValue ColorBufferClearValue(const AmdGpu::Liverpool::ColorBuffer& color
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (num_components == 1) {
|
||||||
|
color.float32[static_cast<int>(comp_swap)] = color.float32[0];
|
||||||
|
} else {
|
||||||
|
if (comp_swap_alt && num_components == 4) {
|
||||||
|
std::swap(color.float32[0], color.float32[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (comp_swap_reverse) {
|
||||||
|
std::reverse(std::begin(color.float32), std::begin(color.float32) + num_components);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (comp_swap_alt && num_components != 4) {
|
||||||
|
std::swap(color.float32[num_components - 1], color.float32[3]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {.color = color};
|
return {.color = color};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user