Add R8G8B8A8_UNORM motion vector format

Spider-Man Remastered uses R8G8B8A8_UNORM (DXGI fmt=28) for (some?) motion vectors.

Signed-off-by: Tk-Glitch <[email protected]>
This commit is contained in:
Tk-Glitch committed 2026-10-06 12:46:23 +02:00
1 parent c4954dc3c4
commit 58c1edf767
1 file changed
+9 -1
+9 -1
View File
@@ -866,7 +866,7 @@ static bool supported_input(Plane plane, DXGI_FORMAT format)
return format == DXGI_FORMAT_R16G16_FLOAT || format == DXGI_FORMAT_R16G16_TYPELESS || return format == DXGI_FORMAT_R16G16_FLOAT || format == DXGI_FORMAT_R16G16_TYPELESS ||
format == DXGI_FORMAT_R32G32_FLOAT || format == DXGI_FORMAT_R32G32_TYPELESS || format == DXGI_FORMAT_R32G32_FLOAT || format == DXGI_FORMAT_R32G32_TYPELESS ||
format == DXGI_FORMAT_R16G16B16A16_FLOAT || format == DXGI_FORMAT_R16G16B16A16_TYPELESS || format == DXGI_FORMAT_R16G16B16A16_FLOAT || format == DXGI_FORMAT_R16G16B16A16_TYPELESS ||
format == DXGI_FORMAT_R32G32B32A32_FLOAT; format == DXGI_FORMAT_R32G32B32A32_FLOAT || format == DXGI_FORMAT_R8G8B8A8_UNORM;
case Plane::Exposure: case Plane::Exposure:
return format == DXGI_FORMAT_R32_FLOAT || format == DXGI_FORMAT_R32_TYPELESS || return format == DXGI_FORMAT_R32_FLOAT || format == DXGI_FORMAT_R32_TYPELESS ||
format == DXGI_FORMAT_R16_FLOAT || format == DXGI_FORMAT_R16_TYPELESS || format == DXGI_FORMAT_R16_FLOAT || format == DXGI_FORMAT_R16_TYPELESS ||
@@ -1018,6 +1018,13 @@ static void convert_row_in(Plane plane, DXGI_FORMAT format, const uint8_t* sourc
half[x * 2 + 1] = float_to_half(mv[1]); half[x * 2 + 1] = float_to_half(mv[1]);
break; break;
} }
case DXGI_FORMAT_R8G8B8A8_UNORM:
{
const uint8_t* rgba = source + x * 4;
half[x * 2] = float_to_half(static_cast<float>(rgba[0]) / 255.0f);
half[x * 2 + 1] = float_to_half(static_cast<float>(rgba[1]) / 255.0f);
break;
}
default: default:
break; break;
} }
@@ -2515,6 +2522,7 @@ static bool vram_motion_blit_supported(VkFormat format)
case VK_FORMAT_R16G16B16A16_SFLOAT: case VK_FORMAT_R16G16B16A16_SFLOAT:
case VK_FORMAT_R32G32_SFLOAT: case VK_FORMAT_R32G32_SFLOAT:
case VK_FORMAT_R32G32B32A32_SFLOAT: case VK_FORMAT_R32G32B32A32_SFLOAT:
case VK_FORMAT_R8G8B8A8_UNORM:
return vram_blit_supported(format, VK_FORMAT_R16G16_SFLOAT); return vram_blit_supported(format, VK_FORMAT_R16G16_SFLOAT);
default: default:
return false; return false;