@@ -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
337596void PhysicalDevice::getImageFormatProperties (VkFormat format, VkImageType type, VkImageTiling tiling,
0 commit comments