diff --git a/include/vkd3d_dxgiformat.idl b/include/vkd3d_dxgiformat.idl index 3ec83756d7..7f6ef653eb 100644 --- a/include/vkd3d_dxgiformat.idl +++ b/include/vkd3d_dxgiformat.idl @@ -139,6 +139,63 @@ 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_ASTC_4X4_TYPELESS = 0x85, + DXGI_FORMAT_ASTC_4X4_UNORM = 0x86, + DXGI_FORMAT_ASTC_4X4_UNORM_SRGB = 0x87, + DXGI_FORMAT_ASTC_4X4_FLOAT = 0x88, + DXGI_FORMAT_ASTC_5X4_TYPELESS = 0x89, + DXGI_FORMAT_ASTC_5X4_UNORM = 0x8a, + DXGI_FORMAT_ASTC_5X4_UNORM_SRGB = 0x8b, + DXGI_FORMAT_ASTC_5X5_TYPELESS = 0x8d, + DXGI_FORMAT_ASTC_5X5_UNORM = 0x8e, + DXGI_FORMAT_ASTC_5X5_UNORM_SRGB = 0x8f, + DXGI_FORMAT_ASTC_5X5_FLOAT = 0x90, + DXGI_FORMAT_ASTC_6X5_TYPELESS = 0x91, + DXGI_FORMAT_ASTC_6X5_UNORM = 0x92, + DXGI_FORMAT_ASTC_6X5_UNORM_SRGB = 0x93, + DXGI_FORMAT_ASTC_6X5_FLOAT = 0x94, + DXGI_FORMAT_ASTC_6X6_TYPELESS = 0x95, + DXGI_FORMAT_ASTC_6X6_UNORM = 0x96, + DXGI_FORMAT_ASTC_6X6_UNORM_SRGB = 0x97, + DXGI_FORMAT_ASTC_6X6_FLOAT = 0x98, + DXGI_FORMAT_ASTC_8X5_TYPELESS = 0x99, + DXGI_FORMAT_ASTC_8X5_UNORM = 0x9a, + DXGI_FORMAT_ASTC_8X5_UNORM_SRGB = 0x9b, + DXGI_FORMAT_ASTC_8X5_FLOAT = 0x9c, + DXGI_FORMAT_ASTC_8X6_TYPELESS = 0x9d, + DXGI_FORMAT_ASTC_8X6_UNORM = 0x9e, + DXGI_FORMAT_ASTC_8X6_UNORM_SRGB = 0x9f, + DXGI_FORMAT_ASTC_8X6_FLOAT = 0xa0, + DXGI_FORMAT_ASTC_8X8_TYPELESS = 0xa1, + DXGI_FORMAT_ASTC_8X8_UNORM = 0xa2, + DXGI_FORMAT_ASTC_8X8_UNORM_SRGB = 0xa3, + DXGI_FORMAT_ASTC_8X8_FLOAT = 0xa4, + DXGI_FORMAT_ASTC_10X5_TYPELESS = 0xa5, + DXGI_FORMAT_ASTC_10X5_UNORM = 0xa6, + DXGI_FORMAT_ASTC_10X5_UNORM_SRGB = 0xa7, + DXGI_FORMAT_ASTC_10X5_FLOAT = 0xa8, + DXGI_FORMAT_ASTC_10X6_TYPELESS = 0xa9, + DXGI_FORMAT_ASTC_10X6_UNORM = 0xaa, + DXGI_FORMAT_ASTC_10X6_UNORM_SRGB = 0xab, + DXGI_FORMAT_ASTC_10X6_FLOAT = 0xac, + DXGI_FORMAT_ASTC_10X8_TYPELESS = 0xad, + DXGI_FORMAT_ASTC_10X8_UNORM = 0xae, + DXGI_FORMAT_ASTC_10X8_UNORM_SRGB = 0xaf, + DXGI_FORMAT_ASTC_10X8_FLOAT = 0xb0, + DXGI_FORMAT_ASTC_10X10_TYPELESS = 0xb1, + DXGI_FORMAT_ASTC_10X10_UNORM = 0xb2, + DXGI_FORMAT_ASTC_10X10_UNORM_SRGB = 0xb3, + DXGI_FORMAT_ASTC_10X10_FLOAT = 0xb4, + DXGI_FORMAT_ASTC_12X10_TYPELESS = 0xb5, + DXGI_FORMAT_ASTC_12X10_UNORM = 0xb6, + DXGI_FORMAT_ASTC_12X10_UNORM_SRGB = 0xb7, + DXGI_FORMAT_ASTC_12X10_FLOAT = 0xb8, + DXGI_FORMAT_ASTC_12X12_TYPELESS = 0xb9, + DXGI_FORMAT_ASTC_12X12_UNORM = 0xba, + DXGI_FORMAT_ASTC_12X12_UNORM_SRGB = 0xbb, + DXGI_FORMAT_ASTC_12X12_FLOAT = 0xbc, + DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE = 0xbd, DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE = 0xbe, diff --git a/libs/vkd3d/utils.c b/libs/vkd3d/utils.c index 5d85094583..a8982c027d 100644 --- a/libs/vkd3d/utils.c +++ b/libs/vkd3d/utils.c @@ -1039,6 +1039,61 @@ bool is_valid_format(DXGI_FORMAT dxgi_format) case DXGI_FORMAT_P208: case DXGI_FORMAT_V208: case DXGI_FORMAT_V408: + case DXGI_FORMAT_ASTC_4X4_TYPELESS: + case DXGI_FORMAT_ASTC_4X4_UNORM: + case DXGI_FORMAT_ASTC_4X4_UNORM_SRGB: + case DXGI_FORMAT_ASTC_4X4_FLOAT: + case DXGI_FORMAT_ASTC_5X4_TYPELESS: + case DXGI_FORMAT_ASTC_5X4_UNORM: + case DXGI_FORMAT_ASTC_5X4_UNORM_SRGB: + case DXGI_FORMAT_ASTC_5X5_TYPELESS: + case DXGI_FORMAT_ASTC_5X5_UNORM: + case DXGI_FORMAT_ASTC_5X5_UNORM_SRGB: + case DXGI_FORMAT_ASTC_5X5_FLOAT: + case DXGI_FORMAT_ASTC_6X5_TYPELESS: + case DXGI_FORMAT_ASTC_6X5_UNORM: + case DXGI_FORMAT_ASTC_6X5_UNORM_SRGB: + case DXGI_FORMAT_ASTC_6X5_FLOAT: + case DXGI_FORMAT_ASTC_6X6_TYPELESS: + case DXGI_FORMAT_ASTC_6X6_UNORM: + case DXGI_FORMAT_ASTC_6X6_UNORM_SRGB: + case DXGI_FORMAT_ASTC_6X6_FLOAT: + case DXGI_FORMAT_ASTC_8X5_TYPELESS: + case DXGI_FORMAT_ASTC_8X5_UNORM: + case DXGI_FORMAT_ASTC_8X5_UNORM_SRGB: + case DXGI_FORMAT_ASTC_8X5_FLOAT: + case DXGI_FORMAT_ASTC_8X6_TYPELESS: + case DXGI_FORMAT_ASTC_8X6_UNORM: + case DXGI_FORMAT_ASTC_8X6_UNORM_SRGB: + case DXGI_FORMAT_ASTC_8X6_FLOAT: + case DXGI_FORMAT_ASTC_8X8_TYPELESS: + case DXGI_FORMAT_ASTC_8X8_UNORM: + case DXGI_FORMAT_ASTC_8X8_UNORM_SRGB: + case DXGI_FORMAT_ASTC_8X8_FLOAT: + case DXGI_FORMAT_ASTC_10X5_TYPELESS: + case DXGI_FORMAT_ASTC_10X5_UNORM: + case DXGI_FORMAT_ASTC_10X5_UNORM_SRGB: + case DXGI_FORMAT_ASTC_10X5_FLOAT: + case DXGI_FORMAT_ASTC_10X6_TYPELESS: + case DXGI_FORMAT_ASTC_10X6_UNORM: + case DXGI_FORMAT_ASTC_10X6_UNORM_SRGB: + case DXGI_FORMAT_ASTC_10X6_FLOAT: + case DXGI_FORMAT_ASTC_10X8_TYPELESS: + case DXGI_FORMAT_ASTC_10X8_UNORM: + case DXGI_FORMAT_ASTC_10X8_UNORM_SRGB: + case DXGI_FORMAT_ASTC_10X8_FLOAT: + case DXGI_FORMAT_ASTC_10X10_TYPELESS: + case DXGI_FORMAT_ASTC_10X10_UNORM: + case DXGI_FORMAT_ASTC_10X10_UNORM_SRGB: + case DXGI_FORMAT_ASTC_10X10_FLOAT: + case DXGI_FORMAT_ASTC_12X10_TYPELESS: + case DXGI_FORMAT_ASTC_12X10_UNORM: + case DXGI_FORMAT_ASTC_12X10_UNORM_SRGB: + case DXGI_FORMAT_ASTC_12X10_FLOAT: + case DXGI_FORMAT_ASTC_12X12_TYPELESS: + case DXGI_FORMAT_ASTC_12X12_UNORM: + case DXGI_FORMAT_ASTC_12X12_UNORM_SRGB: + case DXGI_FORMAT_ASTC_12X12_FLOAT: case DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE: case DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE: case DXGI_FORMAT_A4B4G4R4_UNORM: diff --git a/tests/d3d12_device.c b/tests/d3d12_device.c index 28255f6ffb..ce1cdca819 100644 --- a/tests/d3d12_device.c +++ b/tests/d3d12_device.c @@ -468,6 +468,61 @@ void test_format_support(void) DXGI_FORMAT_P208, DXGI_FORMAT_V208, DXGI_FORMAT_V408, + /* DXGI_FORMAT_ASTC_4X4_TYPELESS */ (DXGI_FORMAT)0x85, + /* DXGI_FORMAT_ASTC_4X4_UNORM */ (DXGI_FORMAT)0x86, + /* DXGI_FORMAT_ASTC_4X4_UNORM_SRGB */ (DXGI_FORMAT)0x87, + /* DXGI_FORMAT_ASTC_4X4_FLOAT */ (DXGI_FORMAT)0x88, + /* DXGI_FORMAT_ASTC_5X4_TYPELESS */ (DXGI_FORMAT)0x89, + /* DXGI_FORMAT_ASTC_5X4_UNORM */ (DXGI_FORMAT)0x8a, + /* DXGI_FORMAT_ASTC_5X4_UNORM_SRGB */ (DXGI_FORMAT)0x8b, + /* DXGI_FORMAT_ASTC_5X5_TYPELESS */ (DXGI_FORMAT)0x8d, + /* DXGI_FORMAT_ASTC_5X5_UNORM */ (DXGI_FORMAT)0x8e, + /* DXGI_FORMAT_ASTC_5X5_UNORM_SRGB */ (DXGI_FORMAT)0x8f, + /* DXGI_FORMAT_ASTC_5X5_FLOAT */ (DXGI_FORMAT)0x90, + /* DXGI_FORMAT_ASTC_6X5_TYPELESS */ (DXGI_FORMAT)0x91, + /* DXGI_FORMAT_ASTC_6X5_UNORM */ (DXGI_FORMAT)0x92, + /* DXGI_FORMAT_ASTC_6X5_UNORM_SRGB */ (DXGI_FORMAT)0x93, + /* DXGI_FORMAT_ASTC_6X5_FLOAT */ (DXGI_FORMAT)0x94, + /* DXGI_FORMAT_ASTC_6X6_TYPELESS */ (DXGI_FORMAT)0x95, + /* DXGI_FORMAT_ASTC_6X6_UNORM */ (DXGI_FORMAT)0x96, + /* DXGI_FORMAT_ASTC_6X6_UNORM_SRGB */ (DXGI_FORMAT)0x97, + /* DXGI_FORMAT_ASTC_6X6_FLOAT */ (DXGI_FORMAT)0x98, + /* DXGI_FORMAT_ASTC_8X5_TYPELESS */ (DXGI_FORMAT)0x99, + /* DXGI_FORMAT_ASTC_8X5_UNORM */ (DXGI_FORMAT)0x9a, + /* DXGI_FORMAT_ASTC_8X5_UNORM_SRGB */ (DXGI_FORMAT)0x9b, + /* DXGI_FORMAT_ASTC_8X5_FLOAT */ (DXGI_FORMAT)0x9c, + /* DXGI_FORMAT_ASTC_8X6_TYPELESS */ (DXGI_FORMAT)0x9d, + /* DXGI_FORMAT_ASTC_8X6_UNORM */ (DXGI_FORMAT)0x9e, + /* DXGI_FORMAT_ASTC_8X6_UNORM_SRGB */ (DXGI_FORMAT)0x9f, + /* DXGI_FORMAT_ASTC_8X6_FLOAT */ (DXGI_FORMAT)0xa0, + /* DXGI_FORMAT_ASTC_8X8_TYPELESS */ (DXGI_FORMAT)0xa1, + /* DXGI_FORMAT_ASTC_8X8_UNORM */ (DXGI_FORMAT)0xa2, + /* DXGI_FORMAT_ASTC_8X8_UNORM_SRGB */ (DXGI_FORMAT)0xa3, + /* DXGI_FORMAT_ASTC_8X8_FLOAT */ (DXGI_FORMAT)0xa4, + /* DXGI_FORMAT_ASTC_10X5_TYPELESS */ (DXGI_FORMAT)0xa5, + /* DXGI_FORMAT_ASTC_10X5_UNORM */ (DXGI_FORMAT)0xa6, + /* DXGI_FORMAT_ASTC_10X5_UNORM_SRGB */ (DXGI_FORMAT)0xa7, + /* DXGI_FORMAT_ASTC_10X5_FLOAT */ (DXGI_FORMAT)0xa8, + /* DXGI_FORMAT_ASTC_10X6_TYPELESS */ (DXGI_FORMAT)0xa9, + /* DXGI_FORMAT_ASTC_10X6_UNORM */ (DXGI_FORMAT)0xaa, + /* DXGI_FORMAT_ASTC_10X6_UNORM_SRGB */ (DXGI_FORMAT)0xab, + /* DXGI_FORMAT_ASTC_10X6_FLOAT */ (DXGI_FORMAT)0xac, + /* DXGI_FORMAT_ASTC_10X8_TYPELESS */ (DXGI_FORMAT)0xad, + /* DXGI_FORMAT_ASTC_10X8_UNORM */ (DXGI_FORMAT)0xae, + /* DXGI_FORMAT_ASTC_10X8_UNORM_SRGB */ (DXGI_FORMAT)0xaf, + /* DXGI_FORMAT_ASTC_10X8_FLOAT */ (DXGI_FORMAT)0xb0, + /* DXGI_FORMAT_ASTC_10X10_TYPELESS */ (DXGI_FORMAT)0xb1, + /* DXGI_FORMAT_ASTC_10X10_UNORM */ (DXGI_FORMAT)0xb2, + /* DXGI_FORMAT_ASTC_10X10_UNORM_SRGB */ (DXGI_FORMAT)0xb3, + /* DXGI_FORMAT_ASTC_10X10_FLOAT */ (DXGI_FORMAT)0xb4, + /* DXGI_FORMAT_ASTC_12X10_TYPELESS */ (DXGI_FORMAT)0xb5, + /* DXGI_FORMAT_ASTC_12X10_UNORM */ (DXGI_FORMAT)0xb6, + /* DXGI_FORMAT_ASTC_12X10_UNORM_SRGB */ (DXGI_FORMAT)0xb7, + /* DXGI_FORMAT_ASTC_12X10_FLOAT */ (DXGI_FORMAT)0xb8, + /* DXGI_FORMAT_ASTC_12X12_TYPELESS */ (DXGI_FORMAT)0xb9, + /* DXGI_FORMAT_ASTC_12X12_UNORM */ (DXGI_FORMAT)0xba, + /* DXGI_FORMAT_ASTC_12X12_UNORM_SRGB */ (DXGI_FORMAT)0xbb, + /* DXGI_FORMAT_ASTC_12X12_FLOAT */ (DXGI_FORMAT)0xbc, DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE, DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE, }; @@ -604,15 +659,23 @@ void test_format_support(void) if (!unspecified_format) { - for (j = 0; j < ARRAY_SIZE(dxgi_format_list[k].optional_formats); ++j) + /* ASTC format are optional */ + if (all_formats[i] >= /* DXGI_FORMAT_ASTC_4X4_TYPELESS */ (DXGI_FORMAT)0x85 && + all_formats[i] <= /* DXGI_FORMAT_ASTC_12X12_FLOAT */ (DXGI_FORMAT)0xbc) + optional_format = true; + + if (!optional_format) { - // Fixed size list with only part of the list filled - if (dxgi_format_list[k].optional_formats[j] == DXGI_FORMAT_UNKNOWN) - break; - if (dxgi_format_list[k].optional_formats[j] == all_formats[i]) + for (j = 0; j < ARRAY_SIZE(dxgi_format_list[k].optional_formats); ++j) { - optional_format = true; - break; + // Fixed size list with only part of the list filled + if (dxgi_format_list[k].optional_formats[j] == DXGI_FORMAT_UNKNOWN) + break; + if (dxgi_format_list[k].optional_formats[j] == all_formats[i]) + { + optional_format = true; + break; + } } } }