Skip to content

Commit 44e5b0a

Browse files
vkd3d: Adding format values for ASTC extension
Signed-off-by: David McCloskey <dave@juicelabs.co>
1 parent a6f6d8c commit 44e5b0a

File tree

3 files changed

+182
-7
lines changed

3 files changed

+182
-7
lines changed

include/vkd3d_dxgiformat.idl

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,63 @@ typedef enum DXGI_FORMAT
139139
DXGI_FORMAT_V208 = 0x83,
140140
DXGI_FORMAT_V408 = 0x84,
141141

142+
/* https://gli.g-truc.net/0.6.1/api/a00001.html */
143+
DXGI_FORMAT_ASTC_4X4_TYPELESS = 0x85,
144+
DXGI_FORMAT_ASTC_4X4_UNORM = 0x86,
145+
DXGI_FORMAT_ASTC_4X4_UNORM_SRGB = 0x87,
146+
DXGI_FORMAT_ASTC_4X4_FLOAT = 0x88,
147+
DXGI_FORMAT_ASTC_5X4_TYPELESS = 0x89,
148+
DXGI_FORMAT_ASTC_5X4_UNORM = 0x8a,
149+
DXGI_FORMAT_ASTC_5X4_UNORM_SRGB = 0x8b,
150+
DXGI_FORMAT_ASTC_5X5_TYPELESS = 0x8d,
151+
DXGI_FORMAT_ASTC_5X5_UNORM = 0x8e,
152+
DXGI_FORMAT_ASTC_5X5_UNORM_SRGB = 0x8f,
153+
DXGI_FORMAT_ASTC_5X5_FLOAT = 0x90,
154+
DXGI_FORMAT_ASTC_6X5_TYPELESS = 0x91,
155+
DXGI_FORMAT_ASTC_6X5_UNORM = 0x92,
156+
DXGI_FORMAT_ASTC_6X5_UNORM_SRGB = 0x93,
157+
DXGI_FORMAT_ASTC_6X5_FLOAT = 0x94,
158+
DXGI_FORMAT_ASTC_6X6_TYPELESS = 0x95,
159+
DXGI_FORMAT_ASTC_6X6_UNORM = 0x96,
160+
DXGI_FORMAT_ASTC_6X6_UNORM_SRGB = 0x97,
161+
DXGI_FORMAT_ASTC_6X6_FLOAT = 0x98,
162+
DXGI_FORMAT_ASTC_8X5_TYPELESS = 0x99,
163+
DXGI_FORMAT_ASTC_8X5_UNORM = 0x9a,
164+
DXGI_FORMAT_ASTC_8X5_UNORM_SRGB = 0x9b,
165+
DXGI_FORMAT_ASTC_8X5_FLOAT = 0x9c,
166+
DXGI_FORMAT_ASTC_8X6_TYPELESS = 0x9d,
167+
DXGI_FORMAT_ASTC_8X6_UNORM = 0x9e,
168+
DXGI_FORMAT_ASTC_8X6_UNORM_SRGB = 0x9f,
169+
DXGI_FORMAT_ASTC_8X6_FLOAT = 0xa0,
170+
DXGI_FORMAT_ASTC_8X8_TYPELESS = 0xa1,
171+
DXGI_FORMAT_ASTC_8X8_UNORM = 0xa2,
172+
DXGI_FORMAT_ASTC_8X8_UNORM_SRGB = 0xa3,
173+
DXGI_FORMAT_ASTC_8X8_FLOAT = 0xa4,
174+
DXGI_FORMAT_ASTC_10X5_TYPELESS = 0xa5,
175+
DXGI_FORMAT_ASTC_10X5_UNORM = 0xa6,
176+
DXGI_FORMAT_ASTC_10X5_UNORM_SRGB = 0xa7,
177+
DXGI_FORMAT_ASTC_10X5_FLOAT = 0xa8,
178+
DXGI_FORMAT_ASTC_10X6_TYPELESS = 0xa9,
179+
DXGI_FORMAT_ASTC_10X6_UNORM = 0xaa,
180+
DXGI_FORMAT_ASTC_10X6_UNORM_SRGB = 0xab,
181+
DXGI_FORMAT_ASTC_10X6_FLOAT = 0xac,
182+
DXGI_FORMAT_ASTC_10X8_TYPELESS = 0xad,
183+
DXGI_FORMAT_ASTC_10X8_UNORM = 0xae,
184+
DXGI_FORMAT_ASTC_10X8_UNORM_SRGB = 0xaf,
185+
DXGI_FORMAT_ASTC_10X8_FLOAT = 0xb0,
186+
DXGI_FORMAT_ASTC_10X10_TYPELESS = 0xb1,
187+
DXGI_FORMAT_ASTC_10X10_UNORM = 0xb2,
188+
DXGI_FORMAT_ASTC_10X10_UNORM_SRGB = 0xb3,
189+
DXGI_FORMAT_ASTC_10X10_FLOAT = 0xb4,
190+
DXGI_FORMAT_ASTC_12X10_TYPELESS = 0xb5,
191+
DXGI_FORMAT_ASTC_12X10_UNORM = 0xb6,
192+
DXGI_FORMAT_ASTC_12X10_UNORM_SRGB = 0xb7,
193+
DXGI_FORMAT_ASTC_12X10_FLOAT = 0xb8,
194+
DXGI_FORMAT_ASTC_12X12_TYPELESS = 0xb9,
195+
DXGI_FORMAT_ASTC_12X12_UNORM = 0xba,
196+
DXGI_FORMAT_ASTC_12X12_UNORM_SRGB = 0xbb,
197+
DXGI_FORMAT_ASTC_12X12_FLOAT = 0xbc,
198+
142199
DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE = 0xbd,
143200
DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE = 0xbe,
144201

