{
    "$schema": "https://schema.khronos.org/vulkan/profiles-0.8.2-328.json#",
    "capabilities": {
        "vulkan10requirements": {
            "features": {
                "VkPhysicalDeviceFeatures": {
                    "robustBufferAccess": true
                }
            }
        },
        "vulkan11requirements": {
            "features": {
                "VkPhysicalDeviceVulkan11Features": {
                    "multiview": true
                }
            },
            "properties": {
                "VkPhysicalDeviceVulkan11Properties": {
                    "maxMultiviewViewCount": 6,
                    "maxMultiviewInstanceIndex": 134217727
                }
            }
        },
        "vulkan12requirements": {
            "features": {
                "VkPhysicalDeviceVulkan12Features": {
                    "uniformBufferStandardLayout": true,
                    "subgroupBroadcastDynamicId": true,
                    "imagelessFramebuffer": true,
                    "separateDepthStencilLayouts": true,
                    "hostQueryReset": true,
                    "timelineSemaphore": true,
                    "shaderSubgroupExtendedTypes": true
                }
            },
            "properties": {
                "VkPhysicalDeviceVulkan12Properties": {
                    "maxTimelineSemaphoreValueDifference": 2147483647
                }
            }
        },
        "vulkan13requirements": {
            "features": {
                "VkPhysicalDeviceVulkan12Features": {
                    "vulkanMemoryModel": true,
                    "vulkanMemoryModelDeviceScope": true,
                    "bufferDeviceAddress": true
                },
                "VkPhysicalDeviceVulkan13Features": {
                    "robustImageAccess": true,
                    "shaderTerminateInvocation": true,
                    "shaderZeroInitializeWorkgroupMemory": true,
                    "synchronization2": true,
                    "shaderIntegerDotProduct": true,
                    "maintenance4": true,
                    "pipelineCreationCacheControl": true,
                    "subgroupSizeControl": true,
                    "computeFullSubgroups": true,
                    "shaderDemoteToHelperInvocation": true,
                    "inlineUniformBlock": true,
                    "dynamicRendering": true
                }
            },
            "properties": {
                "VkPhysicalDeviceVulkan13Properties": {
                    "maxBufferSize": 1073741824,
                    "maxInlineUniformBlockSize": 256,
                    "maxPerStageDescriptorInlineUniformBlocks": 4,
                    "maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks": 4,
                    "maxDescriptorSetInlineUniformBlocks": 4,
                    "maxDescriptorSetUpdateAfterBindInlineUniformBlocks": 4,
                    "maxInlineUniformTotalSize": 256
                }
            }
        },
        "vulkan10requirements_roadmap2022": {
            "features": {
                "VkPhysicalDeviceFeatures": {
                    "fullDrawIndexUint32": true,
                    "imageCubeArray": true,
                    "independentBlend": true,
                    "sampleRateShading": true,
                    "drawIndirectFirstInstance": true,
                    "depthClamp": true,
                    "depthBiasClamp": true,
                    "samplerAnisotropy": true,
                    "occlusionQueryPrecise": true,
                    "fragmentStoresAndAtomics": true,
                    "shaderStorageImageExtendedFormats": true,
                    "shaderUniformBufferArrayDynamicIndexing": true,
                    "shaderSampledImageArrayDynamicIndexing": true,
                    "shaderStorageBufferArrayDynamicIndexing": true,
                    "shaderStorageImageArrayDynamicIndexing": true
                }
            },
            "properties": {
                "VkPhysicalDeviceProperties": {
                    "limits": {
                        "maxImageDimension1D": 8192,
                        "maxImageDimension2D": 8192,
                        "maxImageDimensionCube": 8192,
                        "maxImageArrayLayers": 2048,
                        "maxUniformBufferRange": 65536,
                        "bufferImageGranularity": 4096,
                        "maxPerStageDescriptorSamplers": 64,
                        "maxPerStageDescriptorUniformBuffers": 15,
                        "maxPerStageDescriptorStorageBuffers": 30,
                        "maxPerStageDescriptorSampledImages": 200,
                        "maxPerStageDescriptorStorageImages": 16,
                        "maxPerStageResources": 200,
                        "maxDescriptorSetSamplers": 576,
                        "maxDescriptorSetUniformBuffers": 90,
                        "maxDescriptorSetStorageBuffers": 96,
                        "maxDescriptorSetSampledImages": 1800,
                        "maxDescriptorSetStorageImages": 144,
                        "maxFragmentCombinedOutputResources": 16,
                        "maxComputeWorkGroupInvocations": 256,
                        "maxComputeWorkGroupSize": [ 256, 256, 64 ],
                        "subTexelPrecisionBits": 8,
                        "mipmapPrecisionBits": 6,
                        "maxSamplerLodBias": 14,
                        "standardSampleLocations": true,
                        "maxColorAttachments": 7
                    }
                }
            }
        },
        "vulkan10optionals_roadmap2022": {
            "features": {
                "VkPhysicalDeviceFeatures": {
                    "largePoints": true,
                    "wideLines": true
                }
            },
            "properties": {
                "VkPhysicalDeviceProperties": {
                    "limits": {
                        "pointSizeGranularity": 0.125,
                        "lineWidthGranularity": 0.5
                    }
                }
            }
        },
        "vulkan11requirements_roadmap2022": {
            "features": {
                "VkPhysicalDeviceVulkan11Features": {
                    "samplerYcbcrConversion": true
                }
            },
            "properties": {
                "VkPhysicalDeviceVulkan11Properties": {
                    "subgroupSize": 4,
                    "subgroupSupportedStages": [ "VK_SHADER_STAGE_COMPUTE_BIT", "VK_SHADER_STAGE_FRAGMENT_BIT" ],
                    "subgroupSupportedOperations": [ "VK_SUBGROUP_FEATURE_BASIC_BIT", "VK_SUBGROUP_FEATURE_VOTE_BIT", "VK_SUBGROUP_FEATURE_ARITHMETIC_BIT", "VK_SUBGROUP_FEATURE_BALLOT_BIT", "VK_SUBGROUP_FEATURE_SHUFFLE_BIT", "VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT", "VK_SUBGROUP_FEATURE_QUAD_BIT" ]
                }
            }
        },
        "vulkan12requirements_roadmap2022": {
            "features": {
                "VkPhysicalDeviceVulkan12Features": {
                    "samplerMirrorClampToEdge": true,
                    "descriptorIndexing": true,
                    "shaderUniformTexelBufferArrayDynamicIndexing": true,
                    "shaderStorageTexelBufferArrayDynamicIndexing": true,
                    "shaderUniformBufferArrayNonUniformIndexing": true,
                    "shaderSampledImageArrayNonUniformIndexing": true,
                    "shaderStorageBufferArrayNonUniformIndexing": true,
                    "shaderStorageImageArrayNonUniformIndexing": true,
                    "shaderUniformTexelBufferArrayNonUniformIndexing": true,
                    "shaderStorageTexelBufferArrayNonUniformIndexing": true,
                    "descriptorBindingSampledImageUpdateAfterBind": true,
                    "descriptorBindingStorageImageUpdateAfterBind": true,
                    "descriptorBindingStorageBufferUpdateAfterBind": true,
                    "descriptorBindingUniformTexelBufferUpdateAfterBind": true,
                    "descriptorBindingStorageTexelBufferUpdateAfterBind": true,
                    "descriptorBindingUpdateUnusedWhilePending": true,
                    "descriptorBindingPartiallyBound": true,
                    "descriptorBindingVariableDescriptorCount": true,
                    "runtimeDescriptorArray": true,
                    "scalarBlockLayout": true
                }
            },
            "properties": {
                "VkPhysicalDeviceVulkan12Properties": {
                    "shaderSignedZeroInfNanPreserveFloat16": true,
                    "shaderSignedZeroInfNanPreserveFloat32": true,
                    "maxPerStageDescriptorUpdateAfterBindSamplers": 500000,
                    "maxPerStageDescriptorUpdateAfterBindUniformBuffers": 12,
                    "maxPerStageDescriptorUpdateAfterBindStorageBuffers": 500000,
                    "maxPerStageDescriptorUpdateAfterBindSampledImages": 500000,
                    "maxPerStageDescriptorUpdateAfterBindStorageImages": 500000,
                    "maxPerStageDescriptorUpdateAfterBindInputAttachments": 7,
                    "maxPerStageUpdateAfterBindResources": 500000,
                    "maxDescriptorSetUpdateAfterBindSamplers": 500000,
                    "maxDescriptorSetUpdateAfterBindUniformBuffers": 72,
                    "maxDescriptorSetUpdateAfterBindUniformBuffersDynamic": 8,
                    "maxDescriptorSetUpdateAfterBindStorageBuffers": 500000,
                    "maxDescriptorSetUpdateAfterBindStorageBuffersDynamic": 4,
                    "maxDescriptorSetUpdateAfterBindSampledImages": 500000,
                    "maxDescriptorSetUpdateAfterBindStorageImages": 500000,
                    "maxDescriptorSetUpdateAfterBindInputAttachments": 7
                }
            }
        },
        "vulkan13requirements_roadmap2022": {
            "extensions": {
                "VK_KHR_global_priority": 1
            },
            "features": {
                "VkPhysicalDeviceVulkan13Features": {
                    "descriptorBindingInlineUniformBlockUpdateAfterBind": true
                }
            }
        },
        "vulkan10requirements_roadmap2024": {
            "features": {
                "VkPhysicalDeviceFeatures": {
                    "multiDrawIndirect": true,
                    "shaderInt16": true,
                    "shaderImageGatherExtended": true
                }
            },
            "properties": {
                "VkPhysicalDeviceProperties": {
                    "limits": {
                        "timestampComputeAndGraphics": true,
                        "maxColorAttachments": 8,
                        "maxBoundDescriptorSets": 7
                    }
                }
            }
        },
        "vulkan11requirements_roadmap2024": {
            "features": {
                "VkPhysicalDeviceVulkan11Features": {
                    "shaderDrawParameters": true,
                    "storageBuffer16BitAccess": true
                }
            }
        },
        "vulkan12requirements_roadmap2024": {
            "features": {
                "VkPhysicalDeviceVulkan12Features": {
                    "shaderInt8": true,
                    "shaderFloat16": true,
                    "storageBuffer8BitAccess": true
                }
            },
            "properties": {
                "VkPhysicalDeviceVulkan12Properties": {
                    "shaderRoundingModeRTEFloat16": true,
                    "shaderRoundingModeRTEFloat32": true
                }
            }
        },
        "vulkanextensionrequirements_roadmap2024": {
            "extensions": {
                "VK_KHR_load_store_op_none": 1,
                "VK_KHR_shader_quad_control": 1,
                "VK_KHR_shader_maximal_reconvergence": 1,
                "VK_KHR_shader_subgroup_uniform_control_flow": 1,
                "VK_KHR_map_memory2": 1
            },
            "features": {
                "VkPhysicalDeviceShaderQuadControlFeaturesKHR": {
                    "shaderQuadControl": true
                },
                "VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR": {
                    "shaderMaximalReconvergence": true
                },
                "VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR": {
                    "shaderSubgroupUniformControlFlow": true
                }
            }
        },
        "vulkanextensionrequirements_roadmap2024_only": {
            "extensions": {
                "VK_KHR_dynamic_rendering": 1,
                "VK_KHR_shader_subgroup_rotate": 1,
                "VK_KHR_shader_float_controls2": 1,
                "VK_KHR_shader_expect_assume": 1,
                "VK_KHR_line_rasterization": 1,
                "VK_KHR_vertex_attribute_divisor": 1,
                "VK_KHR_index_type_uint8": 1,
                "VK_KHR_maintenance5": 1,
                "VK_KHR_dynamic_rendering_local_read": 1,
                "VK_KHR_push_descriptor": 1
            },
            "features": {
                "VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR": {
                    "shaderSubgroupRotate": true
                },
                "VkPhysicalDeviceShaderFloatControls2FeaturesKHR": {
                    "shaderFloatControls2": true
                },
                "VkPhysicalDeviceShaderExpectAssumeFeaturesKHR": {
                    "shaderExpectAssume": true
                },
                "VkPhysicalDeviceLineRasterizationFeaturesKHR": {
                    "rectangularLines": true,
                    "bresenhamLines": true,
                    "smoothLines": true,
                    "stippledRectangularLines": true,
                    "stippledBresenhamLines": true,
                    "stippledSmoothLines": true
                },
                "VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR": {
                    "vertexAttributeInstanceRateDivisor": true
                },
                "VkPhysicalDeviceIndexTypeUint8FeaturesKHR": {
                    "indexTypeUint8": true
                },
                "VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR": {
                    "dynamicRenderingLocalRead": true
                },
                "VkPhysicalDeviceMaintenance5FeaturesKHR": {
                    "maintenance5": true
                }
            }
        },
        "vulkan10requirements_roadmap2026": {
            "properties": {
                "VkPhysicalDeviceProperties": {
                    "limits": {
                        "maxPerStageDescriptorUniformBuffers": 200,
                        "maxPerStageDescriptorStorageBuffers": 200,
                        "maxPerStageDescriptorInputAttachments": 8,
                        "maxDescriptorSetStorageBuffers": 1800,
                        "maxDescriptorSetUniformBuffers": 1800,
                        "maxDescriptorSetInputAttachments": 8,
                        "maxVertexOutputComponents": 124,
                        "maxTessellationControlPerVertexInputComponents": 128,
                        "maxTessellationControlPerVertexOutputComponents": 128,
                        "maxTessellationControlTotalOutputComponents": 4096,
                        "maxTessellationEvaluationInputComponents": 128,
                        "maxTessellationEvaluationOutputComponents": 128,
                        "maxGeometryOutputComponents": 128,
                        "maxFragmentInputComponents": 112,
                        "maxFragmentOutputAttachments": 8,
                        "maxComputeSharedMemorySize": 32768,
                        "subPixelPrecisionBits": 8,
                        "maxViewportDimensions": [8192, 8192], 
                        "maxFramebufferWidth": 8192,
                        "maxFramebufferHeight": 8192
                    }
                }
            }
        },
        "vulkan14requirements_roadmap2026": {
            "features": {
                "VkPhysicalDeviceVulkan14Features": {
                    "shaderSubgroupRotate": true,
                    "shaderExpectAssume": true,
                    "shaderFloatControls2": true,
                    "rectangularLines": true,
                    "bresenhamLines": true,
                    "smoothLines": true,
                    "stippledRectangularLines": true,
                    "stippledBresenhamLines": true,
                    "stippledSmoothLines": true,
                    "vertexAttributeInstanceRateDivisor": true,
                    "indexTypeUint8": true,
                    "dynamicRenderingLocalRead": true,
                    "maintenance5": true,
                    "hostImageCopy": true,
                    "pushDescriptor": true
                }
            }
        },
        "vulkanextensionrequirements_roadmap2026": {
            "extensions": {
                "VK_KHR_dynamic_rendering": 1,
                "VK_KHR_shader_subgroup_rotate": 1,
                "VK_KHR_shader_float_controls2": 1,
                "VK_KHR_shader_expect_assume": 1,
                "VK_KHR_line_rasterization": 1,
                "VK_KHR_vertex_attribute_divisor": 1,
                "VK_KHR_index_type_uint8": 1,
                "VK_KHR_maintenance5": 1,
                "VK_KHR_dynamic_rendering_local_read": 1,
                "VK_KHR_push_descriptor": 1,
                "VK_KHR_robustness2": 1,
                "VK_KHR_pipeline_binary": 1,
                "VK_KHR_fragment_shading_rate": 1,
                "VK_KHR_shader_clock": 1,
                "VK_KHR_workgroup_memory_explicit_layout": 1,
                "VK_KHR_compute_shader_derivatives": 1,
                "VK_KHR_maintenance7": 1,
                "VK_KHR_maintenance8": 1,
                "VK_KHR_maintenance9": 1,
                "VK_KHR_depth_clamp_zero_one": 1,
                "VK_KHR_copy_memory_indirect": 1,
                "VK_KHR_shader_untyped_pointers": 1,
                "VK_KHR_surface": 1,
                "VK_KHR_swapchain": 1,
                "VK_KHR_get_surface_capabilities2": 1,
                "VK_KHR_present_mode_fifo_latest_ready": 1,
                "VK_KHR_present_id2": 1,
                "VK_KHR_present_wait2": 1,
                "VK_KHR_surface_maintenance1": 1,
                "VK_KHR_swapchain_maintenance1": 1,
                "VK_KHR_cooperative_matrix": 1
            },
            "features": {
                "VkPhysicalDeviceRobustness2FeaturesKHR": {
                    "robustBufferAccess2": true,
                    "robustImageAccess2": true,
                    "nullDescriptor": true
                },
                "VkPhysicalDevicePipelineBinaryFeaturesKHR": {
                    "pipelineBinaries": true
                },
                "VkPhysicalDeviceFragmentShadingRateFeaturesKHR": {
                    "pipelineFragmentShadingRate": true
                },
                "VkPhysicalDeviceShaderClockFeaturesKHR": {
                    "shaderSubgroupClock": true
                },
                "VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR": {
                    "workgroupMemoryExplicitLayout": true
                },
                "VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR": {
                    "computeDerivativeGroupLinear": true
                },
                "VkPhysicalDeviceMaintenance7FeaturesKHR": {
                    "maintenance7": true
                },
                "VkPhysicalDeviceMaintenance8FeaturesKHR": {
                    "maintenance8": true
                },
                "VkPhysicalDeviceMaintenance9FeaturesKHR": {
                    "maintenance9": true
                },
                "VkPhysicalDeviceDepthClampZeroOneFeaturesKHR": {
                    "depthClampZeroOne": true
                },
                "VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR": {
                    "indirectMemoryCopy": true
                },
                "VkPhysicalDeviceShaderUntypedPointersFeaturesKHR": {
                    "shaderUntypedPointers": true
                },
                "VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR": {
                    "presentModeFifoLatestReady": true
                },
                "VkPhysicalDevicePresentId2FeaturesKHR": {
                    "presentId2": true
                },
                "VkPhysicalDevicePresentWait2FeaturesKHR": {
                    "presentWait2": true
                },
                "VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR": {
                    "swapchainMaintenance1": true
                },
                "VkPhysicalDeviceCooperativeMatrixFeaturesKHR": {
                    "cooperativeMatrix": true
                }
            }
        }
    },
    "profiles": {
        "VP_KHR_roadmap_2026": {
            "version": 1,
            "api-version": "1.4.328",
            "label": "Khronos Vulkan Roadmap 2026 profile",
            "description": "This roadmap profile is intended to be supported by newer devices shipping in 2026 across mainstream smartphone, tablet, laptops, console and desktop devices.",
            "profiles": [
                "VP_KHR_roadmap_2022"
            ],
            "capabilities": [
                "vulkan10requirements_roadmap2024",
                "vulkan11requirements_roadmap2024",
                "vulkan12requirements_roadmap2024",
                "vulkanextensionrequirements_roadmap2024",
                "vulkan10requirements_roadmap2026",
                "vulkan14requirements_roadmap2026",
                "vulkanextensionrequirements_roadmap2026"
            ]
        },
        "VP_KHR_roadmap_2024": {
            "version": 1,
            "api-version": "1.3.276",
            "label": "Khronos Vulkan Roadmap 2024 profile",
            "description": "This roadmap profile is intended to be supported by newer devices shipping in 2024 across mainstream smartphone, tablet, laptops, console and desktop devices.",
            "profiles": [
                "VP_KHR_roadmap_2022"
            ],
            "capabilities": [
                "vulkan10requirements_roadmap2024",
                "vulkan11requirements_roadmap2024",
                "vulkan12requirements_roadmap2024",
                "vulkanextensionrequirements_roadmap2024",
                "vulkanextensionrequirements_roadmap2024_only"
            ]
        },
        "VP_KHR_roadmap_2022": {
            "version": 1,
            "api-version": "1.3.204",
            "label": "Khronos Vulkan Roadmap 2022 profile",
            "description": "This roadmap profile is intended to be supported by newer devices shipping in 2022 across mainstream smartphone, tablet, laptops, console and desktop devices.",
            "capabilities": [
                "vulkan10requirements",
                "vulkan10requirements_roadmap2022",
                "vulkan11requirements",
                "vulkan11requirements_roadmap2022",
                "vulkan12requirements",
                "vulkan12requirements_roadmap2022",
                "vulkan13requirements",
                "vulkan13requirements_roadmap2022"
            ],
            "optionals": [
                "vulkan10optionals_roadmap2022"
            ]
        }
    },
    "contributors": {
        "Tobias Hector": {
            "company": "AMD",
            "email": "tobias.hector@amd.com",
            "contact": true
        },
        "Christophe Riccio": {
            "company": "LunarG",
            "email": "christophe@lunarg.com",
            "contact": true
        }
    },
    "history": [
        {
            "revision": 11,
            "date": "2026-01-28",
            "author": "Christophe Riccio",
            "comment": "Add required features to Roadmap profiles"
        },
        {
            "revision": 10,
            "date": "2026-01-15",
            "author": "Tobias Hector",
            "comment": "Add Roadmap 2026 profile"
        },
        {
            "revision": 9,
            "date": "2024-01-16",
            "author": "Tobias Hector",
            "comment": "Add Roadmap 2024 profile"
        },
        {
            "revision": 8,
            "date": "2023-11-02",
            "author": "Christophe Riccio",
            "comment": "Remove unreferenced capabilities blocks that were written against Vulkan 1.2 for testing before Vulkan 1.3 was released"
        },
        {
            "revision": 7,
            "date": "2022-11-16",
            "author": "Christophe Riccio",
            "comment": "Fix wideLines and largePoints that are optionals"
        },
        {
            "revision": 6,
            "date": "2022-11-02",
            "author": "Christophe Riccio",
            "comment": "Fix roadmap 2022 maxInlineUniformTotalSize limit, 256 instead of 4"
        },
        {
            "revision": 5,
            "date": "2022-05-02",
            "author": "Christophe Riccio",
            "comment": "Add missing dynamicRendering that is a Vulkan 1.3 requirement"
        },
        {
            "revision": 4,
            "date": "2022-03-08",
            "author": "Christophe Riccio",
            "comment": "Refactor requirements per Vulkan API version"
        },
        {
            "revision": 3,
            "date": "2022-03-08",
            "author": "Christophe Riccio",
            "comment": "Fix Vulkan 1.3.204 API version requirement"
        },
        {
            "revision": 2,
            "date": "2022-01-03",
            "author": "Christophe Riccio",
            "comment": "Rebase against Vulkan 1.3.203 revision"
        },
        {
            "revision": 1,
            "date": "2021-12-08",
            "author": "Christophe Riccio",
            "comment": "Initial revision"
        }
    ]
}
