Skip to content

Commit

Permalink
vkd3d: Adding non-failing supprot for ASTC extension formats.
Browse files Browse the repository at this point in the history
Signed-off-by: David McCloskey <dave@juicelabs.co>
  • Loading branch information
dave-juicelabs committed Feb 22, 2024
1 parent afd17b3 commit 1eff69a
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 21 deletions.
4 changes: 4 additions & 0 deletions include/vkd3d_dxgiformat.idl
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,10 @@ typedef enum DXGI_FORMAT
DXGI_FORMAT_V208 = 0x83,
DXGI_FORMAT_V408 = 0x84,

/* https://gli.g-truc.net/0.6.1/api/a00001.html */
DXGI_FORMAT_UNDOCUMENTED_ASTC_FIRST = 0x85,
DXGI_FORMAT_UNDOCUMENTED_ASTC_LAST = 0xbc,

DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE = 0xbd,
DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE = 0xbe,

Expand Down
4 changes: 1 addition & 3 deletions libs/vkd3d/utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -920,9 +920,7 @@ bool is_valid_format(DXGI_FORMAT dxgi_format)
{
if (dxgi_format >= DXGI_FORMAT_UNKNOWN && dxgi_format <= DXGI_FORMAT_B4G4R4A4_UNORM)
return true;
if (dxgi_format >= DXGI_FORMAT_P208 && dxgi_format <= DXGI_FORMAT_V408)
return true;
if (dxgi_format >= DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE && dxgi_format <= DXGI_FORMAT_A4B4G4R4_UNORM)
if (dxgi_format >= DXGI_FORMAT_P208 && dxgi_format <= DXGI_FORMAT_A4B4G4R4_UNORM)
return true;
return false;
}
Expand Down
44 changes: 26 additions & 18 deletions tests/d3d12_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -462,8 +462,7 @@ void test_format_support(void)
for (format = 0; format <= DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE; ++format)
{
/* Undefined range, skip */
if ((format > DXGI_FORMAT_B4G4R4A4_UNORM && format < DXGI_FORMAT_P208) ||
(format > DXGI_FORMAT_V408 && format < DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE))
if (format > DXGI_FORMAT_B4G4R4A4_UNORM && format < DXGI_FORMAT_P208)
continue;

vkd3d_test_set_context("format %#x", format);
Expand All @@ -483,32 +482,41 @@ void test_format_support(void)

if (!required_but_fails)
{
/* Check if the format is unspecified or optional */
for (i = 0; i < ARRAY_SIZE(dxgi_format->unspecified_formats); ++i)
/* ASTC format are unspecified */
if (format >= /* DXGI_FORMAT_UNDOCUMENTED_ASTC_FIRST */ (DXGI_FORMAT)0x85 &&
format <= /* DXGI_FORMAT_UNDOCUMENTED_ASTC_LAST */ (DXGI_FORMAT)0xbc)
{
/* Fixed size list with only part of the list filled */
if (dxgi_format->unspecified_formats[i] == DXGI_FORMAT_UNKNOWN)
break;
if (dxgi_format->unspecified_formats[i] == format)
{
unspecified_format = true;
break;
}
unspecified_format = true;
}

if (!unspecified_format)
else
{
for (i = 0; i < ARRAY_SIZE(dxgi_format->optional_formats); ++i)
/* Check if the format is unspecified or optional */
for (i = 0; i < ARRAY_SIZE(dxgi_format->unspecified_formats); ++i)
{
/* Fixed size list with only part of the list filled */
if (dxgi_format->optional_formats[i] == DXGI_FORMAT_UNKNOWN)
if (dxgi_format->unspecified_formats[i] == DXGI_FORMAT_UNKNOWN)
break;
if (dxgi_format->optional_formats[i] == format)
if (dxgi_format->unspecified_formats[i] == format)
{
optional_format = true;
unspecified_format = true;
break;
}
}

if (!unspecified_format)
{
for (i = 0; i < ARRAY_SIZE(dxgi_format->optional_formats); ++i)
{
/* Fixed size list with only part of the list filled */
if (dxgi_format->optional_formats[i] == DXGI_FORMAT_UNKNOWN)
break;
if (dxgi_format->optional_formats[i] == format)
{
optional_format = true;
break;
}
}
}
}
}

Expand Down

0 comments on commit 1eff69a

Please sign in to comment.