1 /* 2 * Copyright 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.cts.deviceinfo; 18 19 import com.android.compatibility.common.deviceinfo.DeviceInfo; 20 import com.android.compatibility.common.util.DeviceInfoStore; 21 22 import org.json.JSONArray; 23 import org.json.JSONException; 24 import org.json.JSONObject; 25 26 import java.util.HashMap; 27 28 /** 29 * Vulkan info collector. 30 * 31 * This collector gathers a VkJSONInstance representing the Vulkan capabilities of the Android 32 * device, and translates it into a DeviceInfoStore. The goal is to be as faithful to the original 33 * VkJSON as possible, so that the DeviceInfo can later be turned back into VkJSON without loss, 34 * while still allow complex queries against the DeviceInfo database. 35 * 36 * We inherit some design decisions from VkJSON, and there are a few places were translation isn't 37 * perfect: 38 * 39 * - Most JSON implementations handle JSON Numbers as doubles (64-bit floating point), which can't 40 * faithfully transfer 64-bit integers. So Vulkan uint64_t and VkDeviceSize values are encoded as 41 * Strings containing the hexadecimal representation of the value (with "0x" prefix). 42 * 43 * - Vulkan enum values are represented as Numbers. This is most convenient for processing, though 44 * isn't very human-readable. Pretty-printing these as strings is left for other tools. 45 * 46 * - For implementation convenience, VkJSON represents VkBool32 values as JSON Numbers (0/1). This 47 * collector converts them to JSON Boolean values (false/true). 48 * 49 * - DeviceInfoStore doesn't allow arrays of non-uniform or non-primitive types. VkJSON stores 50 * format capabilities as an array of formats, where each format is an array containing a number 51 * (the format enum value) and an object (the format properties). Since DeviceInfoStore doesn't 52 * allow array-of-array, we instead store formats as an array of uniform structs, So instead of 53 * [[3, { 54 * "linearTilingFeatures": 0, 55 * "optimalTilingFeatures": 5121, 56 * "bufferFeatures": 0 57 * }]] 58 * the format with enum value "3" will be represented as 59 * { 60 * "id": 3, 61 * "linear_tiling_features": 0, 62 * "optimal_tiling_features": 5121, 63 * "buffer_features": 0 64 * } 65 * 66 * - Device layers are deprecated, but instance layers can still add device extensions. VkJSON 67 * doesn't yet include device extensions provided by layers, though. So VulkanDeviceInfo omits 68 * device layers altogether. Eventually VkJSON and VulkanDeviceInfo should report device layers 69 * and their extensions the same way instance layers and their extensions are reported. 70 * 71 * - VkJSON uses the original Vulkan field names, while VulkanDeviceInfo follows the DeviceInfo 72 * naming convention. So VkJSON fields named like "sparseProperties" will be converted to names 73 * like "sparse_properties". 74 */ 75 public final class VulkanDeviceInfo extends DeviceInfo { 76 77 private static final String KEY_16BIT_STORAGE_FEATURES = "16bitStorageFeatures"; 78 private static final String KEY_ALPHA_TO_ONE = "alphaToOne"; 79 private static final String KEY_API_VERSION = "apiVersion"; 80 private static final String KEY_BUFFER_DEVICE_ADDRESS = "bufferDeviceAddress"; 81 private static final String KEY_BUFFER_DEVICE_ADDRESS_CAPTURE_REPLAY = "bufferDeviceAddressCaptureReplay"; 82 private static final String KEY_BUFFER_DEVICE_ADDRESS_MULTI_DEVICE = "bufferDeviceAddressMultiDevice"; 83 private static final String KEY_BUFFER_FEATURES = "bufferFeatures"; 84 private static final String KEY_BUFFER_IMAGE_GRANULARITY = "bufferImageGranularity"; 85 private static final String KEY_COMPATIBLE_HANDLE_TYPES = "compatibleHandleTypes"; 86 private static final String KEY_COMPUTE_FULL_SUBGROUPS = "computeFullSubgroups"; 87 private static final String KEY_CONFORMANCE_VERSION = "conformanceVersion"; 88 private static final String KEY_CORE12 = "core12"; 89 private static final String KEY_CORE13 = "core13"; 90 private static final String KEY_DENORM_BEHAVIOR_INDEPENDENCE = "denormBehaviorIndependence"; 91 private static final String KEY_DEPTH = "depth"; 92 private static final String KEY_DEPTH_BIAS_CLAMP = "depthBiasClamp"; 93 private static final String KEY_DEPTH_BOUNDS = "depthBounds"; 94 private static final String KEY_DEPTH_CLAMP = "depthClamp"; 95 private static final String KEY_DESCRIPTION = "description"; 96 private static final String KEY_DESCRIPTOR_BINDING_INLINE_UNIFORM_BLOCK_UPDATE_AFTER_BIND = "descriptorBindingInlineUniformBlockUpdateAfterBind"; 97 private static final String KEY_DESCRIPTOR_BINDING_PARTIALLY_BOUND = "descriptorBindingPartiallyBound"; 98 private static final String KEY_DESCRIPTOR_BINDING_SAMPLED_IMAGE_UPDATE_AFTER_BIND = "descriptorBindingSampledImageUpdateAfterBind"; 99 private static final String KEY_DESCRIPTOR_BINDING_STORAGE_BUFFER_UPDATE_AFTER_BIND = "descriptorBindingStorageBufferUpdateAfterBind"; 100 private static final String KEY_DESCRIPTOR_BINDING_STORAGE_IMAGE_UPDATE_AFTER_BIND = "descriptorBindingStorageImageUpdateAfterBind"; 101 private static final String KEY_DESCRIPTOR_BINDING_STORAGE_TEXEL_BUFFER_UPDATE_AFTER_BIND = "descriptorBindingStorageTexelBufferUpdateAfterBind"; 102 private static final String KEY_DESCRIPTOR_BINDING_UNIFORM_BUFFER_UPDATE_AFTER_BIND = "descriptorBindingUniformBufferUpdateAfterBind"; 103 private static final String KEY_DESCRIPTOR_BINDING_UNIFORM_TEXEL_BUFFER_UPDATE_AFTER_BIND = "descriptorBindingUniformTexelBufferUpdateAfterBind"; 104 private static final String KEY_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING = "descriptorBindingUpdateUnusedWhilePending"; 105 private static final String KEY_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT = "descriptorBindingVariableDescriptorCount"; 106 private static final String KEY_DESCRIPTOR_INDEXING = "descriptorIndexing"; 107 private static final String KEY_DEVICES = "devices"; 108 private static final String KEY_DEVICE_GROUPS = "deviceGroups"; 109 private static final String KEY_DEVICE_ID = "deviceID"; 110 private static final String KEY_DEVICE_LUID = "deviceLUID"; 111 private static final String KEY_DEVICE_LUID_VALID = "deviceLUIDValid"; 112 private static final String KEY_DEVICE_NAME = "deviceName"; 113 private static final String KEY_DEVICE_NODE_MASK = "deviceNodeMask"; 114 private static final String KEY_DEVICE_TYPE = "deviceType"; 115 private static final String KEY_DEVICE_UUID = "deviceUUID"; 116 private static final String KEY_DISCRETE_QUEUE_PRIORITIES = "discreteQueuePriorities"; 117 private static final String KEY_DRAW_INDIRECT_COUNT = "drawIndirectCount"; 118 private static final String KEY_DRAW_INDIRECT_FIRST_INSTANCE = "drawIndirectFirstInstance"; 119 private static final String KEY_DRIVER_ID = "driverID"; 120 private static final String KEY_DRIVER_INFO = "driverInfo"; 121 private static final String KEY_DRIVER_NAME = "driverName"; 122 private static final String KEY_DRIVER_PROPERTIES_KHR = "driverPropertiesKHR"; 123 private static final String KEY_DRIVER_UUID = "driverUUID"; 124 private static final String KEY_DRIVER_VERSION = "driverVersion"; 125 private static final String KEY_DUAL_SRC_BLEND = "dualSrcBlend"; 126 private static final String KEY_DYNAMIC_RENDERING = "dynamicRendering"; 127 private static final String KEY_EXPORT_FROM_IMPORTED_HANDLE_TYPES = "exportFromImportedHandleTypes"; 128 private static final String KEY_EXTENSIONS = "extensions"; 129 private static final String KEY_EXTENSION_NAME = "extensionName"; 130 private static final String KEY_EXTERNAL_FENCE_FEATURES = "externalFenceFeatures"; 131 private static final String KEY_EXTERNAL_FENCE_PROPERTIES = "externalFenceProperties"; 132 private static final String KEY_EXTERNAL_SEMAPHORE_FEATURES = "externalSemaphoreFeatures"; 133 private static final String KEY_EXTERNAL_SEMAPHORE_PROPERTIES = "externalSemaphoreProperties"; 134 private static final String KEY_FEATURES = "features"; 135 private static final String KEY_FILL_MODE_NON_SOLID = "fillModeNonSolid"; 136 private static final String KEY_FILTER_MINMAX_IMAGE_COMPONENT_MAPPING = "filterMinmaxImageComponentMapping"; 137 private static final String KEY_FILTER_MINMAX_SINGLE_COMPONENT_FORMATS = "filterMinmaxSingleComponentFormats"; 138 private static final String KEY_FLAGS = "flags"; 139 private static final String KEY_FORMATS = "formats"; 140 private static final String KEY_FRAGMENT_STORES_AND_ATOMICS = "fragmentStoresAndAtomics"; 141 private static final String KEY_FRAMEBUFFER_COLOR_SAMPLE_COUNTS = "framebufferColorSampleCounts"; 142 private static final String KEY_FRAMEBUFFER_DEPTH_SAMPLE_COUNTS = "framebufferDepthSampleCounts"; 143 private static final String KEY_FRAMEBUFFER_INTEGER_COLOR_SAMPLE_COUNTS = "framebufferIntegerColorSampleCounts"; 144 private static final String KEY_FRAMEBUFFER_NO_ATTACHMENTS_SAMPLE_COUNTS = "framebufferNoAttachmentsSampleCounts"; 145 private static final String KEY_FRAMEBUFFER_STENCIL_SAMPLE_COUNTS = "framebufferStencilSampleCounts"; 146 private static final String KEY_FULL_DRAW_INDEX_UINT32 = "fullDrawIndexUint32"; 147 private static final String KEY_GEOMETRY_SHADER = "geometryShader"; 148 private static final String KEY_HEAP_INDEX = "heapIndex"; 149 private static final String KEY_HEIGHT = "height"; 150 private static final String KEY_HOST_QUERY_RESET = "hostQueryReset"; 151 private static final String KEY_ID_PROPERTIES = "idProperties"; 152 private static final String KEY_IMAGELESS_FRAMEBUFFER = "imagelessFramebuffer"; 153 private static final String KEY_IMAGE_CUBE_ARRAY = "imageCubeArray"; 154 private static final String KEY_IMPLEMENTATION_VERSION = "implementationVersion"; 155 private static final String KEY_INDEPENDENT_BLEND = "independentBlend"; 156 private static final String KEY_INDEPENDENT_RESOLVE = "independentResolve"; 157 private static final String KEY_INDEPENDENT_RESOLVE_NONE = "independentResolveNone"; 158 private static final String KEY_INHERITED_QUERIES = "inheritedQueries"; 159 private static final String KEY_INLINE_UNIFORM_BLOCK = "inlineUniformBlock"; 160 private static final String KEY_INSTANCE_API_VERSION = "instanceApiVersion"; 161 private static final String KEY_INTEGER_DOT_PRODUCT_16BIT_MIXED_SIGNEDNESS_ACCELERATED = "integerDotProduct16BitMixedSignednessAccelerated"; 162 private static final String KEY_INTEGER_DOT_PRODUCT_16BIT_SIGNED_ACCELERATED = "integerDotProduct16BitSignedAccelerated"; 163 private static final String KEY_INTEGER_DOT_PRODUCT_16BIT_UNSIGNED_ACCELERATED = "integerDotProduct16BitUnsignedAccelerated"; 164 private static final String KEY_INTEGER_DOT_PRODUCT_32BIT_MIXED_SIGNEDNESS_ACCELERATED = "integerDotProduct32BitMixedSignednessAccelerated"; 165 private static final String KEY_INTEGER_DOT_PRODUCT_32BIT_SIGNED_ACCELERATED = "integerDotProduct32BitSignedAccelerated"; 166 private static final String KEY_INTEGER_DOT_PRODUCT_32BIT_UNSIGNED_ACCELERATED = "integerDotProduct32BitUnsignedAccelerated"; 167 private static final String KEY_INTEGER_DOT_PRODUCT_4X8BIT_PACKED_MIXED_SIGNEDNESS_ACCELERATED = "integerDotProduct4x8BitPackedMixedSignednessAccelerated"; 168 private static final String KEY_INTEGER_DOT_PRODUCT_4X8BIT_PACKED_SIGNED_ACCELERATED = "integerDotProduct4x8BitPackedSignedAccelerated"; 169 private static final String KEY_INTEGER_DOT_PRODUCT_4X8BIT_PACKED_UNSIGNED_ACCELERATED = "integerDotProduct4x8BitPackedUnsignedAccelerated"; 170 private static final String KEY_INTEGER_DOT_PRODUCT_64BIT_MIXED_SIGNEDNESS_ACCELERATED = "integerDotProduct64BitMixedSignednessAccelerated"; 171 private static final String KEY_INTEGER_DOT_PRODUCT_64BIT_SIGNED_ACCELERATED = "integerDotProduct64BitSignedAccelerated"; 172 private static final String KEY_INTEGER_DOT_PRODUCT_64BIT_UNSIGNED_ACCELERATED = "integerDotProduct64BitUnsignedAccelerated"; 173 private static final String KEY_INTEGER_DOT_PRODUCT_8BIT_MIXED_SIGNEDNESS_ACCELERATED = "integerDotProduct8BitMixedSignednessAccelerated"; 174 private static final String KEY_INTEGER_DOT_PRODUCT_8BIT_SIGNED_ACCELERATED = "integerDotProduct8BitSignedAccelerated"; 175 private static final String KEY_INTEGER_DOT_PRODUCT_8BIT_UNSIGNED_ACCELERATED = "integerDotProduct8BitUnsignedAccelerated"; 176 private static final String KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_16BIT_MIXED_SIGNEDNESS_ACCELERATED = "integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated"; 177 private static final String KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_16BIT_SIGNED_ACCELERATED = "integerDotProductAccumulatingSaturating16BitSignedAccelerated"; 178 private static final String KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_16BIT_UNSIGNED_ACCELERATED = "integerDotProductAccumulatingSaturating16BitUnsignedAccelerated"; 179 private static final String KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_32BIT_MIXED_SIGNEDNESS_ACCELERATED = "integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated"; 180 private static final String KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_32BIT_SIGNED_ACCELERATED = "integerDotProductAccumulatingSaturating32BitSignedAccelerated"; 181 private static final String KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_32BIT_UNSIGNED_ACCELERATED = "integerDotProductAccumulatingSaturating32BitUnsignedAccelerated"; 182 private static final String KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_4X8BIT_PACKED_MIXED_SIGNEDNESS_ACCELERATED = "integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated"; 183 private static final String KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_4X8BIT_PACKED_SIGNED_ACCELERATED = "integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated"; 184 private static final String KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_4X8BIT_PACKED_UNSIGNED_ACCELERATED = "integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated"; 185 private static final String KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_64BIT_MIXED_SIGNEDNESS_ACCELERATED = "integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated"; 186 private static final String KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_64BIT_SIGNEDNESS_ACCELERATED = "integerDotProductAccumulatingSaturating64BitSignedAccelerated"; 187 private static final String KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_64BIT_UNSIGNED_ACCELERATED = "integerDotProductAccumulatingSaturating64BitUnsignedAccelerated"; 188 private static final String KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_8BIT_MIXED_SIGNEDNESS_ACCELERATED = "integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated"; 189 private static final String KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_8BIT_SIGNED_ACCELERATED = "integerDotProductAccumulatingSaturating8BitSignedAccelerated"; 190 private static final String KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_8BIT_UNSIGNED_ACCELERATED = "integerDotProductAccumulatingSaturating8BitUnsignedAccelerated"; 191 private static final String KEY_LARGE_POINTS = "largePoints"; 192 private static final String KEY_LAYERS = "layers"; 193 private static final String KEY_LAYER_NAME = "layerName"; 194 private static final String KEY_LIMITS = "limits"; 195 private static final String KEY_LINEAR_TILING_FEATURES = "linearTilingFeatures"; 196 private static final String KEY_LINE_WIDTH_GRANULARITY = "lineWidthGranularity"; 197 private static final String KEY_LINE_WIDTH_RANGE = "lineWidthRange"; 198 private static final String KEY_LOGIC_OP = "logicOp"; 199 private static final String KEY_MAINTENANCE4 = "maintenance4"; 200 private static final String KEY_MAINTENANCE_3_PROPERTIES = "maintenance3Properties"; 201 private static final String KEY_MAJOR = "major"; 202 private static final String KEY_MAX_BOUND_DESCRIPTOR_SETS = "maxBoundDescriptorSets"; 203 private static final String KEY_MAX_BUFFER_SIZE = "maxBufferSize"; 204 private static final String KEY_MAX_CLIP_DISTANCES = "maxClipDistances"; 205 private static final String KEY_MAX_COLOR_ATTACHMENTS = "maxColorAttachments"; 206 private static final String KEY_MAX_COMBINED_CLIP_AND_CULL_DISTANCES = "maxCombinedClipAndCullDistances"; 207 private static final String KEY_MAX_COMPUTE_SHARED_MEMORY_SIZE = "maxComputeSharedMemorySize"; 208 private static final String KEY_MAX_COMPUTE_WORKGROUP_SUBGROUPS = "maxComputeWorkgroupSubgroups"; 209 private static final String KEY_MAX_COMPUTE_WORK_GROUP_COUNT = "maxComputeWorkGroupCount"; 210 private static final String KEY_MAX_COMPUTE_WORK_GROUP_INVOCATIONS = "maxComputeWorkGroupInvocations"; 211 private static final String KEY_MAX_COMPUTE_WORK_GROUP_SIZE = "maxComputeWorkGroupSize"; 212 private static final String KEY_MAX_CULL_DISTANCES = "maxCullDistances"; 213 private static final String KEY_MAX_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCKS = "maxDescriptorSetInlineUniformBlocks"; 214 private static final String KEY_MAX_DESCRIPTOR_SET_INPUT_ATTACHMENTS = "maxDescriptorSetInputAttachments"; 215 private static final String KEY_MAX_DESCRIPTOR_SET_SAMPLED_IMAGES = "maxDescriptorSetSampledImages"; 216 private static final String KEY_MAX_DESCRIPTOR_SET_SAMPLERS = "maxDescriptorSetSamplers"; 217 private static final String KEY_MAX_DESCRIPTOR_SET_STORAGE_BUFFERS = "maxDescriptorSetStorageBuffers"; 218 private static final String KEY_MAX_DESCRIPTOR_SET_STORAGE_BUFFERS_DYNAMIC = "maxDescriptorSetStorageBuffersDynamic"; 219 private static final String KEY_MAX_DESCRIPTOR_SET_STORAGE_IMAGES = "maxDescriptorSetStorageImages"; 220 private static final String KEY_MAX_DESCRIPTOR_SET_UNIFORM_BUFFERS = "maxDescriptorSetUniformBuffers"; 221 private static final String KEY_MAX_DESCRIPTOR_SET_UNIFORM_BUFFERS_DYNAMIC = "maxDescriptorSetUniformBuffersDynamic"; 222 private static final String KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_INLINE_UNIFORM_BLOCKS = "maxDescriptorSetUpdateAfterBindInlineUniformBlocks"; 223 private static final String KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_INPUT_ATTACHMENTS = "maxDescriptorSetUpdateAfterBindInputAttachments"; 224 private static final String KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_SAMPLED_IMAGES = "maxDescriptorSetUpdateAfterBindSampledImages"; 225 private static final String KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_SAMPLERS = "maxDescriptorSetUpdateAfterBindSamplers"; 226 private static final String KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_STORAGE_BUFFERS = "maxDescriptorSetUpdateAfterBindStorageBuffers"; 227 private static final String KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_STORAGE_BUFFERS_DYNAMIC = "maxDescriptorSetUpdateAfterBindStorageBuffersDynamic"; 228 private static final String KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_STORAGE_IMAGES = "maxDescriptorSetUpdateAfterBindStorageImages"; 229 private static final String KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_UNIFORM_BUFFERS = "maxDescriptorSetUpdateAfterBindUniformBuffers"; 230 private static final String KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_UNIFORM_BUFFERS_DYNAMIC = "maxDescriptorSetUpdateAfterBindUniformBuffersDynamic"; 231 private static final String KEY_MAX_DRAW_INDEXED_INDEX_VALUE = "maxDrawIndexedIndexValue"; 232 private static final String KEY_MAX_DRAW_INDIRECT_COUNT = "maxDrawIndirectCount"; 233 private static final String KEY_MAX_FRAGMENT_COMBINED_OUTPUT_RESOURCES = "maxFragmentCombinedOutputResources"; 234 private static final String KEY_MAX_FRAGMENT_DUAL_SRC_ATTACHMENTS = "maxFragmentDualSrcAttachments"; 235 private static final String KEY_MAX_FRAGMENT_INPUT_COMPONENTS = "maxFragmentInputComponents"; 236 private static final String KEY_MAX_FRAGMENT_OUTPUT_ATTACHMENTS = "maxFragmentOutputAttachments"; 237 private static final String KEY_MAX_FRAMEBUFFER_HEIGHT = "maxFramebufferHeight"; 238 private static final String KEY_MAX_FRAMEBUFFER_LAYERS = "maxFramebufferLayers"; 239 private static final String KEY_MAX_FRAMEBUFFER_WIDTH = "maxFramebufferWidth"; 240 private static final String KEY_MAX_GEOMETRY_INPUT_COMPONENTS = "maxGeometryInputComponents"; 241 private static final String KEY_MAX_GEOMETRY_OUTPUT_COMPONENTS = "maxGeometryOutputComponents"; 242 private static final String KEY_MAX_GEOMETRY_OUTPUT_VERTICES = "maxGeometryOutputVertices"; 243 private static final String KEY_MAX_GEOMETRY_SHADER_INVOCATIONS = "maxGeometryShaderInvocations"; 244 private static final String KEY_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = "maxGeometryTotalOutputComponents"; 245 private static final String KEY_MAX_IMAGE_ARRAY_LAYERS = "maxImageArrayLayers"; 246 private static final String KEY_MAX_IMAGE_DIMENSION_1D = "maxImageDimension1D"; 247 private static final String KEY_MAX_IMAGE_DIMENSION_2D = "maxImageDimension2D"; 248 private static final String KEY_MAX_IMAGE_DIMENSION_3D = "maxImageDimension3D"; 249 private static final String KEY_MAX_IMAGE_DIMENSION_CUBE = "maxImageDimensionCube"; 250 private static final String KEY_MAX_INLINE_UNIFORM_BLOCK_SIZE = "maxInlineUniformBlockSize"; 251 private static final String KEY_MAX_INLINE_UNIFORM_TOTAL_SIZE = "maxInlineUniformTotalSize"; 252 private static final String KEY_MAX_INTERPOLATION_OFFSET = "maxInterpolationOffset"; 253 private static final String KEY_MAX_MEMORY_ALLOCATION_COUNT = "maxMemoryAllocationCount"; 254 private static final String KEY_MAX_MEMORY_ALLOCATION_SIZE = "maxMemoryAllocationSize"; 255 private static final String KEY_MAX_MULTIVIEW_INSTANCE_INDEX = "maxMultiviewInstanceIndex"; 256 private static final String KEY_MAX_MULTIVIEW_VIEW_COUNT = "maxMultiviewViewCount"; 257 private static final String KEY_MAX_PER_SET_DESCRIPTORS = "maxPerSetDescriptors"; 258 private static final String KEY_MAX_PER_STAGE_DESCRIPTOR_INLINE_UNIFORM_BLOCKS = "maxPerStageDescriptorInlineUniformBlocks"; 259 private static final String KEY_MAX_PER_STAGE_DESCRIPTOR_INPUT_ATTACHMENTS = "maxPerStageDescriptorInputAttachments"; 260 private static final String KEY_MAX_PER_STAGE_DESCRIPTOR_SAMPLED_IMAGES = "maxPerStageDescriptorSampledImages"; 261 private static final String KEY_MAX_PER_STAGE_DESCRIPTOR_SAMPLERS = "maxPerStageDescriptorSamplers"; 262 private static final String KEY_MAX_PER_STAGE_DESCRIPTOR_STORAGE_BUFFERS = "maxPerStageDescriptorStorageBuffers"; 263 private static final String KEY_MAX_PER_STAGE_DESCRIPTOR_STORAGE_IMAGES = "maxPerStageDescriptorStorageImages"; 264 private static final String KEY_MAX_PER_STAGE_DESCRIPTOR_UNIFORM_BUFFERS = "maxPerStageDescriptorUniformBuffers"; 265 private static final String KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_INLINE_UNIFORM_BLOCKS = "maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks"; 266 private static final String KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_INPUT_ATTACHMENTS = "maxPerStageDescriptorUpdateAfterBindInputAttachments"; 267 private static final String KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_SAMPLED_IMAGES = "maxPerStageDescriptorUpdateAfterBindSampledImages"; 268 private static final String KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_SAMPLERS = "maxPerStageDescriptorUpdateAfterBindSamplers"; 269 private static final String KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_STORAGE_BUFFERS = "maxPerStageDescriptorUpdateAfterBindStorageBuffers"; 270 private static final String KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_STORAGE_IMAGES = "maxPerStageDescriptorUpdateAfterBindStorageImages"; 271 private static final String KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_UNIFORM_BUFFERS = "maxPerStageDescriptorUpdateAfterBindUniformBuffers"; 272 private static final String KEY_MAX_PER_STAGE_RESOURCES = "maxPerStageResources"; 273 private static final String KEY_MAX_PER_STAGE_UPDATE_AFTER_BIND_RESOURCES = "maxPerStageUpdateAfterBindResources"; 274 private static final String KEY_MAX_PUSH_CONSTANTS_SIZE = "maxPushConstantsSize"; 275 private static final String KEY_MAX_SAMPLER_ALLOCATION_COUNT = "maxSamplerAllocationCount"; 276 private static final String KEY_MAX_SAMPLER_ANISOTROPY = "maxSamplerAnisotropy"; 277 private static final String KEY_MAX_SAMPLER_LOD_BIAS = "maxSamplerLodBias"; 278 private static final String KEY_MAX_SAMPLE_MASK_WORDS = "maxSampleMaskWords"; 279 private static final String KEY_MAX_STORAGE_BUFFER_RANGE = "maxStorageBufferRange"; 280 private static final String KEY_MAX_SUBGROUP_SIZE = "maxSubgroupSize"; 281 private static final String KEY_MAX_TESSELLATION_CONTROL_PER_PATCH_OUTPUT_COMPONENTS = "maxTessellationControlPerPatchOutputComponents"; 282 private static final String KEY_MAX_TESSELLATION_CONTROL_PER_VERTEX_INPUT_COMPONENTS = "maxTessellationControlPerVertexInputComponents"; 283 private static final String KEY_MAX_TESSELLATION_CONTROL_PER_VERTEX_OUTPUT_COMPONENTS = "maxTessellationControlPerVertexOutputComponents"; 284 private static final String KEY_MAX_TESSELLATION_CONTROL_TOTAL_OUTPUT_COMPONENTS = "maxTessellationControlTotalOutputComponents"; 285 private static final String KEY_MAX_TESSELLATION_EVALUATION_INPUT_COMPONENTS = "maxTessellationEvaluationInputComponents"; 286 private static final String KEY_MAX_TESSELLATION_EVALUATION_OUTPUT_COMPONENTS = "maxTessellationEvaluationOutputComponents"; 287 private static final String KEY_MAX_TESSELLATION_GENERATION_LEVEL = "maxTessellationGenerationLevel"; 288 private static final String KEY_MAX_TESSELLATION_PATCH_SIZE = "maxTessellationPatchSize"; 289 private static final String KEY_MAX_TEXEL_BUFFER_ELEMENTS = "maxTexelBufferElements"; 290 private static final String KEY_MAX_TEXEL_GATHER_OFFSET = "maxTexelGatherOffset"; 291 private static final String KEY_MAX_TEXEL_OFFSET = "maxTexelOffset"; 292 private static final String KEY_MAX_TIMELINE_SEMAPHORE_VALUE_DIFFERENCE = "maxTimelineSemaphoreValueDifference"; 293 private static final String KEY_MAX_UNIFORM_BUFFER_RANGE = "maxUniformBufferRange"; 294 private static final String KEY_MAX_UPDATE_AFTER_BIND_DESCRIPTORS_IN_ALL_POOLS = "maxUpdateAfterBindDescriptorsInAllPools"; 295 private static final String KEY_MAX_VERTEX_INPUT_ATTRIBUTES = "maxVertexInputAttributes"; 296 private static final String KEY_MAX_VERTEX_INPUT_ATTRIBUTE_OFFSET = "maxVertexInputAttributeOffset"; 297 private static final String KEY_MAX_VERTEX_INPUT_BINDINGS = "maxVertexInputBindings"; 298 private static final String KEY_MAX_VERTEX_INPUT_BINDING_STRIDE = "maxVertexInputBindingStride"; 299 private static final String KEY_MAX_VERTEX_OUTPUT_COMPONENTS = "maxVertexOutputComponents"; 300 private static final String KEY_MAX_VIEWPORTS = "maxViewports"; 301 private static final String KEY_MAX_VIEWPORT_DIMENSIONS = "maxViewportDimensions"; 302 private static final String KEY_MEMORY = "memory"; 303 private static final String KEY_MEMORY_HEAPS = "memoryHeaps"; 304 private static final String KEY_MEMORY_HEAP_COUNT = "memoryHeapCount"; 305 private static final String KEY_MEMORY_TYPES = "memoryTypes"; 306 private static final String KEY_MEMORY_TYPE_COUNT = "memoryTypeCount"; 307 private static final String KEY_MINOR = "minor"; 308 private static final String KEY_MIN_IMAGE_TRANSFER_GRANULARITY = "minImageTransferGranularity"; 309 private static final String KEY_MIN_INTERPOLATION_OFFSET = "minInterpolationOffset"; 310 private static final String KEY_MIN_MEMORY_MAP_ALIGNMENT = "minMemoryMapAlignment"; 311 private static final String KEY_MIN_STORAGE_BUFFER_OFFSET_ALIGNMENT = "minStorageBufferOffsetAlignment"; 312 private static final String KEY_MIN_SUBGROUP_SIZE = "minSubgroupSize"; 313 private static final String KEY_MIN_TEXEL_BUFFER_OFFSET_ALIGNMENT = "minTexelBufferOffsetAlignment"; 314 private static final String KEY_MIN_TEXEL_GATHER_OFFSET = "minTexelGatherOffset"; 315 private static final String KEY_MIN_TEXEL_OFFSET = "minTexelOffset"; 316 private static final String KEY_MIN_UNIFORM_BUFFER_OFFSET_ALIGNMENT = "minUniformBufferOffsetAlignment"; 317 private static final String KEY_MIPMAP_PRECISION_BITS = "mipmapPrecisionBits"; 318 private static final String KEY_MULTIVIEW = "multiview"; 319 private static final String KEY_MULTIVIEW_FEATURES = "multiviewFeatures"; 320 private static final String KEY_MULTIVIEW_GEOMETRY_SHADER = "multiviewGeometryShader"; 321 private static final String KEY_MULTIVIEW_PROPERTIES = "multiviewProperties"; 322 private static final String KEY_MULTIVIEW_TESSELLATION_SHADER = "multiviewTessellationShader"; 323 private static final String KEY_MULTI_DRAW_INDIRECT = "multiDrawIndirect"; 324 private static final String KEY_MULTI_VIEWPORT = "multiViewport"; 325 private static final String KEY_NON_COHERENT_ATOM_SIZE = "nonCoherentAtomSize"; 326 private static final String KEY_OCCLUSION_QUERY_PRECISE = "occlusionQueryPrecise"; 327 private static final String KEY_OPTIMAL_BUFFER_COPY_OFFSET_ALIGNMENT = "optimalBufferCopyOffsetAlignment"; 328 private static final String KEY_OPTIMAL_BUFFER_COPY_ROW_PITCH_ALIGNMENT = "optimalBufferCopyRowPitchAlignment"; 329 private static final String KEY_OPTIMAL_TILING_FEATURES = "optimalTilingFeatures"; 330 private static final String KEY_PATCH = "patch"; 331 private static final String KEY_PIPELINE_CACHE_UUID = "pipelineCacheUUID"; 332 private static final String KEY_PIPELINE_CREATION_CACHE_CONTROL = "pipelineCreationCacheControl"; 333 private static final String KEY_PIPELINE_STATISTICS_QUERY = "pipelineStatisticsQuery"; 334 private static final String KEY_POINT_CLIPPING_BEHAVIOR = "pointClippingBehavior"; 335 private static final String KEY_POINT_CLIPPING_PROPERTIES = "pointClippingProperties"; 336 private static final String KEY_POINT_SIZE_GRANULARITY = "pointSizeGranularity"; 337 private static final String KEY_POINT_SIZE_RANGE = "pointSizeRange"; 338 private static final String KEY_PRIVATE_DATA = "privateData"; 339 private static final String KEY_PROPERTIES = "properties"; 340 private static final String KEY_PROPERTY_FLAGS = "propertyFlags"; 341 private static final String KEY_PROTECTED_MEMORY = "protectedMemory"; 342 private static final String KEY_PROTECTED_MEMORY_FEATURES = "protectedMemoryFeatures"; 343 private static final String KEY_QUAD_DIVERGENT_IMPLICIT_LOD = "quadDivergentImplicitLod"; 344 private static final String KEY_QUAD_OPERATIONS_IN_ALL_STAGES = "quadOperationsInAllStages"; 345 private static final String KEY_QUEUES = "queues"; 346 private static final String KEY_QUEUE_COUNT = "queueCount"; 347 private static final String KEY_QUEUE_FLAGS = "queueFlags"; 348 private static final String KEY_REQUIRED_SUBGROUP_SIZE_STAGES = "requiredSubgroupSizeStages"; 349 private static final String KEY_RESIDENCY_ALIGNED_MIP_SIZE = "residencyAlignedMipSize"; 350 private static final String KEY_RESIDENCY_NON_RESIDENT_STRICT = "residencyNonResidentStrict"; 351 private static final String KEY_RESIDENCY_STANDARD_2D_BLOCK_SHAPE = "residencyStandard2DBlockShape"; 352 private static final String KEY_RESIDENCY_STANDARD_2D_MULTISAMPLE_BLOCK_SHAPE = "residencyStandard2DMultisampleBlockShape"; 353 private static final String KEY_RESIDENCY_STANDARD_3D_BLOCK_SHAPE = "residencyStandard3DBlockShape"; 354 private static final String KEY_ROBUST_BUFFER_ACCESS = "robustBufferAccess"; 355 private static final String KEY_ROBUST_BUFFER_ACCESS_UPDATE_AFTER_BIND = "robustBufferAccessUpdateAfterBind"; 356 private static final String KEY_ROBUST_IMAGE_ACCESS = "robustImageAccess"; 357 private static final String KEY_ROUNDING_MODE_INDEPENDENCE = "roundingModeIndependence"; 358 private static final String KEY_RUNTIME_DESCRIPTOR_ARRAY = "runtimeDescriptorArray"; 359 private static final String KEY_SAMPLED_IMAGE_COLOR_SAMPLE_COUNTS = "sampledImageColorSampleCounts"; 360 private static final String KEY_SAMPLED_IMAGE_DEPTH_SAMPLE_COUNTS = "sampledImageDepthSampleCounts"; 361 private static final String KEY_SAMPLED_IMAGE_INTEGER_SAMPLE_COUNTS = "sampledImageIntegerSampleCounts"; 362 private static final String KEY_SAMPLED_IMAGE_STENCIL_SAMPLE_COUNTS = "sampledImageStencilSampleCounts"; 363 private static final String KEY_SAMPLER_ANISOTROPY = "samplerAnisotropy"; 364 private static final String KEY_SAMPLER_FILTER_MINMAX = "samplerFilterMinmax"; 365 private static final String KEY_SAMPLER_MIRROR_CLAMP_TO_EDGE = "samplerMirrorClampToEdge"; 366 private static final String KEY_SAMPLER_YCBCR_CONVERSION = "samplerYcbcrConversion"; 367 private static final String KEY_SAMPLER_YCBCR_CONVERSION_FEATURES = "samplerYcbcrConversionFeatures"; 368 private static final String KEY_SAMPLE_RATE_SHADING = "sampleRateShading"; 369 private static final String KEY_SCALAR_BLOCK_LAYOUT = "scalarBlockLayout"; 370 private static final String KEY_SEPARATE_DEPTH_STENCIL_LAYOUTS = "separateDepthStencilLayouts"; 371 private static final String KEY_SHADER_BUFFER_INT64_ATOMICS = "shaderBufferInt64Atomics"; 372 private static final String KEY_SHADER_CLIP_DISTANCE = "shaderClipDistance"; 373 private static final String KEY_SHADER_CULL_DISTANCE = "shaderCullDistance"; 374 private static final String KEY_SHADER_DEMOTE_TO_HELPER_INVOCATION = "shaderDemoteToHelperInvocation"; 375 private static final String KEY_SHADER_DENORM_FLUSH_TO_ZERO_FLOAT16 = "shaderDenormFlushToZeroFloat16"; 376 private static final String KEY_SHADER_DENORM_FLUSH_TO_ZERO_FLOAT32 = "shaderDenormFlushToZeroFloat32"; 377 private static final String KEY_SHADER_DENORM_FLUSH_TO_ZERO_FLOAT64 = "shaderDenormFlushToZeroFloat64"; 378 private static final String KEY_SHADER_DENORM_PRESERVE_FLOAT16 = "shaderDenormPreserveFloat16"; 379 private static final String KEY_SHADER_DENORM_PRESERVE_FLOAT32 = "shaderDenormPreserveFloat32"; 380 private static final String KEY_SHADER_DENORM_PRESERVE_FLOAT64 = "shaderDenormPreserveFloat64"; 381 private static final String KEY_SHADER_DRAW_PARAMETERS = "shaderDrawParameters"; 382 private static final String KEY_SHADER_DRAW_PARAMETER_FEATURES = "shaderDrawParameterFeatures"; 383 private static final String KEY_SHADER_FLOAT16 = "shaderFloat16"; 384 private static final String KEY_SHADER_FLOAT64 = "shaderFloat64"; 385 private static final String KEY_SHADER_IMAGE_GATHER_EXTENDED = "shaderImageGatherExtended"; 386 private static final String KEY_SHADER_INPUT_ATTACHMENT_ARRAY_DYNAMIC_INDEXING = "shaderInputAttachmentArrayDynamicIndexing"; 387 private static final String KEY_SHADER_INPUT_ATTACHMENT_ARRAY_NONUNIFORM_INDEXING_NATIVE = "shaderInputAttachmentArrayNonUniformIndexingNative"; 388 private static final String KEY_SHADER_INPUT_ATTACHMENT_ARRAY_NON_UNIFORM_INDEXING = "shaderInputAttachmentArrayNonUniformIndexing"; 389 private static final String KEY_SHADER_INT16 = "shaderInt16"; 390 private static final String KEY_SHADER_INT64 = "shaderInt64"; 391 private static final String KEY_SHADER_INT8 = "shaderInt8"; 392 private static final String KEY_SHADER_INTEGER_DOT_PRODUCT = "shaderIntegerDotProduct"; 393 private static final String KEY_SHADER_OUTPUT_LAYER = "shaderOutputLayer"; 394 private static final String KEY_SHADER_OUTPUT_VIEWPORT_INDEX = "shaderOutputViewportIndex"; 395 private static final String KEY_SHADER_RESOURCE_MIN_LOD = "shaderResourceMinLod"; 396 private static final String KEY_SHADER_RESOURCE_RESIDENCY = "shaderResourceResidency"; 397 private static final String KEY_SHADER_ROUNDING_MODE_RTE_FLOAT16 = "shaderRoundingModeRTEFloat16"; 398 private static final String KEY_SHADER_ROUNDING_MODE_RTE_FLOAT32 = "shaderRoundingModeRTEFloat32"; 399 private static final String KEY_SHADER_ROUNDING_MODE_RTE_FLOAT64 = "shaderRoundingModeRTEFloat64"; 400 private static final String KEY_SHADER_ROUNDING_MODE_RTZ_FLOAT16 = "shaderRoundingModeRTZFloat16"; 401 private static final String KEY_SHADER_ROUNDING_MODE_RTZ_FLOAT32 = "shaderRoundingModeRTZFloat32"; 402 private static final String KEY_SHADER_ROUNDING_MODE_RTZ_FLOAT64 = "shaderRoundingModeRTZFloat64"; 403 private static final String KEY_SHADER_SAMPLED_IMAGE_ARRAY_DYNAMIC_INDEXING = "shaderSampledImageArrayDynamicIndexing"; 404 private static final String KEY_SHADER_SAMPLED_IMAGE_ARRAY_NONUNIFORM_INDEXING_NATIVE = "shaderSampledImageArrayNonUniformIndexingNative"; 405 private static final String KEY_SHADER_SAMPLED_IMAGE_ARRAY_NON_UNIFORM_INDEXING = "shaderSampledImageArrayNonUniformIndexing"; 406 private static final String KEY_SHADER_SHARED_INT64_ATOMICS = "shaderSharedInt64Atomics"; 407 private static final String KEY_SHADER_SIGNED_ZERO_INF_NAN_PRESERVE_FLOAT16 = "shaderSignedZeroInfNanPreserveFloat16"; 408 private static final String KEY_SHADER_SIGNED_ZERO_INF_NAN_PRESERVE_FLOAT32 = "shaderSignedZeroInfNanPreserveFloat32"; 409 private static final String KEY_SHADER_SIGNED_ZERO_INF_NAN_PRESERVE_FLOAT64 = "shaderSignedZeroInfNanPreserveFloat64"; 410 private static final String KEY_SHADER_STORAGE_BUFFER_ARRAY_DYNAMIC_INDEXING = "shaderStorageBufferArrayDynamicIndexing"; 411 private static final String KEY_SHADER_STORAGE_BUFFER_ARRAY_NONUNIFORM_INDEXING_NATIVE = "shaderStorageBufferArrayNonUniformIndexingNative"; 412 private static final String KEY_SHADER_STORAGE_BUFFER_ARRAY_NON_UNIFORM_INDEXING = "shaderStorageBufferArrayNonUniformIndexing"; 413 private static final String KEY_SHADER_STORAGE_IMAGE_ARRAY_DYNAMIC_INDEXING = "shaderStorageImageArrayDynamicIndexing"; 414 private static final String KEY_SHADER_STORAGE_IMAGE_ARRAY_NONUNIFORM_INDEXING_NATIVE = "shaderStorageImageArrayNonUniformIndexingNative"; 415 private static final String KEY_SHADER_STORAGE_IMAGE_ARRAY_NON_UNIFORM_INDEXING = "shaderStorageImageArrayNonUniformIndexing"; 416 private static final String KEY_SHADER_STORAGE_IMAGE_EXTENDED_FORMATS = "shaderStorageImageExtendedFormats"; 417 private static final String KEY_SHADER_STORAGE_IMAGE_MULTISAMPLE = "shaderStorageImageMultisample"; 418 private static final String KEY_SHADER_STORAGE_IMAGE_READ_WITHOUT_FORMAT = "shaderStorageImageReadWithoutFormat"; 419 private static final String KEY_SHADER_STORAGE_IMAGE_WRITE_WITHOUT_FORMAT = "shaderStorageImageWriteWithoutFormat"; 420 private static final String KEY_SHADER_STORAGE_TEXEL_BUFFER_ARRAY_DYNAMIC_INDEXING = "shaderStorageTexelBufferArrayDynamicIndexing"; 421 private static final String KEY_SHADER_STORAGE_TEXEL_BUFFER_ARRAY_NON_UNIFORM_INDEXING = "shaderStorageTexelBufferArrayNonUniformIndexing"; 422 private static final String KEY_SHADER_SUBGROUP_EXTENDED_TYPES = "shaderSubgroupExtendedTypes"; 423 private static final String KEY_SHADER_TERMINATE_INVOCATION = "shaderTerminateInvocation"; 424 private static final String KEY_SHADER_TESSELLATION_AND_GEOMETRY_POINT_SIZE = "shaderTessellationAndGeometryPointSize"; 425 private static final String KEY_SHADER_UNIFORM_BUFFER_ARRAY_DYNAMIC_INDEXING = "shaderUniformBufferArrayDynamicIndexing"; 426 private static final String KEY_SHADER_UNIFORM_BUFFER_ARRAY_NONUNIFORM_INDEXING_NATIVE = "shaderUniformBufferArrayNonUniformIndexingNative"; 427 private static final String KEY_SHADER_UNIFORM_BUFFER_ARRAY_NON_UNIFORM_INDEXING = "shaderUniformBufferArrayNonUniformIndexing"; 428 private static final String KEY_SHADER_UNIFORM_TEXEL_BUFFER_ARRAY_DYNAMIC_INDEXING = "shaderUniformTexelBufferArrayDynamicIndexing"; 429 private static final String KEY_SHADER_UNIFORM_TEXEL_BUFFER_ARRAY_NON_UNIFORM_INDEXING = "shaderUniformTexelBufferArrayNonUniformIndexing"; 430 private static final String KEY_SHADER_ZERO_INITIALIZE_WORKGROUP_MEMORY = "shaderZeroInitializeWorkgroupMemory"; 431 private static final String KEY_SIZE = "size"; 432 private static final String KEY_SPARSE_ADDRESS_SPACE_SIZE = "sparseAddressSpaceSize"; 433 private static final String KEY_SPARSE_BINDING = "sparseBinding"; 434 private static final String KEY_SPARSE_PROPERTIES = "sparseProperties"; 435 private static final String KEY_SPARSE_RESIDENCY_16_SAMPLES = "sparseResidency16Samples"; 436 private static final String KEY_SPARSE_RESIDENCY_2_SAMPLES = "sparseResidency2Samples"; 437 private static final String KEY_SPARSE_RESIDENCY_4_SAMPLES = "sparseResidency4Samples"; 438 private static final String KEY_SPARSE_RESIDENCY_8_SAMPLES = "sparseResidency8Samples"; 439 private static final String KEY_SPARSE_RESIDENCY_ALIASED = "sparseResidencyAliased"; 440 private static final String KEY_SPARSE_RESIDENCY_BUFFER = "sparseResidencyBuffer"; 441 private static final String KEY_SPARSE_RESIDENCY_IMAGE_2D = "sparseResidencyImage2D"; 442 private static final String KEY_SPARSE_RESIDENCY_IMAGE_3D = "sparseResidencyImage3D"; 443 private static final String KEY_SPEC_VERSION = "specVersion"; 444 private static final String KEY_STANDARD_SAMPLE_LOCATIONS = "standardSampleLocations"; 445 private static final String KEY_STORAGE_BUFFER_16BIT_ACCESS = "storageBuffer16BitAccess"; 446 private static final String KEY_STORAGE_BUFFER_8BIT_ACCESS = "storageBuffer8BitAccess"; 447 private static final String KEY_STORAGE_IMAGE_SAMPLE_COUNTS = "storageImageSampleCounts"; 448 private static final String KEY_STORAGE_INPUT_OUTPUT_16 = "storageInputOutput16"; 449 private static final String KEY_STORAGE_PUSH_CONSTANT8 = "storagePushConstant8"; 450 private static final String KEY_STORAGE_PUSH_CONSTANT_16 = "storagePushConstant16"; 451 private static final String KEY_STORAGE_TEXEL_BUFFER_OFFSET_ALIGNMENT_BYTES = "storageTexelBufferOffsetAlignmentBytes"; 452 private static final String KEY_STORAGE_TEXEL_BUFFER_OFFSET_SINGLE_TEXEL_ALIGNMENT = "storageTexelBufferOffsetSingleTexelAlignment"; 453 private static final String KEY_STRICT_LINES = "strictLines"; 454 private static final String KEY_SUBGROUP_BROADCAST_DYNAMIC_ID = "subgroupBroadcastDynamicId"; 455 private static final String KEY_SUBGROUP_PROPERTIES = "subgroupProperties"; 456 private static final String KEY_SUBGROUP_SIZE = "subgroupSize"; 457 private static final String KEY_SUBGROUP_SIZE_CONTROL = "subgroupSizeControl"; 458 private static final String KEY_SUBMINOR = "subminor"; 459 private static final String KEY_SUBSET_ALLOCATION = "subsetAllocation"; 460 private static final String KEY_SUB_PIXEL_INTERPOLATION_OFFSET_BITS = "subPixelInterpolationOffsetBits"; 461 private static final String KEY_SUB_PIXEL_PRECISION_BITS = "subPixelPrecisionBits"; 462 private static final String KEY_SUB_TEXEL_PRECISION_BITS = "subTexelPrecisionBits"; 463 private static final String KEY_SUPPORTED_DEPTH_RESOLVE_MODES = "supportedDepthResolveModes"; 464 private static final String KEY_SUPPORTED_OPERATIONS = "supportedOperations"; 465 private static final String KEY_SUPPORTED_STAGES = "supportedStages"; 466 private static final String KEY_SUPPORTED_STENCIL_RESOLVE_MODES = "supportedStencilResolveModes"; 467 private static final String KEY_SYNCHRONIZATION2 = "synchronization2"; 468 private static final String KEY_TESSELLATION_SHADER = "tessellationShader"; 469 private static final String KEY_TEXTURE_COMPRESSION_ASTC_HDR = "textureCompressionASTC_HDR"; 470 private static final String KEY_TEXTURE_COMPRESSION_ASTC_LDR = "textureCompressionASTC_LDR"; 471 private static final String KEY_TEXTURE_COMPRESSION_BC = "textureCompressionBC"; 472 private static final String KEY_TEXTURE_COMPRESSION_ETC2 = "textureCompressionETC2"; 473 private static final String KEY_TIMELINE_SEMAPHORE = "timelineSemaphore"; 474 private static final String KEY_TIMESTAMP_COMPUTE_AND_GRAPHICS = "timestampComputeAndGraphics"; 475 private static final String KEY_TIMESTAMP_PERIOD = "timestampPeriod"; 476 private static final String KEY_TIMESTAMP_VALID_BITS = "timestampValidBits"; 477 private static final String KEY_UNIFORM_AND_STORAGE_BUFFER_16BIT_ACCESS = "uniformAndStorageBuffer16BitAccess"; 478 private static final String KEY_UNIFORM_AND_STORAGE_BUFFER_8BIT_ACCESS = "uniformAndStorageBuffer8BitAccess"; 479 private static final String KEY_UNIFORM_BUFFER_STANDARD_LAYOUT = "uniformBufferStandardLayout"; 480 private static final String KEY_UNIFORM_TEXEL_BUFFER_OFFSET_ALIGNMENT_BYTES = "uniformTexelBufferOffsetAlignmentBytes"; 481 private static final String KEY_UNIFORM_TEXEL_BUFFER_OFFSET_SINGLE_TEXEL_ALIGNMENT = "uniformTexelBufferOffsetSingleTexelAlignment"; 482 private static final String KEY_VARIABLE_MULTISAMPLE_RATE = "variableMultisampleRate"; 483 private static final String KEY_VARIABLE_POINTERS = "variablePointers"; 484 private static final String KEY_VARIABLE_POINTERS_STORAGE_BUFFER = "variablePointersStorageBuffer"; 485 private static final String KEY_VARIABLE_POINTER_FEATURES = "variablePointerFeatures"; 486 private static final String KEY_VARIABLE_POINTER_FEATURES_KHR = "variablePointerFeaturesKHR"; 487 private static final String KEY_VENDOR_ID = "vendorID"; 488 private static final String KEY_VERTEX_PIPELINE_STORES_AND_ATOMICS = "vertexPipelineStoresAndAtomics"; 489 private static final String KEY_VIEWPORT_BOUNDS_RANGE = "viewportBoundsRange"; 490 private static final String KEY_VIEWPORT_SUB_PIXEL_BITS = "viewportSubPixelBits"; 491 private static final String KEY_VK_KHR_DRIVER_PROPERTIES = "VK_KHR_driver_properties"; 492 private static final String KEY_VK_KHR_VARIABLE_POINTERS = "VK_KHR_variable_pointers"; 493 private static final String KEY_VULKAN_12_FEATURES = "vulkan_12_features"; 494 private static final String KEY_VULKAN_12_PROPERTIES = "vulkan_12_properties"; 495 private static final String KEY_VULKAN_13_FEATURES = "vulkan_13_features"; 496 private static final String KEY_VULKAN_13_PROPERTIES = "vulkan_13_properties"; 497 private static final String KEY_VULKAN_MEMORY_MODEL = "vulkanMemoryModel"; 498 private static final String KEY_VULKAN_MEMORY_MODEL_AVAILABILITY_VISIBILITY_CHAINS = "vulkanMemoryModelAvailabilityVisibilityChains"; 499 private static final String KEY_VULKAN_MEMORY_MODEL_DEVICE_SCOPE = "vulkanMemoryModelDeviceScope"; 500 private static final String KEY_WIDE_LINES = "wideLines"; 501 private static final String KEY_WIDTH = "width"; 502 503 private static final int VK_API_VERSION_1_1 = 4198400; 504 private static final int VK_API_VERSION_1_2 = 4202496; 505 private static final int VK_API_VERSION_1_3 = 4206592; 506 private static final int ENUM_VK_KHR_VARIABLE_POINTERS = 0; 507 private static final int ENUM_VK_KHR_DRIVER_PROPERTIES = 1; 508 509 private static HashMap<String, Integer> extensionNameToEnum; 510 511 static { 512 System.loadLibrary("ctsdeviceinfo"); 513 extensionNameToEnum = new HashMap<>(); extensionNameToEnum.put(KEY_VK_KHR_DRIVER_PROPERTIES, ENUM_VK_KHR_DRIVER_PROPERTIES)514 extensionNameToEnum.put(KEY_VK_KHR_DRIVER_PROPERTIES, ENUM_VK_KHR_DRIVER_PROPERTIES); extensionNameToEnum.put(KEY_VK_KHR_VARIABLE_POINTERS, ENUM_VK_KHR_VARIABLE_POINTERS)515 extensionNameToEnum.put(KEY_VK_KHR_VARIABLE_POINTERS, ENUM_VK_KHR_VARIABLE_POINTERS); 516 } 517 518 @Override collectDeviceInfo(DeviceInfoStore store)519 protected void collectDeviceInfo(DeviceInfoStore store) throws Exception { 520 try { 521 JSONObject instance = new JSONObject(nativeGetVkJSON()); 522 emitDeviceGroups(store, instance); 523 emitLayers(store, instance); 524 emitExtensions(store, instance); 525 emitDevices(store, instance); 526 527 // Access to Instance API version was only added alongside 1.2 support in instance 528 if (instance.getLong(KEY_API_VERSION) >= VK_API_VERSION_1_2) { 529 emitInstanceApiVersion(store, instance); 530 } 531 } catch (JSONException e) { 532 e.printStackTrace(); 533 throw new RuntimeException(e); 534 } 535 } 536 emitDeviceGroups(DeviceInfoStore store, JSONObject parent)537 private static void emitDeviceGroups(DeviceInfoStore store, JSONObject parent) 538 throws Exception { 539 JSONArray deviceGroups = parent.getJSONArray(KEY_DEVICE_GROUPS); 540 store.startArray(convertName(KEY_DEVICE_GROUPS)); 541 for (int deviceGroupIdx = 0; deviceGroupIdx < deviceGroups.length(); deviceGroupIdx++) { 542 JSONObject deviceGroup = deviceGroups.getJSONObject(deviceGroupIdx); 543 store.startGroup(); 544 { 545 emitLongArray(store, deviceGroup, KEY_DEVICES); 546 emitBoolean(store, deviceGroup, KEY_SUBSET_ALLOCATION); 547 } 548 store.endGroup(); 549 } 550 store.endArray(); 551 } 552 emitDevices(DeviceInfoStore store, JSONObject parent)553 private static void emitDevices(DeviceInfoStore store, JSONObject parent) 554 throws Exception { 555 JSONArray devices = parent.getJSONArray(KEY_DEVICES); 556 store.startArray(convertName(KEY_DEVICES)); 557 for (int deviceIdx = 0; deviceIdx < devices.length(); deviceIdx++) { 558 JSONObject device = devices.getJSONObject(deviceIdx); 559 store.startGroup(); 560 { 561 JSONObject properties = device.getJSONObject(KEY_PROPERTIES); 562 store.startGroup(convertName(KEY_PROPERTIES)); 563 { 564 emitLong(store, properties, KEY_API_VERSION); 565 emitLong(store, properties, KEY_DRIVER_VERSION); 566 emitLong(store, properties, KEY_VENDOR_ID); 567 emitLong(store, properties, KEY_DEVICE_ID); 568 emitLong(store, properties, KEY_DEVICE_TYPE); 569 emitString(store, properties, KEY_DEVICE_NAME); 570 emitLongArray(store, properties, KEY_PIPELINE_CACHE_UUID); 571 572 JSONObject limits = properties.getJSONObject(KEY_LIMITS); 573 store.startGroup(convertName(KEY_LIMITS)); 574 { 575 emitLong(store, limits, KEY_MAX_IMAGE_DIMENSION_1D); 576 emitLong(store, limits, KEY_MAX_IMAGE_DIMENSION_2D); 577 emitLong(store, limits, KEY_MAX_IMAGE_DIMENSION_3D); 578 emitLong(store, limits, KEY_MAX_IMAGE_DIMENSION_CUBE); 579 emitLong(store, limits, KEY_MAX_IMAGE_ARRAY_LAYERS); 580 emitLong(store, limits, KEY_MAX_TEXEL_BUFFER_ELEMENTS); 581 emitLong(store, limits, KEY_MAX_UNIFORM_BUFFER_RANGE); 582 emitLong(store, limits, KEY_MAX_STORAGE_BUFFER_RANGE); 583 emitLong(store, limits, KEY_MAX_PUSH_CONSTANTS_SIZE); 584 emitLong(store, limits, KEY_MAX_MEMORY_ALLOCATION_COUNT); 585 emitLong(store, limits, KEY_MAX_SAMPLER_ALLOCATION_COUNT); 586 emitString(store, limits, KEY_BUFFER_IMAGE_GRANULARITY); 587 emitString(store, limits, KEY_SPARSE_ADDRESS_SPACE_SIZE); 588 emitLong(store, limits, KEY_MAX_BOUND_DESCRIPTOR_SETS); 589 emitLong(store, limits, KEY_MAX_PER_STAGE_DESCRIPTOR_SAMPLERS); 590 emitLong(store, limits, KEY_MAX_PER_STAGE_DESCRIPTOR_UNIFORM_BUFFERS); 591 emitLong(store, limits, KEY_MAX_PER_STAGE_DESCRIPTOR_STORAGE_BUFFERS); 592 emitLong(store, limits, KEY_MAX_PER_STAGE_DESCRIPTOR_SAMPLED_IMAGES); 593 emitLong(store, limits, KEY_MAX_PER_STAGE_DESCRIPTOR_STORAGE_IMAGES); 594 emitLong(store, limits, KEY_MAX_PER_STAGE_DESCRIPTOR_INPUT_ATTACHMENTS); 595 emitLong(store, limits, KEY_MAX_PER_STAGE_RESOURCES); 596 emitLong(store, limits, KEY_MAX_DESCRIPTOR_SET_SAMPLERS); 597 emitLong(store, limits, KEY_MAX_DESCRIPTOR_SET_UNIFORM_BUFFERS); 598 emitLong(store, limits, KEY_MAX_DESCRIPTOR_SET_UNIFORM_BUFFERS_DYNAMIC); 599 emitLong(store, limits, KEY_MAX_DESCRIPTOR_SET_STORAGE_BUFFERS); 600 emitLong(store, limits, KEY_MAX_DESCRIPTOR_SET_STORAGE_BUFFERS_DYNAMIC); 601 emitLong(store, limits, KEY_MAX_DESCRIPTOR_SET_SAMPLED_IMAGES); 602 emitLong(store, limits, KEY_MAX_DESCRIPTOR_SET_STORAGE_IMAGES); 603 emitLong(store, limits, KEY_MAX_DESCRIPTOR_SET_INPUT_ATTACHMENTS); 604 emitLong(store, limits, KEY_MAX_VERTEX_INPUT_ATTRIBUTES); 605 emitLong(store, limits, KEY_MAX_VERTEX_INPUT_BINDINGS); 606 emitLong(store, limits, KEY_MAX_VERTEX_INPUT_ATTRIBUTE_OFFSET); 607 emitLong(store, limits, KEY_MAX_VERTEX_INPUT_BINDING_STRIDE); 608 emitLong(store, limits, KEY_MAX_VERTEX_OUTPUT_COMPONENTS); 609 emitLong(store, limits, KEY_MAX_TESSELLATION_GENERATION_LEVEL); 610 emitLong(store, limits, KEY_MAX_TESSELLATION_PATCH_SIZE); 611 emitLong(store, limits, KEY_MAX_TESSELLATION_CONTROL_PER_VERTEX_INPUT_COMPONENTS); 612 emitLong(store, limits, KEY_MAX_TESSELLATION_CONTROL_PER_VERTEX_OUTPUT_COMPONENTS); 613 emitLong(store, limits, KEY_MAX_TESSELLATION_CONTROL_PER_PATCH_OUTPUT_COMPONENTS); 614 emitLong(store, limits, KEY_MAX_TESSELLATION_CONTROL_TOTAL_OUTPUT_COMPONENTS); 615 emitLong(store, limits, KEY_MAX_TESSELLATION_EVALUATION_INPUT_COMPONENTS); 616 emitLong(store, limits, KEY_MAX_TESSELLATION_EVALUATION_OUTPUT_COMPONENTS); 617 emitLong(store, limits, KEY_MAX_GEOMETRY_SHADER_INVOCATIONS); 618 emitLong(store, limits, KEY_MAX_GEOMETRY_INPUT_COMPONENTS); 619 emitLong(store, limits, KEY_MAX_GEOMETRY_OUTPUT_COMPONENTS); 620 emitLong(store, limits, KEY_MAX_GEOMETRY_OUTPUT_VERTICES); 621 emitLong(store, limits, KEY_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS); 622 emitLong(store, limits, KEY_MAX_FRAGMENT_INPUT_COMPONENTS); 623 emitLong(store, limits, KEY_MAX_FRAGMENT_OUTPUT_ATTACHMENTS); 624 emitLong(store, limits, KEY_MAX_FRAGMENT_DUAL_SRC_ATTACHMENTS); 625 emitLong(store, limits, KEY_MAX_FRAGMENT_COMBINED_OUTPUT_RESOURCES); 626 emitLong(store, limits, KEY_MAX_COMPUTE_SHARED_MEMORY_SIZE); 627 emitLongArray(store, limits, KEY_MAX_COMPUTE_WORK_GROUP_COUNT); 628 emitLong(store, limits, KEY_MAX_COMPUTE_WORK_GROUP_INVOCATIONS); 629 emitLongArray(store, limits, KEY_MAX_COMPUTE_WORK_GROUP_SIZE); 630 emitLong(store, limits, KEY_SUB_PIXEL_PRECISION_BITS); 631 emitLong(store, limits, KEY_SUB_TEXEL_PRECISION_BITS); 632 emitLong(store, limits, KEY_MIPMAP_PRECISION_BITS); 633 emitLong(store, limits, KEY_MAX_DRAW_INDEXED_INDEX_VALUE); 634 emitLong(store, limits, KEY_MAX_DRAW_INDIRECT_COUNT); 635 emitDouble(store, limits, KEY_MAX_SAMPLER_LOD_BIAS); 636 emitDouble(store, limits, KEY_MAX_SAMPLER_ANISOTROPY); 637 emitLong(store, limits, KEY_MAX_VIEWPORTS); 638 emitLongArray(store, limits, KEY_MAX_VIEWPORT_DIMENSIONS); 639 emitDoubleArray(store, limits, KEY_VIEWPORT_BOUNDS_RANGE); 640 emitLong(store, limits, KEY_VIEWPORT_SUB_PIXEL_BITS); 641 emitString(store, limits, KEY_MIN_MEMORY_MAP_ALIGNMENT); 642 emitString(store, limits, KEY_MIN_TEXEL_BUFFER_OFFSET_ALIGNMENT); 643 emitString(store, limits, KEY_MIN_UNIFORM_BUFFER_OFFSET_ALIGNMENT); 644 emitString(store, limits, KEY_MIN_STORAGE_BUFFER_OFFSET_ALIGNMENT); 645 emitLong(store, limits, KEY_MIN_TEXEL_OFFSET); 646 emitLong(store, limits, KEY_MAX_TEXEL_OFFSET); 647 emitLong(store, limits, KEY_MIN_TEXEL_GATHER_OFFSET); 648 emitLong(store, limits, KEY_MAX_TEXEL_GATHER_OFFSET); 649 emitDouble(store, limits, KEY_MIN_INTERPOLATION_OFFSET); 650 emitDouble(store, limits, KEY_MAX_INTERPOLATION_OFFSET); 651 emitLong(store, limits, KEY_SUB_PIXEL_INTERPOLATION_OFFSET_BITS); 652 emitLong(store, limits, KEY_MAX_FRAMEBUFFER_WIDTH); 653 emitLong(store, limits, KEY_MAX_FRAMEBUFFER_HEIGHT); 654 emitLong(store, limits, KEY_MAX_FRAMEBUFFER_LAYERS); 655 emitLong(store, limits, KEY_FRAMEBUFFER_COLOR_SAMPLE_COUNTS); 656 emitLong(store, limits, KEY_FRAMEBUFFER_DEPTH_SAMPLE_COUNTS); 657 emitLong(store, limits, KEY_FRAMEBUFFER_STENCIL_SAMPLE_COUNTS); 658 emitLong(store, limits, KEY_FRAMEBUFFER_NO_ATTACHMENTS_SAMPLE_COUNTS); 659 emitLong(store, limits, KEY_MAX_COLOR_ATTACHMENTS); 660 emitLong(store, limits, KEY_SAMPLED_IMAGE_COLOR_SAMPLE_COUNTS); 661 emitLong(store, limits, KEY_SAMPLED_IMAGE_INTEGER_SAMPLE_COUNTS); 662 emitLong(store, limits, KEY_SAMPLED_IMAGE_DEPTH_SAMPLE_COUNTS); 663 emitLong(store, limits, KEY_SAMPLED_IMAGE_STENCIL_SAMPLE_COUNTS); 664 emitLong(store, limits, KEY_STORAGE_IMAGE_SAMPLE_COUNTS); 665 emitLong(store, limits, KEY_MAX_SAMPLE_MASK_WORDS); 666 emitBoolean(store, limits, KEY_TIMESTAMP_COMPUTE_AND_GRAPHICS); 667 emitDouble(store, limits, KEY_TIMESTAMP_PERIOD); 668 emitLong(store, limits, KEY_MAX_CLIP_DISTANCES); 669 emitLong(store, limits, KEY_MAX_CULL_DISTANCES); 670 emitLong(store, limits, KEY_MAX_COMBINED_CLIP_AND_CULL_DISTANCES); 671 emitLong(store, limits, KEY_DISCRETE_QUEUE_PRIORITIES); 672 emitDoubleArray(store, limits, KEY_POINT_SIZE_RANGE); 673 emitDoubleArray(store, limits, KEY_LINE_WIDTH_RANGE); 674 emitDouble(store, limits, KEY_POINT_SIZE_GRANULARITY); 675 emitDouble(store, limits, KEY_LINE_WIDTH_GRANULARITY); 676 emitBoolean(store, limits, KEY_STRICT_LINES); 677 emitBoolean(store, limits, KEY_STANDARD_SAMPLE_LOCATIONS); 678 emitString(store, limits, KEY_OPTIMAL_BUFFER_COPY_OFFSET_ALIGNMENT); 679 emitString(store, limits, KEY_OPTIMAL_BUFFER_COPY_ROW_PITCH_ALIGNMENT); 680 emitString(store, limits, KEY_NON_COHERENT_ATOM_SIZE); 681 } 682 store.endGroup(); 683 684 JSONObject sparse = properties.getJSONObject(KEY_SPARSE_PROPERTIES); 685 store.startGroup(convertName(KEY_SPARSE_PROPERTIES)); 686 { 687 emitBoolean(store, sparse, KEY_RESIDENCY_STANDARD_2D_BLOCK_SHAPE); 688 emitBoolean(store, sparse, KEY_RESIDENCY_STANDARD_2D_MULTISAMPLE_BLOCK_SHAPE); 689 emitBoolean(store, sparse, KEY_RESIDENCY_STANDARD_3D_BLOCK_SHAPE); 690 emitBoolean(store, sparse, KEY_RESIDENCY_ALIGNED_MIP_SIZE); 691 emitBoolean(store, sparse, KEY_RESIDENCY_NON_RESIDENT_STRICT); 692 } 693 store.endGroup(); 694 695 if (properties.getLong(KEY_API_VERSION) >= VK_API_VERSION_1_2) { 696 JSONObject core12 = device.getJSONObject(KEY_CORE12); 697 JSONObject vulkan12Properties = core12.getJSONObject(KEY_PROPERTIES); 698 store.startGroup(convertName(KEY_VULKAN_12_PROPERTIES)); 699 { 700 emitLong(store, vulkan12Properties, KEY_DRIVER_ID); 701 emitString(store, vulkan12Properties, KEY_DRIVER_NAME); 702 emitString(store, vulkan12Properties, KEY_DRIVER_INFO); 703 704 JSONObject conformanceVersion = vulkan12Properties.getJSONObject(KEY_CONFORMANCE_VERSION); 705 store.startGroup(convertName(KEY_CONFORMANCE_VERSION)); 706 { 707 emitLong(store, conformanceVersion, KEY_MAJOR); 708 emitLong(store, conformanceVersion, KEY_MINOR); 709 emitLong(store, conformanceVersion, KEY_SUBMINOR); 710 emitLong(store, conformanceVersion, KEY_PATCH); 711 } 712 store.endGroup(); 713 714 emitLong(store, vulkan12Properties, KEY_DENORM_BEHAVIOR_INDEPENDENCE); 715 emitLong(store, vulkan12Properties, KEY_ROUNDING_MODE_INDEPENDENCE); 716 emitBoolean(store, vulkan12Properties, KEY_SHADER_SIGNED_ZERO_INF_NAN_PRESERVE_FLOAT16); 717 emitBoolean(store, vulkan12Properties, KEY_SHADER_SIGNED_ZERO_INF_NAN_PRESERVE_FLOAT32); 718 emitBoolean(store, vulkan12Properties, KEY_SHADER_SIGNED_ZERO_INF_NAN_PRESERVE_FLOAT64); 719 emitBoolean(store, vulkan12Properties, KEY_SHADER_DENORM_PRESERVE_FLOAT16); 720 emitBoolean(store, vulkan12Properties, KEY_SHADER_DENORM_PRESERVE_FLOAT32); 721 emitBoolean(store, vulkan12Properties, KEY_SHADER_DENORM_PRESERVE_FLOAT64); 722 emitBoolean(store, vulkan12Properties, KEY_SHADER_DENORM_FLUSH_TO_ZERO_FLOAT16); 723 emitBoolean(store, vulkan12Properties, KEY_SHADER_DENORM_FLUSH_TO_ZERO_FLOAT32); 724 emitBoolean(store, vulkan12Properties, KEY_SHADER_DENORM_FLUSH_TO_ZERO_FLOAT64); 725 emitBoolean(store, vulkan12Properties, KEY_SHADER_ROUNDING_MODE_RTE_FLOAT16); 726 emitBoolean(store, vulkan12Properties, KEY_SHADER_ROUNDING_MODE_RTE_FLOAT32); 727 emitBoolean(store, vulkan12Properties, KEY_SHADER_ROUNDING_MODE_RTE_FLOAT64); 728 emitBoolean(store, vulkan12Properties, KEY_SHADER_ROUNDING_MODE_RTZ_FLOAT16); 729 emitBoolean(store, vulkan12Properties, KEY_SHADER_ROUNDING_MODE_RTZ_FLOAT32); 730 emitBoolean(store, vulkan12Properties, KEY_SHADER_ROUNDING_MODE_RTZ_FLOAT64); 731 emitLong(store, vulkan12Properties, KEY_MAX_UPDATE_AFTER_BIND_DESCRIPTORS_IN_ALL_POOLS); 732 emitBoolean(store, vulkan12Properties, KEY_SHADER_UNIFORM_BUFFER_ARRAY_NONUNIFORM_INDEXING_NATIVE); 733 emitBoolean(store, vulkan12Properties, KEY_SHADER_SAMPLED_IMAGE_ARRAY_NONUNIFORM_INDEXING_NATIVE); 734 emitBoolean(store, vulkan12Properties, KEY_SHADER_STORAGE_BUFFER_ARRAY_NONUNIFORM_INDEXING_NATIVE); 735 emitBoolean(store, vulkan12Properties, KEY_SHADER_STORAGE_IMAGE_ARRAY_NONUNIFORM_INDEXING_NATIVE); 736 emitBoolean(store, vulkan12Properties, KEY_SHADER_INPUT_ATTACHMENT_ARRAY_NONUNIFORM_INDEXING_NATIVE); 737 emitBoolean(store, vulkan12Properties, KEY_ROBUST_BUFFER_ACCESS_UPDATE_AFTER_BIND); 738 emitBoolean(store, vulkan12Properties, KEY_QUAD_DIVERGENT_IMPLICIT_LOD); 739 emitLong(store, vulkan12Properties, KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_SAMPLERS); 740 emitLong(store, vulkan12Properties, KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_UNIFORM_BUFFERS); 741 emitLong(store, vulkan12Properties, KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_STORAGE_BUFFERS); 742 emitLong(store, vulkan12Properties, KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_SAMPLED_IMAGES); 743 emitLong(store, vulkan12Properties, KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_STORAGE_IMAGES); 744 emitLong(store, vulkan12Properties, KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_INPUT_ATTACHMENTS); 745 emitLong(store, vulkan12Properties, KEY_MAX_PER_STAGE_UPDATE_AFTER_BIND_RESOURCES); 746 emitLong(store, vulkan12Properties, KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_SAMPLERS); 747 emitLong(store, vulkan12Properties, KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_UNIFORM_BUFFERS); 748 emitLong(store, vulkan12Properties, KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_UNIFORM_BUFFERS_DYNAMIC); 749 emitLong(store, vulkan12Properties, KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_STORAGE_BUFFERS); 750 emitLong(store, vulkan12Properties, KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_STORAGE_BUFFERS_DYNAMIC); 751 emitLong(store, vulkan12Properties, KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_SAMPLED_IMAGES); 752 emitLong(store, vulkan12Properties, KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_STORAGE_IMAGES); 753 emitLong(store, vulkan12Properties, KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_INPUT_ATTACHMENTS); 754 emitLong(store, vulkan12Properties, KEY_SUPPORTED_DEPTH_RESOLVE_MODES); 755 emitLong(store, vulkan12Properties, KEY_SUPPORTED_STENCIL_RESOLVE_MODES); 756 emitBoolean(store, vulkan12Properties, KEY_INDEPENDENT_RESOLVE_NONE); 757 emitBoolean(store, vulkan12Properties, KEY_INDEPENDENT_RESOLVE); 758 emitBoolean(store, vulkan12Properties, KEY_FILTER_MINMAX_SINGLE_COMPONENT_FORMATS); 759 emitBoolean(store, vulkan12Properties, KEY_FILTER_MINMAX_IMAGE_COMPONENT_MAPPING); 760 emitString(store, vulkan12Properties, KEY_MAX_TIMELINE_SEMAPHORE_VALUE_DIFFERENCE); 761 emitLong(store, vulkan12Properties, KEY_FRAMEBUFFER_INTEGER_COLOR_SAMPLE_COUNTS); 762 } 763 store.endGroup(); 764 } 765 766 if (properties.getLong(KEY_API_VERSION) >= VK_API_VERSION_1_3) { 767 JSONObject core13 = device.getJSONObject(KEY_CORE13); 768 JSONObject vulkan13Properties = core13.getJSONObject(KEY_PROPERTIES); 769 store.startGroup(convertName(KEY_VULKAN_13_PROPERTIES)); 770 { 771 emitLong(store, vulkan13Properties, KEY_MIN_SUBGROUP_SIZE); 772 emitLong(store, vulkan13Properties, KEY_MAX_SUBGROUP_SIZE); 773 emitLong(store, vulkan13Properties, KEY_MAX_COMPUTE_WORKGROUP_SUBGROUPS); 774 emitLong(store, vulkan13Properties, KEY_REQUIRED_SUBGROUP_SIZE_STAGES); 775 emitLong(store, vulkan13Properties, KEY_MAX_INLINE_UNIFORM_BLOCK_SIZE); 776 emitLong(store, vulkan13Properties, KEY_MAX_PER_STAGE_DESCRIPTOR_INLINE_UNIFORM_BLOCKS); 777 emitLong(store, vulkan13Properties, KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_INLINE_UNIFORM_BLOCKS); 778 emitLong(store, vulkan13Properties, KEY_MAX_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCKS); 779 emitLong(store, vulkan13Properties, KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_INLINE_UNIFORM_BLOCKS); 780 emitLong(store, vulkan13Properties, KEY_MAX_INLINE_UNIFORM_TOTAL_SIZE); 781 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_8BIT_UNSIGNED_ACCELERATED); 782 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_8BIT_SIGNED_ACCELERATED); 783 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_8BIT_MIXED_SIGNEDNESS_ACCELERATED); 784 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_4X8BIT_PACKED_UNSIGNED_ACCELERATED); 785 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_4X8BIT_PACKED_SIGNED_ACCELERATED); 786 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_4X8BIT_PACKED_MIXED_SIGNEDNESS_ACCELERATED); 787 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_16BIT_UNSIGNED_ACCELERATED); 788 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_16BIT_SIGNED_ACCELERATED); 789 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_16BIT_MIXED_SIGNEDNESS_ACCELERATED); 790 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_32BIT_UNSIGNED_ACCELERATED); 791 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_32BIT_SIGNED_ACCELERATED); 792 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_32BIT_MIXED_SIGNEDNESS_ACCELERATED); 793 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_64BIT_UNSIGNED_ACCELERATED); 794 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_64BIT_SIGNED_ACCELERATED); 795 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_64BIT_MIXED_SIGNEDNESS_ACCELERATED); 796 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_8BIT_UNSIGNED_ACCELERATED); 797 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_8BIT_SIGNED_ACCELERATED); 798 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_8BIT_MIXED_SIGNEDNESS_ACCELERATED); 799 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_4X8BIT_PACKED_UNSIGNED_ACCELERATED); 800 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_4X8BIT_PACKED_SIGNED_ACCELERATED); 801 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_4X8BIT_PACKED_MIXED_SIGNEDNESS_ACCELERATED); 802 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_16BIT_UNSIGNED_ACCELERATED); 803 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_16BIT_SIGNED_ACCELERATED); 804 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_16BIT_MIXED_SIGNEDNESS_ACCELERATED); 805 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_32BIT_UNSIGNED_ACCELERATED); 806 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_32BIT_SIGNED_ACCELERATED); 807 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_32BIT_MIXED_SIGNEDNESS_ACCELERATED); 808 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_64BIT_UNSIGNED_ACCELERATED); 809 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_64BIT_SIGNEDNESS_ACCELERATED); 810 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_64BIT_MIXED_SIGNEDNESS_ACCELERATED); 811 emitString(store, vulkan13Properties, KEY_STORAGE_TEXEL_BUFFER_OFFSET_ALIGNMENT_BYTES); 812 emitBoolean(store, vulkan13Properties, KEY_STORAGE_TEXEL_BUFFER_OFFSET_SINGLE_TEXEL_ALIGNMENT); 813 emitString(store, vulkan13Properties, KEY_UNIFORM_TEXEL_BUFFER_OFFSET_ALIGNMENT_BYTES); 814 emitBoolean(store, vulkan13Properties, KEY_UNIFORM_TEXEL_BUFFER_OFFSET_SINGLE_TEXEL_ALIGNMENT); 815 emitString(store, vulkan13Properties, KEY_MAX_BUFFER_SIZE); 816 } 817 store.endGroup(); 818 } 819 } 820 store.endGroup(); 821 822 JSONObject features = device.getJSONObject(KEY_FEATURES); 823 store.startGroup(convertName(KEY_FEATURES)); 824 { 825 emitBoolean(store, features, KEY_ROBUST_BUFFER_ACCESS); 826 emitBoolean(store, features, KEY_FULL_DRAW_INDEX_UINT32); 827 emitBoolean(store, features, KEY_IMAGE_CUBE_ARRAY); 828 emitBoolean(store, features, KEY_INDEPENDENT_BLEND); 829 emitBoolean(store, features, KEY_GEOMETRY_SHADER); 830 emitBoolean(store, features, KEY_TESSELLATION_SHADER); 831 emitBoolean(store, features, KEY_SAMPLE_RATE_SHADING); 832 emitBoolean(store, features, KEY_DUAL_SRC_BLEND); 833 emitBoolean(store, features, KEY_LOGIC_OP); 834 emitBoolean(store, features, KEY_MULTI_DRAW_INDIRECT); 835 emitBoolean(store, features, KEY_DRAW_INDIRECT_FIRST_INSTANCE); 836 emitBoolean(store, features, KEY_DEPTH_CLAMP); 837 emitBoolean(store, features, KEY_DEPTH_BIAS_CLAMP); 838 emitBoolean(store, features, KEY_FILL_MODE_NON_SOLID); 839 emitBoolean(store, features, KEY_DEPTH_BOUNDS); 840 emitBoolean(store, features, KEY_WIDE_LINES); 841 emitBoolean(store, features, KEY_LARGE_POINTS); 842 emitBoolean(store, features, KEY_ALPHA_TO_ONE); 843 emitBoolean(store, features, KEY_MULTI_VIEWPORT); 844 emitBoolean(store, features, KEY_SAMPLER_ANISOTROPY); 845 emitBoolean(store, features, KEY_TEXTURE_COMPRESSION_ETC2); 846 emitBoolean(store, features, KEY_TEXTURE_COMPRESSION_ASTC_LDR); 847 emitBoolean(store, features, KEY_TEXTURE_COMPRESSION_BC); 848 emitBoolean(store, features, KEY_OCCLUSION_QUERY_PRECISE); 849 emitBoolean(store, features, KEY_PIPELINE_STATISTICS_QUERY); 850 emitBoolean(store, features, KEY_VERTEX_PIPELINE_STORES_AND_ATOMICS); 851 emitBoolean(store, features, KEY_FRAGMENT_STORES_AND_ATOMICS); 852 emitBoolean(store, features, KEY_SHADER_TESSELLATION_AND_GEOMETRY_POINT_SIZE); 853 emitBoolean(store, features, KEY_SHADER_IMAGE_GATHER_EXTENDED); 854 emitBoolean(store, features, KEY_SHADER_STORAGE_IMAGE_EXTENDED_FORMATS); 855 emitBoolean(store, features, KEY_SHADER_STORAGE_IMAGE_MULTISAMPLE); 856 emitBoolean(store, features, KEY_SHADER_STORAGE_IMAGE_READ_WITHOUT_FORMAT); 857 emitBoolean(store, features, KEY_SHADER_STORAGE_IMAGE_WRITE_WITHOUT_FORMAT); 858 emitBoolean(store, features, KEY_SHADER_UNIFORM_BUFFER_ARRAY_DYNAMIC_INDEXING); 859 emitBoolean(store, features, KEY_SHADER_SAMPLED_IMAGE_ARRAY_DYNAMIC_INDEXING); 860 emitBoolean(store, features, KEY_SHADER_STORAGE_BUFFER_ARRAY_DYNAMIC_INDEXING); 861 emitBoolean(store, features, KEY_SHADER_STORAGE_IMAGE_ARRAY_DYNAMIC_INDEXING); 862 emitBoolean(store, features, KEY_SHADER_CLIP_DISTANCE); 863 emitBoolean(store, features, KEY_SHADER_CULL_DISTANCE); 864 emitBoolean(store, features, KEY_SHADER_FLOAT64); 865 emitBoolean(store, features, KEY_SHADER_INT64); 866 emitBoolean(store, features, KEY_SHADER_INT16); 867 emitBoolean(store, features, KEY_SHADER_RESOURCE_RESIDENCY); 868 emitBoolean(store, features, KEY_SHADER_RESOURCE_MIN_LOD); 869 emitBoolean(store, features, KEY_SPARSE_BINDING); 870 emitBoolean(store, features, KEY_SPARSE_RESIDENCY_BUFFER); 871 emitBoolean(store, features, KEY_SPARSE_RESIDENCY_IMAGE_2D); 872 emitBoolean(store, features, KEY_SPARSE_RESIDENCY_IMAGE_3D); 873 emitBoolean(store, features, KEY_SPARSE_RESIDENCY_2_SAMPLES); 874 emitBoolean(store, features, KEY_SPARSE_RESIDENCY_4_SAMPLES); 875 emitBoolean(store, features, KEY_SPARSE_RESIDENCY_8_SAMPLES); 876 emitBoolean(store, features, KEY_SPARSE_RESIDENCY_16_SAMPLES); 877 emitBoolean(store, features, KEY_SPARSE_RESIDENCY_ALIASED); 878 emitBoolean(store, features, KEY_VARIABLE_MULTISAMPLE_RATE); 879 emitBoolean(store, features, KEY_INHERITED_QUERIES); 880 881 if (properties.getLong(KEY_API_VERSION) >= VK_API_VERSION_1_2) { 882 JSONObject core12 = device.getJSONObject(KEY_CORE12); 883 JSONObject vulkan12Features = core12.getJSONObject(KEY_FEATURES); 884 store.startGroup(convertName(KEY_VULKAN_12_FEATURES)); 885 { 886 emitBoolean(store, vulkan12Features, KEY_SAMPLER_MIRROR_CLAMP_TO_EDGE); 887 emitBoolean(store, vulkan12Features, KEY_DRAW_INDIRECT_COUNT); 888 emitBoolean(store, vulkan12Features, KEY_STORAGE_BUFFER_8BIT_ACCESS); 889 emitBoolean(store, vulkan12Features, KEY_UNIFORM_AND_STORAGE_BUFFER_8BIT_ACCESS); 890 emitBoolean(store, vulkan12Features, KEY_STORAGE_PUSH_CONSTANT8); 891 emitBoolean(store, vulkan12Features, KEY_SHADER_BUFFER_INT64_ATOMICS); 892 emitBoolean(store, vulkan12Features, KEY_SHADER_SHARED_INT64_ATOMICS); 893 emitBoolean(store, vulkan12Features, KEY_SHADER_FLOAT16); 894 emitBoolean(store, vulkan12Features, KEY_SHADER_INT8); 895 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_INDEXING); 896 emitBoolean(store, vulkan12Features, KEY_SHADER_INPUT_ATTACHMENT_ARRAY_DYNAMIC_INDEXING); 897 emitBoolean(store, vulkan12Features, KEY_SHADER_UNIFORM_TEXEL_BUFFER_ARRAY_DYNAMIC_INDEXING); 898 emitBoolean(store, vulkan12Features, KEY_SHADER_STORAGE_TEXEL_BUFFER_ARRAY_DYNAMIC_INDEXING); 899 emitBoolean(store, vulkan12Features, KEY_SHADER_UNIFORM_BUFFER_ARRAY_NON_UNIFORM_INDEXING); 900 emitBoolean(store, vulkan12Features, KEY_SHADER_SAMPLED_IMAGE_ARRAY_NON_UNIFORM_INDEXING); 901 emitBoolean(store, vulkan12Features, KEY_SHADER_STORAGE_BUFFER_ARRAY_NON_UNIFORM_INDEXING); 902 emitBoolean(store, vulkan12Features, KEY_SHADER_STORAGE_IMAGE_ARRAY_NON_UNIFORM_INDEXING); 903 emitBoolean(store, vulkan12Features, KEY_SHADER_INPUT_ATTACHMENT_ARRAY_NON_UNIFORM_INDEXING); 904 emitBoolean(store, vulkan12Features, KEY_SHADER_UNIFORM_TEXEL_BUFFER_ARRAY_NON_UNIFORM_INDEXING); 905 emitBoolean(store, vulkan12Features, KEY_SHADER_STORAGE_TEXEL_BUFFER_ARRAY_NON_UNIFORM_INDEXING); 906 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_BINDING_UNIFORM_BUFFER_UPDATE_AFTER_BIND); 907 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_BINDING_SAMPLED_IMAGE_UPDATE_AFTER_BIND); 908 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_BINDING_STORAGE_IMAGE_UPDATE_AFTER_BIND); 909 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_BINDING_STORAGE_BUFFER_UPDATE_AFTER_BIND); 910 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_BINDING_UNIFORM_TEXEL_BUFFER_UPDATE_AFTER_BIND); 911 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_BINDING_STORAGE_TEXEL_BUFFER_UPDATE_AFTER_BIND); 912 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING); 913 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_BINDING_PARTIALLY_BOUND); 914 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT); 915 emitBoolean(store, vulkan12Features, KEY_RUNTIME_DESCRIPTOR_ARRAY); 916 emitBoolean(store, vulkan12Features, KEY_SAMPLER_FILTER_MINMAX); 917 emitBoolean(store, vulkan12Features, KEY_SCALAR_BLOCK_LAYOUT); 918 emitBoolean(store, vulkan12Features, KEY_IMAGELESS_FRAMEBUFFER); 919 emitBoolean(store, vulkan12Features, KEY_UNIFORM_BUFFER_STANDARD_LAYOUT); 920 emitBoolean(store, vulkan12Features, KEY_SHADER_SUBGROUP_EXTENDED_TYPES); 921 emitBoolean(store, vulkan12Features, KEY_SEPARATE_DEPTH_STENCIL_LAYOUTS); 922 emitBoolean(store, vulkan12Features, KEY_HOST_QUERY_RESET); 923 emitBoolean(store, vulkan12Features, KEY_TIMELINE_SEMAPHORE); 924 emitBoolean(store, vulkan12Features, KEY_BUFFER_DEVICE_ADDRESS); 925 emitBoolean(store, vulkan12Features, KEY_BUFFER_DEVICE_ADDRESS_CAPTURE_REPLAY); 926 emitBoolean(store, vulkan12Features, KEY_BUFFER_DEVICE_ADDRESS_MULTI_DEVICE); 927 emitBoolean(store, vulkan12Features, KEY_VULKAN_MEMORY_MODEL); 928 emitBoolean(store, vulkan12Features, KEY_VULKAN_MEMORY_MODEL_DEVICE_SCOPE); 929 emitBoolean(store, vulkan12Features, KEY_VULKAN_MEMORY_MODEL_AVAILABILITY_VISIBILITY_CHAINS); 930 emitBoolean(store, vulkan12Features, KEY_SHADER_OUTPUT_VIEWPORT_INDEX); 931 emitBoolean(store, vulkan12Features, KEY_SHADER_OUTPUT_LAYER); 932 // subgroupBroadcastDynamicId was erroneously left out of vkjson reporting in Android T 933 // and later added in U, so we need to explicitly check if the feature is reported 934 if (vulkan12Features.has(KEY_SUBGROUP_BROADCAST_DYNAMIC_ID)) { 935 emitBoolean(store, vulkan12Features, KEY_SUBGROUP_BROADCAST_DYNAMIC_ID); 936 } 937 } 938 store.endGroup(); 939 } 940 941 if (properties.getLong(KEY_API_VERSION) >= VK_API_VERSION_1_3) { 942 JSONObject core13 = device.getJSONObject(KEY_CORE13); 943 JSONObject vulkan13Features = core13.getJSONObject(KEY_FEATURES); 944 store.startGroup(convertName(KEY_VULKAN_13_FEATURES)); 945 { 946 emitBoolean(store, vulkan13Features, KEY_ROBUST_IMAGE_ACCESS); 947 emitBoolean(store, vulkan13Features, KEY_INLINE_UNIFORM_BLOCK); 948 emitBoolean(store, vulkan13Features, KEY_DESCRIPTOR_BINDING_INLINE_UNIFORM_BLOCK_UPDATE_AFTER_BIND); 949 emitBoolean(store, vulkan13Features, KEY_PIPELINE_CREATION_CACHE_CONTROL); 950 emitBoolean(store, vulkan13Features, KEY_PRIVATE_DATA); 951 emitBoolean(store, vulkan13Features, KEY_SHADER_DEMOTE_TO_HELPER_INVOCATION); 952 emitBoolean(store, vulkan13Features, KEY_SHADER_TERMINATE_INVOCATION); 953 emitBoolean(store, vulkan13Features, KEY_SUBGROUP_SIZE_CONTROL); 954 emitBoolean(store, vulkan13Features, KEY_COMPUTE_FULL_SUBGROUPS); 955 emitBoolean(store, vulkan13Features, KEY_SYNCHRONIZATION2); 956 emitBoolean(store, vulkan13Features, KEY_TEXTURE_COMPRESSION_ASTC_HDR); 957 emitBoolean(store, vulkan13Features, KEY_SHADER_ZERO_INITIALIZE_WORKGROUP_MEMORY); 958 emitBoolean(store, vulkan13Features, KEY_DYNAMIC_RENDERING); 959 emitBoolean(store, vulkan13Features, KEY_SHADER_INTEGER_DOT_PRODUCT); 960 emitBoolean(store, vulkan13Features, KEY_MAINTENANCE4); 961 } 962 store.endGroup(); 963 } 964 } 965 store.endGroup(); 966 967 JSONObject memory = device.getJSONObject(KEY_MEMORY); 968 store.startGroup(convertName(KEY_MEMORY)); 969 { 970 emitLong(store, memory, KEY_MEMORY_TYPE_COUNT); 971 JSONArray memoryTypes = memory.getJSONArray(KEY_MEMORY_TYPES); 972 store.startArray(convertName(KEY_MEMORY_TYPES)); 973 for (int memoryTypeIdx = 0; memoryTypeIdx < memoryTypes.length(); 974 memoryTypeIdx++) { 975 JSONObject memoryType = memoryTypes.getJSONObject(memoryTypeIdx); 976 store.startGroup(); 977 { 978 emitLong(store, memoryType, KEY_PROPERTY_FLAGS); 979 emitLong(store, memoryType, KEY_HEAP_INDEX); 980 } 981 store.endGroup(); 982 } 983 store.endArray(); 984 985 emitLong(store, memory, KEY_MEMORY_HEAP_COUNT); 986 JSONArray memoryHeaps = memory.getJSONArray(KEY_MEMORY_HEAPS); 987 store.startArray(convertName(KEY_MEMORY_HEAPS)); 988 for (int memoryHeapIdx = 0; memoryHeapIdx < memoryHeaps.length(); 989 memoryHeapIdx++) { 990 JSONObject memoryHeap = memoryHeaps.getJSONObject(memoryHeapIdx); 991 store.startGroup(); 992 { 993 emitString(store, memoryHeap, KEY_SIZE); 994 emitLong(store, memoryHeap, KEY_FLAGS); 995 } 996 store.endGroup(); 997 } 998 store.endArray(); 999 } 1000 store.endGroup(); 1001 1002 JSONArray queues = device.getJSONArray(KEY_QUEUES); 1003 store.startArray(convertName(KEY_QUEUES)); 1004 for (int queueIdx = 0; queueIdx < queues.length(); queueIdx++) { 1005 JSONObject queue = queues.getJSONObject(queueIdx); 1006 store.startGroup(); 1007 { 1008 emitLong(store, queue, KEY_QUEUE_FLAGS); 1009 emitLong(store, queue, KEY_QUEUE_COUNT); 1010 emitLong(store, queue, KEY_TIMESTAMP_VALID_BITS); 1011 JSONObject extent = queue.getJSONObject(KEY_MIN_IMAGE_TRANSFER_GRANULARITY); 1012 store.startGroup(convertName(KEY_MIN_IMAGE_TRANSFER_GRANULARITY)); 1013 { 1014 emitLong(store, extent, KEY_WIDTH); 1015 emitLong(store, extent, KEY_HEIGHT); 1016 emitLong(store, extent, KEY_DEPTH); 1017 } 1018 store.endGroup(); 1019 } 1020 store.endGroup(); 1021 } 1022 store.endArray(); 1023 1024 // Skip layers for now. VkJSON doesn't yet include device layer extensions, so 1025 // this is entirely redundant with the instance extension information. 1026 // emitLayers(store, device); 1027 store.startArray(convertName(KEY_LAYERS)); 1028 store.endArray(); 1029 1030 emitExtensions(store, device); 1031 1032 JSONArray formats = device.getJSONArray(KEY_FORMATS); 1033 // Note: Earlier code used field named 'formats' with different data structure. 1034 // In order to have the mix of old and new data, we cannot reuse that name. 1035 store.startArray("supported_formats"); 1036 for (int formatIdx = 0; formatIdx < formats.length(); formatIdx++) { 1037 JSONArray formatPair = formats.getJSONArray(formatIdx); 1038 JSONObject formatProperties = formatPair.getJSONObject(1); 1039 store.startGroup(); 1040 { 1041 store.addResult("format", (long)formatPair.getInt(0)); 1042 emitLong(store, formatProperties, KEY_LINEAR_TILING_FEATURES); 1043 emitLong(store, formatProperties, KEY_OPTIMAL_TILING_FEATURES); 1044 emitLong(store, formatProperties, KEY_BUFFER_FEATURES); 1045 } 1046 store.endGroup(); 1047 } 1048 store.endArray(); 1049 1050 if (properties.getLong(KEY_API_VERSION) >= VK_API_VERSION_1_1) { 1051 JSONObject subgroupProperties = device.getJSONObject(KEY_SUBGROUP_PROPERTIES); 1052 store.startGroup(convertName(KEY_SUBGROUP_PROPERTIES)); 1053 { 1054 emitLong(store, subgroupProperties, KEY_SUBGROUP_SIZE); 1055 emitLong(store, subgroupProperties, KEY_SUPPORTED_STAGES); 1056 emitLong(store, subgroupProperties, KEY_SUPPORTED_OPERATIONS); 1057 emitBoolean(store, subgroupProperties, KEY_QUAD_OPERATIONS_IN_ALL_STAGES); 1058 } 1059 store.endGroup(); 1060 1061 JSONObject pointClippingProperties = device.getJSONObject(KEY_POINT_CLIPPING_PROPERTIES); 1062 store.startGroup(convertName(KEY_POINT_CLIPPING_PROPERTIES)); 1063 { 1064 emitLong(store, pointClippingProperties, KEY_POINT_CLIPPING_BEHAVIOR); 1065 } 1066 store.endGroup(); 1067 1068 JSONObject multiviewProperties = device.getJSONObject(KEY_MULTIVIEW_PROPERTIES); 1069 store.startGroup(convertName(KEY_MULTIVIEW_PROPERTIES)); 1070 { 1071 emitLong(store, multiviewProperties, KEY_MAX_MULTIVIEW_VIEW_COUNT); 1072 emitLong(store, multiviewProperties, KEY_MAX_MULTIVIEW_INSTANCE_INDEX); 1073 } 1074 store.endGroup(); 1075 1076 JSONObject idProperties = device.getJSONObject(KEY_ID_PROPERTIES); 1077 store.startGroup(convertName(KEY_ID_PROPERTIES)); 1078 { 1079 emitLongArray(store, idProperties, KEY_DEVICE_UUID); 1080 emitLongArray(store, idProperties, KEY_DRIVER_UUID); 1081 emitLongArray(store, idProperties, KEY_DEVICE_LUID); 1082 emitLong(store, idProperties, KEY_DEVICE_NODE_MASK); 1083 emitBoolean(store, idProperties, KEY_DEVICE_LUID_VALID); 1084 } 1085 store.endGroup(); 1086 1087 JSONObject maintenance3Properties = device.getJSONObject(KEY_MAINTENANCE_3_PROPERTIES); 1088 store.startGroup(convertName(KEY_MAINTENANCE_3_PROPERTIES)); 1089 { 1090 emitLong(store, maintenance3Properties, KEY_MAX_PER_SET_DESCRIPTORS); 1091 emitString(store, maintenance3Properties, KEY_MAX_MEMORY_ALLOCATION_SIZE); 1092 } 1093 store.endGroup(); 1094 1095 JSONObject bit16StorageFeatures = device.getJSONObject(KEY_16BIT_STORAGE_FEATURES); 1096 store.startGroup(convertName(KEY_16BIT_STORAGE_FEATURES)); 1097 { 1098 emitBoolean(store, bit16StorageFeatures, KEY_STORAGE_BUFFER_16BIT_ACCESS); 1099 emitBoolean(store, bit16StorageFeatures, KEY_UNIFORM_AND_STORAGE_BUFFER_16BIT_ACCESS); 1100 emitBoolean(store, bit16StorageFeatures, KEY_STORAGE_PUSH_CONSTANT_16); 1101 emitBoolean(store, bit16StorageFeatures, KEY_STORAGE_INPUT_OUTPUT_16); 1102 } 1103 store.endGroup(); 1104 1105 JSONObject multiviewFeatures = device.getJSONObject(KEY_MULTIVIEW_FEATURES); 1106 store.startGroup(convertName(KEY_MULTIVIEW_FEATURES)); 1107 { 1108 emitBoolean(store, multiviewFeatures, KEY_MULTIVIEW); 1109 emitBoolean(store, multiviewFeatures, KEY_MULTIVIEW_GEOMETRY_SHADER); 1110 emitBoolean(store, multiviewFeatures, KEY_MULTIVIEW_TESSELLATION_SHADER); 1111 } 1112 store.endGroup(); 1113 1114 JSONObject variablePointerFeatures = device.getJSONObject(KEY_VARIABLE_POINTER_FEATURES); 1115 store.startGroup(convertName(KEY_VARIABLE_POINTER_FEATURES)); 1116 { 1117 emitBoolean(store, variablePointerFeatures, KEY_VARIABLE_POINTERS_STORAGE_BUFFER); 1118 emitBoolean(store, variablePointerFeatures, KEY_VARIABLE_POINTERS); 1119 } 1120 store.endGroup(); 1121 1122 JSONObject protectedMemoryFeatures = device.getJSONObject(KEY_PROTECTED_MEMORY_FEATURES); 1123 store.startGroup(convertName(KEY_PROTECTED_MEMORY_FEATURES)); 1124 { 1125 emitBoolean(store, protectedMemoryFeatures, KEY_PROTECTED_MEMORY); 1126 } 1127 store.endGroup(); 1128 1129 JSONObject samplerYcbcrConversionFeatures = device.getJSONObject(KEY_SAMPLER_YCBCR_CONVERSION_FEATURES); 1130 store.startGroup(convertName(KEY_SAMPLER_YCBCR_CONVERSION_FEATURES)); 1131 { 1132 emitBoolean(store, samplerYcbcrConversionFeatures, KEY_SAMPLER_YCBCR_CONVERSION); 1133 } 1134 store.endGroup(); 1135 1136 JSONObject shaderDrawParameterFeatures = device.getJSONObject(KEY_SHADER_DRAW_PARAMETER_FEATURES); 1137 store.startGroup(convertName(KEY_SHADER_DRAW_PARAMETER_FEATURES)); 1138 { 1139 emitBoolean(store, shaderDrawParameterFeatures, KEY_SHADER_DRAW_PARAMETERS); 1140 } 1141 store.endGroup(); 1142 1143 JSONArray externalFences = device.getJSONArray(KEY_EXTERNAL_FENCE_PROPERTIES); 1144 store.startArray(convertName(KEY_EXTERNAL_FENCE_PROPERTIES)); 1145 for (int idx = 0; idx < externalFences.length(); ++idx) { 1146 JSONArray externalFencePair = externalFences.getJSONArray(idx); 1147 JSONObject externalFenceProperties = externalFencePair.getJSONObject(1); 1148 store.startGroup(); 1149 { 1150 store.addResult("handle_type", externalFencePair.getLong(0)); 1151 emitLong(store, externalFenceProperties, KEY_EXPORT_FROM_IMPORTED_HANDLE_TYPES); 1152 emitLong(store, externalFenceProperties, KEY_COMPATIBLE_HANDLE_TYPES); 1153 emitLong(store, externalFenceProperties, KEY_EXTERNAL_FENCE_FEATURES); 1154 } 1155 store.endGroup(); 1156 } 1157 store.endArray(); 1158 1159 JSONArray externalSemaphores = device.getJSONArray(KEY_EXTERNAL_SEMAPHORE_PROPERTIES); 1160 store.startArray(convertName(KEY_EXTERNAL_SEMAPHORE_PROPERTIES)); 1161 for (int idx = 0; idx < externalSemaphores.length(); ++idx) { 1162 JSONArray externalSemaphorePair = externalSemaphores.getJSONArray(idx); 1163 JSONObject externalSemaphoreProperties = externalSemaphorePair.getJSONObject(1); 1164 store.startGroup(); 1165 { 1166 store.addResult("handle_type", externalSemaphorePair.getLong(0)); 1167 emitLong(store, externalSemaphoreProperties, KEY_EXPORT_FROM_IMPORTED_HANDLE_TYPES); 1168 emitLong(store, externalSemaphoreProperties, KEY_COMPATIBLE_HANDLE_TYPES); 1169 emitLong(store, externalSemaphoreProperties, KEY_EXTERNAL_SEMAPHORE_FEATURES); 1170 } 1171 store.endGroup(); 1172 } 1173 store.endArray(); 1174 } 1175 } 1176 store.endGroup(); 1177 } 1178 store.endArray(); 1179 } 1180 emitLayers(DeviceInfoStore store, JSONObject parent)1181 private static void emitLayers(DeviceInfoStore store, JSONObject parent) 1182 throws Exception { 1183 JSONArray layers = parent.getJSONArray(KEY_LAYERS); 1184 store.startArray(convertName(KEY_LAYERS)); 1185 for (int i = 0; i < layers.length(); i++) { 1186 JSONObject layer = layers.getJSONObject(i); 1187 store.startGroup(); 1188 { 1189 JSONObject properties = layer.getJSONObject(KEY_PROPERTIES); 1190 store.startGroup(convertName(KEY_PROPERTIES)); 1191 { 1192 emitString(store, properties, KEY_LAYER_NAME); 1193 emitLong(store, properties, KEY_SPEC_VERSION); 1194 emitLong(store, properties, KEY_IMPLEMENTATION_VERSION); 1195 emitString(store, properties, KEY_DESCRIPTION); 1196 } 1197 store.endGroup(); 1198 emitExtensions(store, layer); 1199 } 1200 store.endGroup(); 1201 } 1202 store.endArray(); 1203 } 1204 emitInstanceApiVersion(DeviceInfoStore store, JSONObject parent)1205 private static void emitInstanceApiVersion(DeviceInfoStore store, JSONObject parent) 1206 throws Exception { 1207 store.addResult(convertName(KEY_INSTANCE_API_VERSION), parent.getLong(KEY_API_VERSION)); 1208 } 1209 emitDriverPropertiesKHR(DeviceInfoStore store, JSONObject parent)1210 private static void emitDriverPropertiesKHR(DeviceInfoStore store, JSONObject parent) 1211 throws Exception { 1212 try { 1213 JSONObject extDriverProperties = parent.getJSONObject(KEY_VK_KHR_DRIVER_PROPERTIES); 1214 try { 1215 store.startGroup(convertName(KEY_VK_KHR_DRIVER_PROPERTIES)); 1216 { 1217 JSONObject driverPropertiesKHR = extDriverProperties.getJSONObject(KEY_DRIVER_PROPERTIES_KHR); 1218 store.startGroup(convertName(KEY_DRIVER_PROPERTIES_KHR)); 1219 { 1220 emitLong(store, driverPropertiesKHR, KEY_DRIVER_ID); 1221 emitString(store, driverPropertiesKHR, KEY_DRIVER_NAME); 1222 emitString(store, driverPropertiesKHR, KEY_DRIVER_INFO); 1223 1224 JSONObject conformanceVersion = driverPropertiesKHR.getJSONObject(KEY_CONFORMANCE_VERSION); 1225 store.startGroup(convertName(KEY_CONFORMANCE_VERSION)); 1226 { 1227 emitLong(store, conformanceVersion, KEY_MAJOR); 1228 emitLong(store, conformanceVersion, KEY_MINOR); 1229 emitLong(store, conformanceVersion, KEY_SUBMINOR); 1230 emitLong(store, conformanceVersion, KEY_PATCH); 1231 } 1232 store.endGroup(); 1233 } 1234 store.endGroup(); 1235 } 1236 store.endGroup(); 1237 } catch (JSONException e) { 1238 e.printStackTrace(); 1239 throw new RuntimeException(e); 1240 } 1241 } catch (JSONException ignored) { 1242 } 1243 } 1244 emitVariablePointerFeaturesKHR(DeviceInfoStore store, JSONObject parent)1245 private static void emitVariablePointerFeaturesKHR(DeviceInfoStore store, JSONObject parent) 1246 throws Exception { 1247 try { 1248 JSONObject extVariablePointerFeatures = parent.getJSONObject(KEY_VK_KHR_VARIABLE_POINTERS); 1249 try { 1250 store.startGroup(convertName(KEY_VK_KHR_VARIABLE_POINTERS)); 1251 { 1252 JSONObject variablePointerFeaturesKHR = extVariablePointerFeatures.getJSONObject(KEY_VARIABLE_POINTER_FEATURES_KHR); 1253 store.startGroup(convertName(KEY_VARIABLE_POINTER_FEATURES_KHR)); 1254 { 1255 emitBoolean(store, variablePointerFeaturesKHR, KEY_VARIABLE_POINTERS_STORAGE_BUFFER); 1256 emitBoolean(store, variablePointerFeaturesKHR, KEY_VARIABLE_POINTERS); 1257 } 1258 store.endGroup(); 1259 } 1260 store.endGroup(); 1261 } catch (JSONException e) { 1262 e.printStackTrace(); 1263 throw new RuntimeException(e); 1264 } 1265 } catch (JSONException ignored) { 1266 } 1267 } 1268 emitExtension(String key, DeviceInfoStore store, JSONObject parent)1269 private static void emitExtension(String key, DeviceInfoStore store, JSONObject parent) 1270 throws Exception { 1271 if (!extensionNameToEnum.containsKey(key)) return; 1272 switch (extensionNameToEnum.get(key)) { 1273 case ENUM_VK_KHR_VARIABLE_POINTERS: 1274 emitVariablePointerFeaturesKHR(store, parent); 1275 break; 1276 case ENUM_VK_KHR_DRIVER_PROPERTIES: 1277 emitDriverPropertiesKHR(store, parent); 1278 break; 1279 } 1280 } 1281 emitExtensions(DeviceInfoStore store, JSONObject parent)1282 private static void emitExtensions(DeviceInfoStore store, JSONObject parent) 1283 throws Exception { 1284 JSONArray extensions = parent.getJSONArray(KEY_EXTENSIONS); 1285 store.startArray(convertName(KEY_EXTENSIONS)); 1286 for (int i = 0; i < extensions.length(); i++) { 1287 JSONObject extension = extensions.getJSONObject(i); 1288 store.startGroup(); 1289 { 1290 emitString(store, extension, KEY_EXTENSION_NAME); 1291 emitLong(store, extension, KEY_SPEC_VERSION); 1292 } 1293 store.endGroup(); 1294 } 1295 store.endArray(); 1296 1297 for (int i = 0; i < extensions.length(); i++) { 1298 JSONObject extension = extensions.getJSONObject(i); 1299 String key = extension.getString(KEY_EXTENSION_NAME); 1300 emitExtension(key, store, parent); 1301 } 1302 } 1303 emitBoolean(DeviceInfoStore store, JSONObject parent, String name)1304 private static void emitBoolean(DeviceInfoStore store, JSONObject parent, String name) 1305 throws Exception { 1306 store.addResult(convertName(name), parent.getInt(name) != 0 ? true : false); 1307 } 1308 emitLong(DeviceInfoStore store, JSONObject parent, String name)1309 private static void emitLong(DeviceInfoStore store, JSONObject parent, String name) 1310 throws Exception { 1311 store.addResult(convertName(name), parent.getLong(name)); 1312 } 1313 emitDouble(DeviceInfoStore store, JSONObject parent, String name)1314 private static void emitDouble(DeviceInfoStore store, JSONObject parent, String name) 1315 throws Exception { 1316 store.addResult(convertName(name), parent.getDouble(name)); 1317 } 1318 emitString(DeviceInfoStore store, JSONObject parent, String name)1319 private static void emitString(DeviceInfoStore store, JSONObject parent, String name) 1320 throws Exception { 1321 store.addResult(convertName(name), parent.getString(name)); 1322 } 1323 emitLongArray(DeviceInfoStore store, JSONObject parent, String name)1324 private static void emitLongArray(DeviceInfoStore store, JSONObject parent, String name) 1325 throws Exception { 1326 JSONArray jsonArray = parent.getJSONArray(name); 1327 long[] array = new long[jsonArray.length()]; 1328 for (int i = 0; i < jsonArray.length(); i++) { 1329 array[i] = jsonArray.getLong(i); 1330 } 1331 store.addArrayResult(convertName(name), array); 1332 } 1333 emitDoubleArray(DeviceInfoStore store, JSONObject parent, String name)1334 private static void emitDoubleArray(DeviceInfoStore store, JSONObject parent, String name) 1335 throws Exception { 1336 JSONArray jsonArray = parent.getJSONArray(name); 1337 double[] array = new double[jsonArray.length()]; 1338 for (int i = 0; i < jsonArray.length(); i++) { 1339 array[i] = jsonArray.getDouble(i); 1340 } 1341 store.addArrayResult(convertName(name), array); 1342 } 1343 convertName(String name)1344 private static String convertName(String name) { 1345 // This translation could be done algorithmically, but in this case being able to 1346 // code-search for both the original and converted names is more important. 1347 switch (name) { 1348 case KEY_16BIT_STORAGE_FEATURES: return "bit16_storage_features"; 1349 case KEY_ALPHA_TO_ONE: return "alpha_to_one"; 1350 case KEY_API_VERSION: return "api_version"; 1351 case KEY_BUFFER_DEVICE_ADDRESS: return "buffer_device_address"; 1352 case KEY_BUFFER_DEVICE_ADDRESS_CAPTURE_REPLAY: return "buffer_device_address_capture_replay"; 1353 case KEY_BUFFER_DEVICE_ADDRESS_MULTI_DEVICE: return "buffer_device_address_multi_device"; 1354 case KEY_BUFFER_FEATURES: return "buffer_features"; 1355 case KEY_BUFFER_IMAGE_GRANULARITY: return "buffer_image_granularity"; 1356 case KEY_COMPATIBLE_HANDLE_TYPES: return "compatible_handle_types"; 1357 case KEY_COMPUTE_FULL_SUBGROUPS: return "compute_full_subgroups"; 1358 case KEY_CONFORMANCE_VERSION: return "conformance_version"; 1359 case KEY_DENORM_BEHAVIOR_INDEPENDENCE: return "denorm_behavior_independence"; 1360 case KEY_DEPTH: return "depth"; 1361 case KEY_DEPTH_BIAS_CLAMP: return "depth_bias_clamp"; 1362 case KEY_DEPTH_BOUNDS: return "depth_bounds"; 1363 case KEY_DEPTH_CLAMP: return "depth_clamp"; 1364 case KEY_DESCRIPTION: return "description"; 1365 case KEY_DESCRIPTOR_BINDING_INLINE_UNIFORM_BLOCK_UPDATE_AFTER_BIND: return "descriptor_binding_inline_uniform_block_update_after_bind"; 1366 case KEY_DESCRIPTOR_BINDING_PARTIALLY_BOUND: return "descriptor_binding_partially_bound"; 1367 case KEY_DESCRIPTOR_BINDING_SAMPLED_IMAGE_UPDATE_AFTER_BIND: return "descriptor_binding_sampled_image_update_after_bind"; 1368 case KEY_DESCRIPTOR_BINDING_STORAGE_BUFFER_UPDATE_AFTER_BIND: return "descriptor_binding_storage_buffer_update_after_bind"; 1369 case KEY_DESCRIPTOR_BINDING_STORAGE_IMAGE_UPDATE_AFTER_BIND: return "descriptor_binding_storage_image_update_after_bind"; 1370 case KEY_DESCRIPTOR_BINDING_STORAGE_TEXEL_BUFFER_UPDATE_AFTER_BIND: return "descriptor_binding_storage_texel_buffer_update_after_bind"; 1371 case KEY_DESCRIPTOR_BINDING_UNIFORM_BUFFER_UPDATE_AFTER_BIND: return "descriptor_binding_uniform_buffer_update_after_bind"; 1372 case KEY_DESCRIPTOR_BINDING_UNIFORM_TEXEL_BUFFER_UPDATE_AFTER_BIND: return "descriptor_binding_uniform_texel_buffer_update_after_bind"; 1373 case KEY_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING: return "descriptor_binding_update_unused_while_pending"; 1374 case KEY_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT: return "descriptor_binding_variable_descriptor_count"; 1375 case KEY_DESCRIPTOR_INDEXING: return "descriptor_indexing"; 1376 case KEY_DEVICES: return "devices"; 1377 case KEY_DEVICE_GROUPS: return "device_groups"; 1378 case KEY_DEVICE_ID: return "device_id"; 1379 case KEY_DEVICE_LUID: return "device_luid"; 1380 case KEY_DEVICE_LUID_VALID: return "device_luid_valid"; 1381 case KEY_DEVICE_NAME: return "device_name"; 1382 case KEY_DEVICE_NODE_MASK: return "device_node_mask"; 1383 case KEY_DEVICE_TYPE: return "device_type"; 1384 case KEY_DEVICE_UUID: return "device_uuid"; 1385 case KEY_DISCRETE_QUEUE_PRIORITIES: return "discrete_queue_priorities"; 1386 case KEY_DRAW_INDIRECT_COUNT: return "draw_indirect_count"; 1387 case KEY_DRAW_INDIRECT_FIRST_INSTANCE: return "draw_indirect_first_instance"; 1388 case KEY_DRIVER_ID: return "driver_id"; 1389 case KEY_DRIVER_INFO: return "driver_info"; 1390 case KEY_DRIVER_NAME: return "driver_name"; 1391 case KEY_DRIVER_PROPERTIES_KHR: return "driver_properties_khr"; 1392 case KEY_DRIVER_UUID: return "driver_uuid"; 1393 case KEY_DRIVER_VERSION: return "driver_version"; 1394 case KEY_DUAL_SRC_BLEND: return "dual_src_blend"; 1395 case KEY_DYNAMIC_RENDERING: return "dynamic_rendering"; 1396 case KEY_EXPORT_FROM_IMPORTED_HANDLE_TYPES: return "export_from_imported_handle_types"; 1397 case KEY_EXTENSIONS: return "extensions"; 1398 case KEY_EXTENSION_NAME: return "extension_name"; 1399 case KEY_EXTERNAL_FENCE_FEATURES: return "external_fence_features"; 1400 case KEY_EXTERNAL_FENCE_PROPERTIES: return "external_fence_properties"; 1401 case KEY_EXTERNAL_SEMAPHORE_FEATURES: return "external_semaphore_features"; 1402 case KEY_EXTERNAL_SEMAPHORE_PROPERTIES: return "external_semaphore_properties"; 1403 case KEY_FEATURES: return "features"; 1404 case KEY_FILL_MODE_NON_SOLID: return "fill_mode_non_solid"; 1405 case KEY_FILTER_MINMAX_IMAGE_COMPONENT_MAPPING: return "filter_minmax_image_component_mapping"; 1406 case KEY_FILTER_MINMAX_SINGLE_COMPONENT_FORMATS: return "filter_minmax_single_component_formats"; 1407 case KEY_FLAGS: return "flags"; 1408 case KEY_FORMATS: return "formats"; 1409 case KEY_FRAGMENT_STORES_AND_ATOMICS: return "fragment_stores_and_atomics"; 1410 case KEY_FRAMEBUFFER_COLOR_SAMPLE_COUNTS: return "framebuffer_color_sample_counts"; 1411 case KEY_FRAMEBUFFER_DEPTH_SAMPLE_COUNTS: return "framebuffer_depth_sample_counts"; 1412 case KEY_FRAMEBUFFER_INTEGER_COLOR_SAMPLE_COUNTS: return "framebuffer_integer_color_sample_counts"; 1413 case KEY_FRAMEBUFFER_NO_ATTACHMENTS_SAMPLE_COUNTS: return "framebuffer_no_attachments_sample_counts"; 1414 case KEY_FRAMEBUFFER_STENCIL_SAMPLE_COUNTS: return "framebuffer_stencil_sample_counts"; 1415 case KEY_FULL_DRAW_INDEX_UINT32: return "full_draw_index_uint32"; 1416 case KEY_GEOMETRY_SHADER: return "geometry_shader"; 1417 case KEY_HEAP_INDEX: return "heap_index"; 1418 case KEY_HEIGHT: return "height"; 1419 case KEY_HOST_QUERY_RESET: return "host_query_reset"; 1420 case KEY_ID_PROPERTIES: return "id_properties"; 1421 case KEY_IMAGELESS_FRAMEBUFFER: return "imageless_framebuffer"; 1422 case KEY_IMAGE_CUBE_ARRAY: return "image_cube_array"; 1423 case KEY_IMPLEMENTATION_VERSION: return "implementation_version"; 1424 case KEY_INDEPENDENT_BLEND: return "independent_blend"; 1425 case KEY_INDEPENDENT_RESOLVE: return "independent_resolve"; 1426 case KEY_INDEPENDENT_RESOLVE_NONE: return "independent_resolve_none"; 1427 case KEY_INHERITED_QUERIES: return "inherited_queries"; 1428 case KEY_INLINE_UNIFORM_BLOCK: return "inline_uniform_block"; 1429 case KEY_INSTANCE_API_VERSION: return "instance_api_version"; 1430 case KEY_INTEGER_DOT_PRODUCT_16BIT_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_16bit_mixed_signedness_accelerated"; 1431 case KEY_INTEGER_DOT_PRODUCT_16BIT_SIGNED_ACCELERATED: return "integer_dot_product_16bit_signed_accelerated"; 1432 case KEY_INTEGER_DOT_PRODUCT_16BIT_UNSIGNED_ACCELERATED: return "integer_dot_product_16bit_unsigned_accelerated"; 1433 case KEY_INTEGER_DOT_PRODUCT_32BIT_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_32bit_mixed_signedness_accelerated"; 1434 case KEY_INTEGER_DOT_PRODUCT_32BIT_SIGNED_ACCELERATED: return "integer_dot_product_32bit_signed_accelerated"; 1435 case KEY_INTEGER_DOT_PRODUCT_32BIT_UNSIGNED_ACCELERATED: return "integer_dot_product_32bit_unsigned_accelerated"; 1436 case KEY_INTEGER_DOT_PRODUCT_4X8BIT_PACKED_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_4x8bit_packed_mixed_signedness_accelerated"; 1437 case KEY_INTEGER_DOT_PRODUCT_4X8BIT_PACKED_SIGNED_ACCELERATED: return "integer_dot_product_4x8bit_packed_signed_accelerated"; 1438 case KEY_INTEGER_DOT_PRODUCT_4X8BIT_PACKED_UNSIGNED_ACCELERATED: return "integer_dot_product_4x8bit_packed_unsigned_accelerated"; 1439 case KEY_INTEGER_DOT_PRODUCT_64BIT_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_64bit_mixed_signedness_accelerated"; 1440 case KEY_INTEGER_DOT_PRODUCT_64BIT_SIGNED_ACCELERATED: return "integer_dot_product_64bit_signed_accelerated"; 1441 case KEY_INTEGER_DOT_PRODUCT_64BIT_UNSIGNED_ACCELERATED: return "integer_dot_product_64bit_unsigned_accelerated"; 1442 case KEY_INTEGER_DOT_PRODUCT_8BIT_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_8bit_mixed_signedness_accelerated"; 1443 case KEY_INTEGER_DOT_PRODUCT_8BIT_SIGNED_ACCELERATED: return "integer_dot_product_8bit_signed_accelerated"; 1444 case KEY_INTEGER_DOT_PRODUCT_8BIT_UNSIGNED_ACCELERATED: return "integer_dot_product_8bit_unsigned_accelerated"; 1445 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_16BIT_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_accumulating_saturating_16bit_mixed_signedness_accelerated"; 1446 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_16BIT_SIGNED_ACCELERATED: return "integer_dot_product_accumulating_saturating_16bit_signed_accelerated"; 1447 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_16BIT_UNSIGNED_ACCELERATED: return "integer_dot_product_accumulating_saturating_16bit_unsigned_accelerated"; 1448 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_32BIT_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_accumulating_saturating_32bit_mixed_signedness_accelerated"; 1449 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_32BIT_SIGNED_ACCELERATED: return "integer_dot_product_accumulating_saturating_32bit_signed_accelerated"; 1450 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_32BIT_UNSIGNED_ACCELERATED: return "integer_dot_product_accumulating_saturating_32bit_unsigned_accelerated"; 1451 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_4X8BIT_PACKED_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_accumulating_saturating_4x8bit_packed_mixed_signedness_accelerated"; 1452 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_4X8BIT_PACKED_SIGNED_ACCELERATED: return "integer_dot_product_accumulating_saturating_4x8bit_packed_signed_accelerated"; 1453 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_4X8BIT_PACKED_UNSIGNED_ACCELERATED: return "integer_dot_product_accumulating_saturating_4x8bit_packed_unsigned_accelerated"; 1454 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_64BIT_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_accumulating_saturating_64bit_mixed_signedness_accelerated"; 1455 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_64BIT_SIGNEDNESS_ACCELERATED: return "integer_dot_product_accumulating_saturating_64bit_signed_accelerated"; 1456 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_64BIT_UNSIGNED_ACCELERATED: return "integer_dot_product_accumulating_saturating_64bit_unsigned_accelerated"; 1457 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_8BIT_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_accumulating_saturating_8bit_mixed_signedness_accelerated"; 1458 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_8BIT_SIGNED_ACCELERATED: return "integer_dot_product_accumulating_saturating_8bit_signed_accelerated"; 1459 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_8BIT_UNSIGNED_ACCELERATED: return "integer_dot_product_accumulating_saturating_8bit_unsigned_accelerated"; 1460 case KEY_LARGE_POINTS: return "large_points"; 1461 case KEY_LAYERS: return "layers"; 1462 case KEY_LAYER_NAME: return "layer_name"; 1463 case KEY_LIMITS: return "limits"; 1464 case KEY_LINEAR_TILING_FEATURES: return "linear_tiling_features"; 1465 case KEY_LINE_WIDTH_GRANULARITY: return "line_width_granularity"; 1466 case KEY_LINE_WIDTH_RANGE: return "line_width_range"; 1467 case KEY_LOGIC_OP: return "logic_op"; 1468 case KEY_MAINTENANCE4: return "maintenance4"; 1469 case KEY_MAINTENANCE_3_PROPERTIES: return "maintenance_3_properties"; 1470 case KEY_MAJOR: return "major"; 1471 case KEY_MAX_BOUND_DESCRIPTOR_SETS: return "max_bound_descriptor_sets"; 1472 case KEY_MAX_BUFFER_SIZE: return "max_buffer_size"; 1473 case KEY_MAX_CLIP_DISTANCES: return "max_clip_distances"; 1474 case KEY_MAX_COLOR_ATTACHMENTS: return "max_color_attachments"; 1475 case KEY_MAX_COMBINED_CLIP_AND_CULL_DISTANCES: return "max_combined_clip_and_cull_distances"; 1476 case KEY_MAX_COMPUTE_SHARED_MEMORY_SIZE: return "max_compute_shared_memory_size"; 1477 case KEY_MAX_COMPUTE_WORKGROUP_SUBGROUPS: return "max_compute_workgroup_subgroups"; 1478 case KEY_MAX_COMPUTE_WORK_GROUP_COUNT: return "max_compute_work_group_count"; 1479 case KEY_MAX_COMPUTE_WORK_GROUP_INVOCATIONS: return "max_compute_work_group_invocations"; 1480 case KEY_MAX_COMPUTE_WORK_GROUP_SIZE: return "max_compute_work_group_size"; 1481 case KEY_MAX_CULL_DISTANCES: return "max_cull_distances"; 1482 case KEY_MAX_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCKS: return "max_descriptor_set_inline_uniform_blocks"; 1483 case KEY_MAX_DESCRIPTOR_SET_INPUT_ATTACHMENTS: return "max_descriptor_set_input_attachments"; 1484 case KEY_MAX_DESCRIPTOR_SET_SAMPLED_IMAGES: return "max_descriptor_set_sampled_images"; 1485 case KEY_MAX_DESCRIPTOR_SET_SAMPLERS: return "max_descriptor_set_samplers"; 1486 case KEY_MAX_DESCRIPTOR_SET_STORAGE_BUFFERS: return "max_descriptor_set_storage_buffers"; 1487 case KEY_MAX_DESCRIPTOR_SET_STORAGE_BUFFERS_DYNAMIC: return "max_descriptor_set_storage_buffers_dynamic"; 1488 case KEY_MAX_DESCRIPTOR_SET_STORAGE_IMAGES: return "max_descriptor_set_storage_images"; 1489 case KEY_MAX_DESCRIPTOR_SET_UNIFORM_BUFFERS: return "max_descriptor_set_uniform_buffers"; 1490 case KEY_MAX_DESCRIPTOR_SET_UNIFORM_BUFFERS_DYNAMIC: return "max_descriptor_set_uniform_buffers_dynamic"; 1491 case KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_INLINE_UNIFORM_BLOCKS: return "max_descriptor_set_update_after_bind_inline_uniform_blocks"; 1492 case KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_INPUT_ATTACHMENTS: return "max_descriptor_set_update_after_bind_input_attachments"; 1493 case KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_SAMPLED_IMAGES: return "max_descriptor_set_update_after_bind_sampled_images"; 1494 case KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_SAMPLERS: return "max_descriptor_set_update_after_bind_samplers"; 1495 case KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_STORAGE_BUFFERS: return "max_descriptor_set_update_after_bind_storage_buffers"; 1496 case KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_STORAGE_BUFFERS_DYNAMIC: return "max_descriptor_set_update_after_bind_storage_buffers_dynamic"; 1497 case KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_STORAGE_IMAGES: return "max_descriptor_set_update_after_bind_storage_images"; 1498 case KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_UNIFORM_BUFFERS: return "max_descriptor_set_update_after_bind_uniform_buffers"; 1499 case KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_UNIFORM_BUFFERS_DYNAMIC: return "max_descriptor_set_update_after_bind_uniform_buffers_dynamic"; 1500 case KEY_MAX_DRAW_INDEXED_INDEX_VALUE: return "max_draw_indexed_index_value"; 1501 case KEY_MAX_DRAW_INDIRECT_COUNT: return "max_draw_indirect_count"; 1502 case KEY_MAX_FRAGMENT_COMBINED_OUTPUT_RESOURCES: return "max_fragment_combined_output_resources"; 1503 case KEY_MAX_FRAGMENT_DUAL_SRC_ATTACHMENTS: return "max_fragment_dual_src_attachments"; 1504 case KEY_MAX_FRAGMENT_INPUT_COMPONENTS: return "max_fragment_input_components"; 1505 case KEY_MAX_FRAGMENT_OUTPUT_ATTACHMENTS: return "max_fragment_output_attachments"; 1506 case KEY_MAX_FRAMEBUFFER_HEIGHT: return "max_framebuffer_height"; 1507 case KEY_MAX_FRAMEBUFFER_LAYERS: return "max_framebuffer_layers"; 1508 case KEY_MAX_FRAMEBUFFER_WIDTH: return "max_framebuffer_width"; 1509 case KEY_MAX_GEOMETRY_INPUT_COMPONENTS: return "max_geometry_input_components"; 1510 case KEY_MAX_GEOMETRY_OUTPUT_COMPONENTS: return "max_geometry_output_components"; 1511 case KEY_MAX_GEOMETRY_OUTPUT_VERTICES: return "max_geometry_output_vertices"; 1512 case KEY_MAX_GEOMETRY_SHADER_INVOCATIONS: return "max_geometry_shader_invocations"; 1513 case KEY_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS: return "max_geometry_total_output_components"; 1514 case KEY_MAX_IMAGE_ARRAY_LAYERS: return "max_image_array_layers"; 1515 case KEY_MAX_IMAGE_DIMENSION_1D: return "max_image_dimension_1d"; 1516 case KEY_MAX_IMAGE_DIMENSION_2D: return "max_image_dimension_2d"; 1517 case KEY_MAX_IMAGE_DIMENSION_3D: return "max_image_dimension_3d"; 1518 case KEY_MAX_IMAGE_DIMENSION_CUBE: return "max_image_dimension_cube"; 1519 case KEY_MAX_INLINE_UNIFORM_BLOCK_SIZE: return "max_inline_uniform_block_size"; 1520 case KEY_MAX_INLINE_UNIFORM_TOTAL_SIZE: return "max_inline_uniform_total_size"; 1521 case KEY_MAX_INTERPOLATION_OFFSET: return "max_interpolation_offset"; 1522 case KEY_MAX_MEMORY_ALLOCATION_COUNT: return "max_memory_allocation_count"; 1523 case KEY_MAX_MEMORY_ALLOCATION_SIZE: return "max_memory_allocation_size"; 1524 case KEY_MAX_MULTIVIEW_INSTANCE_INDEX: return "max_multiview_instance_index"; 1525 case KEY_MAX_MULTIVIEW_VIEW_COUNT: return "max_multiview_view_count"; 1526 case KEY_MAX_PER_SET_DESCRIPTORS: return "max_per_set_descriptors"; 1527 case KEY_MAX_PER_STAGE_DESCRIPTOR_INLINE_UNIFORM_BLOCKS: return "max_per_stage_descriptor_inline_uniform_blocks"; 1528 case KEY_MAX_PER_STAGE_DESCRIPTOR_INPUT_ATTACHMENTS: return "max_per_stage_descriptor_input_attachments"; 1529 case KEY_MAX_PER_STAGE_DESCRIPTOR_SAMPLED_IMAGES: return "max_per_stage_descriptor_sampled_images"; 1530 case KEY_MAX_PER_STAGE_DESCRIPTOR_SAMPLERS: return "max_per_stage_descriptor_samplers"; 1531 case KEY_MAX_PER_STAGE_DESCRIPTOR_STORAGE_BUFFERS: return "max_per_stage_descriptor_storage_buffers"; 1532 case KEY_MAX_PER_STAGE_DESCRIPTOR_STORAGE_IMAGES: return "max_per_stage_descriptor_storage_images"; 1533 case KEY_MAX_PER_STAGE_DESCRIPTOR_UNIFORM_BUFFERS: return "max_per_stage_descriptor_uniform_buffers"; 1534 case KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_INLINE_UNIFORM_BLOCKS: return "max_per_stage_descriptor_update_after_bind_inline_uniform_blocks"; 1535 case KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_INPUT_ATTACHMENTS: return "max_per_stage_descriptor_update_after_bind_input_attachments"; 1536 case KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_SAMPLED_IMAGES: return "max_per_stage_descriptor_update_after_bind_sampled_images"; 1537 case KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_SAMPLERS: return "max_per_stage_descriptor_update_after_bind_samplers"; 1538 case KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_STORAGE_BUFFERS: return "max_per_stage_descriptor_update_after_bind_storage_buffers"; 1539 case KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_STORAGE_IMAGES: return "max_per_stage_descriptor_update_after_bind_storage_images"; 1540 case KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_UNIFORM_BUFFERS: return "max_per_stage_descriptor_update_after_bind_uniform_buffers"; 1541 case KEY_MAX_PER_STAGE_RESOURCES: return "max_per_stage_resources"; 1542 case KEY_MAX_PER_STAGE_UPDATE_AFTER_BIND_RESOURCES: return "max_per_stage_update_after_bind_resources"; 1543 case KEY_MAX_PUSH_CONSTANTS_SIZE: return "max_push_constants_size"; 1544 case KEY_MAX_SAMPLER_ALLOCATION_COUNT: return "max_sampler_allocation_count"; 1545 case KEY_MAX_SAMPLER_ANISOTROPY: return "max_sampler_anisotropy"; 1546 case KEY_MAX_SAMPLER_LOD_BIAS: return "max_sampler_lod_bias"; 1547 case KEY_MAX_SAMPLE_MASK_WORDS: return "max_sample_mask_words"; 1548 case KEY_MAX_STORAGE_BUFFER_RANGE: return "max_storage_buffer_range"; 1549 case KEY_MAX_SUBGROUP_SIZE: return "max_subgroup_size"; 1550 case KEY_MAX_TESSELLATION_CONTROL_PER_PATCH_OUTPUT_COMPONENTS: return "max_tessellation_control_per_patch_output_components"; 1551 case KEY_MAX_TESSELLATION_CONTROL_PER_VERTEX_INPUT_COMPONENTS: return "max_tessellation_control_per_vertex_input_components"; 1552 case KEY_MAX_TESSELLATION_CONTROL_PER_VERTEX_OUTPUT_COMPONENTS: return "max_tessellation_control_per_vertex_output_components"; 1553 case KEY_MAX_TESSELLATION_CONTROL_TOTAL_OUTPUT_COMPONENTS: return "max_tessellation_control_total_output_components"; 1554 case KEY_MAX_TESSELLATION_EVALUATION_INPUT_COMPONENTS: return "max_tessellation_evaluation_input_components"; 1555 case KEY_MAX_TESSELLATION_EVALUATION_OUTPUT_COMPONENTS: return "max_tessellation_evaluation_output_components"; 1556 case KEY_MAX_TESSELLATION_GENERATION_LEVEL: return "max_tessellation_generation_level"; 1557 case KEY_MAX_TESSELLATION_PATCH_SIZE: return "max_tessellation_patch_size"; 1558 case KEY_MAX_TEXEL_BUFFER_ELEMENTS: return "max_texel_buffer_elements"; 1559 case KEY_MAX_TEXEL_GATHER_OFFSET: return "max_texel_gather_offset"; 1560 case KEY_MAX_TEXEL_OFFSET: return "max_texel_offset"; 1561 case KEY_MAX_TIMELINE_SEMAPHORE_VALUE_DIFFERENCE: return "max_timeline_semaphore_value_difference"; 1562 case KEY_MAX_UNIFORM_BUFFER_RANGE: return "max_uniform_buffer_range"; 1563 case KEY_MAX_UPDATE_AFTER_BIND_DESCRIPTORS_IN_ALL_POOLS: return "max_update_after_bind_descriptors_in_all_pools"; 1564 case KEY_MAX_VERTEX_INPUT_ATTRIBUTES: return "max_vertex_input_attributes"; 1565 case KEY_MAX_VERTEX_INPUT_ATTRIBUTE_OFFSET: return "max_vertex_input_attribute_offset"; 1566 case KEY_MAX_VERTEX_INPUT_BINDINGS: return "max_vertex_input_bindings"; 1567 case KEY_MAX_VERTEX_INPUT_BINDING_STRIDE: return "max_vertex_input_binding_stride"; 1568 case KEY_MAX_VERTEX_OUTPUT_COMPONENTS: return "max_vertex_output_components"; 1569 case KEY_MAX_VIEWPORTS: return "max_viewports"; 1570 case KEY_MAX_VIEWPORT_DIMENSIONS: return "max_viewport_dimensions"; 1571 case KEY_MEMORY: return "memory"; 1572 case KEY_MEMORY_HEAPS: return "memory_heaps"; 1573 case KEY_MEMORY_HEAP_COUNT: return "memory_heap_count"; 1574 case KEY_MEMORY_TYPES: return "memory_types"; 1575 case KEY_MEMORY_TYPE_COUNT: return "memory_type_count"; 1576 case KEY_MINOR: return "minor"; 1577 case KEY_MIN_IMAGE_TRANSFER_GRANULARITY: return "min_image_transfer_granularity"; 1578 case KEY_MIN_INTERPOLATION_OFFSET: return "min_interpolation_offset"; 1579 case KEY_MIN_MEMORY_MAP_ALIGNMENT: return "min_memory_map_alignment"; 1580 case KEY_MIN_STORAGE_BUFFER_OFFSET_ALIGNMENT: return "min_storage_buffer_offset_alignment"; 1581 case KEY_MIN_SUBGROUP_SIZE: return "min_subgroup_size"; 1582 case KEY_MIN_TEXEL_BUFFER_OFFSET_ALIGNMENT: return "min_texel_buffer_offset_alignment"; 1583 case KEY_MIN_TEXEL_GATHER_OFFSET: return "min_texel_gather_offset"; 1584 case KEY_MIN_TEXEL_OFFSET: return "min_texel_offset"; 1585 case KEY_MIN_UNIFORM_BUFFER_OFFSET_ALIGNMENT: return "min_uniform_buffer_offset_alignment"; 1586 case KEY_MIPMAP_PRECISION_BITS: return "mipmap_precision_bits"; 1587 case KEY_MULTIVIEW: return "multiview"; 1588 case KEY_MULTIVIEW_FEATURES: return "multiview_features"; 1589 case KEY_MULTIVIEW_GEOMETRY_SHADER: return "multiview_geometry_shader"; 1590 case KEY_MULTIVIEW_PROPERTIES: return "multiview_properties"; 1591 case KEY_MULTIVIEW_TESSELLATION_SHADER: return "multiview_tessellation_shader"; 1592 case KEY_MULTI_DRAW_INDIRECT: return "multi_draw_indirect"; 1593 case KEY_MULTI_VIEWPORT: return "multi_viewport"; 1594 case KEY_NON_COHERENT_ATOM_SIZE: return "non_coherent_atom_size"; 1595 case KEY_OCCLUSION_QUERY_PRECISE: return "occlusion_query_precise"; 1596 case KEY_OPTIMAL_BUFFER_COPY_OFFSET_ALIGNMENT: return "optimal_buffer_copy_offset_alignment"; 1597 case KEY_OPTIMAL_BUFFER_COPY_ROW_PITCH_ALIGNMENT: return "optimal_buffer_copy_row_pitch_alignment"; 1598 case KEY_OPTIMAL_TILING_FEATURES: return "optimal_tiling_features"; 1599 case KEY_PATCH: return "patch"; 1600 case KEY_PIPELINE_CACHE_UUID: return "pipeline_cache_uuid"; 1601 case KEY_PIPELINE_CREATION_CACHE_CONTROL: return "pipeline_creation_cache_control"; 1602 case KEY_PIPELINE_STATISTICS_QUERY: return "pipeline_statistics_query"; 1603 case KEY_POINT_CLIPPING_BEHAVIOR: return "point_clipping_behavior"; 1604 case KEY_POINT_CLIPPING_PROPERTIES: return "point_clipping_properties"; 1605 case KEY_POINT_SIZE_GRANULARITY: return "point_size_granularity"; 1606 case KEY_POINT_SIZE_RANGE: return "point_size_range"; 1607 case KEY_PRIVATE_DATA: return "private_data"; 1608 case KEY_PROPERTIES: return "properties"; 1609 case KEY_PROPERTY_FLAGS: return "property_flags"; 1610 case KEY_PROTECTED_MEMORY: return "protected_memory"; 1611 case KEY_PROTECTED_MEMORY_FEATURES: return "protected_memory_features"; 1612 case KEY_QUAD_DIVERGENT_IMPLICIT_LOD: return "quad_divergent_implicit_lod"; 1613 case KEY_QUAD_OPERATIONS_IN_ALL_STAGES: return "quad_operations_in_all_stages"; 1614 case KEY_QUEUES: return "queues"; 1615 case KEY_QUEUE_COUNT: return "queue_count"; 1616 case KEY_QUEUE_FLAGS: return "queue_flags"; 1617 case KEY_REQUIRED_SUBGROUP_SIZE_STAGES: return "required_subgroup_size_stages"; 1618 case KEY_RESIDENCY_ALIGNED_MIP_SIZE: return "residency_aligned_mip_size"; 1619 case KEY_RESIDENCY_NON_RESIDENT_STRICT: return "residency_non_resident_strict"; 1620 case KEY_RESIDENCY_STANDARD_2D_BLOCK_SHAPE: return "residency_standard_2d_block_shape"; 1621 case KEY_RESIDENCY_STANDARD_2D_MULTISAMPLE_BLOCK_SHAPE: return "residency_standard_2d_multisample_block_shape"; 1622 case KEY_RESIDENCY_STANDARD_3D_BLOCK_SHAPE: return "residency_standard_3d_block_shape"; 1623 case KEY_ROBUST_BUFFER_ACCESS: return "robust_buffer_access"; 1624 case KEY_ROBUST_BUFFER_ACCESS_UPDATE_AFTER_BIND: return "robust_buffer_access_update_after_bind"; 1625 case KEY_ROBUST_IMAGE_ACCESS: return "robust_image_access"; 1626 case KEY_ROUNDING_MODE_INDEPENDENCE: return "rounding_mode_independence"; 1627 case KEY_RUNTIME_DESCRIPTOR_ARRAY: return "runtime_descriptor_array"; 1628 case KEY_SAMPLED_IMAGE_COLOR_SAMPLE_COUNTS: return "sampled_image_color_sample_counts"; 1629 case KEY_SAMPLED_IMAGE_DEPTH_SAMPLE_COUNTS: return "sampled_image_depth_sample_counts"; 1630 case KEY_SAMPLED_IMAGE_INTEGER_SAMPLE_COUNTS: return "sampled_image_integer_sample_counts"; 1631 case KEY_SAMPLED_IMAGE_STENCIL_SAMPLE_COUNTS: return "sampled_image_stencil_sample_counts"; 1632 case KEY_SAMPLER_ANISOTROPY: return "sampler_anisotropy"; 1633 case KEY_SAMPLER_FILTER_MINMAX: return "sampler_filter_minmax"; 1634 case KEY_SAMPLER_MIRROR_CLAMP_TO_EDGE: return "sampler_mirror_clamp_to_edge"; 1635 case KEY_SAMPLER_YCBCR_CONVERSION: return "sampler_ycbcr_conversion"; 1636 case KEY_SAMPLER_YCBCR_CONVERSION_FEATURES: return "sampler_ycbcr_conversion_features"; 1637 case KEY_SAMPLE_RATE_SHADING: return "sample_rate_shading"; 1638 case KEY_SCALAR_BLOCK_LAYOUT: return "scalar_block_layout"; 1639 case KEY_SEPARATE_DEPTH_STENCIL_LAYOUTS: return "separate_depth_stencil_layouts"; 1640 case KEY_SHADER_BUFFER_INT64_ATOMICS: return "shader_buffer_int64_atomics"; 1641 case KEY_SHADER_CLIP_DISTANCE: return "shader_clip_distance"; 1642 case KEY_SHADER_CULL_DISTANCE: return "shader_cull_distance"; 1643 case KEY_SHADER_DEMOTE_TO_HELPER_INVOCATION: return "shader_demote_to_helper_invocation"; 1644 case KEY_SHADER_DENORM_FLUSH_TO_ZERO_FLOAT16: return "shader_denorm_flush_to_zero_float16"; 1645 case KEY_SHADER_DENORM_FLUSH_TO_ZERO_FLOAT32: return "shader_denorm_flush_to_zero_float32"; 1646 case KEY_SHADER_DENORM_FLUSH_TO_ZERO_FLOAT64: return "shader_denorm_flush_to_zero_float64"; 1647 case KEY_SHADER_DENORM_PRESERVE_FLOAT16: return "shader_denorm_preserve_float16"; 1648 case KEY_SHADER_DENORM_PRESERVE_FLOAT32: return "shader_denorm_preserve_float32"; 1649 case KEY_SHADER_DENORM_PRESERVE_FLOAT64: return "shader_denorm_preserve_float64"; 1650 case KEY_SHADER_DRAW_PARAMETERS: return "shader_draw_parameters"; 1651 case KEY_SHADER_DRAW_PARAMETER_FEATURES: return "shader_draw_parameter_features"; 1652 case KEY_SHADER_FLOAT16: return "shader_float16"; 1653 case KEY_SHADER_FLOAT64: return "shader_float64"; 1654 case KEY_SHADER_IMAGE_GATHER_EXTENDED: return "shader_image_gather_extended"; 1655 case KEY_SHADER_INPUT_ATTACHMENT_ARRAY_DYNAMIC_INDEXING: return "shader_input_attachment_array_dynamic_indexing"; 1656 case KEY_SHADER_INPUT_ATTACHMENT_ARRAY_NONUNIFORM_INDEXING_NATIVE: return "shader_input_attachment_array_nonuniform_indexing_native"; 1657 case KEY_SHADER_INPUT_ATTACHMENT_ARRAY_NON_UNIFORM_INDEXING: return "shader_input_attachment_array_non_uniform_indexing"; 1658 case KEY_SHADER_INT16: return "shader_int16"; 1659 case KEY_SHADER_INT64: return "shader_int64"; 1660 case KEY_SHADER_INT8: return "shader_int8"; 1661 case KEY_SHADER_INTEGER_DOT_PRODUCT: return "shader_integer_dot_product"; 1662 case KEY_SHADER_OUTPUT_LAYER: return "shader_output_layer"; 1663 case KEY_SHADER_OUTPUT_VIEWPORT_INDEX: return "shader_output_viewport_index"; 1664 case KEY_SHADER_RESOURCE_MIN_LOD: return "shader_resource_min_lod"; 1665 case KEY_SHADER_RESOURCE_RESIDENCY: return "shader_resource_residency"; 1666 case KEY_SHADER_ROUNDING_MODE_RTE_FLOAT16: return "shader_rounding_mode_rte_float16"; 1667 case KEY_SHADER_ROUNDING_MODE_RTE_FLOAT32: return "shader_rounding_mode_rte_float32"; 1668 case KEY_SHADER_ROUNDING_MODE_RTE_FLOAT64: return "shader_rounding_mode_rte_float64"; 1669 case KEY_SHADER_ROUNDING_MODE_RTZ_FLOAT16: return "shader_rounding_mode_rtz_float16"; 1670 case KEY_SHADER_ROUNDING_MODE_RTZ_FLOAT32: return "shader_rounding_mode_rtz_float32"; 1671 case KEY_SHADER_ROUNDING_MODE_RTZ_FLOAT64: return "shader_rounding_mode_rtz_float64"; 1672 case KEY_SHADER_SAMPLED_IMAGE_ARRAY_DYNAMIC_INDEXING: return "shader_sampled_image_array_dynamic_indexing"; 1673 case KEY_SHADER_SAMPLED_IMAGE_ARRAY_NONUNIFORM_INDEXING_NATIVE: return "shader_sampled_image_array_nonuniform_indexing_native"; 1674 case KEY_SHADER_SAMPLED_IMAGE_ARRAY_NON_UNIFORM_INDEXING: return "shader_sampled_image_array_non_uniform_indexing"; 1675 case KEY_SHADER_SHARED_INT64_ATOMICS: return "shader_shared_int64_atomics"; 1676 case KEY_SHADER_SIGNED_ZERO_INF_NAN_PRESERVE_FLOAT16: return "shader_signed_zero_inf_nan_preserve_float16"; 1677 case KEY_SHADER_SIGNED_ZERO_INF_NAN_PRESERVE_FLOAT32: return "shader_signed_zero_inf_nan_preserve_float32"; 1678 case KEY_SHADER_SIGNED_ZERO_INF_NAN_PRESERVE_FLOAT64: return "shader_signed_zero_inf_nan_preserve_float64"; 1679 case KEY_SHADER_STORAGE_BUFFER_ARRAY_DYNAMIC_INDEXING: return "shader_storage_buffer_array_dynamic_indexing"; 1680 case KEY_SHADER_STORAGE_BUFFER_ARRAY_NONUNIFORM_INDEXING_NATIVE: return "shader_storage_buffer_array_nonuniform_indexing_native"; 1681 case KEY_SHADER_STORAGE_BUFFER_ARRAY_NON_UNIFORM_INDEXING: return "shader_storage_buffer_array_non_uniform_indexing"; 1682 case KEY_SHADER_STORAGE_IMAGE_ARRAY_DYNAMIC_INDEXING: return "shader_storage_image_array_dynamic_indexing"; 1683 case KEY_SHADER_STORAGE_IMAGE_ARRAY_NONUNIFORM_INDEXING_NATIVE: return "shader_storage_image_array_nonuniform_indexing_native"; 1684 case KEY_SHADER_STORAGE_IMAGE_ARRAY_NON_UNIFORM_INDEXING: return "shader_storage_image_array_non_uniform_indexing"; 1685 case KEY_SHADER_STORAGE_IMAGE_EXTENDED_FORMATS: return "shader_storage_image_extended_formats"; 1686 case KEY_SHADER_STORAGE_IMAGE_MULTISAMPLE: return "shader_storage_image_multisample"; 1687 case KEY_SHADER_STORAGE_IMAGE_READ_WITHOUT_FORMAT: return "shader_storage_image_read_without_format"; 1688 case KEY_SHADER_STORAGE_IMAGE_WRITE_WITHOUT_FORMAT: return "shader_storage_image_write_without_format"; 1689 case KEY_SHADER_STORAGE_TEXEL_BUFFER_ARRAY_DYNAMIC_INDEXING: return "shader_storage_texel_buffer_array_dynamic_indexing"; 1690 case KEY_SHADER_STORAGE_TEXEL_BUFFER_ARRAY_NON_UNIFORM_INDEXING: return "shader_storage_texel_buffer_array_non_uniform_indexing"; 1691 case KEY_SHADER_SUBGROUP_EXTENDED_TYPES: return "shader_subgroup_extended_types"; 1692 case KEY_SHADER_TERMINATE_INVOCATION: return "shader_terminate_invocation"; 1693 case KEY_SHADER_TESSELLATION_AND_GEOMETRY_POINT_SIZE: return "shader_tessellation_and_geometry_point_size"; 1694 case KEY_SHADER_UNIFORM_BUFFER_ARRAY_DYNAMIC_INDEXING: return "shader_uniform_buffer_array_dynamic_indexing"; 1695 case KEY_SHADER_UNIFORM_BUFFER_ARRAY_NONUNIFORM_INDEXING_NATIVE: return "shader_uniform_buffer_array_nonuniform_indexing_native"; 1696 case KEY_SHADER_UNIFORM_BUFFER_ARRAY_NON_UNIFORM_INDEXING: return "shader_uniform_buffer_array_non_uniform_indexing"; 1697 case KEY_SHADER_UNIFORM_TEXEL_BUFFER_ARRAY_DYNAMIC_INDEXING: return "shader_uniform_texel_buffer_array_dynamic_indexing"; 1698 case KEY_SHADER_UNIFORM_TEXEL_BUFFER_ARRAY_NON_UNIFORM_INDEXING: return "shader_uniform_texel_buffer_array_non_uniform_indexing"; 1699 case KEY_SHADER_ZERO_INITIALIZE_WORKGROUP_MEMORY: return "shader_zero_initialize_workgroup_memory"; 1700 case KEY_SIZE: return "size"; 1701 case KEY_SPARSE_ADDRESS_SPACE_SIZE: return "sparse_address_space_size"; 1702 case KEY_SPARSE_BINDING: return "sparse_binding"; 1703 case KEY_SPARSE_PROPERTIES: return "sparse_properties"; 1704 case KEY_SPARSE_RESIDENCY_16_SAMPLES: return "sparse_residency_16_samples"; 1705 case KEY_SPARSE_RESIDENCY_2_SAMPLES: return "sparse_residency_2_samples"; 1706 case KEY_SPARSE_RESIDENCY_4_SAMPLES: return "sparse_residency_4_samples"; 1707 case KEY_SPARSE_RESIDENCY_8_SAMPLES: return "sparse_residency_8_samples"; 1708 case KEY_SPARSE_RESIDENCY_ALIASED: return "sparse_residency_aliased"; 1709 case KEY_SPARSE_RESIDENCY_BUFFER: return "sparse_residency_buffer"; 1710 case KEY_SPARSE_RESIDENCY_IMAGE_2D: return "sparse_residency_image_2d"; 1711 case KEY_SPARSE_RESIDENCY_IMAGE_3D: return "sparse_residency_image_3d"; 1712 case KEY_SPEC_VERSION: return "spec_version"; 1713 case KEY_STANDARD_SAMPLE_LOCATIONS: return "standard_sample_locations"; 1714 case KEY_STORAGE_BUFFER_16BIT_ACCESS: return "storage_buffer_16bit_access"; 1715 case KEY_STORAGE_BUFFER_8BIT_ACCESS: return "storage_buffer_8bit_access"; 1716 case KEY_STORAGE_IMAGE_SAMPLE_COUNTS: return "storage_image_sample_counts"; 1717 case KEY_STORAGE_INPUT_OUTPUT_16: return "storage_input_output_16"; 1718 case KEY_STORAGE_PUSH_CONSTANT8: return "storage_push_constant8"; 1719 case KEY_STORAGE_PUSH_CONSTANT_16: return "storage_push_constant_16"; 1720 case KEY_STORAGE_TEXEL_BUFFER_OFFSET_ALIGNMENT_BYTES: return "storage_texel_buffer_offset_alignment_bytes"; 1721 case KEY_STORAGE_TEXEL_BUFFER_OFFSET_SINGLE_TEXEL_ALIGNMENT: return "storage_texel_buffer_offset_single_texel_alignment"; 1722 case KEY_STRICT_LINES: return "strict_lines"; 1723 case KEY_SUBGROUP_BROADCAST_DYNAMIC_ID: return "subgroup_broadcast_dynamic_id"; 1724 case KEY_SUBGROUP_PROPERTIES: return "subgroup_properties"; 1725 case KEY_SUBGROUP_SIZE: return "subgroup_size"; 1726 case KEY_SUBGROUP_SIZE_CONTROL: return "subgroup_size_control"; 1727 case KEY_SUBMINOR: return "subminor"; 1728 case KEY_SUBSET_ALLOCATION: return "subset_allocation"; 1729 case KEY_SUB_PIXEL_INTERPOLATION_OFFSET_BITS: return "sub_pixel_interpolation_offset_bits"; 1730 case KEY_SUB_PIXEL_PRECISION_BITS: return "sub_pixel_precision_bits"; 1731 case KEY_SUB_TEXEL_PRECISION_BITS: return "sub_texel_precision_bits"; 1732 case KEY_SUPPORTED_DEPTH_RESOLVE_MODES: return "supported_depth_resolve_modes"; 1733 case KEY_SUPPORTED_OPERATIONS: return "supported_operations"; 1734 case KEY_SUPPORTED_STAGES: return "supported_stages"; 1735 case KEY_SUPPORTED_STENCIL_RESOLVE_MODES: return "supported_stencil_resolve_modes"; 1736 case KEY_SYNCHRONIZATION2: return "synchronization2"; 1737 case KEY_TESSELLATION_SHADER: return "tessellation_shader"; 1738 case KEY_TEXTURE_COMPRESSION_ASTC_HDR: return "texture_compression_astc_hdr"; 1739 case KEY_TEXTURE_COMPRESSION_ASTC_LDR: return "texture_compression_astc_ldr"; 1740 case KEY_TEXTURE_COMPRESSION_BC: return "texture_compression_bc"; 1741 case KEY_TEXTURE_COMPRESSION_ETC2: return "texture_compression_etc2"; 1742 case KEY_TIMELINE_SEMAPHORE: return "timeline_semaphore"; 1743 case KEY_TIMESTAMP_COMPUTE_AND_GRAPHICS: return "timestamp_compute_and_graphics"; 1744 case KEY_TIMESTAMP_PERIOD: return "timestamp_period"; 1745 case KEY_TIMESTAMP_VALID_BITS: return "timestamp_valid_bits"; 1746 case KEY_UNIFORM_AND_STORAGE_BUFFER_16BIT_ACCESS: return "uniform_and_storage_buffer_16bit_access"; 1747 case KEY_UNIFORM_AND_STORAGE_BUFFER_8BIT_ACCESS: return "uniform_and_storage_buffer_8bit_access"; 1748 case KEY_UNIFORM_BUFFER_STANDARD_LAYOUT: return "uniform_buffer_standard_layout"; 1749 case KEY_UNIFORM_TEXEL_BUFFER_OFFSET_ALIGNMENT_BYTES: return "uniform_texel_buffer_offset_alignment_bytes"; 1750 case KEY_UNIFORM_TEXEL_BUFFER_OFFSET_SINGLE_TEXEL_ALIGNMENT: return "uniform_texel_buffer_offset_single_texel_alignment"; 1751 case KEY_VARIABLE_MULTISAMPLE_RATE: return "variable_multisample_rate"; 1752 case KEY_VARIABLE_POINTERS: return "variable_pointers"; 1753 case KEY_VARIABLE_POINTERS_STORAGE_BUFFER: return "variable_pointers_storage_buffer"; 1754 case KEY_VARIABLE_POINTER_FEATURES: return "variable_pointer_features"; 1755 case KEY_VARIABLE_POINTER_FEATURES_KHR: return "variable_pointer_features_khr"; 1756 case KEY_VENDOR_ID: return "vendor_id"; 1757 case KEY_VERTEX_PIPELINE_STORES_AND_ATOMICS: return "vertex_pipeline_stores_and_atomics"; 1758 case KEY_VIEWPORT_BOUNDS_RANGE: return "viewport_bounds_range"; 1759 case KEY_VIEWPORT_SUB_PIXEL_BITS: return "viewport_sub_pixel_bits"; 1760 case KEY_VK_KHR_DRIVER_PROPERTIES: return "vk_khr_driver_properties"; 1761 case KEY_VK_KHR_VARIABLE_POINTERS: return "vk_khr_variable_pointers"; 1762 case KEY_VULKAN_12_FEATURES: return "vulkan_12_features"; 1763 case KEY_VULKAN_12_PROPERTIES: return "vulkan_12_properties"; 1764 case KEY_VULKAN_13_FEATURES: return "vulkan_13_features"; 1765 case KEY_VULKAN_13_PROPERTIES: return "vulkan_13_properties"; 1766 case KEY_VULKAN_MEMORY_MODEL: return "vulkan_memory_model"; 1767 case KEY_VULKAN_MEMORY_MODEL_AVAILABILITY_VISIBILITY_CHAINS: return "vulkan_memory_model_availability_visibility_chains"; 1768 case KEY_VULKAN_MEMORY_MODEL_DEVICE_SCOPE: return "vulkan_memory_model_device_scope"; 1769 case KEY_WIDE_LINES: return "wide_lines"; 1770 case KEY_WIDTH: return "width"; 1771 default: throw new RuntimeException("unknown key name: " + name); 1772 } 1773 } 1774 nativeGetVkJSON()1775 private static native String nativeGetVkJSON(); 1776 1777 } 1778