Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 67c93d2

Browse files
committed
Expose the minimal subset of required supported formats
This cl exposes the bare minimum in terms of format requirements in order to support Vulkan 1.1. Fixes all failures in: dEQP-VK.api.info.format_properties.* Bug b/117974925 Change-Id: Ia84b1b13430faffeb840e118b09b9f3e352c8cc9 Reviewed-on: https://swiftshader-review.googlesource.com/c/22888 Tested-by: Alexis Hétu <sugoi@google.com> Reviewed-by: Nicolas Capens <nicolascapens@google.com>
1 parent 4ad2322 commit 67c93d2

File tree

1 file changed

+261
-2
lines changed

1 file changed

+261
-2
lines changed

src/Vulkan/VkPhysicalDevice.cpp

Lines changed: 261 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ const VkPhysicalDeviceFeatures& PhysicalDevice::getFeatures() const
2828
{
2929
static const VkPhysicalDeviceFeatures features
3030
{
31-
true, // robustBufferAccess
31+
true, // robustBufferAccess
3232
false, // fullDrawIndexUint32
3333
false, // imageCubeArray
3434
false, // independentBlend
@@ -48,7 +48,7 @@ const VkPhysicalDeviceFeatures& PhysicalDevice::getFeatures() const
4848
false, // alphaToOne
4949
false, // multiViewport
5050
false, // samplerAnisotropy
51-
false, // textureCompressionETC2
51+
true, // textureCompressionETC2
5252
false, // textureCompressionASTC_LDR
5353
false, // textureCompressionBC
5454
false, // occlusionQueryPrecise
@@ -332,6 +332,265 @@ void PhysicalDevice::getFormatProperties(VkFormat format, VkFormatProperties* pF
332332
pFormatProperties->linearTilingFeatures = 0; // Unsupported format
333333
pFormatProperties->optimalTilingFeatures = 0; // Unsupported format
334334
pFormatProperties->bufferFeatures = 0; // Unsupported format
335+
336+
switch(format)
337+
{
338+
case VK_FORMAT_B4G4R4A4_UNORM_PACK16:
339+
case VK_FORMAT_R5G6B5_UNORM_PACK16:
340+
case VK_FORMAT_A1R5G5B5_UNORM_PACK16:
341+
case VK_FORMAT_R8_UNORM:
342+
case VK_FORMAT_R8_SNORM:
343+
case VK_FORMAT_R8G8_UNORM:
344+
case VK_FORMAT_R8G8_SNORM:
345+
case VK_FORMAT_R8G8B8A8_UNORM:
346+
case VK_FORMAT_R8G8B8A8_SNORM:
347+
case VK_FORMAT_R8G8B8A8_SRGB:
348+
case VK_FORMAT_B8G8R8A8_UNORM:
349+
case VK_FORMAT_B8G8R8A8_SRGB:
350+
case VK_FORMAT_A8B8G8R8_UNORM_PACK32:
351+
case VK_FORMAT_A8B8G8R8_SNORM_PACK32:
352+
case VK_FORMAT_A8B8G8R8_SRGB_PACK32:
353+
case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
354+
case VK_FORMAT_R16_SFLOAT:
355+
case VK_FORMAT_R16G16_SFLOAT:
356+
case VK_FORMAT_R16G16B16A16_SFLOAT:
357+
case VK_FORMAT_B10G11R11_UFLOAT_PACK32:
358+
case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32:
359+
pFormatProperties->optimalTilingFeatures |=
360+
VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT;
361+
// Fall through
362+
case VK_FORMAT_R8_UINT:
363+
case VK_FORMAT_R8_SINT:
364+
case VK_FORMAT_R8G8_UINT:
365+
case VK_FORMAT_R8G8_SINT:
366+
case VK_FORMAT_R8G8B8A8_UINT:
367+
case VK_FORMAT_R8G8B8A8_SINT:
368+
case VK_FORMAT_A8B8G8R8_UINT_PACK32:
369+
case VK_FORMAT_A8B8G8R8_SINT_PACK32:
370+
case VK_FORMAT_A2B10G10R10_UINT_PACK32:
371+
case VK_FORMAT_R16_UINT:
372+
case VK_FORMAT_R16_SINT:
373+
case VK_FORMAT_R16G16_UINT:
374+
case VK_FORMAT_R16G16_SINT:
375+
case VK_FORMAT_R16G16B16A16_UINT:
376+
case VK_FORMAT_R16G16B16A16_SINT:
377+
case VK_FORMAT_R32_UINT:
378+
case VK_FORMAT_R32_SINT:
379+
case VK_FORMAT_R32_SFLOAT:
380+
case VK_FORMAT_R32G32_UINT:
381+
case VK_FORMAT_R32G32_SINT:
382+
case VK_FORMAT_R32G32_SFLOAT:
383+
case VK_FORMAT_R32G32B32A32_UINT:
384+
case VK_FORMAT_R32G32B32A32_SINT:
385+
case VK_FORMAT_R32G32B32A32_SFLOAT:
386+
case VK_FORMAT_D16_UNORM:
387+
case VK_FORMAT_D32_SFLOAT:
388+
pFormatProperties->optimalTilingFeatures |=
389+
VK_FORMAT_FEATURE_BLIT_SRC_BIT |
390+
VK_FORMAT_FEATURE_TRANSFER_SRC_BIT |
391+
VK_FORMAT_FEATURE_TRANSFER_DST_BIT;
392+
// Fall through
393+
case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:
394+
case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:
395+
case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:
396+
case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:
397+
case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:
398+
case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:
399+
case VK_FORMAT_EAC_R11_UNORM_BLOCK:
400+
case VK_FORMAT_EAC_R11_SNORM_BLOCK:
401+
case VK_FORMAT_EAC_R11G11_UNORM_BLOCK:
402+
case VK_FORMAT_EAC_R11G11_SNORM_BLOCK:
403+
pFormatProperties->optimalTilingFeatures |=
404+
VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT;
405+
break;
406+
}
407+
408+
switch(format)
409+
{
410+
case VK_FORMAT_R32_UINT:
411+
case VK_FORMAT_R32_SINT:
412+
pFormatProperties->optimalTilingFeatures |=
413+
VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT;
414+
pFormatProperties->bufferFeatures |=
415+
VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT;
416+
// Fall through
417+
case VK_FORMAT_R8G8B8A8_UNORM:
418+
case VK_FORMAT_R8G8B8A8_SNORM:
419+
case VK_FORMAT_R8G8B8A8_UINT:
420+
case VK_FORMAT_R8G8B8A8_SINT:
421+
case VK_FORMAT_R16G16B16A16_UINT:
422+
case VK_FORMAT_R16G16B16A16_SINT:
423+
case VK_FORMAT_R16G16B16A16_SFLOAT:
424+
case VK_FORMAT_R32_SFLOAT:
425+
case VK_FORMAT_R32G32_UINT:
426+
case VK_FORMAT_R32G32_SINT:
427+
case VK_FORMAT_R32G32_SFLOAT:
428+
case VK_FORMAT_R32G32B32A32_UINT:
429+
case VK_FORMAT_R32G32B32A32_SINT:
430+
case VK_FORMAT_R32G32B32A32_SFLOAT:
431+
pFormatProperties->optimalTilingFeatures |=
432+
VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT;
433+
// Fall through
434+
case VK_FORMAT_A8B8G8R8_UNORM_PACK32:
435+
case VK_FORMAT_A8B8G8R8_SNORM_PACK32:
436+
case VK_FORMAT_A8B8G8R8_UINT_PACK32:
437+
case VK_FORMAT_A8B8G8R8_SINT_PACK32:
438+
pFormatProperties->bufferFeatures |=
439+
VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT;
440+
break;
441+
}
442+
443+
switch(format)
444+
{
445+
case VK_FORMAT_R5G6B5_UNORM_PACK16:
446+
case VK_FORMAT_A1R5G5B5_UNORM_PACK16:
447+
case VK_FORMAT_R8_UNORM:
448+
case VK_FORMAT_R8G8_UNORM:
449+
case VK_FORMAT_R8G8B8A8_UNORM:
450+
case VK_FORMAT_R8G8B8A8_SRGB:
451+
case VK_FORMAT_B8G8R8A8_UNORM:
452+
case VK_FORMAT_B8G8R8A8_SRGB:
453+
case VK_FORMAT_A8B8G8R8_UNORM_PACK32:
454+
case VK_FORMAT_A8B8G8R8_SRGB_PACK32:
455+
case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
456+
case VK_FORMAT_R16_SFLOAT:
457+
case VK_FORMAT_R16G16_SFLOAT:
458+
case VK_FORMAT_R16G16B16A16_SFLOAT:
459+
pFormatProperties->optimalTilingFeatures |=
460+
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT;
461+
// Fall through
462+
case VK_FORMAT_R8_UINT:
463+
case VK_FORMAT_R8_SINT:
464+
case VK_FORMAT_R8G8_UINT:
465+
case VK_FORMAT_R8G8_SINT:
466+
case VK_FORMAT_R8G8B8A8_UINT:
467+
case VK_FORMAT_R8G8B8A8_SINT:
468+
case VK_FORMAT_A8B8G8R8_UINT_PACK32:
469+
case VK_FORMAT_A8B8G8R8_SINT_PACK32:
470+
case VK_FORMAT_A2B10G10R10_UINT_PACK32:
471+
case VK_FORMAT_R16_UINT:
472+
case VK_FORMAT_R16_SINT:
473+
case VK_FORMAT_R16G16_UINT:
474+
case VK_FORMAT_R16G16_SINT:
475+
case VK_FORMAT_R16G16B16A16_UINT:
476+
case VK_FORMAT_R16G16B16A16_SINT:
477+
case VK_FORMAT_R32_UINT:
478+
case VK_FORMAT_R32_SINT:
479+
case VK_FORMAT_R32_SFLOAT:
480+
case VK_FORMAT_R32G32_UINT:
481+
case VK_FORMAT_R32G32_SINT:
482+
case VK_FORMAT_R32G32_SFLOAT:
483+
case VK_FORMAT_R32G32B32A32_UINT:
484+
case VK_FORMAT_R32G32B32A32_SINT:
485+
case VK_FORMAT_R32G32B32A32_SFLOAT:
486+
pFormatProperties->optimalTilingFeatures |=
487+
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
488+
VK_FORMAT_FEATURE_BLIT_DST_BIT;
489+
break;
490+
case VK_FORMAT_D16_UNORM:
491+
case VK_FORMAT_D32_SFLOAT: // Note: either VK_FORMAT_D32_SFLOAT or VK_FORMAT_X8_D24_UNORM_PACK32 must be supported
492+
case VK_FORMAT_D32_SFLOAT_S8_UINT: // Note: either VK_FORMAT_D24_UNORM_S8_UINT or VK_FORMAT_D32_SFLOAT_S8_UINT must be supported
493+
pFormatProperties->optimalTilingFeatures |=
494+
VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT;
495+
break;
496+
}
497+
498+
switch(format)
499+
{
500+
case VK_FORMAT_R8_UNORM:
501+
case VK_FORMAT_R8_SNORM:
502+
case VK_FORMAT_R8_UINT:
503+
case VK_FORMAT_R8_SINT:
504+
case VK_FORMAT_R8G8_UNORM:
505+
case VK_FORMAT_R8G8_SNORM:
506+
case VK_FORMAT_R8G8_UINT:
507+
case VK_FORMAT_R8G8_SINT:
508+
case VK_FORMAT_R8G8B8A8_UNORM:
509+
case VK_FORMAT_R8G8B8A8_SNORM:
510+
case VK_FORMAT_R8G8B8A8_UINT:
511+
case VK_FORMAT_R8G8B8A8_SINT:
512+
case VK_FORMAT_B8G8R8A8_UNORM:
513+
case VK_FORMAT_A8B8G8R8_UNORM_PACK32:
514+
case VK_FORMAT_A8B8G8R8_SNORM_PACK32:
515+
case VK_FORMAT_A8B8G8R8_UINT_PACK32:
516+
case VK_FORMAT_A8B8G8R8_SINT_PACK32:
517+
case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
518+
case VK_FORMAT_R16_UNORM:
519+
case VK_FORMAT_R16_SNORM:
520+
case VK_FORMAT_R16_UINT:
521+
case VK_FORMAT_R16_SINT:
522+
case VK_FORMAT_R16_SFLOAT:
523+
case VK_FORMAT_R16G16_UNORM:
524+
case VK_FORMAT_R16G16_SNORM:
525+
case VK_FORMAT_R16G16_UINT:
526+
case VK_FORMAT_R16G16_SINT:
527+
case VK_FORMAT_R16G16_SFLOAT:
528+
case VK_FORMAT_R16G16B16A16_UNORM:
529+
case VK_FORMAT_R16G16B16A16_SNORM:
530+
case VK_FORMAT_R16G16B16A16_UINT:
531+
case VK_FORMAT_R16G16B16A16_SINT:
532+
case VK_FORMAT_R16G16B16A16_SFLOAT:
533+
case VK_FORMAT_R32_UINT:
534+
case VK_FORMAT_R32_SINT:
535+
case VK_FORMAT_R32_SFLOAT:
536+
case VK_FORMAT_R32G32_UINT:
537+
case VK_FORMAT_R32G32_SINT:
538+
case VK_FORMAT_R32G32_SFLOAT:
539+
case VK_FORMAT_R32G32B32_UINT:
540+
case VK_FORMAT_R32G32B32_SINT:
541+
case VK_FORMAT_R32G32B32_SFLOAT:
542+
case VK_FORMAT_R32G32B32A32_UINT:
543+
case VK_FORMAT_R32G32B32A32_SINT:
544+
case VK_FORMAT_R32G32B32A32_SFLOAT:
545+
pFormatProperties->bufferFeatures |=
546+
VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT;
547+
break;
548+
}
549+
550+
switch(format)
551+
{
552+
case VK_FORMAT_R8_UNORM:
553+
case VK_FORMAT_R8_SNORM:
554+
case VK_FORMAT_R8_UINT:
555+
case VK_FORMAT_R8_SINT:
556+
case VK_FORMAT_R8G8_UNORM:
557+
case VK_FORMAT_R8G8_SNORM:
558+
case VK_FORMAT_R8G8_UINT:
559+
case VK_FORMAT_R8G8_SINT:
560+
case VK_FORMAT_R8G8B8A8_UNORM:
561+
case VK_FORMAT_R8G8B8A8_SNORM:
562+
case VK_FORMAT_R8G8B8A8_UINT:
563+
case VK_FORMAT_R8G8B8A8_SINT:
564+
case VK_FORMAT_B8G8R8A8_UNORM:
565+
case VK_FORMAT_A8B8G8R8_UNORM_PACK32:
566+
case VK_FORMAT_A8B8G8R8_SNORM_PACK32:
567+
case VK_FORMAT_A8B8G8R8_UINT_PACK32:
568+
case VK_FORMAT_A8B8G8R8_SINT_PACK32:
569+
case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
570+
case VK_FORMAT_A2B10G10R10_UINT_PACK32:
571+
case VK_FORMAT_R16_UINT:
572+
case VK_FORMAT_R16_SINT:
573+
case VK_FORMAT_R16_SFLOAT:
574+
case VK_FORMAT_R16G16_UINT:
575+
case VK_FORMAT_R16G16_SINT:
576+
case VK_FORMAT_R16G16_SFLOAT:
577+
case VK_FORMAT_R16G16B16A16_UINT:
578+
case VK_FORMAT_R16G16B16A16_SINT:
579+
case VK_FORMAT_R16G16B16A16_SFLOAT:
580+
case VK_FORMAT_R32_UINT:
581+
case VK_FORMAT_R32_SINT:
582+
case VK_FORMAT_R32_SFLOAT:
583+
case VK_FORMAT_R32G32_UINT:
584+
case VK_FORMAT_R32G32_SINT:
585+
case VK_FORMAT_R32G32_SFLOAT:
586+
case VK_FORMAT_R32G32B32A32_UINT:
587+
case VK_FORMAT_R32G32B32A32_SINT:
588+
case VK_FORMAT_R32G32B32A32_SFLOAT:
589+
case VK_FORMAT_B10G11R11_UFLOAT_PACK32:
590+
pFormatProperties->bufferFeatures |=
591+
VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT;
592+
break;
593+
}
335594
}
336595

337596
void PhysicalDevice::getImageFormatProperties(VkFormat format, VkImageType type, VkImageTiling tiling,

0 commit comments

Comments
 (0)