libs/vkd3d/utils.c

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1039,6 +1039,61 @@ bool is_valid_format(DXGI_FORMAT dxgi_format)
10391039
case DXGI_FORMAT_P208:
10401040
case DXGI_FORMAT_V208:
10411041
case DXGI_FORMAT_V408:
1042+
case DXGI_FORMAT_ASTC_4X4_TYPELESS:
1043+
case DXGI_FORMAT_ASTC_4X4_UNORM:
1044+
case DXGI_FORMAT_ASTC_4X4_UNORM_SRGB:
1045+
case DXGI_FORMAT_ASTC_4X4_FLOAT:
1046+
case DXGI_FORMAT_ASTC_5X4_TYPELESS:
1047+
case DXGI_FORMAT_ASTC_5X4_UNORM:
1048+
case DXGI_FORMAT_ASTC_5X4_UNORM_SRGB:
1049+
case DXGI_FORMAT_ASTC_5X5_TYPELESS:
1050+
case DXGI_FORMAT_ASTC_5X5_UNORM:
1051+
case DXGI_FORMAT_ASTC_5X5_UNORM_SRGB:
1052+
case DXGI_FORMAT_ASTC_5X5_FLOAT:
1053+
case DXGI_FORMAT_ASTC_6X5_TYPELESS:
1054+
case DXGI_FORMAT_ASTC_6X5_UNORM:
1055+
case DXGI_FORMAT_ASTC_6X5_UNORM_SRGB:
1056+
case DXGI_FORMAT_ASTC_6X5_FLOAT:
1057+
case DXGI_FORMAT_ASTC_6X6_TYPELESS:
1058+
case DXGI_FORMAT_ASTC_6X6_UNORM:
1059+
case DXGI_FORMAT_ASTC_6X6_UNORM_SRGB:
1060+
case DXGI_FORMAT_ASTC_6X6_FLOAT:
1061+
case DXGI_FORMAT_ASTC_8X5_TYPELESS:
1062+
case DXGI_FORMAT_ASTC_8X5_UNORM:
1063+
case DXGI_FORMAT_ASTC_8X5_UNORM_SRGB:
1064+
case DXGI_FORMAT_ASTC_8X5_FLOAT:
1065+
case DXGI_FORMAT_ASTC_8X6_TYPELESS:
1066+
case DXGI_FORMAT_ASTC_8X6_UNORM:
1067+
case DXGI_FORMAT_ASTC_8X6_UNORM_SRGB:
1068+
case DXGI_FORMAT_ASTC_8X6_FLOAT:
1069+
case DXGI_FORMAT_ASTC_8X8_TYPELESS:
1070+
case DXGI_FORMAT_ASTC_8X8_UNORM:
1071+
case DXGI_FORMAT_ASTC_8X8_UNORM_SRGB:
1072+
case DXGI_FORMAT_ASTC_8X8_FLOAT:
1073+
case DXGI_FORMAT_ASTC_10X5_TYPELESS:
1074+
case DXGI_FORMAT_ASTC_10X5_UNORM:
1075+
case DXGI_FORMAT_ASTC_10X5_UNORM_SRGB:
1076+
case DXGI_FORMAT_ASTC_10X5_FLOAT:
1077+
case DXGI_FORMAT_ASTC_10X6_TYPELESS:
1078+
case DXGI_FORMAT_ASTC_10X6_UNORM:
1079+
case DXGI_FORMAT_ASTC_10X6_UNORM_SRGB:
1080+
case DXGI_FORMAT_ASTC_10X6_FLOAT:
1081+
case DXGI_FORMAT_ASTC_10X8_TYPELESS:
1082+
case DXGI_FORMAT_ASTC_10X8_UNORM:
1083+
case DXGI_FORMAT_ASTC_10X8_UNORM_SRGB:
1084+
case DXGI_FORMAT_ASTC_10X8_FLOAT:
1085+
case DXGI_FORMAT_ASTC_10X10_TYPELESS:
1086+
case DXGI_FORMAT_ASTC_10X10_UNORM:
1087+
case DXGI_FORMAT_ASTC_10X10_UNORM_SRGB:
1088+
case DXGI_FORMAT_ASTC_10X10_FLOAT:
1089+
case DXGI_FORMAT_ASTC_12X10_TYPELESS:
1090+
case DXGI_FORMAT_ASTC_12X10_UNORM:
1091+
case DXGI_FORMAT_ASTC_12X10_UNORM_SRGB:
1092+
case DXGI_FORMAT_ASTC_12X10_FLOAT:
1093+
case DXGI_FORMAT_ASTC_12X12_TYPELESS:
1094+
case DXGI_FORMAT_ASTC_12X12_UNORM:
1095+
case DXGI_FORMAT_ASTC_12X12_UNORM_SRGB:
1096+
case DXGI_FORMAT_ASTC_12X12_FLOAT:
10421097
case DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE:
10431098
case DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE:
10441099
case DXGI_FORMAT_A4B4G4R4_UNORM:

