renderer_vulkan: Emulate B5G6R5 with swizzle

This commit is contained in:
IndecisiveTurtle 2025-07-17 22:39:34 +03:00
parent 5eccb1734d
commit dc1f740860
4 changed files with 11 additions and 8 deletions

View File

@ -248,6 +248,15 @@ constexpr CompMapping RemapSwizzle(const DataFormat format, const CompMapping sw
result.a = swizzle.r; result.a = swizzle.r;
return result; return result;
} }
case DataFormat::Format5_6_5: {
// Remap to a more supported component order.
CompMapping result;
result.r = swizzle.b;
result.g = swizzle.g;
result.b = swizzle.r;
result.a = swizzle.a;
return result;
}
default: default:
return swizzle; return swizzle;
} }

View File

@ -671,7 +671,7 @@ std::span<const SurfaceFormatInfo> SurfaceFormats() {
vk::Format::eR32G32B32A32Sfloat), vk::Format::eR32G32B32A32Sfloat),
// 5_6_5 // 5_6_5
CreateSurfaceFormatInfo(AmdGpu::DataFormat::Format5_6_5, AmdGpu::NumberFormat::Unorm, CreateSurfaceFormatInfo(AmdGpu::DataFormat::Format5_6_5, AmdGpu::NumberFormat::Unorm,
vk::Format::eB5G6R5UnormPack16), vk::Format::eR5G6B5UnormPack16),
// 1_5_5_5 // 1_5_5_5
CreateSurfaceFormatInfo(AmdGpu::DataFormat::Format1_5_5_5, AmdGpu::NumberFormat::Unorm, CreateSurfaceFormatInfo(AmdGpu::DataFormat::Format1_5_5_5, AmdGpu::NumberFormat::Unorm,
vk::Format::eA1R5G5B5UnormPack16), vk::Format::eA1R5G5B5UnormPack16),

View File

@ -70,7 +70,6 @@ std::unordered_map<vk::Format, vk::FormatProperties3> GetFormatProperties(
vk::Format::eB8G8R8A8Unorm, vk::Format::eB8G8R8A8Unorm,
vk::Format::eB8G8R8A8Srgb, vk::Format::eB8G8R8A8Srgb,
vk::Format::eD24UnormS8Uint, vk::Format::eD24UnormS8Uint,
vk::Format::eR5G6B5UnormPack16,
}; };
for (const auto& format : misc_formats) { for (const auto& format : misc_formats) {
if (!format_properties.contains(format)) { if (!format_properties.contains(format)) {
@ -676,11 +675,6 @@ vk::Format Instance::GetSupportedFormat(const vk::Format format,
return vk::Format::eR8Unorm; return vk::Format::eR8Unorm;
} }
break; break;
case vk::Format::eB5G6R5UnormPack16:
if (IsFormatSupported(vk::Format::eR5G6B5UnormPack16, flags)) {
return vk::Format::eR5G6B5UnormPack16;
}
break;
default: default:
break; break;
} }

View File

@ -626,7 +626,7 @@ void TextureCache::RefreshImage(Image& image, Vulkan::Scheduler* custom_schedule
image_copy.push_back({ image_copy.push_back({
.bufferOffset = mip.offset, .bufferOffset = mip.offset,
.bufferRowLength = mip_pitch, .bufferRowLength = mip_pitch,
.bufferImageHeight = mip_height, .bufferImageHeight = mip_height ? std::max(mip_height, 8U) : mip_height,
.imageSubresource{ .imageSubresource{
.aspectMask = image.aspect_mask & ~vk::ImageAspectFlagBits::eStencil, .aspectMask = image.aspect_mask & ~vk::ImageAspectFlagBits::eStencil,
.mipLevel = m, .mipLevel = m,