From f234ae92da2afd9719dc8459cfb357367ded63fc Mon Sep 17 00:00:00 2001 From: "Herman S." <429230+has207@users.noreply.github.com> Date: Tue, 20 Jan 2026 14:51:56 +0900 Subject: [PATCH] [D3D12] Ensure k_8_8_8_8_GAMMA is properly identified as 64bpp Fixes red bleeding in Halo Reach --- src/xenia/gpu/d3d12/d3d12_render_target_cache.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/xenia/gpu/d3d12/d3d12_render_target_cache.cc b/src/xenia/gpu/d3d12/d3d12_render_target_cache.cc index 416c0817e..a2b8703c6 100644 --- a/src/xenia/gpu/d3d12/d3d12_render_target_cache.cc +++ b/src/xenia/gpu/d3d12/d3d12_render_target_cache.cc @@ -2152,7 +2152,10 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) { xenos::DepthRenderTargetFormat dest_depth_format = xenos::DepthRenderTargetFormat(key.dest_resource_format); bool dest_is_64bpp = - dest_is_color && xenos::IsColorRenderTargetFormat64bpp(dest_color_format); + dest_is_color && + (xenos::IsColorRenderTargetFormat64bpp(dest_color_format) || + (dest_color_format == xenos::ColorRenderTargetFormat::k_8_8_8_8_GAMMA && + gamma_render_target_as_unorm16_)); xenos::ColorRenderTargetFormat source_color_format = xenos::ColorRenderTargetFormat(key.source_resource_format); @@ -2169,7 +2172,10 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) { assert_zero(rs & kTransferUsedRootParameterDepthSRVBit); assert_zero(rs & kTransferUsedRootParameterStencilSRVBit); source_is_64bpp = - xenos::IsColorRenderTargetFormat64bpp(source_color_format); + xenos::IsColorRenderTargetFormat64bpp(source_color_format) || + (source_color_format == + xenos::ColorRenderTargetFormat::k_8_8_8_8_GAMMA && + gamma_render_target_as_unorm16_); source_color_format_component_count = xenos::GetColorRenderTargetFormatComponentCount(source_color_format); if (dest_is_stencil_bit) {