tests/d3d12_device.c

Lines changed: 70 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,61 @@ void test_format_support(void)
468468
DXGI_FORMAT_P208,
469469
DXGI_FORMAT_V208,
470470
DXGI_FORMAT_V408,
471+
/* DXGI_FORMAT_ASTC_4X4_TYPELESS */ (DXGI_FORMAT)0x85,
472+
/* DXGI_FORMAT_ASTC_4X4_UNORM */ (DXGI_FORMAT)0x86,
473+
/* DXGI_FORMAT_ASTC_4X4_UNORM_SRGB */ (DXGI_FORMAT)0x87,
474+
/* DXGI_FORMAT_ASTC_4X4_FLOAT */ (DXGI_FORMAT)0x88,
475+
/* DXGI_FORMAT_ASTC_5X4_TYPELESS */ (DXGI_FORMAT)0x89,
476+
/* DXGI_FORMAT_ASTC_5X4_UNORM */ (DXGI_FORMAT)0x8a,
477+
/* DXGI_FORMAT_ASTC_5X4_UNORM_SRGB */ (DXGI_FORMAT)0x8b,
478+
/* DXGI_FORMAT_ASTC_5X5_TYPELESS */ (DXGI_FORMAT)0x8d,
479+
/* DXGI_FORMAT_ASTC_5X5_UNORM */ (DXGI_FORMAT)0x8e,
480+
/* DXGI_FORMAT_ASTC_5X5_UNORM_SRGB */ (DXGI_FORMAT)0x8f,
481+
/* DXGI_FORMAT_ASTC_5X5_FLOAT */ (DXGI_FORMAT)0x90,
482+
/* DXGI_FORMAT_ASTC_6X5_TYPELESS */ (DXGI_FORMAT)0x91,
483+
/* DXGI_FORMAT_ASTC_6X5_UNORM */ (DXGI_FORMAT)0x92,
484+
/* DXGI_FORMAT_ASTC_6X5_UNORM_SRGB */ (DXGI_FORMAT)0x93,
485+
/* DXGI_FORMAT_ASTC_6X5_FLOAT */ (DXGI_FORMAT)0x94,
486+
/* DXGI_FORMAT_ASTC_6X6_TYPELESS */ (DXGI_FORMAT)0x95,
487+
/* DXGI_FORMAT_ASTC_6X6_UNORM */ (DXGI_FORMAT)0x96,
488+
/* DXGI_FORMAT_ASTC_6X6_UNORM_SRGB */ (DXGI_FORMAT)0x97,
489+
/* DXGI_FORMAT_ASTC_6X6_FLOAT */ (DXGI_FORMAT)0x98,
490+
/* DXGI_FORMAT_ASTC_8X5_TYPELESS */ (DXGI_FORMAT)0x99,
491+
/* DXGI_FORMAT_ASTC_8X5_UNORM */ (DXGI_FORMAT)0x9a,
492+
/* DXGI_FORMAT_ASTC_8X5_UNORM_SRGB */ (DXGI_FORMAT)0x9b,
493+
/* DXGI_FORMAT_ASTC_8X5_FLOAT */ (DXGI_FORMAT)0x9c,
494+
/* DXGI_FORMAT_ASTC_8X6_TYPELESS */ (DXGI_FORMAT)0x9d,
495+
/* DXGI_FORMAT_ASTC_8X6_UNORM */ (DXGI_FORMAT)0x9e,
496+
/* DXGI_FORMAT_ASTC_8X6_UNORM_SRGB */ (DXGI_FORMAT)0x9f,
497+
/* DXGI_FORMAT_ASTC_8X6_FLOAT */ (DXGI_FORMAT)0xa0,
498+
/* DXGI_FORMAT_ASTC_8X8_TYPELESS */ (DXGI_FORMAT)0xa1,
499+
/* DXGI_FORMAT_ASTC_8X8_UNORM */ (DXGI_FORMAT)0xa2,
500+
/* DXGI_FORMAT_ASTC_8X8_UNORM_SRGB */ (DXGI_FORMAT)0xa3,
501+
/* DXGI_FORMAT_ASTC_8X8_FLOAT */ (DXGI_FORMAT)0xa4,
502+
/* DXGI_FORMAT_ASTC_10X5_TYPELESS */ (DXGI_FORMAT)0xa5,
503+
/* DXGI_FORMAT_ASTC_10X5_UNORM */ (DXGI_FORMAT)0xa6,
504+
/* DXGI_FORMAT_ASTC_10X5_UNORM_SRGB */ (DXGI_FORMAT)0xa7,
505+
/* DXGI_FORMAT_ASTC_10X5_FLOAT */ (DXGI_FORMAT)0xa8,
506+
/* DXGI_FORMAT_ASTC_10X6_TYPELESS */ (DXGI_FORMAT)0xa9,
507+
/* DXGI_FORMAT_ASTC_10X6_UNORM */ (DXGI_FORMAT)0xaa,
508+
/* DXGI_FORMAT_ASTC_10X6_UNORM_SRGB */ (DXGI_FORMAT)0xab,
509+
/* DXGI_FORMAT_ASTC_10X6_FLOAT */ (DXGI_FORMAT)0xac,
510+
/* DXGI_FORMAT_ASTC_10X8_TYPELESS */ (DXGI_FORMAT)0xad,
511+
/* DXGI_FORMAT_ASTC_10X8_UNORM */ (DXGI_FORMAT)0xae,
512+
/* DXGI_FORMAT_ASTC_10X8_UNORM_SRGB */ (DXGI_FORMAT)0xaf,
513+
/* DXGI_FORMAT_ASTC_10X8_FLOAT */ (DXGI_FORMAT)0xb0,
514+
/* DXGI_FORMAT_ASTC_10X10_TYPELESS */ (DXGI_FORMAT)0xb1,
515+
/* DXGI_FORMAT_ASTC_10X10_UNORM */ (DXGI_FORMAT)0xb2,
516+
/* DXGI_FORMAT_ASTC_10X10_UNORM_SRGB */ (DXGI_FORMAT)0xb3,
517+
/* DXGI_FORMAT_ASTC_10X10_FLOAT */ (DXGI_FORMAT)0xb4,
518+
/* DXGI_FORMAT_ASTC_12X10_TYPELESS */ (DXGI_FORMAT)0xb5,
519+
/* DXGI_FORMAT_ASTC_12X10_UNORM */ (DXGI_FORMAT)0xb6,
520+
/* DXGI_FORMAT_ASTC_12X10_UNORM_SRGB */ (DXGI_FORMAT)0xb7,
521+
/* DXGI_FORMAT_ASTC_12X10_FLOAT */ (DXGI_FORMAT)0xb8,
522+
/* DXGI_FORMAT_ASTC_12X12_TYPELESS */ (DXGI_FORMAT)0xb9,
523+
/* DXGI_FORMAT_ASTC_12X12_UNORM */ (DXGI_FORMAT)0xba,
524+
/* DXGI_FORMAT_ASTC_12X12_UNORM_SRGB */ (DXGI_FORMAT)0xbb,
525+
/* DXGI_FORMAT_ASTC_12X12_FLOAT */ (DXGI_FORMAT)0xbc,
471526
DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE,
472527
DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE,
473528
};
@@ -604,15 +659,23 @@ void test_format_support(void)
604659

