Add swap handling

This commit is contained in:
Lander Gallastegi 2024-10-14 23:57:45 +02:00
parent 6de8e29550
commit 9834a5ea75

View File

@ -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};
} }