1
0
mirror of https://github.com/EduApps-CDG/OpenDX synced 2024-12-30 09:45:37 +01:00

[d3d11] Relaxed view format compatibility check

Fixes regressions in multiple games. MSDN docs regarding
format compatibility are wrong in every way.
This commit is contained in:
Philip Rebohle 2018-05-05 20:16:01 +02:00
parent f4a92a685f
commit fb3dbd8bcd
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
8 changed files with 132 additions and 264 deletions

@ -1695,12 +1695,6 @@ namespace dxvk {
} }
DXGI_VK_FORMAT_MAPPING D3D11Device::GetFormatMapping(
DXGI_FORMAT Format) const {
return m_dxgiAdapter->GetFormatMapping(Format);
}
DXGI_VK_FORMAT_INFO D3D11Device::LookupFormat( DXGI_VK_FORMAT_INFO D3D11Device::LookupFormat(
DXGI_FORMAT Format, DXGI_FORMAT Format,
DXGI_VK_FORMAT_MODE Mode) const { DXGI_VK_FORMAT_MODE Mode) const {

@ -322,9 +322,6 @@ namespace dxvk {
VkPipelineStageFlags GetEnabledShaderStages() const; VkPipelineStageFlags GetEnabledShaderStages() const;
DXGI_VK_FORMAT_MAPPING GetFormatMapping(
DXGI_FORMAT Format) const;
DXGI_VK_FORMAT_INFO LookupFormat( DXGI_VK_FORMAT_INFO LookupFormat(
DXGI_FORMAT Format, DXGI_FORMAT Format,
DXGI_VK_FORMAT_MODE Mode) const; DXGI_VK_FORMAT_MODE Mode) const;

@ -29,16 +29,16 @@ namespace dxvk {
imageInfo.tiling = VK_IMAGE_TILING_OPTIMAL; imageInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
imageInfo.layout = VK_IMAGE_LAYOUT_GENERAL; imageInfo.layout = VK_IMAGE_LAYOUT_GENERAL;
// Typeless formats require MUTABLE_FORMAT_BIT to be set, but we DecodeSampleCount(m_desc.SampleDesc.Count, &imageInfo.sampleCount);
// only need to do that for color images since depth-stencil formats
// are not compatible to any other depth-stencil formats // Color formats require MUTABLE_FORMAT_BIT to be set since
// they can be reinterpreted, especially typeless formats.
// Depth-stencil formats are not compatible to each other.
VkImageAspectFlags formatAspect = imageFormatInfo(formatInfo.Format)->aspectMask; VkImageAspectFlags formatAspect = imageFormatInfo(formatInfo.Format)->aspectMask;
if (formatInfo.Aspect == 0 && formatAspect == VK_IMAGE_ASPECT_COLOR_BIT) if (formatAspect & VK_IMAGE_ASPECT_COLOR_BIT)
imageInfo.flags = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT; imageInfo.flags = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT;
DecodeSampleCount(m_desc.SampleDesc.Count, &imageInfo.sampleCount);
// Adjust image flags based on the corresponding D3D flags // Adjust image flags based on the corresponding D3D flags
if (m_desc.BindFlags & D3D11_BIND_SHADER_RESOURCE) { if (m_desc.BindFlags & D3D11_BIND_SHADER_RESOURCE) {
imageInfo.usage |= VK_IMAGE_USAGE_SAMPLED_BIT; imageInfo.usage |= VK_IMAGE_USAGE_SAMPLED_BIT;
@ -167,21 +167,28 @@ namespace dxvk {
bool D3D11CommonTexture::CheckViewFormatCompatibility(DXGI_FORMAT Format) const { bool D3D11CommonTexture::CheckViewFormatCompatibility(DXGI_FORMAT Format) const {
DXGI_VK_FORMAT_MAPPING baseFormat = m_device->GetFormatMapping(m_desc.Format); DXGI_VK_FORMAT_MODE formatMode = GetFormatMode();
DXGI_VK_FORMAT_MAPPING viewFormat = m_device->GetFormatMapping(Format); DXGI_VK_FORMAT_INFO baseFormat = m_device->LookupFormat(m_desc.Format, formatMode);
DXGI_VK_FORMAT_INFO viewFormat = m_device->LookupFormat(Format, formatMode);
// The view format cannot be typeless // Identical formats always pass this test
if (Format == viewFormat.FormatFamily) if (baseFormat.Format == viewFormat.Format)
return true;
// The available image aspects must match
auto baseFormatInfo = imageFormatInfo(baseFormat.Format);
auto viewFormatInfo = imageFormatInfo(viewFormat.Format);
if (baseFormatInfo->aspectMask != viewFormatInfo->aspectMask)
return false; return false;
// If the resource is strongly typed, the view // Color formats can be reinterpreted. This is not restricted
// format must be identical to the base format. // to typeless formats, we we can create SRGB views for UNORM
if (m_desc.Format != baseFormat.FormatFamily) // textures as well etc. as long as they are bit-compatible.
return Format == m_desc.Format; if (baseFormatInfo->aspectMask & VK_IMAGE_ASPECT_COLOR_BIT)
return baseFormatInfo->elementSize == viewFormatInfo->elementSize;
// If the resource is typeless, the view format return false;
// must be part of the same format family.
return viewFormat.FormatFamily == baseFormat.FormatFamily;
} }

@ -188,12 +188,6 @@ namespace dxvk {
} }
DXGI_VK_FORMAT_MAPPING STDMETHODCALLTYPE DxgiAdapter::GetFormatMapping(
DXGI_FORMAT Format) {
return *GetDXGIFormatMapping(Format);
}
DXGI_VK_FORMAT_INFO STDMETHODCALLTYPE DxgiAdapter::LookupFormat( DXGI_VK_FORMAT_INFO STDMETHODCALLTYPE DxgiAdapter::LookupFormat(
DXGI_FORMAT Format, DXGI_FORMAT Format,
DXGI_VK_FORMAT_MODE Mode) { DXGI_VK_FORMAT_MODE Mode) {

@ -54,9 +54,6 @@ namespace dxvk {
const VkPhysicalDeviceFeatures* pFeatures, const VkPhysicalDeviceFeatures* pFeatures,
IDXGIVkDevice** ppDevice) final; IDXGIVkDevice** ppDevice) final;
DXGI_VK_FORMAT_MAPPING STDMETHODCALLTYPE GetFormatMapping(
DXGI_FORMAT Format) final;
DXGI_VK_FORMAT_INFO STDMETHODCALLTYPE LookupFormat( DXGI_VK_FORMAT_INFO STDMETHODCALLTYPE LookupFormat(
DXGI_FORMAT Format, DXGI_FORMAT Format,
DXGI_VK_FORMAT_MODE Mode) final; DXGI_VK_FORMAT_MODE Mode) final;

@ -8,381 +8,316 @@ namespace dxvk {
// DXGI_FORMAT_UNKNOWN // DXGI_FORMAT_UNKNOWN
{ }, { },
// DXGI_FORMAT_R32G32B32A32_TYPELESS // DXGI_FORMAT_R32G32B32A32_TYPELESS
{ DXGI_FORMAT_R32G32B32A32_TYPELESS, { VK_FORMAT_R32G32B32A32_UINT,
VK_FORMAT_R32G32B32A32_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R32G32B32A32_UINT }, VK_FORMAT_R32G32B32A32_UINT },
// DXGI_FORMAT_R32G32B32A32_FLOAT // DXGI_FORMAT_R32G32B32A32_FLOAT
{ DXGI_FORMAT_R32G32B32A32_TYPELESS, { VK_FORMAT_R32G32B32A32_SFLOAT,
VK_FORMAT_R32G32B32A32_SFLOAT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R32G32B32A32_UINT, VK_FORMAT_R32G32B32A32_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R32G32B32A32_UINT // DXGI_FORMAT_R32G32B32A32_UINT
{ DXGI_FORMAT_R32G32B32A32_TYPELESS, { VK_FORMAT_R32G32B32A32_UINT,
VK_FORMAT_R32G32B32A32_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R32G32B32A32_UINT, VK_FORMAT_R32G32B32A32_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R32G32B32A32_SINT // DXGI_FORMAT_R32G32B32A32_SINT
{ DXGI_FORMAT_R32G32B32A32_TYPELESS, { VK_FORMAT_R32G32B32A32_SINT,
VK_FORMAT_R32G32B32A32_SINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R32G32B32A32_UINT, VK_FORMAT_R32G32B32A32_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R32G32B32_TYPELESS // DXGI_FORMAT_R32G32B32_TYPELESS
{ DXGI_FORMAT_R32G32B32_TYPELESS, { VK_FORMAT_R32G32B32_UINT,
VK_FORMAT_R32G32B32_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R32G32B32_UINT }, VK_FORMAT_R32G32B32_UINT },
// DXGI_FORMAT_R32G32B32_FLOAT // DXGI_FORMAT_R32G32B32_FLOAT
{ DXGI_FORMAT_R32G32B32_TYPELESS, { VK_FORMAT_R32G32B32_SFLOAT,
VK_FORMAT_R32G32B32_SFLOAT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R32G32B32_UINT, VK_FORMAT_R32G32B32_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R32G32B32_UINT // DXGI_FORMAT_R32G32B32_UINT
{ DXGI_FORMAT_R32G32B32_TYPELESS, { VK_FORMAT_R32G32B32_UINT,
VK_FORMAT_R32G32B32_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R32G32B32_UINT, VK_FORMAT_R32G32B32_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R32G32B32_SINT // DXGI_FORMAT_R32G32B32_SINT
{ DXGI_FORMAT_R32G32B32_TYPELESS, { VK_FORMAT_R32G32B32_SINT,
VK_FORMAT_R32G32B32_SINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R32G32B32_UINT, VK_FORMAT_R32G32B32_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R16G16B16A16_TYPELESS // DXGI_FORMAT_R16G16B16A16_TYPELESS
{ DXGI_FORMAT_R16G16B16A16_TYPELESS, { VK_FORMAT_R16G16B16A16_UINT,
VK_FORMAT_R16G16B16A16_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R16G16B16A16_UINT }, VK_FORMAT_R16G16B16A16_UINT },
// DXGI_FORMAT_R16G16B16A16_FLOAT // DXGI_FORMAT_R16G16B16A16_FLOAT
{ DXGI_FORMAT_R16G16B16A16_TYPELESS, { VK_FORMAT_R16G16B16A16_SFLOAT,
VK_FORMAT_R16G16B16A16_SFLOAT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R16G16B16A16_UINT, VK_FORMAT_R16G16B16A16_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R16G16B16A16_UNORM // DXGI_FORMAT_R16G16B16A16_UNORM
{ DXGI_FORMAT_R16G16B16A16_TYPELESS, { VK_FORMAT_R16G16B16A16_UNORM,
VK_FORMAT_R16G16B16A16_UNORM,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R16G16B16A16_UINT, VK_FORMAT_R16G16B16A16_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R16G16B16A16_UINT // DXGI_FORMAT_R16G16B16A16_UINT
{ DXGI_FORMAT_R16G16B16A16_TYPELESS, { VK_FORMAT_R16G16B16A16_UINT,
VK_FORMAT_R16G16B16A16_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R16G16B16A16_UINT, VK_FORMAT_R16G16B16A16_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R16G16B16A16_SNORM // DXGI_FORMAT_R16G16B16A16_SNORM
{ DXGI_FORMAT_R16G16B16A16_TYPELESS, { VK_FORMAT_R16G16B16A16_SNORM,
VK_FORMAT_R16G16B16A16_SNORM,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R16G16B16A16_UINT, VK_FORMAT_R16G16B16A16_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R16G16B16A16_SINT // DXGI_FORMAT_R16G16B16A16_SINT
{ DXGI_FORMAT_R16G16B16A16_TYPELESS, { VK_FORMAT_R16G16B16A16_SINT,
VK_FORMAT_R16G16B16A16_SINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R16G16B16A16_UINT, VK_FORMAT_R16G16B16A16_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R32G32_TYPELESS // DXGI_FORMAT_R32G32_TYPELESS
{ DXGI_FORMAT_R32G32_TYPELESS, { VK_FORMAT_R32G32_UINT,
VK_FORMAT_R32G32_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R32G32_UINT }, VK_FORMAT_R32G32_UINT },
// DXGI_FORMAT_R32G32_FLOAT // DXGI_FORMAT_R32G32_FLOAT
{ DXGI_FORMAT_R32G32_TYPELESS, { VK_FORMAT_R32G32_SFLOAT,
VK_FORMAT_R32G32_SFLOAT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R32G32_UINT, VK_FORMAT_R32G32_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R32G32_UINT // DXGI_FORMAT_R32G32_UINT
{ DXGI_FORMAT_R32G32_TYPELESS, { VK_FORMAT_R32G32_UINT,
VK_FORMAT_R32G32_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R32G32_UINT, VK_FORMAT_R32G32_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R32G32_SINT // DXGI_FORMAT_R32G32_SINT
{ DXGI_FORMAT_R32G32_TYPELESS, { VK_FORMAT_R32G32_SINT,
VK_FORMAT_R32G32_SINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R32G32_UINT, VK_FORMAT_R32G32_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R32G8X24_TYPELESS // DXGI_FORMAT_R32G8X24_TYPELESS
{ DXGI_FORMAT_R32G8X24_TYPELESS, { VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED,
VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT,
VK_FORMAT_UNDEFINED }, VK_FORMAT_UNDEFINED },
// DXGI_FORMAT_D32_FLOAT_S8X24_UINT // DXGI_FORMAT_D32_FLOAT_S8X24_UINT
{ DXGI_FORMAT_R32G8X24_TYPELESS, { VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED,
VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
0, VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT }, 0, VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT },
// DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS // DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS
{ DXGI_FORMAT_R32G8X24_TYPELESS, { VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED,
VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
0, VK_IMAGE_ASPECT_DEPTH_BIT }, 0, VK_IMAGE_ASPECT_DEPTH_BIT },
// DXGI_FORMAT_X32_TYPELESS_G8X24_UINT // DXGI_FORMAT_X32_TYPELESS_G8X24_UINT
{ DXGI_FORMAT_R32G8X24_TYPELESS, { VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED,
VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
0, VK_IMAGE_ASPECT_STENCIL_BIT }, 0, VK_IMAGE_ASPECT_STENCIL_BIT },
// DXGI_FORMAT_R10G10B10A2_TYPELESS // DXGI_FORMAT_R10G10B10A2_TYPELESS
{ DXGI_FORMAT_R10G10B10A2_TYPELESS, { VK_FORMAT_A2B10G10R10_UINT_PACK32,
VK_FORMAT_A2B10G10R10_UINT_PACK32,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_A2B10G10R10_UINT_PACK32 }, VK_FORMAT_A2B10G10R10_UINT_PACK32 },
// DXGI_FORMAT_R10G10B10A2_UNORM // DXGI_FORMAT_R10G10B10A2_UNORM
{ DXGI_FORMAT_R10G10B10A2_TYPELESS, { VK_FORMAT_A2B10G10R10_UNORM_PACK32,
VK_FORMAT_A2B10G10R10_UNORM_PACK32,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_A2B10G10R10_UINT_PACK32, VK_FORMAT_A2B10G10R10_UINT_PACK32,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R10G10B10A2_UINT // DXGI_FORMAT_R10G10B10A2_UINT
{ DXGI_FORMAT_R10G10B10A2_TYPELESS, { VK_FORMAT_A2B10G10R10_UINT_PACK32,
VK_FORMAT_A2B10G10R10_UINT_PACK32,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_A2B10G10R10_UINT_PACK32, VK_FORMAT_A2B10G10R10_UINT_PACK32,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R11G11B10_FLOAT // DXGI_FORMAT_R11G11B10_FLOAT
{ DXGI_FORMAT_R10G10B10A2_TYPELESS, { VK_FORMAT_B10G11R11_UFLOAT_PACK32,
VK_FORMAT_B10G11R11_UFLOAT_PACK32,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R8G8B8A8_TYPELESS // DXGI_FORMAT_R8G8B8A8_TYPELESS
{ DXGI_FORMAT_R8G8B8A8_TYPELESS, { VK_FORMAT_R8G8B8A8_UINT,
VK_FORMAT_R8G8B8A8_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R8G8B8A8_UINT }, VK_FORMAT_R8G8B8A8_UINT },
// DXGI_FORMAT_R8G8B8A8_UNORM // DXGI_FORMAT_R8G8B8A8_UNORM
{ DXGI_FORMAT_R8G8B8A8_TYPELESS, { VK_FORMAT_R8G8B8A8_UNORM,
VK_FORMAT_R8G8B8A8_UNORM,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R8G8B8A8_UINT, VK_FORMAT_R8G8B8A8_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R8G8B8A8_UNORM_SRGB // DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
{ DXGI_FORMAT_R8G8B8A8_TYPELESS, { VK_FORMAT_R8G8B8A8_SRGB,
VK_FORMAT_R8G8B8A8_SRGB,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R8G8B8A8_UINT, VK_FORMAT_R8G8B8A8_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R8G8B8A8_UINT // DXGI_FORMAT_R8G8B8A8_UINT
{ DXGI_FORMAT_R8G8B8A8_TYPELESS, { VK_FORMAT_R8G8B8A8_UINT,
VK_FORMAT_R8G8B8A8_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R8G8B8A8_UINT, VK_FORMAT_R8G8B8A8_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R8G8B8A8_SNORM // DXGI_FORMAT_R8G8B8A8_SNORM
{ DXGI_FORMAT_R8G8B8A8_TYPELESS, { VK_FORMAT_R8G8B8A8_SNORM,
VK_FORMAT_R8G8B8A8_SNORM,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R8G8B8A8_UINT, VK_FORMAT_R8G8B8A8_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R8G8B8A8_SINT // DXGI_FORMAT_R8G8B8A8_SINT
{ DXGI_FORMAT_R8G8B8A8_TYPELESS, { VK_FORMAT_R8G8B8A8_SINT,
VK_FORMAT_R8G8B8A8_SINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R8G8B8A8_UINT, VK_FORMAT_R8G8B8A8_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R16G16_TYPELESS // DXGI_FORMAT_R16G16_TYPELESS
{ DXGI_FORMAT_R16G16_TYPELESS, { VK_FORMAT_R16G16_UINT,
VK_FORMAT_R16G16_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R16G16_UINT }, VK_FORMAT_R16G16_UINT },
// DXGI_FORMAT_R16G16_FLOAT // DXGI_FORMAT_R16G16_FLOAT
{ DXGI_FORMAT_R16G16_TYPELESS, { VK_FORMAT_R16G16_SFLOAT,
VK_FORMAT_R16G16_SFLOAT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R16G16_UINT, VK_FORMAT_R16G16_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R16G16_UNORM // DXGI_FORMAT_R16G16_UNORM
{ DXGI_FORMAT_R16G16_TYPELESS, { VK_FORMAT_R16G16_UNORM,
VK_FORMAT_R16G16_UNORM,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R16G16_UINT, VK_FORMAT_R16G16_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R16G16_UINT // DXGI_FORMAT_R16G16_UINT
{ DXGI_FORMAT_R16G16_TYPELESS, { VK_FORMAT_R16G16_UINT,
VK_FORMAT_R16G16_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R16G16_UINT, VK_FORMAT_R16G16_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R16G16_SNORM // DXGI_FORMAT_R16G16_SNORM
{ DXGI_FORMAT_R16G16_TYPELESS, { VK_FORMAT_R16G16_SNORM,
VK_FORMAT_R16G16_SNORM,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R16G16_UINT, VK_FORMAT_R16G16_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R16G16_SINT // DXGI_FORMAT_R16G16_SINT
{ DXGI_FORMAT_R16G16_TYPELESS, { VK_FORMAT_R16G16_SINT,
VK_FORMAT_R16G16_SINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R16G16_UINT, VK_FORMAT_R16G16_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R32_TYPELESS // DXGI_FORMAT_R32_TYPELESS
{ DXGI_FORMAT_R32_TYPELESS, { VK_FORMAT_R32_UINT,
VK_FORMAT_R32_UINT,
VK_FORMAT_D32_SFLOAT, VK_FORMAT_D32_SFLOAT,
VK_FORMAT_R32_UINT }, VK_FORMAT_R32_UINT },
// DXGI_FORMAT_D32_FLOAT // DXGI_FORMAT_D32_FLOAT
{ DXGI_FORMAT_R32_TYPELESS, { VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED,
VK_FORMAT_D32_SFLOAT, VK_FORMAT_D32_SFLOAT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
0, VK_IMAGE_ASPECT_DEPTH_BIT }, 0, VK_IMAGE_ASPECT_DEPTH_BIT },
// DXGI_FORMAT_R32_FLOAT // DXGI_FORMAT_R32_FLOAT
{ DXGI_FORMAT_R32_TYPELESS, { VK_FORMAT_R32_SFLOAT,
VK_FORMAT_R32_SFLOAT,
VK_FORMAT_D32_SFLOAT, VK_FORMAT_D32_SFLOAT,
VK_FORMAT_R32_UINT, VK_FORMAT_R32_UINT,
VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_ASPECT_COLOR_BIT,
VK_IMAGE_ASPECT_DEPTH_BIT }, VK_IMAGE_ASPECT_DEPTH_BIT },
// DXGI_FORMAT_R32_UINT // DXGI_FORMAT_R32_UINT
{ DXGI_FORMAT_R32_TYPELESS, { VK_FORMAT_R32_UINT,
VK_FORMAT_R32_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R32_UINT, VK_FORMAT_R32_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R32_SINT // DXGI_FORMAT_R32_SINT
{ DXGI_FORMAT_R32_TYPELESS, { VK_FORMAT_R32_SINT,
VK_FORMAT_R32_SINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R32_UINT, VK_FORMAT_R32_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R24G8_TYPELESS // DXGI_FORMAT_R24G8_TYPELESS
{ DXGI_FORMAT_R24G8_TYPELESS, { VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED,
VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT,
VK_FORMAT_UNDEFINED }, VK_FORMAT_UNDEFINED },
// DXGI_FORMAT_D24_UNORM_S8_UINT // DXGI_FORMAT_D24_UNORM_S8_UINT
{ DXGI_FORMAT_R24G8_TYPELESS, { VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED,
VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
0, VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT }, 0, VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT },
// DXGI_FORMAT_R24_UNORM_X8_TYPELESS // DXGI_FORMAT_R24_UNORM_X8_TYPELESS
{ DXGI_FORMAT_R24G8_TYPELESS, { VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED,
VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
0, VK_IMAGE_ASPECT_DEPTH_BIT }, 0, VK_IMAGE_ASPECT_DEPTH_BIT },
// DXGI_FORMAT_X24_TYPELESS_G8_UINT // DXGI_FORMAT_X24_TYPELESS_G8_UINT
{ DXGI_FORMAT_R24G8_TYPELESS, { VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED,
VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
0, VK_IMAGE_ASPECT_STENCIL_BIT }, 0, VK_IMAGE_ASPECT_STENCIL_BIT },
// DXGI_FORMAT_R8G8_TYPELESS // DXGI_FORMAT_R8G8_TYPELESS
{ DXGI_FORMAT_R8G8_TYPELESS, { VK_FORMAT_R8G8_UINT,
VK_FORMAT_R8G8_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R8G8_UINT }, VK_FORMAT_R8G8_UINT },
// DXGI_FORMAT_R8G8_UNORM // DXGI_FORMAT_R8G8_UNORM
{ DXGI_FORMAT_R8G8_TYPELESS, { VK_FORMAT_R8G8_UNORM,
VK_FORMAT_R8G8_UNORM,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R8G8_UINT, VK_FORMAT_R8G8_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R8G8_UINT // DXGI_FORMAT_R8G8_UINT
{ DXGI_FORMAT_R8G8_TYPELESS, { VK_FORMAT_R8G8_UINT,
VK_FORMAT_R8G8_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R8G8_UINT, VK_FORMAT_R8G8_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R8G8_SNORM // DXGI_FORMAT_R8G8_SNORM
{ DXGI_FORMAT_R8G8_TYPELESS, { VK_FORMAT_R8G8_SNORM,
VK_FORMAT_R8G8_SNORM,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R8G8_UINT, VK_FORMAT_R8G8_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R8G8_SINT // DXGI_FORMAT_R8G8_SINT
{ DXGI_FORMAT_R8G8_TYPELESS, { VK_FORMAT_R8G8_SINT,
VK_FORMAT_R8G8_SINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R8G8_UINT, VK_FORMAT_R8G8_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R16_TYPELESS // DXGI_FORMAT_R16_TYPELESS
{ DXGI_FORMAT_R16_TYPELESS, { VK_FORMAT_R16_UINT,
VK_FORMAT_R16_UINT,
VK_FORMAT_D16_UNORM, VK_FORMAT_D16_UNORM,
VK_FORMAT_R16_UINT }, VK_FORMAT_R16_UINT },
// DXGI_FORMAT_R16_FLOAT // DXGI_FORMAT_R16_FLOAT
{ DXGI_FORMAT_R16_TYPELESS, { VK_FORMAT_R16_SFLOAT,
VK_FORMAT_R16_SFLOAT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R16_UINT, VK_FORMAT_R16_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_D16_UNORM // DXGI_FORMAT_D16_UNORM
{ DXGI_FORMAT_R16_TYPELESS, { VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED,
VK_FORMAT_D16_UNORM, VK_FORMAT_D16_UNORM,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
0, VK_IMAGE_ASPECT_DEPTH_BIT }, 0, VK_IMAGE_ASPECT_DEPTH_BIT },
// DXGI_FORMAT_R16_UNORM // DXGI_FORMAT_R16_UNORM
{ DXGI_FORMAT_R16_TYPELESS, { VK_FORMAT_R16_UNORM,
VK_FORMAT_R16_UNORM,
VK_FORMAT_D16_UNORM, VK_FORMAT_D16_UNORM,
VK_FORMAT_R16_UINT, VK_FORMAT_R16_UINT,
VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_ASPECT_COLOR_BIT,
VK_IMAGE_ASPECT_DEPTH_BIT }, VK_IMAGE_ASPECT_DEPTH_BIT },
// DXGI_FORMAT_R16_UINT // DXGI_FORMAT_R16_UINT
{ DXGI_FORMAT_R16_TYPELESS, { VK_FORMAT_R16_UINT,
VK_FORMAT_R16_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R16_UINT, VK_FORMAT_R16_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R16_SNORM // DXGI_FORMAT_R16_SNORM
{ DXGI_FORMAT_R16_TYPELESS, { VK_FORMAT_R16_SNORM,
VK_FORMAT_R16_SNORM,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R16_UINT, VK_FORMAT_R16_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R16_SINT // DXGI_FORMAT_R16_SINT
{ DXGI_FORMAT_R16_TYPELESS, { VK_FORMAT_R16_SINT,
VK_FORMAT_R16_SINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R16_UINT, VK_FORMAT_R16_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R8_TYPELESS // DXGI_FORMAT_R8_TYPELESS
{ DXGI_FORMAT_R8_TYPELESS, { VK_FORMAT_R8_UINT,
VK_FORMAT_R8_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R8_UINT }, VK_FORMAT_R8_UINT },
// DXGI_FORMAT_R8_UNORM // DXGI_FORMAT_R8_UNORM
{ DXGI_FORMAT_R8_TYPELESS, { VK_FORMAT_R8_UNORM,
VK_FORMAT_R8_UNORM,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R8_UINT, VK_FORMAT_R8_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R8_UINT // DXGI_FORMAT_R8_UINT
{ DXGI_FORMAT_R8_TYPELESS, { VK_FORMAT_R8_UINT,
VK_FORMAT_R8_UINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R8_UINT, VK_FORMAT_R8_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R8_SNORM // DXGI_FORMAT_R8_SNORM
{ DXGI_FORMAT_R8_TYPELESS, { VK_FORMAT_R8_SNORM,
VK_FORMAT_R8_SNORM,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R8_UINT, VK_FORMAT_R8_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R8_SINT // DXGI_FORMAT_R8_SINT
{ DXGI_FORMAT_R8_TYPELESS, { VK_FORMAT_R8_SINT,
VK_FORMAT_R8_SINT,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_R8_UINT, VK_FORMAT_R8_UINT,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_A8_UNORM // DXGI_FORMAT_A8_UNORM
{ DXGI_FORMAT_R8_TYPELESS, { VK_FORMAT_R8_UNORM,
VK_FORMAT_R8_UNORM,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT, 0, VK_IMAGE_ASPECT_COLOR_BIT, 0,
@ -391,133 +326,111 @@ namespace dxvk {
// DXGI_FORMAT_R1_UNORM // DXGI_FORMAT_R1_UNORM
{ }, // Unsupported { }, // Unsupported
// DXGI_FORMAT_R9G9B9E5_SHAREDEXP // DXGI_FORMAT_R9G9B9E5_SHAREDEXP
{ DXGI_FORMAT_UNKNOWN, { VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_R8G8_B8G8_UNORM // DXGI_FORMAT_R8G8_B8G8_UNORM
{ DXGI_FORMAT_UNKNOWN, { VK_FORMAT_B8G8R8G8_422_UNORM_KHR,
VK_FORMAT_B8G8R8G8_422_UNORM_KHR,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT, 0, VK_IMAGE_ASPECT_COLOR_BIT, 0,
{ VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_G, { VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_G,
VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_ONE }}, VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_ONE }},
// DXGI_FORMAT_G8R8_G8B8_UNORM // DXGI_FORMAT_G8R8_G8B8_UNORM
{ DXGI_FORMAT_UNKNOWN, { VK_FORMAT_G8B8G8R8_422_UNORM_KHR,
VK_FORMAT_G8B8G8R8_422_UNORM_KHR,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT, 0, VK_IMAGE_ASPECT_COLOR_BIT, 0,
{ VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_G, { VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_G,
VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_ONE }}, VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_ONE }},
// DXGI_FORMAT_BC1_TYPELESS // DXGI_FORMAT_BC1_TYPELESS
{ DXGI_FORMAT_BC1_TYPELESS, { VK_FORMAT_BC1_RGBA_UNORM_BLOCK,
VK_FORMAT_BC1_RGBA_UNORM_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED }, VK_FORMAT_UNDEFINED },
// DXGI_FORMAT_BC1_UNORM // DXGI_FORMAT_BC1_UNORM
{ DXGI_FORMAT_BC1_TYPELESS, { VK_FORMAT_BC1_RGBA_UNORM_BLOCK,
VK_FORMAT_BC1_RGBA_UNORM_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_BC1_UNORM_SRGB // DXGI_FORMAT_BC1_UNORM_SRGB
{ DXGI_FORMAT_BC1_TYPELESS, { VK_FORMAT_BC1_RGBA_SRGB_BLOCK,
VK_FORMAT_BC1_RGBA_SRGB_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_BC2_TYPELESS // DXGI_FORMAT_BC2_TYPELESS
{ DXGI_FORMAT_BC2_TYPELESS, { VK_FORMAT_BC2_UNORM_BLOCK,
VK_FORMAT_BC2_UNORM_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED }, VK_FORMAT_UNDEFINED },
// DXGI_FORMAT_BC2_UNORM // DXGI_FORMAT_BC2_UNORM
{ DXGI_FORMAT_BC2_TYPELESS, { VK_FORMAT_BC2_UNORM_BLOCK,
VK_FORMAT_BC2_UNORM_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_BC2_UNORM_SRGB // DXGI_FORMAT_BC2_UNORM_SRGB
{ DXGI_FORMAT_BC2_TYPELESS, { VK_FORMAT_BC2_SRGB_BLOCK,
VK_FORMAT_BC2_SRGB_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_BC3_TYPELESS // DXGI_FORMAT_BC3_TYPELESS
{ DXGI_FORMAT_BC3_TYPELESS, { VK_FORMAT_BC3_UNORM_BLOCK,
VK_FORMAT_BC3_UNORM_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED }, VK_FORMAT_UNDEFINED },
// DXGI_FORMAT_BC3_UNORM // DXGI_FORMAT_BC3_UNORM
{ DXGI_FORMAT_BC3_TYPELESS, { VK_FORMAT_BC3_UNORM_BLOCK,
VK_FORMAT_BC3_UNORM_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_BC3_UNORM_SRGB // DXGI_FORMAT_BC3_UNORM_SRGB
{ DXGI_FORMAT_BC3_TYPELESS, { VK_FORMAT_BC3_SRGB_BLOCK,
VK_FORMAT_BC3_SRGB_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_BC4_TYPELESS // DXGI_FORMAT_BC4_TYPELESS
{ DXGI_FORMAT_BC4_TYPELESS, { VK_FORMAT_BC4_UNORM_BLOCK,
VK_FORMAT_BC4_UNORM_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED }, VK_FORMAT_UNDEFINED },
// DXGI_FORMAT_BC4_UNORM // DXGI_FORMAT_BC4_UNORM
{ DXGI_FORMAT_BC4_TYPELESS, { VK_FORMAT_BC4_UNORM_BLOCK,
VK_FORMAT_BC4_UNORM_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_BC4_SNORM // DXGI_FORMAT_BC4_SNORM
{ DXGI_FORMAT_BC4_TYPELESS, { VK_FORMAT_BC4_SNORM_BLOCK,
VK_FORMAT_BC4_SNORM_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_BC5_TYPELESS // DXGI_FORMAT_BC5_TYPELESS
{ DXGI_FORMAT_BC5_TYPELESS, { VK_FORMAT_BC5_UNORM_BLOCK,
VK_FORMAT_BC5_UNORM_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED }, VK_FORMAT_UNDEFINED },
// DXGI_FORMAT_BC5_UNORM // DXGI_FORMAT_BC5_UNORM
{ DXGI_FORMAT_BC5_TYPELESS, { VK_FORMAT_BC5_UNORM_BLOCK,
VK_FORMAT_BC5_UNORM_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_BC5_SNORM // DXGI_FORMAT_BC5_SNORM
{ DXGI_FORMAT_BC5_TYPELESS, { VK_FORMAT_BC5_SNORM_BLOCK,
VK_FORMAT_BC5_SNORM_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_B5G6R5_UNORM // DXGI_FORMAT_B5G6R5_UNORM
{ DXGI_FORMAT_UNKNOWN, { VK_FORMAT_R5G6B5_UNORM_PACK16,
VK_FORMAT_R5G6B5_UNORM_PACK16,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_B5G5R5A1_UNORM // DXGI_FORMAT_B5G5R5A1_UNORM
{ DXGI_FORMAT_UNKNOWN, { VK_FORMAT_A1R5G5B5_UNORM_PACK16,
VK_FORMAT_A1R5G5B5_UNORM_PACK16,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_B8G8R8A8_UNORM // DXGI_FORMAT_B8G8R8A8_UNORM
{ DXGI_FORMAT_B8G8R8A8_TYPELESS, { VK_FORMAT_B8G8R8A8_UNORM,
VK_FORMAT_B8G8R8A8_UNORM,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_B8G8R8X8_UNORM // DXGI_FORMAT_B8G8R8X8_UNORM
{ DXGI_FORMAT_B8G8R8X8_TYPELESS, { VK_FORMAT_B8G8R8A8_UNORM,
VK_FORMAT_B8G8R8A8_UNORM,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT, 0, VK_IMAGE_ASPECT_COLOR_BIT, 0,
@ -526,61 +439,51 @@ namespace dxvk {
// DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM // DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM
{ }, // Unsupported { }, // Unsupported
// DXGI_FORMAT_B8G8R8A8_TYPELESS // DXGI_FORMAT_B8G8R8A8_TYPELESS
{ DXGI_FORMAT_B8G8R8A8_TYPELESS, { VK_FORMAT_B8G8R8A8_UNORM,
VK_FORMAT_B8G8R8A8_UNORM,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED }, VK_FORMAT_UNDEFINED },
// DXGI_FORMAT_B8G8R8A8_UNORM_SRGB // DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
{ DXGI_FORMAT_B8G8R8A8_TYPELESS, { VK_FORMAT_B8G8R8A8_SRGB,
VK_FORMAT_B8G8R8A8_SRGB,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_B8G8R8X8_TYPELESS // DXGI_FORMAT_B8G8R8X8_TYPELESS
{ DXGI_FORMAT_B8G8R8X8_TYPELESS, { VK_FORMAT_B8G8R8A8_UNORM,
VK_FORMAT_B8G8R8A8_UNORM,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_B8G8R8X8_UNORM_SRGB // DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
{ DXGI_FORMAT_B8G8R8X8_TYPELESS, { VK_FORMAT_B8G8R8A8_SRGB,
VK_FORMAT_B8G8R8A8_SRGB,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT, 0, VK_IMAGE_ASPECT_COLOR_BIT, 0,
{ VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, { VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G,
VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_ONE }}, VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_ONE }},
// DXGI_FORMAT_BC6H_TYPELESS // DXGI_FORMAT_BC6H_TYPELESS
{ DXGI_FORMAT_BC6H_TYPELESS, { VK_FORMAT_BC6H_UFLOAT_BLOCK,
VK_FORMAT_BC6H_UFLOAT_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED }, VK_FORMAT_UNDEFINED },
// DXGI_FORMAT_BC6H_UF16 // DXGI_FORMAT_BC6H_UF16
{ DXGI_FORMAT_BC6H_TYPELESS, { VK_FORMAT_BC6H_UFLOAT_BLOCK,
VK_FORMAT_BC6H_UFLOAT_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_BC6H_SF16 // DXGI_FORMAT_BC6H_SF16
{ DXGI_FORMAT_BC6H_TYPELESS, { VK_FORMAT_BC6H_SFLOAT_BLOCK,
VK_FORMAT_BC6H_SFLOAT_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_BC7_TYPELESS // DXGI_FORMAT_BC7_TYPELESS
{ DXGI_FORMAT_BC7_TYPELESS, { VK_FORMAT_BC7_UNORM_BLOCK,
VK_FORMAT_BC7_UNORM_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED }, VK_FORMAT_UNDEFINED },
// DXGI_FORMAT_BC7_UNORM // DXGI_FORMAT_BC7_UNORM
{ DXGI_FORMAT_BC7_TYPELESS, { VK_FORMAT_BC7_UNORM_BLOCK,
VK_FORMAT_BC7_UNORM_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
// DXGI_FORMAT_BC7_UNORM_SRGB // DXGI_FORMAT_BC7_UNORM_SRGB
{ DXGI_FORMAT_BC7_TYPELESS, { VK_FORMAT_BC7_SRGB_BLOCK,
VK_FORMAT_BC7_SRGB_BLOCK,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT }, VK_IMAGE_ASPECT_COLOR_BIT },
@ -615,8 +518,7 @@ namespace dxvk {
// DXGI_FORMAT_A8P8 // DXGI_FORMAT_A8P8
{ }, // Unsupported { }, // Unsupported
// DXGI_FORMAT_B4G4R4A4_UNORM // DXGI_FORMAT_B4G4R4A4_UNORM
{ DXGI_FORMAT_UNKNOWN, { VK_FORMAT_B4G4R4A4_UNORM_PACK16,
VK_FORMAT_B4G4R4A4_UNORM_PACK16,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED,
VK_IMAGE_ASPECT_COLOR_BIT, 0, VK_IMAGE_ASPECT_COLOR_BIT, 0,
@ -631,36 +533,36 @@ namespace dxvk {
}}; }};
const DXGI_VK_FORMAT_MAPPING* GetDXGIFormatMapping( const DXGI_VK_FORMAT_MAPPING& GetDXGIFormatMapping(
DXGI_FORMAT Format) { DXGI_FORMAT Format) {
const size_t formatId = size_t(Format); const size_t formatId = size_t(Format);
return formatId < g_dxgiFormats.size() return formatId < g_dxgiFormats.size()
? &g_dxgiFormats[formatId] ? g_dxgiFormats[formatId]
: &g_dxgiFormats[0]; : g_dxgiFormats[0];
} }
DXGI_VK_FORMAT_INFO GetDXGIFormatInfo( DXGI_VK_FORMAT_INFO GetDXGIFormatInfo(
DXGI_FORMAT Format, DXGI_FORMAT Format,
DXGI_VK_FORMAT_MODE Mode) { DXGI_VK_FORMAT_MODE Mode) {
const DXGI_VK_FORMAT_MAPPING* mapping const DXGI_VK_FORMAT_MAPPING& mapping
= GetDXGIFormatMapping(Format); = GetDXGIFormatMapping(Format);
switch (Mode) { switch (Mode) {
case DXGI_VK_FORMAT_MODE_ANY: case DXGI_VK_FORMAT_MODE_ANY:
return mapping->FormatColor != VK_FORMAT_UNDEFINED return mapping.FormatColor != VK_FORMAT_UNDEFINED
? DXGI_VK_FORMAT_INFO { mapping->FormatColor, mapping->AspectColor, mapping->Swizzle } ? DXGI_VK_FORMAT_INFO { mapping.FormatColor, mapping.AspectColor, mapping.Swizzle }
: DXGI_VK_FORMAT_INFO { mapping->FormatDepth, mapping->AspectDepth }; : DXGI_VK_FORMAT_INFO { mapping.FormatDepth, mapping.AspectDepth };
case DXGI_VK_FORMAT_MODE_COLOR: case DXGI_VK_FORMAT_MODE_COLOR:
return { mapping->FormatColor, mapping->AspectColor, mapping->Swizzle }; return { mapping.FormatColor, mapping.AspectColor, mapping.Swizzle };
case DXGI_VK_FORMAT_MODE_DEPTH: case DXGI_VK_FORMAT_MODE_DEPTH:
return { mapping->FormatDepth, mapping->AspectDepth }; return { mapping.FormatDepth, mapping.AspectDepth };
case DXGI_VK_FORMAT_MODE_RAW: case DXGI_VK_FORMAT_MODE_RAW:
return { mapping->FormatRaw, mapping->AspectColor }; return { mapping.FormatRaw, mapping.AspectColor };
} }
Logger::err("DXGI: GetDXGIFormatInfo: Internal error"); Logger::err("DXGI: GetDXGIFormatInfo: Internal error");

@ -12,7 +12,6 @@ namespace dxvk {
* Maps a DXGI format to a set of Vulkan formats. * Maps a DXGI format to a set of Vulkan formats.
*/ */
struct DXGI_VK_FORMAT_MAPPING { struct DXGI_VK_FORMAT_MAPPING {
DXGI_FORMAT FormatFamily = DXGI_FORMAT_UNKNOWN; ///< Typeless format family
VkFormat FormatColor = VK_FORMAT_UNDEFINED; ///< Corresponding color format VkFormat FormatColor = VK_FORMAT_UNDEFINED; ///< Corresponding color format
VkFormat FormatDepth = VK_FORMAT_UNDEFINED; ///< Corresponding depth format VkFormat FormatDepth = VK_FORMAT_UNDEFINED; ///< Corresponding depth format
VkFormat FormatRaw = VK_FORMAT_UNDEFINED; ///< Bit-compatible integer format VkFormat FormatRaw = VK_FORMAT_UNDEFINED; ///< Bit-compatible integer format
@ -54,15 +53,6 @@ namespace dxvk {
DXGI_VK_FORMAT_MODE_RAW = 3, ///< Unsigned integer format DXGI_VK_FORMAT_MODE_RAW = 3, ///< Unsigned integer format
}; };
/**
* \brief Retrieves a format mapping entry
*
* \param [in] Format The format to look up
* \returns Pointer to the map entry
*/
const DXGI_VK_FORMAT_MAPPING* GetDXGIFormatMapping(
DXGI_FORMAT Format);
/** /**
* \brief Retrieves info for a given DXGI format * \brief Retrieves info for a given DXGI format
* *

@ -58,19 +58,6 @@ IDXGIVkAdapter : public IDXGIAdapter1 {
const VkPhysicalDeviceFeatures* pFeatures, const VkPhysicalDeviceFeatures* pFeatures,
IDXGIVkDevice** ppDevice) = 0; IDXGIVkDevice** ppDevice) = 0;
/**
* \brief Retrieves a format mapping entry for a DXGI format
*
* Returns the raw format mapping entry, which contains
* the corresponding Vulkan formats for color images,
* depth images, and raw image operations, as well as
* some generic info about the format.
* \param [in] Format The DXGI format
* \returns The format mapping entry
*/
virtual dxvk::DXGI_VK_FORMAT_MAPPING STDMETHODCALLTYPE GetFormatMapping(
DXGI_FORMAT Format) = 0;
/** /**
* \brief Maps a DXGI format to a compatible Vulkan format * \brief Maps a DXGI format to a compatible Vulkan format
* *