605660
if (!unspecified_format)
606661
{
607-
for (j = 0; j < ARRAY_SIZE(dxgi_format_list[k].optional_formats); ++j)
662+
/* ASTC format are optional */
663+
if (all_formats[i] >= /* DXGI_FORMAT_ASTC_4X4_TYPELESS */ (DXGI_FORMAT)0x85 &&
664+
all_formats[i] <= /* DXGI_FORMAT_ASTC_12X12_FLOAT */ (DXGI_FORMAT)0xbc)
665+
optional_format = true;
666+
667+
if (!optional_format)
608668
{
609-
// Fixed size list with only part of the list filled
610-
if (dxgi_format_list[k].optional_formats[j] == DXGI_FORMAT_UNKNOWN)
611-
break;
612-
if (dxgi_format_list[k].optional_formats[j] == all_formats[i])
669+
for (j = 0; j < ARRAY_SIZE(dxgi_format_list[k].optional_formats); ++j)
613670
{
614-
optional_format = true;
615-
break;
671+
// Fixed size list with only part of the list filled
672+
if (dxgi_format_list[k].optional_formats[j] == DXGI_FORMAT_UNKNOWN)
673+
break;
674+
if (dxgi_format_list[k].optional_formats[j] == all_formats[i])
675+
{
676+
optional_format = true;
677+
break;
678+
}
616679
}
617680
}
618681
}

0 commit comments

Comments
 (0)