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_BIT16_STORAGE_FEATURES = "bit16StorageFeatures"; 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_POINTERS_FEATURES = "variablePointersFeatures"; 486 private static final String KEY_VARIABLE_POINTER_FEATURES_KHR = "variablePointerFeaturesKHR"; 487 private static final String KEY_VARIABLE_POINTERS_FEATURES_KHR = "variablePointersFeaturesKHR"; 488 private static final String KEY_VENDOR_ID = "vendorID"; 489 private static final String KEY_VERTEX_PIPELINE_STORES_AND_ATOMICS = "vertexPipelineStoresAndAtomics"; 490 private static final String KEY_VIEWPORT_BOUNDS_RANGE = "viewportBoundsRange"; 491 private static final String KEY_VIEWPORT_SUB_PIXEL_BITS = "viewportSubPixelBits"; 492 private static final String KEY_VK_KHR_DRIVER_PROPERTIES = "VK_KHR_driver_properties"; 493 private static final String KEY_VK_KHR_VARIABLE_POINTERS = "VK_KHR_variable_pointers"; 494 private static final String KEY_VK_EXT_IMAGE_2D_VIEW_OF_3D = "VK_EXT_image_2d_view_of_3d"; 495 private static final String KEY_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT = "image2DViewOf3DFeaturesEXT"; 496 private static final String KEY_IMAGE_2D_VIEW_OF_3D = "image2DViewOf3D"; 497 private static final String KEY_SAMPLER_2D_VIEW_OF_3D = "sampler2DViewOf3D"; 498 private static final String KEY_VK_EXT_CUSTOM_BORDER_COLOR = "VK_EXT_custom_border_color"; 499 private static final String KEY_CUSTOM_BORDER_COLOR_FEATURES_EXT = 500 "customBorderColorFeaturesEXT"; 501 private static final String KEY_CUSTOM_BORDER_COLOR_WITHOUT_FORMAT = 502 "customBorderColorWithoutFormat"; 503 private static final String KEY_CUSTOM_BORDER_COLORS = "customBorderColors"; 504 private static final String KEY_VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART = 505 "VK_EXT_primitive_topology_list_restart"; 506 private static final String KEY_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT = 507 "primitiveTopologyListRestartFeaturesEXT"; 508 private static final String KEY_PRIMITIVE_TOPOLOGY_LIST_RESTART = 509 "primitiveTopologyListRestart"; 510 private static final String KEY_PRIMITIVE_TOPOLOGY_PATCH_LIST_RESTART = 511 "primitiveTopologyPatchListRestart"; 512 private static final String KEY_VK_EXT_PROVOKING_VERTEX = "VK_EXT_provoking_vertex"; 513 private static final String KEY_PROVOKING_VERTEX_FEATURES_EXT = "provokingVertexFeaturesEXT"; 514 private static final String KEY_PROVOKING_VERTEX_LAST = "provokingVertexLast"; 515 private static final String KEY_TRANSFORM_FEEDBACK_PRESERVES_PROVOKING_VERTEX = 516 "transformFeedbackPreservesProvokingVertex"; 517 private static final String KEY_VK_EXT_TRANSFORM_FEEDBACK = "VK_EXT_transform_feedback"; 518 private static final String KEY_TRANSFORM_FEEDBACK_FEATURES_EXT = 519 "transformFeedbackFeaturesEXT"; 520 private static final String KEY_GEOMETRY_STREAMS = "geometryStreams"; 521 private static final String KEY_TRANSFORM_FEEDBACK = "transformFeedback"; 522 private static final String KEY_VK_KHR_SHADER_FLOAT16_INT8 = "VK_KHR_shader_float16_int8"; 523 private static final String KEY_SHADER_FLOAT16_INT8_FEATURES_KHR = 524 "shaderFloat16Int8FeaturesKHR"; 525 private static final String KEY_FLOAT16_INT8_FEATURES_KHR = 526 "float16Int8FeaturesKHR"; 527 private static final String KEY_VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES = 528 "VK_KHR_shader_subgroup_extended_types"; 529 private static final String KEY_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR = 530 "shaderSubgroupExtendedTypesFeaturesKHR"; 531 private static final String KEY_VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW = 532 "VK_KHR_shader_subgroup_uniform_control_flow"; 533 private static final String KEY_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR = 534 "shaderSubgroupUniformControlFlowFeaturesKHR"; 535 private static final String KEY_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW = 536 "shaderSubgroupUniformControlFlow"; 537 private static final String KEY_VK_KHR_8BIT_STORAGE = "VK_KHR_8bit_storage"; 538 private static final String KEY_BIT8_STORAGE_FEATURES_KHR = "bit8StorageFeaturesKHR"; 539 private static final String KEY_VK_KHR_SHADER_INTEGER_DOT_PRODUCT = 540 "VK_KHR_shader_integer_dot_product"; 541 private static final String KEY_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR = 542 "shaderIntegerDotProductFeaturesKHR"; 543 private static final String KEY_VK_EXT_INDEX_TYPE_UINT8 = "VK_EXT_index_type_uint8"; 544 private static final String KEY_INDEX_TYPE_UINT8_FEATURES_EXT = "indexTypeUint8FeaturesEXT"; 545 private static final String KEY_INDEX_TYPE_UINT8 = "indexTypeUint8"; 546 private static final String KEY_VK_KHR_INDEX_TYPE_UINT8 = "VK_KHR_index_type_uint8"; 547 private static final String KEY_INDEX_TYPE_UINT8_FEATURES_KHR = "indexTypeUint8FeaturesKHR"; 548 private static final String KEY_VK_EXT_LINE_RASTERIZATION = "VK_EXT_line_rasterization"; 549 private static final String KEY_LINE_RASTERIZATION_FEATURES_EXT = 550 "lineRasterizationFeaturesEXT"; 551 private static final String KEY_BRESENHAM_LINES = "bresenhamLines"; 552 private static final String KEY_RECTANGULAR_LINES = "rectangularLines"; 553 private static final String KEY_SMOOTH_LINES = "smoothLines"; 554 private static final String KEY_STIPPLED_BRESENHAM_LINES = "stippledBresenhamLines"; 555 private static final String KEY_STIPPLED_RECTANGULAR_LINES = "stippledRectangularLines"; 556 private static final String KEY_STIPPLED_SMOOTH_LINES = "stippledSmoothLines"; 557 private static final String KEY_VK_EXT_PRIMITIVES_GENERATED_QUERY = 558 "VK_EXT_primitives_generated_query"; 559 private static final String KEY_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT = 560 "primitivesGeneratedQueryFeaturesEXT"; 561 private static final String KEY_PRIMITIVES_GENERATED_QUERY = "primitivesGeneratedQuery"; 562 private static final String KEY_PRIMITIVES_GENERATED_QUERY_WITH_NON_ZERO_STREAMS = 563 "primitivesGeneratedQueryWithNonZeroStreams"; 564 private static final String KEY_PRIMITIVES_GENERATED_QUERY_WITH_RASTERIZER_DISCARD = 565 "primitivesGeneratedQueryWithRasterizerDiscard"; 566 private static final String KEY_VK_KHR_SHADER_FLOAT_CONTROLS = "VK_KHR_shader_float_controls"; 567 private static final String KEY_FLOAT_CONTROLS_PROPERTIES_KHR = "floatControlsPropertiesKHR"; 568 private static final String KEY_VK_IMG_RELAXED_LINE_RASTERIZATION = 569 "VK_IMG_relaxed_line_rasterization"; 570 private static final String KEY_RELAXED_LINE_RASTERIZATION_FEATURES_IMG = 571 "relaxedLineRasterizationFeaturesIMG"; 572 private static final String RELAXED_LINE_RASTERIZATION = "relaxedLineRasterization"; 573 private static final String KEY_CORE11 = "core11"; 574 private static final String KEY_VULKAN_11_PROPERTIES = "vulkan_11_properties"; 575 private static final String KEY_VULKAN_11_FEATURES = "vulkan_11_features"; 576 private static final String KEY_PROTECTED_NO_FAULT = "protectedNoFault"; 577 private static final String KEY_SUBGROUP_QUAD_OPERATIONS_IN_ALL_STAGES = 578 "subgroupQuadOperationsInAllStages"; 579 private static final String KEY_SUBGROUP_SUPPORTED_OPERATIONS = "subgroupSupportedOperations"; 580 private static final String KEY_SUBGROUP_SUPPORTED_STAGES = "subgroupSupportedStages"; 581 private static final String KEY_VK_KHR_VERTEX_ATTRIBUTE_DIVISOR = "VK_KHR_vertex_attribute_divisor"; 582 private static final String KEY_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR = 583 "vertexAttributeDivisorFeaturesKHR"; 584 private static final String KEY_VERTEX_ATTRIBUTE_INSTANCE_RATE_DIVISOR = "vertexAttributeInstanceRateDivisor"; 585 private static final String KEY_VERTEX_ATTRIBUTE_INSTANCE_RATE_ZERO_DIVISOR = "vertexAttributeInstanceRateZeroDivisor"; 586 private static final String KEY_VULKAN_12_FEATURES = "vulkan_12_features"; 587 private static final String KEY_VULKAN_12_PROPERTIES = "vulkan_12_properties"; 588 private static final String KEY_VULKAN_13_FEATURES = "vulkan_13_features"; 589 private static final String KEY_VULKAN_13_PROPERTIES = "vulkan_13_properties"; 590 private static final String KEY_VULKAN_MEMORY_MODEL = "vulkanMemoryModel"; 591 private static final String KEY_VULKAN_MEMORY_MODEL_AVAILABILITY_VISIBILITY_CHAINS = "vulkanMemoryModelAvailabilityVisibilityChains"; 592 private static final String KEY_VULKAN_MEMORY_MODEL_DEVICE_SCOPE = "vulkanMemoryModelDeviceScope"; 593 private static final String KEY_WIDE_LINES = "wideLines"; 594 private static final String KEY_WIDTH = "width"; 595 596 private static final int VK_API_VERSION_1_1 = 4198400; 597 private static final int VK_API_VERSION_1_2 = 4202496; 598 private static final int VK_API_VERSION_1_3 = 4206592; 599 private static final int ENUM_VK_KHR_VARIABLE_POINTERS = 0; 600 private static final int ENUM_VK_KHR_DRIVER_PROPERTIES = 1; 601 private static final int ENUM_KEY_VK_EXT_IMAGE_2D_VIEW_OF_3D = 2; 602 private static final int ENUM_KEY_VK_EXT_CUSTOM_BORDER_COLOR = 3; 603 private static final int ENUM_KEY_VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART = 4; 604 private static final int ENUM_KEY_VK_EXT_PROVOKING_VERTEX = 5; 605 private static final int ENUM_KEY_VK_EXT_TRANSFORM_FEEDBACK = 6; 606 private static final int ENUM_KEY_VK_KHR_8BIT_STORAGE = 7; 607 private static final int ENUM_KEY_VK_KHR_SHADER_FLOAT16_INT8 = 8; 608 private static final int ENUM_KEY_VK_KHR_SHADER_INTEGER_DOT_PRODUCT = 9; 609 private static final int ENUM_KEY_VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES = 10; 610 private static final int ENUM_KEY_VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW = 11; 611 private static final int ENUM_KEY_VK_EXT_INDEX_TYPE_UINT8 = 12; 612 private static final int ENUM_KEY_VK_KHR_INDEX_TYPE_UINT8 = 13; 613 private static final int ENUM_KEY_VK_EXT_LINE_RASTERIZATION = 14; 614 private static final int ENUM_KEY_VK_EXT_PRIMITIVES_GENERATED_QUERY = 15; 615 private static final int ENUM_KEY_VK_KHR_SHADER_FLOAT_CONTROLS = 16; 616 private static final int ENUM_KEY_VK_IMG_RELAXED_LINE_RASTERIZATION = 17; 617 private static final int ENUM_KEY_VK_KHR_VERTEX_ATTRIBUTE_DIVISOR = 18; 618 619 private static HashMap<String, Integer> extensionNameToEnum; 620 621 static { 622 System.loadLibrary("ctsdeviceinfo"); 623 extensionNameToEnum = new HashMap<>(); extensionNameToEnum.put(KEY_VK_KHR_DRIVER_PROPERTIES, ENUM_VK_KHR_DRIVER_PROPERTIES)624 extensionNameToEnum.put(KEY_VK_KHR_DRIVER_PROPERTIES, ENUM_VK_KHR_DRIVER_PROPERTIES); extensionNameToEnum.put(KEY_VK_KHR_VARIABLE_POINTERS, ENUM_VK_KHR_VARIABLE_POINTERS)625 extensionNameToEnum.put(KEY_VK_KHR_VARIABLE_POINTERS, ENUM_VK_KHR_VARIABLE_POINTERS); extensionNameToEnum.put(KEY_VK_EXT_IMAGE_2D_VIEW_OF_3D, ENUM_KEY_VK_EXT_IMAGE_2D_VIEW_OF_3D)626 extensionNameToEnum.put(KEY_VK_EXT_IMAGE_2D_VIEW_OF_3D, ENUM_KEY_VK_EXT_IMAGE_2D_VIEW_OF_3D); extensionNameToEnum.put(KEY_VK_EXT_CUSTOM_BORDER_COLOR, ENUM_KEY_VK_EXT_CUSTOM_BORDER_COLOR)627 extensionNameToEnum.put(KEY_VK_EXT_CUSTOM_BORDER_COLOR, ENUM_KEY_VK_EXT_CUSTOM_BORDER_COLOR); extensionNameToEnum.put(KEY_VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART, ENUM_KEY_VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART)628 extensionNameToEnum.put(KEY_VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART, 629 ENUM_KEY_VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART); extensionNameToEnum.put(KEY_VK_EXT_PROVOKING_VERTEX, ENUM_KEY_VK_EXT_PROVOKING_VERTEX)630 extensionNameToEnum.put(KEY_VK_EXT_PROVOKING_VERTEX, ENUM_KEY_VK_EXT_PROVOKING_VERTEX); extensionNameToEnum.put(KEY_VK_EXT_TRANSFORM_FEEDBACK, ENUM_KEY_VK_EXT_TRANSFORM_FEEDBACK)631 extensionNameToEnum.put(KEY_VK_EXT_TRANSFORM_FEEDBACK, ENUM_KEY_VK_EXT_TRANSFORM_FEEDBACK); extensionNameToEnum.put( KEY_VK_KHR_SHADER_FLOAT16_INT8, ENUM_KEY_VK_KHR_SHADER_FLOAT16_INT8)632 extensionNameToEnum.put( 633 KEY_VK_KHR_SHADER_FLOAT16_INT8, ENUM_KEY_VK_KHR_SHADER_FLOAT16_INT8); extensionNameToEnum.put( KEY_VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES, ENUM_KEY_VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES)634 extensionNameToEnum.put( 635 KEY_VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES, 636 ENUM_KEY_VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES); extensionNameToEnum.put( KEY_VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW, ENUM_KEY_VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW)637 extensionNameToEnum.put( 638 KEY_VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW, 639 ENUM_KEY_VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW); extensionNameToEnum.put(KEY_VK_KHR_8BIT_STORAGE, ENUM_KEY_VK_KHR_8BIT_STORAGE)640 extensionNameToEnum.put(KEY_VK_KHR_8BIT_STORAGE, ENUM_KEY_VK_KHR_8BIT_STORAGE); extensionNameToEnum.put( KEY_VK_KHR_SHADER_INTEGER_DOT_PRODUCT, ENUM_KEY_VK_KHR_SHADER_INTEGER_DOT_PRODUCT)641 extensionNameToEnum.put( 642 KEY_VK_KHR_SHADER_INTEGER_DOT_PRODUCT, ENUM_KEY_VK_KHR_SHADER_INTEGER_DOT_PRODUCT); extensionNameToEnum.put(KEY_VK_EXT_INDEX_TYPE_UINT8, ENUM_KEY_VK_EXT_INDEX_TYPE_UINT8)643 extensionNameToEnum.put(KEY_VK_EXT_INDEX_TYPE_UINT8, ENUM_KEY_VK_EXT_INDEX_TYPE_UINT8); extensionNameToEnum.put(KEY_VK_KHR_INDEX_TYPE_UINT8, ENUM_KEY_VK_KHR_INDEX_TYPE_UINT8)644 extensionNameToEnum.put(KEY_VK_KHR_INDEX_TYPE_UINT8, ENUM_KEY_VK_KHR_INDEX_TYPE_UINT8); extensionNameToEnum.put(KEY_VK_EXT_LINE_RASTERIZATION, ENUM_KEY_VK_EXT_LINE_RASTERIZATION)645 extensionNameToEnum.put(KEY_VK_EXT_LINE_RASTERIZATION, ENUM_KEY_VK_EXT_LINE_RASTERIZATION); extensionNameToEnum.put( KEY_VK_EXT_PRIMITIVES_GENERATED_QUERY, ENUM_KEY_VK_EXT_PRIMITIVES_GENERATED_QUERY)646 extensionNameToEnum.put( 647 KEY_VK_EXT_PRIMITIVES_GENERATED_QUERY, ENUM_KEY_VK_EXT_PRIMITIVES_GENERATED_QUERY); extensionNameToEnum.put( KEY_VK_KHR_SHADER_FLOAT_CONTROLS, ENUM_KEY_VK_KHR_SHADER_FLOAT_CONTROLS)648 extensionNameToEnum.put( 649 KEY_VK_KHR_SHADER_FLOAT_CONTROLS, ENUM_KEY_VK_KHR_SHADER_FLOAT_CONTROLS); extensionNameToEnum.put( KEY_VK_IMG_RELAXED_LINE_RASTERIZATION, ENUM_KEY_VK_IMG_RELAXED_LINE_RASTERIZATION)650 extensionNameToEnum.put( 651 KEY_VK_IMG_RELAXED_LINE_RASTERIZATION, ENUM_KEY_VK_IMG_RELAXED_LINE_RASTERIZATION); extensionNameToEnum.put( KEY_VK_KHR_VERTEX_ATTRIBUTE_DIVISOR, ENUM_KEY_VK_KHR_VERTEX_ATTRIBUTE_DIVISOR)652 extensionNameToEnum.put( 653 KEY_VK_KHR_VERTEX_ATTRIBUTE_DIVISOR, ENUM_KEY_VK_KHR_VERTEX_ATTRIBUTE_DIVISOR); 654 } 655 656 @Override collectDeviceInfo(DeviceInfoStore store)657 protected void collectDeviceInfo(DeviceInfoStore store) throws Exception { 658 try { 659 JSONObject instance = new JSONObject(nativeGetVkJSON()); 660 emitDeviceGroups(store, instance); 661 emitLayers(store, instance); 662 emitExtensions(store, instance); 663 emitDevices(store, instance); 664 665 // Access to Instance API version was only added alongside 1.2 support in instance 666 if (instance.getLong(KEY_API_VERSION) >= VK_API_VERSION_1_2) { 667 emitInstanceApiVersion(store, instance); 668 } 669 } catch (JSONException e) { 670 e.printStackTrace(); 671 throw new RuntimeException(e); 672 } 673 } 674 emitDeviceGroups(DeviceInfoStore store, JSONObject parent)675 private static void emitDeviceGroups(DeviceInfoStore store, JSONObject parent) 676 throws Exception { 677 JSONArray deviceGroups = parent.getJSONArray(KEY_DEVICE_GROUPS); 678 store.startArray(convertName(KEY_DEVICE_GROUPS)); 679 for (int deviceGroupIdx = 0; deviceGroupIdx < deviceGroups.length(); deviceGroupIdx++) { 680 JSONObject deviceGroup = deviceGroups.getJSONObject(deviceGroupIdx); 681 store.startGroup(); 682 { 683 emitLongArray(store, deviceGroup, KEY_DEVICES); 684 emitBoolean(store, deviceGroup, KEY_SUBSET_ALLOCATION); 685 } 686 store.endGroup(); 687 } 688 store.endArray(); 689 } 690 emitDevices(DeviceInfoStore store, JSONObject parent)691 private static void emitDevices(DeviceInfoStore store, JSONObject parent) 692 throws Exception { 693 JSONArray devices = parent.getJSONArray(KEY_DEVICES); 694 store.startArray(convertName(KEY_DEVICES)); 695 for (int deviceIdx = 0; deviceIdx < devices.length(); deviceIdx++) { 696 JSONObject device = devices.getJSONObject(deviceIdx); 697 store.startGroup(); 698 { 699 JSONObject properties = device.getJSONObject(KEY_PROPERTIES); 700 store.startGroup(convertName(KEY_PROPERTIES)); 701 { 702 emitLong(store, properties, KEY_API_VERSION); 703 emitLong(store, properties, KEY_DRIVER_VERSION); 704 emitLong(store, properties, KEY_VENDOR_ID); 705 emitLong(store, properties, KEY_DEVICE_ID); 706 emitLong(store, properties, KEY_DEVICE_TYPE); 707 emitString(store, properties, KEY_DEVICE_NAME); 708 emitLongArray(store, properties, KEY_PIPELINE_CACHE_UUID); 709 710 JSONObject limits = properties.getJSONObject(KEY_LIMITS); 711 store.startGroup(convertName(KEY_LIMITS)); 712 { 713 emitLong(store, limits, KEY_MAX_IMAGE_DIMENSION_1D); 714 emitLong(store, limits, KEY_MAX_IMAGE_DIMENSION_2D); 715 emitLong(store, limits, KEY_MAX_IMAGE_DIMENSION_3D); 716 emitLong(store, limits, KEY_MAX_IMAGE_DIMENSION_CUBE); 717 emitLong(store, limits, KEY_MAX_IMAGE_ARRAY_LAYERS); 718 emitLong(store, limits, KEY_MAX_TEXEL_BUFFER_ELEMENTS); 719 emitLong(store, limits, KEY_MAX_UNIFORM_BUFFER_RANGE); 720 emitLong(store, limits, KEY_MAX_STORAGE_BUFFER_RANGE); 721 emitLong(store, limits, KEY_MAX_PUSH_CONSTANTS_SIZE); 722 emitLong(store, limits, KEY_MAX_MEMORY_ALLOCATION_COUNT); 723 emitLong(store, limits, KEY_MAX_SAMPLER_ALLOCATION_COUNT); 724 emitString(store, limits, KEY_BUFFER_IMAGE_GRANULARITY); 725 emitString(store, limits, KEY_SPARSE_ADDRESS_SPACE_SIZE); 726 emitLong(store, limits, KEY_MAX_BOUND_DESCRIPTOR_SETS); 727 emitLong(store, limits, KEY_MAX_PER_STAGE_DESCRIPTOR_SAMPLERS); 728 emitLong(store, limits, KEY_MAX_PER_STAGE_DESCRIPTOR_UNIFORM_BUFFERS); 729 emitLong(store, limits, KEY_MAX_PER_STAGE_DESCRIPTOR_STORAGE_BUFFERS); 730 emitLong(store, limits, KEY_MAX_PER_STAGE_DESCRIPTOR_SAMPLED_IMAGES); 731 emitLong(store, limits, KEY_MAX_PER_STAGE_DESCRIPTOR_STORAGE_IMAGES); 732 emitLong(store, limits, KEY_MAX_PER_STAGE_DESCRIPTOR_INPUT_ATTACHMENTS); 733 emitLong(store, limits, KEY_MAX_PER_STAGE_RESOURCES); 734 emitLong(store, limits, KEY_MAX_DESCRIPTOR_SET_SAMPLERS); 735 emitLong(store, limits, KEY_MAX_DESCRIPTOR_SET_UNIFORM_BUFFERS); 736 emitLong(store, limits, KEY_MAX_DESCRIPTOR_SET_UNIFORM_BUFFERS_DYNAMIC); 737 emitLong(store, limits, KEY_MAX_DESCRIPTOR_SET_STORAGE_BUFFERS); 738 emitLong(store, limits, KEY_MAX_DESCRIPTOR_SET_STORAGE_BUFFERS_DYNAMIC); 739 emitLong(store, limits, KEY_MAX_DESCRIPTOR_SET_SAMPLED_IMAGES); 740 emitLong(store, limits, KEY_MAX_DESCRIPTOR_SET_STORAGE_IMAGES); 741 emitLong(store, limits, KEY_MAX_DESCRIPTOR_SET_INPUT_ATTACHMENTS); 742 emitLong(store, limits, KEY_MAX_VERTEX_INPUT_ATTRIBUTES); 743 emitLong(store, limits, KEY_MAX_VERTEX_INPUT_BINDINGS); 744 emitLong(store, limits, KEY_MAX_VERTEX_INPUT_ATTRIBUTE_OFFSET); 745 emitLong(store, limits, KEY_MAX_VERTEX_INPUT_BINDING_STRIDE); 746 emitLong(store, limits, KEY_MAX_VERTEX_OUTPUT_COMPONENTS); 747 emitLong(store, limits, KEY_MAX_TESSELLATION_GENERATION_LEVEL); 748 emitLong(store, limits, KEY_MAX_TESSELLATION_PATCH_SIZE); 749 emitLong(store, limits, KEY_MAX_TESSELLATION_CONTROL_PER_VERTEX_INPUT_COMPONENTS); 750 emitLong(store, limits, KEY_MAX_TESSELLATION_CONTROL_PER_VERTEX_OUTPUT_COMPONENTS); 751 emitLong(store, limits, KEY_MAX_TESSELLATION_CONTROL_PER_PATCH_OUTPUT_COMPONENTS); 752 emitLong(store, limits, KEY_MAX_TESSELLATION_CONTROL_TOTAL_OUTPUT_COMPONENTS); 753 emitLong(store, limits, KEY_MAX_TESSELLATION_EVALUATION_INPUT_COMPONENTS); 754 emitLong(store, limits, KEY_MAX_TESSELLATION_EVALUATION_OUTPUT_COMPONENTS); 755 emitLong(store, limits, KEY_MAX_GEOMETRY_SHADER_INVOCATIONS); 756 emitLong(store, limits, KEY_MAX_GEOMETRY_INPUT_COMPONENTS); 757 emitLong(store, limits, KEY_MAX_GEOMETRY_OUTPUT_COMPONENTS); 758 emitLong(store, limits, KEY_MAX_GEOMETRY_OUTPUT_VERTICES); 759 emitLong(store, limits, KEY_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS); 760 emitLong(store, limits, KEY_MAX_FRAGMENT_INPUT_COMPONENTS); 761 emitLong(store, limits, KEY_MAX_FRAGMENT_OUTPUT_ATTACHMENTS); 762 emitLong(store, limits, KEY_MAX_FRAGMENT_DUAL_SRC_ATTACHMENTS); 763 emitLong(store, limits, KEY_MAX_FRAGMENT_COMBINED_OUTPUT_RESOURCES); 764 emitLong(store, limits, KEY_MAX_COMPUTE_SHARED_MEMORY_SIZE); 765 emitLongArray(store, limits, KEY_MAX_COMPUTE_WORK_GROUP_COUNT); 766 emitLong(store, limits, KEY_MAX_COMPUTE_WORK_GROUP_INVOCATIONS); 767 emitLongArray(store, limits, KEY_MAX_COMPUTE_WORK_GROUP_SIZE); 768 emitLong(store, limits, KEY_SUB_PIXEL_PRECISION_BITS); 769 emitLong(store, limits, KEY_SUB_TEXEL_PRECISION_BITS); 770 emitLong(store, limits, KEY_MIPMAP_PRECISION_BITS); 771 emitLong(store, limits, KEY_MAX_DRAW_INDEXED_INDEX_VALUE); 772 emitLong(store, limits, KEY_MAX_DRAW_INDIRECT_COUNT); 773 emitDouble(store, limits, KEY_MAX_SAMPLER_LOD_BIAS); 774 emitDouble(store, limits, KEY_MAX_SAMPLER_ANISOTROPY); 775 emitLong(store, limits, KEY_MAX_VIEWPORTS); 776 emitLongArray(store, limits, KEY_MAX_VIEWPORT_DIMENSIONS); 777 emitDoubleArray(store, limits, KEY_VIEWPORT_BOUNDS_RANGE); 778 emitLong(store, limits, KEY_VIEWPORT_SUB_PIXEL_BITS); 779 emitString(store, limits, KEY_MIN_MEMORY_MAP_ALIGNMENT); 780 emitString(store, limits, KEY_MIN_TEXEL_BUFFER_OFFSET_ALIGNMENT); 781 emitString(store, limits, KEY_MIN_UNIFORM_BUFFER_OFFSET_ALIGNMENT); 782 emitString(store, limits, KEY_MIN_STORAGE_BUFFER_OFFSET_ALIGNMENT); 783 emitLong(store, limits, KEY_MIN_TEXEL_OFFSET); 784 emitLong(store, limits, KEY_MAX_TEXEL_OFFSET); 785 emitLong(store, limits, KEY_MIN_TEXEL_GATHER_OFFSET); 786 emitLong(store, limits, KEY_MAX_TEXEL_GATHER_OFFSET); 787 emitDouble(store, limits, KEY_MIN_INTERPOLATION_OFFSET); 788 emitDouble(store, limits, KEY_MAX_INTERPOLATION_OFFSET); 789 emitLong(store, limits, KEY_SUB_PIXEL_INTERPOLATION_OFFSET_BITS); 790 emitLong(store, limits, KEY_MAX_FRAMEBUFFER_WIDTH); 791 emitLong(store, limits, KEY_MAX_FRAMEBUFFER_HEIGHT); 792 emitLong(store, limits, KEY_MAX_FRAMEBUFFER_LAYERS); 793 emitLong(store, limits, KEY_FRAMEBUFFER_COLOR_SAMPLE_COUNTS); 794 emitLong(store, limits, KEY_FRAMEBUFFER_DEPTH_SAMPLE_COUNTS); 795 emitLong(store, limits, KEY_FRAMEBUFFER_STENCIL_SAMPLE_COUNTS); 796 emitLong(store, limits, KEY_FRAMEBUFFER_NO_ATTACHMENTS_SAMPLE_COUNTS); 797 emitLong(store, limits, KEY_MAX_COLOR_ATTACHMENTS); 798 emitLong(store, limits, KEY_SAMPLED_IMAGE_COLOR_SAMPLE_COUNTS); 799 emitLong(store, limits, KEY_SAMPLED_IMAGE_INTEGER_SAMPLE_COUNTS); 800 emitLong(store, limits, KEY_SAMPLED_IMAGE_DEPTH_SAMPLE_COUNTS); 801 emitLong(store, limits, KEY_SAMPLED_IMAGE_STENCIL_SAMPLE_COUNTS); 802 emitLong(store, limits, KEY_STORAGE_IMAGE_SAMPLE_COUNTS); 803 emitLong(store, limits, KEY_MAX_SAMPLE_MASK_WORDS); 804 emitBoolean(store, limits, KEY_TIMESTAMP_COMPUTE_AND_GRAPHICS); 805 emitDouble(store, limits, KEY_TIMESTAMP_PERIOD); 806 emitLong(store, limits, KEY_MAX_CLIP_DISTANCES); 807 emitLong(store, limits, KEY_MAX_CULL_DISTANCES); 808 emitLong(store, limits, KEY_MAX_COMBINED_CLIP_AND_CULL_DISTANCES); 809 emitLong(store, limits, KEY_DISCRETE_QUEUE_PRIORITIES); 810 emitDoubleArray(store, limits, KEY_POINT_SIZE_RANGE); 811 emitDoubleArray(store, limits, KEY_LINE_WIDTH_RANGE); 812 emitDouble(store, limits, KEY_POINT_SIZE_GRANULARITY); 813 emitDouble(store, limits, KEY_LINE_WIDTH_GRANULARITY); 814 emitBoolean(store, limits, KEY_STRICT_LINES); 815 emitBoolean(store, limits, KEY_STANDARD_SAMPLE_LOCATIONS); 816 emitString(store, limits, KEY_OPTIMAL_BUFFER_COPY_OFFSET_ALIGNMENT); 817 emitString(store, limits, KEY_OPTIMAL_BUFFER_COPY_ROW_PITCH_ALIGNMENT); 818 emitString(store, limits, KEY_NON_COHERENT_ATOM_SIZE); 819 } 820 store.endGroup(); 821 822 JSONObject sparse = properties.getJSONObject(KEY_SPARSE_PROPERTIES); 823 store.startGroup(convertName(KEY_SPARSE_PROPERTIES)); 824 { 825 emitBoolean(store, sparse, KEY_RESIDENCY_STANDARD_2D_BLOCK_SHAPE); 826 emitBoolean(store, sparse, KEY_RESIDENCY_STANDARD_2D_MULTISAMPLE_BLOCK_SHAPE); 827 emitBoolean(store, sparse, KEY_RESIDENCY_STANDARD_3D_BLOCK_SHAPE); 828 emitBoolean(store, sparse, KEY_RESIDENCY_ALIGNED_MIP_SIZE); 829 emitBoolean(store, sparse, KEY_RESIDENCY_NON_RESIDENT_STRICT); 830 } 831 store.endGroup(); 832 833 if (properties.getLong(KEY_API_VERSION) >= VK_API_VERSION_1_2) { 834 JSONObject core11 = device.getJSONObject(KEY_CORE11); 835 JSONObject vulkan11Properties = core11.getJSONObject(KEY_PROPERTIES); 836 store.startGroup(convertName(KEY_VULKAN_11_PROPERTIES)); 837 { 838 emitLong(store, vulkan11Properties, KEY_DEVICE_NODE_MASK); 839 emitBoolean(store, vulkan11Properties, KEY_DEVICE_LUID_VALID); 840 emitLong(store, vulkan11Properties, KEY_SUBGROUP_SIZE); 841 emitBoolean( 842 store, 843 vulkan11Properties, 844 KEY_SUBGROUP_QUAD_OPERATIONS_IN_ALL_STAGES); 845 emitLong(store, vulkan11Properties, KEY_MAX_MULTIVIEW_INSTANCE_INDEX); 846 emitLong(store, vulkan11Properties, KEY_MAX_MULTIVIEW_VIEW_COUNT); 847 emitLong(store, vulkan11Properties, KEY_MAX_PER_SET_DESCRIPTORS); 848 emitLong(store, vulkan11Properties, KEY_PROTECTED_NO_FAULT); 849 850 emitLongArray(store, vulkan11Properties, KEY_DEVICE_LUID); 851 852 emitLongArray(store, vulkan11Properties, KEY_DEVICE_UUID); 853 emitLongArray(store, vulkan11Properties, KEY_DRIVER_UUID); 854 emitString(store, vulkan11Properties, KEY_MAX_MEMORY_ALLOCATION_SIZE); 855 emitLong(store, vulkan11Properties, KEY_POINT_CLIPPING_BEHAVIOR); 856 emitLong(store, vulkan11Properties, KEY_SUBGROUP_SUPPORTED_OPERATIONS); 857 emitLong(store, vulkan11Properties, KEY_SUBGROUP_SUPPORTED_STAGES); 858 } 859 store.endGroup(); 860 861 JSONObject core12 = device.getJSONObject(KEY_CORE12); 862 JSONObject vulkan12Properties = core12.getJSONObject(KEY_PROPERTIES); 863 store.startGroup(convertName(KEY_VULKAN_12_PROPERTIES)); 864 { 865 emitLong(store, vulkan12Properties, KEY_DRIVER_ID); 866 emitString(store, vulkan12Properties, KEY_DRIVER_NAME); 867 emitString(store, vulkan12Properties, KEY_DRIVER_INFO); 868 869 JSONObject conformanceVersion = vulkan12Properties.getJSONObject(KEY_CONFORMANCE_VERSION); 870 store.startGroup(convertName(KEY_CONFORMANCE_VERSION)); 871 { 872 emitLong(store, conformanceVersion, KEY_MAJOR); 873 emitLong(store, conformanceVersion, KEY_MINOR); 874 emitLong(store, conformanceVersion, KEY_SUBMINOR); 875 emitLong(store, conformanceVersion, KEY_PATCH); 876 } 877 store.endGroup(); 878 879 emitLong(store, vulkan12Properties, KEY_DENORM_BEHAVIOR_INDEPENDENCE); 880 emitLong(store, vulkan12Properties, KEY_ROUNDING_MODE_INDEPENDENCE); 881 emitBoolean(store, vulkan12Properties, KEY_SHADER_SIGNED_ZERO_INF_NAN_PRESERVE_FLOAT16); 882 emitBoolean(store, vulkan12Properties, KEY_SHADER_SIGNED_ZERO_INF_NAN_PRESERVE_FLOAT32); 883 emitBoolean(store, vulkan12Properties, KEY_SHADER_SIGNED_ZERO_INF_NAN_PRESERVE_FLOAT64); 884 emitBoolean(store, vulkan12Properties, KEY_SHADER_DENORM_PRESERVE_FLOAT16); 885 emitBoolean(store, vulkan12Properties, KEY_SHADER_DENORM_PRESERVE_FLOAT32); 886 emitBoolean(store, vulkan12Properties, KEY_SHADER_DENORM_PRESERVE_FLOAT64); 887 emitBoolean(store, vulkan12Properties, KEY_SHADER_DENORM_FLUSH_TO_ZERO_FLOAT16); 888 emitBoolean(store, vulkan12Properties, KEY_SHADER_DENORM_FLUSH_TO_ZERO_FLOAT32); 889 emitBoolean(store, vulkan12Properties, KEY_SHADER_DENORM_FLUSH_TO_ZERO_FLOAT64); 890 emitBoolean(store, vulkan12Properties, KEY_SHADER_ROUNDING_MODE_RTE_FLOAT16); 891 emitBoolean(store, vulkan12Properties, KEY_SHADER_ROUNDING_MODE_RTE_FLOAT32); 892 emitBoolean(store, vulkan12Properties, KEY_SHADER_ROUNDING_MODE_RTE_FLOAT64); 893 emitBoolean(store, vulkan12Properties, KEY_SHADER_ROUNDING_MODE_RTZ_FLOAT16); 894 emitBoolean(store, vulkan12Properties, KEY_SHADER_ROUNDING_MODE_RTZ_FLOAT32); 895 emitBoolean(store, vulkan12Properties, KEY_SHADER_ROUNDING_MODE_RTZ_FLOAT64); 896 emitLong(store, vulkan12Properties, KEY_MAX_UPDATE_AFTER_BIND_DESCRIPTORS_IN_ALL_POOLS); 897 emitBoolean(store, vulkan12Properties, KEY_SHADER_UNIFORM_BUFFER_ARRAY_NONUNIFORM_INDEXING_NATIVE); 898 emitBoolean(store, vulkan12Properties, KEY_SHADER_SAMPLED_IMAGE_ARRAY_NONUNIFORM_INDEXING_NATIVE); 899 emitBoolean(store, vulkan12Properties, KEY_SHADER_STORAGE_BUFFER_ARRAY_NONUNIFORM_INDEXING_NATIVE); 900 emitBoolean(store, vulkan12Properties, KEY_SHADER_STORAGE_IMAGE_ARRAY_NONUNIFORM_INDEXING_NATIVE); 901 emitBoolean(store, vulkan12Properties, KEY_SHADER_INPUT_ATTACHMENT_ARRAY_NONUNIFORM_INDEXING_NATIVE); 902 emitBoolean(store, vulkan12Properties, KEY_ROBUST_BUFFER_ACCESS_UPDATE_AFTER_BIND); 903 emitBoolean(store, vulkan12Properties, KEY_QUAD_DIVERGENT_IMPLICIT_LOD); 904 emitLong(store, vulkan12Properties, KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_SAMPLERS); 905 emitLong(store, vulkan12Properties, KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_UNIFORM_BUFFERS); 906 emitLong(store, vulkan12Properties, KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_STORAGE_BUFFERS); 907 emitLong(store, vulkan12Properties, KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_SAMPLED_IMAGES); 908 emitLong(store, vulkan12Properties, KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_STORAGE_IMAGES); 909 emitLong(store, vulkan12Properties, KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_INPUT_ATTACHMENTS); 910 emitLong(store, vulkan12Properties, KEY_MAX_PER_STAGE_UPDATE_AFTER_BIND_RESOURCES); 911 emitLong(store, vulkan12Properties, KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_SAMPLERS); 912 emitLong(store, vulkan12Properties, KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_UNIFORM_BUFFERS); 913 emitLong(store, vulkan12Properties, KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_UNIFORM_BUFFERS_DYNAMIC); 914 emitLong(store, vulkan12Properties, KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_STORAGE_BUFFERS); 915 emitLong(store, vulkan12Properties, KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_STORAGE_BUFFERS_DYNAMIC); 916 emitLong(store, vulkan12Properties, KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_SAMPLED_IMAGES); 917 emitLong(store, vulkan12Properties, KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_STORAGE_IMAGES); 918 emitLong(store, vulkan12Properties, KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_INPUT_ATTACHMENTS); 919 emitLong(store, vulkan12Properties, KEY_SUPPORTED_DEPTH_RESOLVE_MODES); 920 emitLong(store, vulkan12Properties, KEY_SUPPORTED_STENCIL_RESOLVE_MODES); 921 emitBoolean(store, vulkan12Properties, KEY_INDEPENDENT_RESOLVE_NONE); 922 emitBoolean(store, vulkan12Properties, KEY_INDEPENDENT_RESOLVE); 923 emitBoolean(store, vulkan12Properties, KEY_FILTER_MINMAX_SINGLE_COMPONENT_FORMATS); 924 emitBoolean(store, vulkan12Properties, KEY_FILTER_MINMAX_IMAGE_COMPONENT_MAPPING); 925 emitString(store, vulkan12Properties, KEY_MAX_TIMELINE_SEMAPHORE_VALUE_DIFFERENCE); 926 emitLong(store, vulkan12Properties, KEY_FRAMEBUFFER_INTEGER_COLOR_SAMPLE_COUNTS); 927 } 928 store.endGroup(); 929 } 930 931 if (properties.getLong(KEY_API_VERSION) >= VK_API_VERSION_1_3) { 932 JSONObject core13 = device.getJSONObject(KEY_CORE13); 933 JSONObject vulkan13Properties = core13.getJSONObject(KEY_PROPERTIES); 934 store.startGroup(convertName(KEY_VULKAN_13_PROPERTIES)); 935 { 936 emitLong(store, vulkan13Properties, KEY_MIN_SUBGROUP_SIZE); 937 emitLong(store, vulkan13Properties, KEY_MAX_SUBGROUP_SIZE); 938 emitLong(store, vulkan13Properties, KEY_MAX_COMPUTE_WORKGROUP_SUBGROUPS); 939 emitLong(store, vulkan13Properties, KEY_REQUIRED_SUBGROUP_SIZE_STAGES); 940 emitLong(store, vulkan13Properties, KEY_MAX_INLINE_UNIFORM_BLOCK_SIZE); 941 emitLong(store, vulkan13Properties, KEY_MAX_PER_STAGE_DESCRIPTOR_INLINE_UNIFORM_BLOCKS); 942 emitLong(store, vulkan13Properties, KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_INLINE_UNIFORM_BLOCKS); 943 emitLong(store, vulkan13Properties, KEY_MAX_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCKS); 944 emitLong(store, vulkan13Properties, KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_INLINE_UNIFORM_BLOCKS); 945 emitLong(store, vulkan13Properties, KEY_MAX_INLINE_UNIFORM_TOTAL_SIZE); 946 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_8BIT_UNSIGNED_ACCELERATED); 947 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_8BIT_SIGNED_ACCELERATED); 948 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_8BIT_MIXED_SIGNEDNESS_ACCELERATED); 949 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_4X8BIT_PACKED_UNSIGNED_ACCELERATED); 950 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_4X8BIT_PACKED_SIGNED_ACCELERATED); 951 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_4X8BIT_PACKED_MIXED_SIGNEDNESS_ACCELERATED); 952 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_16BIT_UNSIGNED_ACCELERATED); 953 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_16BIT_SIGNED_ACCELERATED); 954 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_16BIT_MIXED_SIGNEDNESS_ACCELERATED); 955 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_32BIT_UNSIGNED_ACCELERATED); 956 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_32BIT_SIGNED_ACCELERATED); 957 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_32BIT_MIXED_SIGNEDNESS_ACCELERATED); 958 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_64BIT_UNSIGNED_ACCELERATED); 959 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_64BIT_SIGNED_ACCELERATED); 960 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_64BIT_MIXED_SIGNEDNESS_ACCELERATED); 961 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_8BIT_UNSIGNED_ACCELERATED); 962 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_8BIT_SIGNED_ACCELERATED); 963 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_8BIT_MIXED_SIGNEDNESS_ACCELERATED); 964 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_4X8BIT_PACKED_UNSIGNED_ACCELERATED); 965 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_4X8BIT_PACKED_SIGNED_ACCELERATED); 966 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_4X8BIT_PACKED_MIXED_SIGNEDNESS_ACCELERATED); 967 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_16BIT_UNSIGNED_ACCELERATED); 968 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_16BIT_SIGNED_ACCELERATED); 969 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_16BIT_MIXED_SIGNEDNESS_ACCELERATED); 970 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_32BIT_UNSIGNED_ACCELERATED); 971 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_32BIT_SIGNED_ACCELERATED); 972 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_32BIT_MIXED_SIGNEDNESS_ACCELERATED); 973 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_64BIT_UNSIGNED_ACCELERATED); 974 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_64BIT_SIGNEDNESS_ACCELERATED); 975 emitBoolean(store, vulkan13Properties, KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_64BIT_MIXED_SIGNEDNESS_ACCELERATED); 976 emitString(store, vulkan13Properties, KEY_STORAGE_TEXEL_BUFFER_OFFSET_ALIGNMENT_BYTES); 977 emitBoolean(store, vulkan13Properties, KEY_STORAGE_TEXEL_BUFFER_OFFSET_SINGLE_TEXEL_ALIGNMENT); 978 emitString(store, vulkan13Properties, KEY_UNIFORM_TEXEL_BUFFER_OFFSET_ALIGNMENT_BYTES); 979 emitBoolean(store, vulkan13Properties, KEY_UNIFORM_TEXEL_BUFFER_OFFSET_SINGLE_TEXEL_ALIGNMENT); 980 emitString(store, vulkan13Properties, KEY_MAX_BUFFER_SIZE); 981 } 982 store.endGroup(); 983 } 984 } 985 store.endGroup(); 986 987 JSONObject features = device.getJSONObject(KEY_FEATURES); 988 store.startGroup(convertName(KEY_FEATURES)); 989 { 990 emitBoolean(store, features, KEY_ROBUST_BUFFER_ACCESS); 991 emitBoolean(store, features, KEY_FULL_DRAW_INDEX_UINT32); 992 emitBoolean(store, features, KEY_IMAGE_CUBE_ARRAY); 993 emitBoolean(store, features, KEY_INDEPENDENT_BLEND); 994 emitBoolean(store, features, KEY_GEOMETRY_SHADER); 995 emitBoolean(store, features, KEY_TESSELLATION_SHADER); 996 emitBoolean(store, features, KEY_SAMPLE_RATE_SHADING); 997 emitBoolean(store, features, KEY_DUAL_SRC_BLEND); 998 emitBoolean(store, features, KEY_LOGIC_OP); 999 emitBoolean(store, features, KEY_MULTI_DRAW_INDIRECT); 1000 emitBoolean(store, features, KEY_DRAW_INDIRECT_FIRST_INSTANCE); 1001 emitBoolean(store, features, KEY_DEPTH_CLAMP); 1002 emitBoolean(store, features, KEY_DEPTH_BIAS_CLAMP); 1003 emitBoolean(store, features, KEY_FILL_MODE_NON_SOLID); 1004 emitBoolean(store, features, KEY_DEPTH_BOUNDS); 1005 emitBoolean(store, features, KEY_WIDE_LINES); 1006 emitBoolean(store, features, KEY_LARGE_POINTS); 1007 emitBoolean(store, features, KEY_ALPHA_TO_ONE); 1008 emitBoolean(store, features, KEY_MULTI_VIEWPORT); 1009 emitBoolean(store, features, KEY_SAMPLER_ANISOTROPY); 1010 emitBoolean(store, features, KEY_TEXTURE_COMPRESSION_ETC2); 1011 emitBoolean(store, features, KEY_TEXTURE_COMPRESSION_ASTC_LDR); 1012 emitBoolean(store, features, KEY_TEXTURE_COMPRESSION_BC); 1013 emitBoolean(store, features, KEY_OCCLUSION_QUERY_PRECISE); 1014 emitBoolean(store, features, KEY_PIPELINE_STATISTICS_QUERY); 1015 emitBoolean(store, features, KEY_VERTEX_PIPELINE_STORES_AND_ATOMICS); 1016 emitBoolean(store, features, KEY_FRAGMENT_STORES_AND_ATOMICS); 1017 emitBoolean(store, features, KEY_SHADER_TESSELLATION_AND_GEOMETRY_POINT_SIZE); 1018 emitBoolean(store, features, KEY_SHADER_IMAGE_GATHER_EXTENDED); 1019 emitBoolean(store, features, KEY_SHADER_STORAGE_IMAGE_EXTENDED_FORMATS); 1020 emitBoolean(store, features, KEY_SHADER_STORAGE_IMAGE_MULTISAMPLE); 1021 emitBoolean(store, features, KEY_SHADER_STORAGE_IMAGE_READ_WITHOUT_FORMAT); 1022 emitBoolean(store, features, KEY_SHADER_STORAGE_IMAGE_WRITE_WITHOUT_FORMAT); 1023 emitBoolean(store, features, KEY_SHADER_UNIFORM_BUFFER_ARRAY_DYNAMIC_INDEXING); 1024 emitBoolean(store, features, KEY_SHADER_SAMPLED_IMAGE_ARRAY_DYNAMIC_INDEXING); 1025 emitBoolean(store, features, KEY_SHADER_STORAGE_BUFFER_ARRAY_DYNAMIC_INDEXING); 1026 emitBoolean(store, features, KEY_SHADER_STORAGE_IMAGE_ARRAY_DYNAMIC_INDEXING); 1027 emitBoolean(store, features, KEY_SHADER_CLIP_DISTANCE); 1028 emitBoolean(store, features, KEY_SHADER_CULL_DISTANCE); 1029 emitBoolean(store, features, KEY_SHADER_FLOAT64); 1030 emitBoolean(store, features, KEY_SHADER_INT64); 1031 emitBoolean(store, features, KEY_SHADER_INT16); 1032 emitBoolean(store, features, KEY_SHADER_RESOURCE_RESIDENCY); 1033 emitBoolean(store, features, KEY_SHADER_RESOURCE_MIN_LOD); 1034 emitBoolean(store, features, KEY_SPARSE_BINDING); 1035 emitBoolean(store, features, KEY_SPARSE_RESIDENCY_BUFFER); 1036 emitBoolean(store, features, KEY_SPARSE_RESIDENCY_IMAGE_2D); 1037 emitBoolean(store, features, KEY_SPARSE_RESIDENCY_IMAGE_3D); 1038 emitBoolean(store, features, KEY_SPARSE_RESIDENCY_2_SAMPLES); 1039 emitBoolean(store, features, KEY_SPARSE_RESIDENCY_4_SAMPLES); 1040 emitBoolean(store, features, KEY_SPARSE_RESIDENCY_8_SAMPLES); 1041 emitBoolean(store, features, KEY_SPARSE_RESIDENCY_16_SAMPLES); 1042 emitBoolean(store, features, KEY_SPARSE_RESIDENCY_ALIASED); 1043 emitBoolean(store, features, KEY_VARIABLE_MULTISAMPLE_RATE); 1044 emitBoolean(store, features, KEY_INHERITED_QUERIES); 1045 1046 1047 if (properties.getLong(KEY_API_VERSION) >= VK_API_VERSION_1_2) { 1048 JSONObject core11 = device.getJSONObject(KEY_CORE11); 1049 JSONObject vulkan11Features = core11.getJSONObject(KEY_FEATURES); 1050 store.startGroup(convertName(KEY_VULKAN_11_FEATURES)); 1051 { 1052 emitBoolean(store, vulkan11Features, KEY_MULTIVIEW); 1053 emitBoolean(store, vulkan11Features, KEY_MULTIVIEW_GEOMETRY_SHADER); 1054 emitBoolean(store, vulkan11Features, KEY_MULTIVIEW_TESSELLATION_SHADER); 1055 emitBoolean(store, vulkan11Features, KEY_PROTECTED_MEMORY); 1056 emitBoolean(store, vulkan11Features, KEY_SAMPLER_YCBCR_CONVERSION); 1057 emitBoolean(store, vulkan11Features, KEY_SHADER_DRAW_PARAMETERS); 1058 emitBoolean(store, vulkan11Features, KEY_STORAGE_BUFFER_16BIT_ACCESS); 1059 emitBoolean(store, vulkan11Features, KEY_STORAGE_INPUT_OUTPUT_16); 1060 emitBoolean(store, vulkan11Features, KEY_STORAGE_PUSH_CONSTANT_16); 1061 emitBoolean(store, vulkan11Features, KEY_UNIFORM_AND_STORAGE_BUFFER_16BIT_ACCESS); 1062 emitBoolean(store, vulkan11Features, KEY_VARIABLE_POINTERS); 1063 emitBoolean(store, vulkan11Features, KEY_VARIABLE_POINTERS_STORAGE_BUFFER); 1064 } 1065 store.endGroup(); 1066 1067 JSONObject core12 = device.getJSONObject(KEY_CORE12); 1068 JSONObject vulkan12Features = core12.getJSONObject(KEY_FEATURES); 1069 store.startGroup(convertName(KEY_VULKAN_12_FEATURES)); 1070 { 1071 emitBoolean(store, vulkan12Features, KEY_SAMPLER_MIRROR_CLAMP_TO_EDGE); 1072 emitBoolean(store, vulkan12Features, KEY_DRAW_INDIRECT_COUNT); 1073 emitBoolean(store, vulkan12Features, KEY_STORAGE_BUFFER_8BIT_ACCESS); 1074 emitBoolean(store, vulkan12Features, KEY_UNIFORM_AND_STORAGE_BUFFER_8BIT_ACCESS); 1075 emitBoolean(store, vulkan12Features, KEY_STORAGE_PUSH_CONSTANT8); 1076 emitBoolean(store, vulkan12Features, KEY_SHADER_BUFFER_INT64_ATOMICS); 1077 emitBoolean(store, vulkan12Features, KEY_SHADER_SHARED_INT64_ATOMICS); 1078 emitBoolean(store, vulkan12Features, KEY_SHADER_FLOAT16); 1079 emitBoolean(store, vulkan12Features, KEY_SHADER_INT8); 1080 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_INDEXING); 1081 emitBoolean(store, vulkan12Features, KEY_SHADER_INPUT_ATTACHMENT_ARRAY_DYNAMIC_INDEXING); 1082 emitBoolean(store, vulkan12Features, KEY_SHADER_UNIFORM_TEXEL_BUFFER_ARRAY_DYNAMIC_INDEXING); 1083 emitBoolean(store, vulkan12Features, KEY_SHADER_STORAGE_TEXEL_BUFFER_ARRAY_DYNAMIC_INDEXING); 1084 emitBoolean(store, vulkan12Features, KEY_SHADER_UNIFORM_BUFFER_ARRAY_NON_UNIFORM_INDEXING); 1085 emitBoolean(store, vulkan12Features, KEY_SHADER_SAMPLED_IMAGE_ARRAY_NON_UNIFORM_INDEXING); 1086 emitBoolean(store, vulkan12Features, KEY_SHADER_STORAGE_BUFFER_ARRAY_NON_UNIFORM_INDEXING); 1087 emitBoolean(store, vulkan12Features, KEY_SHADER_STORAGE_IMAGE_ARRAY_NON_UNIFORM_INDEXING); 1088 emitBoolean(store, vulkan12Features, KEY_SHADER_INPUT_ATTACHMENT_ARRAY_NON_UNIFORM_INDEXING); 1089 emitBoolean(store, vulkan12Features, KEY_SHADER_UNIFORM_TEXEL_BUFFER_ARRAY_NON_UNIFORM_INDEXING); 1090 emitBoolean(store, vulkan12Features, KEY_SHADER_STORAGE_TEXEL_BUFFER_ARRAY_NON_UNIFORM_INDEXING); 1091 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_BINDING_UNIFORM_BUFFER_UPDATE_AFTER_BIND); 1092 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_BINDING_SAMPLED_IMAGE_UPDATE_AFTER_BIND); 1093 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_BINDING_STORAGE_IMAGE_UPDATE_AFTER_BIND); 1094 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_BINDING_STORAGE_BUFFER_UPDATE_AFTER_BIND); 1095 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_BINDING_UNIFORM_TEXEL_BUFFER_UPDATE_AFTER_BIND); 1096 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_BINDING_STORAGE_TEXEL_BUFFER_UPDATE_AFTER_BIND); 1097 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING); 1098 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_BINDING_PARTIALLY_BOUND); 1099 emitBoolean(store, vulkan12Features, KEY_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT); 1100 emitBoolean(store, vulkan12Features, KEY_RUNTIME_DESCRIPTOR_ARRAY); 1101 emitBoolean(store, vulkan12Features, KEY_SAMPLER_FILTER_MINMAX); 1102 emitBoolean(store, vulkan12Features, KEY_SCALAR_BLOCK_LAYOUT); 1103 emitBoolean(store, vulkan12Features, KEY_IMAGELESS_FRAMEBUFFER); 1104 emitBoolean(store, vulkan12Features, KEY_UNIFORM_BUFFER_STANDARD_LAYOUT); 1105 emitBoolean(store, vulkan12Features, KEY_SHADER_SUBGROUP_EXTENDED_TYPES); 1106 emitBoolean(store, vulkan12Features, KEY_SEPARATE_DEPTH_STENCIL_LAYOUTS); 1107 emitBoolean(store, vulkan12Features, KEY_HOST_QUERY_RESET); 1108 emitBoolean(store, vulkan12Features, KEY_TIMELINE_SEMAPHORE); 1109 emitBoolean(store, vulkan12Features, KEY_BUFFER_DEVICE_ADDRESS); 1110 emitBoolean(store, vulkan12Features, KEY_BUFFER_DEVICE_ADDRESS_CAPTURE_REPLAY); 1111 emitBoolean(store, vulkan12Features, KEY_BUFFER_DEVICE_ADDRESS_MULTI_DEVICE); 1112 emitBoolean(store, vulkan12Features, KEY_VULKAN_MEMORY_MODEL); 1113 emitBoolean(store, vulkan12Features, KEY_VULKAN_MEMORY_MODEL_DEVICE_SCOPE); 1114 emitBoolean(store, vulkan12Features, KEY_VULKAN_MEMORY_MODEL_AVAILABILITY_VISIBILITY_CHAINS); 1115 emitBoolean(store, vulkan12Features, KEY_SHADER_OUTPUT_VIEWPORT_INDEX); 1116 emitBoolean(store, vulkan12Features, KEY_SHADER_OUTPUT_LAYER); 1117 // subgroupBroadcastDynamicId was erroneously left out of vkjson reporting in Android T 1118 // and later added in U, so we need to explicitly check if the feature is reported 1119 if (vulkan12Features.has(KEY_SUBGROUP_BROADCAST_DYNAMIC_ID)) { 1120 emitBoolean(store, vulkan12Features, KEY_SUBGROUP_BROADCAST_DYNAMIC_ID); 1121 } 1122 } 1123 store.endGroup(); 1124 } 1125 1126 if (properties.getLong(KEY_API_VERSION) >= VK_API_VERSION_1_3) { 1127 JSONObject core13 = device.getJSONObject(KEY_CORE13); 1128 JSONObject vulkan13Features = core13.getJSONObject(KEY_FEATURES); 1129 store.startGroup(convertName(KEY_VULKAN_13_FEATURES)); 1130 { 1131 emitBoolean(store, vulkan13Features, KEY_ROBUST_IMAGE_ACCESS); 1132 emitBoolean(store, vulkan13Features, KEY_INLINE_UNIFORM_BLOCK); 1133 emitBoolean(store, vulkan13Features, KEY_DESCRIPTOR_BINDING_INLINE_UNIFORM_BLOCK_UPDATE_AFTER_BIND); 1134 emitBoolean(store, vulkan13Features, KEY_PIPELINE_CREATION_CACHE_CONTROL); 1135 emitBoolean(store, vulkan13Features, KEY_PRIVATE_DATA); 1136 emitBoolean(store, vulkan13Features, KEY_SHADER_DEMOTE_TO_HELPER_INVOCATION); 1137 emitBoolean(store, vulkan13Features, KEY_SHADER_TERMINATE_INVOCATION); 1138 emitBoolean(store, vulkan13Features, KEY_SUBGROUP_SIZE_CONTROL); 1139 emitBoolean(store, vulkan13Features, KEY_COMPUTE_FULL_SUBGROUPS); 1140 emitBoolean(store, vulkan13Features, KEY_SYNCHRONIZATION2); 1141 emitBoolean(store, vulkan13Features, KEY_TEXTURE_COMPRESSION_ASTC_HDR); 1142 emitBoolean(store, vulkan13Features, KEY_SHADER_ZERO_INITIALIZE_WORKGROUP_MEMORY); 1143 emitBoolean(store, vulkan13Features, KEY_DYNAMIC_RENDERING); 1144 emitBoolean(store, vulkan13Features, KEY_SHADER_INTEGER_DOT_PRODUCT); 1145 emitBoolean(store, vulkan13Features, KEY_MAINTENANCE4); 1146 } 1147 store.endGroup(); 1148 } 1149 } 1150 store.endGroup(); 1151 1152 JSONObject memory = device.getJSONObject(KEY_MEMORY); 1153 store.startGroup(convertName(KEY_MEMORY)); 1154 { 1155 emitLong(store, memory, KEY_MEMORY_TYPE_COUNT); 1156 JSONArray memoryTypes = memory.getJSONArray(KEY_MEMORY_TYPES); 1157 store.startArray(convertName(KEY_MEMORY_TYPES)); 1158 for (int memoryTypeIdx = 0; memoryTypeIdx < memoryTypes.length(); 1159 memoryTypeIdx++) { 1160 JSONObject memoryType = memoryTypes.getJSONObject(memoryTypeIdx); 1161 store.startGroup(); 1162 { 1163 emitLong(store, memoryType, KEY_PROPERTY_FLAGS); 1164 emitLong(store, memoryType, KEY_HEAP_INDEX); 1165 } 1166 store.endGroup(); 1167 } 1168 store.endArray(); 1169 1170 emitLong(store, memory, KEY_MEMORY_HEAP_COUNT); 1171 JSONArray memoryHeaps = memory.getJSONArray(KEY_MEMORY_HEAPS); 1172 store.startArray(convertName(KEY_MEMORY_HEAPS)); 1173 for (int memoryHeapIdx = 0; memoryHeapIdx < memoryHeaps.length(); 1174 memoryHeapIdx++) { 1175 JSONObject memoryHeap = memoryHeaps.getJSONObject(memoryHeapIdx); 1176 store.startGroup(); 1177 { 1178 emitString(store, memoryHeap, KEY_SIZE); 1179 emitLong(store, memoryHeap, KEY_FLAGS); 1180 } 1181 store.endGroup(); 1182 } 1183 store.endArray(); 1184 } 1185 store.endGroup(); 1186 1187 JSONArray queues = device.getJSONArray(KEY_QUEUES); 1188 store.startArray(convertName(KEY_QUEUES)); 1189 for (int queueIdx = 0; queueIdx < queues.length(); queueIdx++) { 1190 JSONObject queue = queues.getJSONObject(queueIdx); 1191 store.startGroup(); 1192 { 1193 emitLong(store, queue, KEY_QUEUE_FLAGS); 1194 emitLong(store, queue, KEY_QUEUE_COUNT); 1195 emitLong(store, queue, KEY_TIMESTAMP_VALID_BITS); 1196 JSONObject extent = queue.getJSONObject(KEY_MIN_IMAGE_TRANSFER_GRANULARITY); 1197 store.startGroup(convertName(KEY_MIN_IMAGE_TRANSFER_GRANULARITY)); 1198 { 1199 emitLong(store, extent, KEY_WIDTH); 1200 emitLong(store, extent, KEY_HEIGHT); 1201 emitLong(store, extent, KEY_DEPTH); 1202 } 1203 store.endGroup(); 1204 } 1205 store.endGroup(); 1206 } 1207 store.endArray(); 1208 1209 // Skip layers for now. VkJSON doesn't yet include device layer extensions, so 1210 // this is entirely redundant with the instance extension information. 1211 // emitLayers(store, device); 1212 store.startArray(convertName(KEY_LAYERS)); 1213 store.endArray(); 1214 1215 emitExtensions(store, device); 1216 1217 JSONArray formats = device.getJSONArray(KEY_FORMATS); 1218 // Note: Earlier code used field named 'formats' with different data structure. 1219 // In order to have the mix of old and new data, we cannot reuse that name. 1220 store.startArray("supported_formats"); 1221 for (int formatIdx = 0; formatIdx < formats.length(); formatIdx++) { 1222 JSONArray formatPair = formats.getJSONArray(formatIdx); 1223 JSONObject formatProperties = formatPair.getJSONObject(1); 1224 store.startGroup(); 1225 { 1226 store.addResult("format", (long)formatPair.getInt(0)); 1227 emitLong(store, formatProperties, KEY_LINEAR_TILING_FEATURES); 1228 emitLong(store, formatProperties, KEY_OPTIMAL_TILING_FEATURES); 1229 emitLong(store, formatProperties, KEY_BUFFER_FEATURES); 1230 } 1231 store.endGroup(); 1232 } 1233 store.endArray(); 1234 1235 if (properties.getLong(KEY_API_VERSION) >= VK_API_VERSION_1_1) { 1236 JSONObject subgroupProperties = device.getJSONObject(KEY_SUBGROUP_PROPERTIES); 1237 store.startGroup(convertName(KEY_SUBGROUP_PROPERTIES)); 1238 { 1239 emitLong(store, subgroupProperties, KEY_SUBGROUP_SIZE); 1240 emitLong(store, subgroupProperties, KEY_SUPPORTED_STAGES); 1241 emitLong(store, subgroupProperties, KEY_SUPPORTED_OPERATIONS); 1242 emitBoolean(store, subgroupProperties, KEY_QUAD_OPERATIONS_IN_ALL_STAGES); 1243 } 1244 store.endGroup(); 1245 1246 JSONObject pointClippingProperties = device.getJSONObject(KEY_POINT_CLIPPING_PROPERTIES); 1247 store.startGroup(convertName(KEY_POINT_CLIPPING_PROPERTIES)); 1248 { 1249 emitLong(store, pointClippingProperties, KEY_POINT_CLIPPING_BEHAVIOR); 1250 } 1251 store.endGroup(); 1252 1253 JSONObject multiviewProperties = device.getJSONObject(KEY_MULTIVIEW_PROPERTIES); 1254 store.startGroup(convertName(KEY_MULTIVIEW_PROPERTIES)); 1255 { 1256 emitLong(store, multiviewProperties, KEY_MAX_MULTIVIEW_VIEW_COUNT); 1257 emitLong(store, multiviewProperties, KEY_MAX_MULTIVIEW_INSTANCE_INDEX); 1258 } 1259 store.endGroup(); 1260 1261 JSONObject idProperties = device.getJSONObject(KEY_ID_PROPERTIES); 1262 store.startGroup(convertName(KEY_ID_PROPERTIES)); 1263 { 1264 emitLongArray(store, idProperties, KEY_DEVICE_UUID); 1265 emitLongArray(store, idProperties, KEY_DRIVER_UUID); 1266 emitLongArray(store, idProperties, KEY_DEVICE_LUID); 1267 emitLong(store, idProperties, KEY_DEVICE_NODE_MASK); 1268 emitBoolean(store, idProperties, KEY_DEVICE_LUID_VALID); 1269 } 1270 store.endGroup(); 1271 1272 JSONObject maintenance3Properties = device.getJSONObject(KEY_MAINTENANCE_3_PROPERTIES); 1273 store.startGroup(convertName(KEY_MAINTENANCE_3_PROPERTIES)); 1274 { 1275 emitLong(store, maintenance3Properties, KEY_MAX_PER_SET_DESCRIPTORS); 1276 emitString(store, maintenance3Properties, KEY_MAX_MEMORY_ALLOCATION_SIZE); 1277 } 1278 store.endGroup(); 1279 1280 JSONObject bit16StorageFeatures = device.getJSONObject(KEY_BIT16_STORAGE_FEATURES); 1281 store.startGroup(convertName(KEY_BIT16_STORAGE_FEATURES)); 1282 { 1283 emitBoolean(store, bit16StorageFeatures, KEY_STORAGE_BUFFER_16BIT_ACCESS); 1284 emitBoolean(store, bit16StorageFeatures, KEY_UNIFORM_AND_STORAGE_BUFFER_16BIT_ACCESS); 1285 emitBoolean(store, bit16StorageFeatures, KEY_STORAGE_PUSH_CONSTANT_16); 1286 emitBoolean(store, bit16StorageFeatures, KEY_STORAGE_INPUT_OUTPUT_16); 1287 } 1288 store.endGroup(); 1289 1290 JSONObject multiviewFeatures = device.getJSONObject(KEY_MULTIVIEW_FEATURES); 1291 store.startGroup(convertName(KEY_MULTIVIEW_FEATURES)); 1292 { 1293 emitBoolean(store, multiviewFeatures, KEY_MULTIVIEW); 1294 emitBoolean(store, multiviewFeatures, KEY_MULTIVIEW_GEOMETRY_SHADER); 1295 emitBoolean(store, multiviewFeatures, KEY_MULTIVIEW_TESSELLATION_SHADER); 1296 } 1297 store.endGroup(); 1298 1299 JSONObject variablePointersFeatures = device.getJSONObject(KEY_VARIABLE_POINTERS_FEATURES); 1300 store.startGroup(convertName(KEY_VARIABLE_POINTERS_FEATURES)); 1301 { 1302 emitBoolean(store, variablePointersFeatures, KEY_VARIABLE_POINTERS_STORAGE_BUFFER); 1303 emitBoolean(store, variablePointersFeatures, KEY_VARIABLE_POINTERS); 1304 } 1305 store.endGroup(); 1306 1307 JSONObject protectedMemoryFeatures = device.getJSONObject(KEY_PROTECTED_MEMORY_FEATURES); 1308 store.startGroup(convertName(KEY_PROTECTED_MEMORY_FEATURES)); 1309 { 1310 emitBoolean(store, protectedMemoryFeatures, KEY_PROTECTED_MEMORY); 1311 } 1312 store.endGroup(); 1313 1314 JSONObject samplerYcbcrConversionFeatures = device.getJSONObject(KEY_SAMPLER_YCBCR_CONVERSION_FEATURES); 1315 store.startGroup(convertName(KEY_SAMPLER_YCBCR_CONVERSION_FEATURES)); 1316 { 1317 emitBoolean(store, samplerYcbcrConversionFeatures, KEY_SAMPLER_YCBCR_CONVERSION); 1318 } 1319 store.endGroup(); 1320 1321 JSONObject shaderDrawParameterFeatures = device.getJSONObject(KEY_SHADER_DRAW_PARAMETER_FEATURES); 1322 store.startGroup(convertName(KEY_SHADER_DRAW_PARAMETER_FEATURES)); 1323 { 1324 emitBoolean(store, shaderDrawParameterFeatures, KEY_SHADER_DRAW_PARAMETERS); 1325 } 1326 store.endGroup(); 1327 1328 JSONArray externalFences = device.getJSONArray(KEY_EXTERNAL_FENCE_PROPERTIES); 1329 store.startArray(convertName(KEY_EXTERNAL_FENCE_PROPERTIES)); 1330 for (int idx = 0; idx < externalFences.length(); ++idx) { 1331 JSONArray externalFencePair = externalFences.getJSONArray(idx); 1332 JSONObject externalFenceProperties = externalFencePair.getJSONObject(1); 1333 store.startGroup(); 1334 { 1335 store.addResult("handle_type", externalFencePair.getLong(0)); 1336 emitLong(store, externalFenceProperties, KEY_EXPORT_FROM_IMPORTED_HANDLE_TYPES); 1337 emitLong(store, externalFenceProperties, KEY_COMPATIBLE_HANDLE_TYPES); 1338 emitLong(store, externalFenceProperties, KEY_EXTERNAL_FENCE_FEATURES); 1339 } 1340 store.endGroup(); 1341 } 1342 store.endArray(); 1343 1344 JSONArray externalSemaphores = device.getJSONArray(KEY_EXTERNAL_SEMAPHORE_PROPERTIES); 1345 store.startArray(convertName(KEY_EXTERNAL_SEMAPHORE_PROPERTIES)); 1346 for (int idx = 0; idx < externalSemaphores.length(); ++idx) { 1347 JSONArray externalSemaphorePair = externalSemaphores.getJSONArray(idx); 1348 JSONObject externalSemaphoreProperties = externalSemaphorePair.getJSONObject(1); 1349 store.startGroup(); 1350 { 1351 store.addResult("handle_type", externalSemaphorePair.getLong(0)); 1352 emitLong(store, externalSemaphoreProperties, KEY_EXPORT_FROM_IMPORTED_HANDLE_TYPES); 1353 emitLong(store, externalSemaphoreProperties, KEY_COMPATIBLE_HANDLE_TYPES); 1354 emitLong(store, externalSemaphoreProperties, KEY_EXTERNAL_SEMAPHORE_FEATURES); 1355 } 1356 store.endGroup(); 1357 } 1358 store.endArray(); 1359 } 1360 } 1361 store.endGroup(); 1362 } 1363 store.endArray(); 1364 } 1365 emitLayers(DeviceInfoStore store, JSONObject parent)1366 private static void emitLayers(DeviceInfoStore store, JSONObject parent) 1367 throws Exception { 1368 JSONArray layers = parent.getJSONArray(KEY_LAYERS); 1369 store.startArray(convertName(KEY_LAYERS)); 1370 for (int i = 0; i < layers.length(); i++) { 1371 JSONObject layer = layers.getJSONObject(i); 1372 store.startGroup(); 1373 { 1374 JSONObject properties = layer.getJSONObject(KEY_PROPERTIES); 1375 store.startGroup(convertName(KEY_PROPERTIES)); 1376 { 1377 emitString(store, properties, KEY_LAYER_NAME); 1378 emitLong(store, properties, KEY_SPEC_VERSION); 1379 emitLong(store, properties, KEY_IMPLEMENTATION_VERSION); 1380 emitString(store, properties, KEY_DESCRIPTION); 1381 } 1382 store.endGroup(); 1383 emitExtensions(store, layer); 1384 } 1385 store.endGroup(); 1386 } 1387 store.endArray(); 1388 } 1389 emitInstanceApiVersion(DeviceInfoStore store, JSONObject parent)1390 private static void emitInstanceApiVersion(DeviceInfoStore store, JSONObject parent) 1391 throws Exception { 1392 store.addResult(convertName(KEY_INSTANCE_API_VERSION), parent.getLong(KEY_API_VERSION)); 1393 } 1394 emitDriverPropertiesKHR(DeviceInfoStore store, JSONObject parent)1395 private static void emitDriverPropertiesKHR(DeviceInfoStore store, JSONObject parent) 1396 throws Exception { 1397 try { 1398 JSONObject extDriverProperties = parent.getJSONObject(KEY_VK_KHR_DRIVER_PROPERTIES); 1399 try { 1400 store.startGroup(convertName(KEY_VK_KHR_DRIVER_PROPERTIES)); 1401 { 1402 JSONObject driverPropertiesKHR = extDriverProperties.getJSONObject(KEY_DRIVER_PROPERTIES_KHR); 1403 store.startGroup(convertName(KEY_DRIVER_PROPERTIES_KHR)); 1404 { 1405 emitLong(store, driverPropertiesKHR, KEY_DRIVER_ID); 1406 emitString(store, driverPropertiesKHR, KEY_DRIVER_NAME); 1407 emitString(store, driverPropertiesKHR, KEY_DRIVER_INFO); 1408 1409 JSONObject conformanceVersion = driverPropertiesKHR.getJSONObject(KEY_CONFORMANCE_VERSION); 1410 store.startGroup(convertName(KEY_CONFORMANCE_VERSION)); 1411 { 1412 emitLong(store, conformanceVersion, KEY_MAJOR); 1413 emitLong(store, conformanceVersion, KEY_MINOR); 1414 emitLong(store, conformanceVersion, KEY_SUBMINOR); 1415 emitLong(store, conformanceVersion, KEY_PATCH); 1416 } 1417 store.endGroup(); 1418 } 1419 store.endGroup(); 1420 } 1421 store.endGroup(); 1422 } catch (JSONException e) { 1423 e.printStackTrace(); 1424 throw new RuntimeException(e); 1425 } 1426 } catch (JSONException ok) { 1427 // The tag is not present in vkjson; that's fine, just continue 1428 } 1429 } 1430 emitVariablePointerFeaturesKHR(DeviceInfoStore store, JSONObject parent)1431 private static void emitVariablePointerFeaturesKHR(DeviceInfoStore store, JSONObject parent) 1432 throws Exception { 1433 try { 1434 JSONObject extVariablePointerFeatures = parent.getJSONObject(KEY_VK_KHR_VARIABLE_POINTERS); 1435 try { 1436 store.startGroup(convertName(KEY_VK_KHR_VARIABLE_POINTERS)); 1437 { 1438 JSONObject variablePointerFeaturesKHR = extVariablePointerFeatures.getJSONObject(KEY_VARIABLE_POINTER_FEATURES_KHR); 1439 store.startGroup(convertName(KEY_VARIABLE_POINTER_FEATURES_KHR)); 1440 { 1441 emitBoolean(store, variablePointerFeaturesKHR, KEY_VARIABLE_POINTERS_STORAGE_BUFFER); 1442 emitBoolean(store, variablePointerFeaturesKHR, KEY_VARIABLE_POINTERS); 1443 } 1444 store.endGroup(); 1445 JSONObject variablePointersFeaturesKHR = extVariablePointerFeatures.getJSONObject(KEY_VARIABLE_POINTERS_FEATURES_KHR); 1446 store.startGroup(convertName(KEY_VARIABLE_POINTERS_FEATURES_KHR)); 1447 { 1448 emitBoolean(store, variablePointersFeaturesKHR, KEY_VARIABLE_POINTERS_STORAGE_BUFFER); 1449 emitBoolean(store, variablePointersFeaturesKHR, KEY_VARIABLE_POINTERS); 1450 } 1451 store.endGroup(); 1452 } 1453 store.endGroup(); 1454 } catch (JSONException e) { 1455 e.printStackTrace(); 1456 throw new RuntimeException(e); 1457 } 1458 } catch (JSONException ok) { 1459 // The tag is not present in vkjson; that's fine, just continue 1460 1461 } 1462 } 1463 emitImage2DViewOf3DFeaturesEXT(DeviceInfoStore store, JSONObject parent)1464 private static void emitImage2DViewOf3DFeaturesEXT(DeviceInfoStore store, JSONObject parent) 1465 throws Exception { 1466 try { 1467 JSONObject extImage2DViewOf3DFeatures = parent.getJSONObject(KEY_VK_EXT_IMAGE_2D_VIEW_OF_3D); 1468 try { 1469 store.startGroup(convertName(KEY_VK_EXT_IMAGE_2D_VIEW_OF_3D)); 1470 { 1471 JSONObject image2DViewOf3DFeaturesEXT = extImage2DViewOf3DFeatures.getJSONObject(KEY_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT); 1472 store.startGroup(convertName(KEY_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT)); 1473 { 1474 emitBoolean(store, image2DViewOf3DFeaturesEXT, KEY_IMAGE_2D_VIEW_OF_3D); 1475 emitBoolean(store, image2DViewOf3DFeaturesEXT, KEY_SAMPLER_2D_VIEW_OF_3D); 1476 } 1477 store.endGroup(); 1478 } 1479 store.endGroup(); 1480 } catch (JSONException e) { 1481 e.printStackTrace(); 1482 throw new RuntimeException(e); 1483 } 1484 } catch (JSONException ok) { 1485 // The tag is not present in vkjson; that's fine, just continue 1486 } 1487 } 1488 emitVertexAttributeDivisorFeaturesKHR(DeviceInfoStore store, JSONObject parent)1489 private static void emitVertexAttributeDivisorFeaturesKHR(DeviceInfoStore store, JSONObject parent) 1490 throws Exception { 1491 try { 1492 JSONObject khrVertexAttributeDivisorFeatures = parent.getJSONObject(KEY_VK_KHR_VERTEX_ATTRIBUTE_DIVISOR); 1493 try { 1494 store.startGroup(convertName(KEY_VK_KHR_VERTEX_ATTRIBUTE_DIVISOR)); 1495 { 1496 JSONObject vertexAttributeDivisorFeaturesKHR = khrVertexAttributeDivisorFeatures.getJSONObject(KEY_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR); 1497 store.startGroup(convertName(KEY_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR)); 1498 { 1499 emitBoolean(store, vertexAttributeDivisorFeaturesKHR, KEY_VERTEX_ATTRIBUTE_INSTANCE_RATE_DIVISOR); 1500 emitBoolean(store, vertexAttributeDivisorFeaturesKHR, KEY_VERTEX_ATTRIBUTE_INSTANCE_RATE_ZERO_DIVISOR); 1501 } 1502 store.endGroup(); 1503 } 1504 store.endGroup(); 1505 } catch (JSONException e) { 1506 e.printStackTrace(); 1507 throw new RuntimeException(e); 1508 } 1509 } catch (JSONException ok) { 1510 // The tag is not present in vkjson; that's fine, just continue 1511 } 1512 } 1513 emitCustomBorderColorFeaturesEXT(DeviceInfoStore store, JSONObject parent)1514 private static void emitCustomBorderColorFeaturesEXT(DeviceInfoStore store, JSONObject parent) 1515 throws Exception { 1516 try { 1517 JSONObject extCustomborderColorFeatures = 1518 parent.getJSONObject(KEY_VK_EXT_CUSTOM_BORDER_COLOR); 1519 try { 1520 store.startGroup(convertName(KEY_VK_EXT_CUSTOM_BORDER_COLOR)); 1521 { 1522 JSONObject customBorderColorFeaturesEXT = 1523 extCustomborderColorFeatures.getJSONObject( 1524 KEY_CUSTOM_BORDER_COLOR_FEATURES_EXT); 1525 store.startGroup(convertName(KEY_CUSTOM_BORDER_COLOR_FEATURES_EXT)); 1526 { 1527 emitBoolean( 1528 store, 1529 customBorderColorFeaturesEXT, 1530 KEY_CUSTOM_BORDER_COLOR_WITHOUT_FORMAT); 1531 emitBoolean(store, customBorderColorFeaturesEXT, KEY_CUSTOM_BORDER_COLORS); 1532 } 1533 store.endGroup(); 1534 } 1535 store.endGroup(); 1536 } catch (JSONException e) { 1537 e.printStackTrace(); 1538 throw new RuntimeException(e); 1539 } 1540 } catch (JSONException ok) { 1541 // The tag is not present in vkjson; that's fine, just continue 1542 } 1543 } 1544 emitPrimitiveTopologyListRestartFeaturesEXT( DeviceInfoStore store, JSONObject parent)1545 private static void emitPrimitiveTopologyListRestartFeaturesEXT( 1546 DeviceInfoStore store, JSONObject parent) throws Exception { 1547 try { 1548 JSONObject extPrimitiveTopologyListRestartFeatures = 1549 parent.getJSONObject(KEY_VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART); 1550 try { 1551 store.startGroup(convertName(KEY_VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART)); 1552 { 1553 JSONObject primitiveTopologyListRestartFeaturesEXT = 1554 extPrimitiveTopologyListRestartFeatures.getJSONObject( 1555 KEY_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT); 1556 store.startGroup(convertName(KEY_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT)); 1557 { 1558 emitBoolean( 1559 store, 1560 primitiveTopologyListRestartFeaturesEXT, 1561 KEY_PRIMITIVE_TOPOLOGY_LIST_RESTART); 1562 emitBoolean( 1563 store, 1564 primitiveTopologyListRestartFeaturesEXT, 1565 KEY_PRIMITIVE_TOPOLOGY_PATCH_LIST_RESTART); 1566 } 1567 store.endGroup(); 1568 } 1569 store.endGroup(); 1570 } catch (JSONException e) { 1571 e.printStackTrace(); 1572 throw new RuntimeException(e); 1573 } 1574 } catch (JSONException ok) { 1575 // The tag is not present in vkjson; that's fine, just continue 1576 } 1577 } 1578 emitransformFeedbackFeaturesEXT(DeviceInfoStore store, JSONObject parent)1579 private static void emitransformFeedbackFeaturesEXT(DeviceInfoStore store, JSONObject parent) 1580 throws Exception { 1581 try { 1582 JSONObject extTransformFeedbackFeatures = 1583 parent.getJSONObject(KEY_VK_EXT_TRANSFORM_FEEDBACK); 1584 try { 1585 store.startGroup(convertName(KEY_VK_EXT_TRANSFORM_FEEDBACK)); 1586 { 1587 JSONObject transformFeedbackFeaturesEXT = 1588 extTransformFeedbackFeatures.getJSONObject( 1589 KEY_TRANSFORM_FEEDBACK_FEATURES_EXT); 1590 store.startGroup(convertName(KEY_TRANSFORM_FEEDBACK_FEATURES_EXT)); 1591 { 1592 emitBoolean(store, transformFeedbackFeaturesEXT, KEY_GEOMETRY_STREAMS); 1593 emitBoolean(store, transformFeedbackFeaturesEXT, KEY_TRANSFORM_FEEDBACK); 1594 } 1595 store.endGroup(); 1596 } 1597 store.endGroup(); 1598 } catch (JSONException e) { 1599 e.printStackTrace(); 1600 throw new RuntimeException(e); 1601 } 1602 } catch (JSONException ok) { 1603 // The tag is not present in vkjson; that's fine, just continue 1604 } 1605 } 1606 emitProvokingVertexFeaturesEXT(DeviceInfoStore store, JSONObject parent)1607 private static void emitProvokingVertexFeaturesEXT(DeviceInfoStore store, JSONObject parent) 1608 throws Exception { 1609 try { 1610 JSONObject extProvokingVertexFeatures = 1611 parent.getJSONObject(KEY_VK_EXT_PROVOKING_VERTEX); 1612 try { 1613 store.startGroup(convertName(KEY_VK_EXT_PROVOKING_VERTEX)); 1614 { 1615 JSONObject provokingVertexFeaturesEXT = 1616 extProvokingVertexFeatures.getJSONObject( 1617 KEY_PROVOKING_VERTEX_FEATURES_EXT); 1618 1619 store.startGroup(convertName(KEY_PROVOKING_VERTEX_FEATURES_EXT)); 1620 { 1621 emitBoolean(store, provokingVertexFeaturesEXT, KEY_PROVOKING_VERTEX_LAST); 1622 1623 emitBoolean( 1624 store, 1625 provokingVertexFeaturesEXT, 1626 KEY_TRANSFORM_FEEDBACK_PRESERVES_PROVOKING_VERTEX); 1627 } 1628 store.endGroup(); 1629 } 1630 store.endGroup(); 1631 } catch (JSONException e) { 1632 e.printStackTrace(); 1633 throw new RuntimeException(e); 1634 } 1635 } catch (JSONException ok) { 1636 // The tag is not present in vkjson; that's fine, just continue 1637 } 1638 } 1639 emitIndexTypeUint8FeaturesEXT(DeviceInfoStore store, JSONObject parent)1640 private static void emitIndexTypeUint8FeaturesEXT(DeviceInfoStore store, JSONObject parent) 1641 throws Exception { 1642 try { 1643 JSONObject extIndexTypeUint8Features = 1644 parent.getJSONObject(KEY_VK_EXT_INDEX_TYPE_UINT8); 1645 try { 1646 store.startGroup(convertName(KEY_VK_EXT_INDEX_TYPE_UINT8)); 1647 { 1648 JSONObject indexTypeUint8FeaturesEXT = 1649 extIndexTypeUint8Features.getJSONObject( 1650 KEY_INDEX_TYPE_UINT8_FEATURES_EXT); 1651 store.startGroup(convertName(KEY_INDEX_TYPE_UINT8_FEATURES_EXT)); 1652 { 1653 emitBoolean(store, indexTypeUint8FeaturesEXT, KEY_INDEX_TYPE_UINT8); 1654 } 1655 store.endGroup(); 1656 } 1657 store.endGroup(); 1658 } catch (JSONException e) { 1659 e.printStackTrace(); 1660 throw new RuntimeException(e); 1661 } 1662 } catch (JSONException ok) { 1663 // The tag is not present in vkjson; that's fine, just continue 1664 } 1665 } 1666 emitIndexTypeUint8FeaturesKHR(DeviceInfoStore store, JSONObject parent)1667 private static void emitIndexTypeUint8FeaturesKHR(DeviceInfoStore store, JSONObject parent) 1668 throws Exception { 1669 try { 1670 JSONObject khrIndexTypeUint8Features = 1671 parent.getJSONObject(KEY_VK_KHR_INDEX_TYPE_UINT8); 1672 try { 1673 store.startGroup(convertName(KEY_VK_KHR_INDEX_TYPE_UINT8)); 1674 { 1675 JSONObject indexTypeUint8FeaturesKHR = 1676 khrIndexTypeUint8Features.getJSONObject( 1677 KEY_INDEX_TYPE_UINT8_FEATURES_KHR); 1678 store.startGroup(convertName(KEY_INDEX_TYPE_UINT8_FEATURES_KHR)); 1679 { 1680 emitBoolean(store, indexTypeUint8FeaturesKHR, KEY_INDEX_TYPE_UINT8); 1681 } 1682 store.endGroup(); 1683 } 1684 store.endGroup(); 1685 } catch (JSONException e) { 1686 e.printStackTrace(); 1687 throw new RuntimeException(e); 1688 } 1689 } catch (JSONException ok) { 1690 // The tag is not present in vkjson; that's fine, just continue 1691 } 1692 } 1693 emit8bitStorageFeaturesKHR(DeviceInfoStore store, JSONObject parent)1694 private static void emit8bitStorageFeaturesKHR(DeviceInfoStore store, JSONObject parent) 1695 throws Exception { 1696 try { 1697 JSONObject khr8bitStorageFeatures = parent.getJSONObject(KEY_VK_KHR_8BIT_STORAGE); 1698 try { 1699 store.startGroup(convertName(KEY_VK_KHR_8BIT_STORAGE)); 1700 { 1701 JSONObject bit8StorageFeaturesKHR= 1702 khr8bitStorageFeatures.getJSONObject(KEY_BIT8_STORAGE_FEATURES_KHR); 1703 store.startGroup(convertName(KEY_BIT8_STORAGE_FEATURES_KHR)); 1704 { 1705 emitBoolean(store, bit8StorageFeaturesKHR, KEY_STORAGE_BUFFER_8BIT_ACCESS); 1706 emitBoolean(store, bit8StorageFeaturesKHR, KEY_STORAGE_PUSH_CONSTANT8); 1707 emitBoolean(store, bit8StorageFeaturesKHR, KEY_UNIFORM_AND_STORAGE_BUFFER_8BIT_ACCESS); 1708 } 1709 store.endGroup(); 1710 } 1711 store.endGroup(); 1712 } catch (JSONException e) { 1713 e.printStackTrace(); 1714 throw new RuntimeException(e); 1715 } 1716 } catch (JSONException ok) { 1717 // The tag is not present in vkjson; that's fine, just continue 1718 } 1719 } 1720 emitShaderFloat16Int8FeaturesKHR(DeviceInfoStore store, JSONObject parent)1721 private static void emitShaderFloat16Int8FeaturesKHR(DeviceInfoStore store, JSONObject parent) 1722 throws Exception { 1723 try { 1724 JSONObject khrShaderFloat16Int8Features = 1725 parent.getJSONObject(KEY_VK_KHR_SHADER_FLOAT16_INT8); 1726 try { 1727 store.startGroup(convertName(KEY_VK_KHR_SHADER_FLOAT16_INT8)); 1728 { 1729 JSONObject shaderFloat16Int8FeaturesKHR = 1730 khrShaderFloat16Int8Features.getJSONObject( 1731 KEY_SHADER_FLOAT16_INT8_FEATURES_KHR); 1732 store.startGroup(convertName(KEY_SHADER_FLOAT16_INT8_FEATURES_KHR)); 1733 { 1734 emitBoolean(store, shaderFloat16Int8FeaturesKHR, KEY_SHADER_FLOAT16); 1735 emitBoolean(store, shaderFloat16Int8FeaturesKHR, KEY_SHADER_INT8); 1736 } 1737 store.endGroup(); 1738 1739 JSONObject float16Int8FeaturesKHR = 1740 khrShaderFloat16Int8Features.getJSONObject( 1741 KEY_FLOAT16_INT8_FEATURES_KHR); 1742 store.startGroup(convertName(KEY_FLOAT16_INT8_FEATURES_KHR)); 1743 { 1744 emitBoolean(store, float16Int8FeaturesKHR, KEY_SHADER_FLOAT16); 1745 emitBoolean(store, float16Int8FeaturesKHR, KEY_SHADER_INT8); 1746 } 1747 store.endGroup(); 1748 } 1749 store.endGroup(); 1750 } catch (JSONException e) { 1751 e.printStackTrace(); 1752 throw new RuntimeException(e); 1753 } 1754 } catch (JSONException ok) { 1755 // The tag is not present in vkjson; that's fine, just continue 1756 } 1757 } 1758 emitShaderIntegerDotProductFeaturesKHR( DeviceInfoStore store, JSONObject parent)1759 private static void emitShaderIntegerDotProductFeaturesKHR( 1760 DeviceInfoStore store, JSONObject parent) throws Exception { 1761 try { 1762 JSONObject khrShaderIntegerDotProductFeatures = 1763 parent.getJSONObject(KEY_VK_KHR_SHADER_INTEGER_DOT_PRODUCT); 1764 try { 1765 store.startGroup(convertName(KEY_VK_KHR_SHADER_INTEGER_DOT_PRODUCT)); 1766 { 1767 JSONObject shaderIntegerDotProductFeaturesKHR = 1768 khrShaderIntegerDotProductFeatures.getJSONObject( 1769 KEY_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR); 1770 store.startGroup(convertName(KEY_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR)); 1771 { 1772 emitBoolean( 1773 store, 1774 shaderIntegerDotProductFeaturesKHR, 1775 KEY_SHADER_INTEGER_DOT_PRODUCT); 1776 } 1777 store.endGroup(); 1778 } 1779 store.endGroup(); 1780 } catch (JSONException e) { 1781 e.printStackTrace(); 1782 throw new RuntimeException(e); 1783 } 1784 } catch (JSONException ok) { 1785 // The tag is not present in vkjson; that's fine, just continue 1786 } 1787 } 1788 emitShaderSubgroupExtendedTypesFeaturesKHR( DeviceInfoStore store, JSONObject parent)1789 private static void emitShaderSubgroupExtendedTypesFeaturesKHR( 1790 DeviceInfoStore store, JSONObject parent) throws Exception { 1791 try { 1792 JSONObject khrShaderSubgroupExtendedTypesFeatures = 1793 parent.getJSONObject(KEY_VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES); 1794 try { 1795 store.startGroup(convertName(KEY_VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES)); 1796 { 1797 JSONObject shaderSubgroupExtendedTypesFeaturesKHR = 1798 khrShaderSubgroupExtendedTypesFeatures.getJSONObject( 1799 KEY_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR); 1800 store.startGroup(convertName(KEY_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR)); 1801 { 1802 emitBoolean( 1803 store, 1804 shaderSubgroupExtendedTypesFeaturesKHR, 1805 KEY_SHADER_SUBGROUP_EXTENDED_TYPES); 1806 } 1807 store.endGroup(); 1808 } 1809 store.endGroup(); 1810 } catch (JSONException e) { 1811 e.printStackTrace(); 1812 throw new RuntimeException(e); 1813 } 1814 } catch (JSONException ok) { 1815 // The tag is not present in vkjson; that's fine, just continue 1816 } 1817 } 1818 emitShaderSubgroupUniformControlFlowFeaturesKHR( DeviceInfoStore store, JSONObject parent)1819 private static void emitShaderSubgroupUniformControlFlowFeaturesKHR( 1820 DeviceInfoStore store, JSONObject parent) throws Exception { 1821 try { 1822 JSONObject extShaderSubgroupUniformControlFlowFeatures = 1823 parent.getJSONObject(KEY_VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW); 1824 try { 1825 store.startGroup(convertName(KEY_VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW)); 1826 { 1827 JSONObject shaderSubgroupUniformControlFlowFeaturesKHR = 1828 extShaderSubgroupUniformControlFlowFeatures.getJSONObject( 1829 KEY_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR); 1830 store.startGroup( 1831 convertName(KEY_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR)); 1832 { 1833 emitBoolean( 1834 store, 1835 shaderSubgroupUniformControlFlowFeaturesKHR, 1836 KEY_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW); 1837 } 1838 store.endGroup(); 1839 } 1840 store.endGroup(); 1841 } catch (JSONException e) { 1842 e.printStackTrace(); 1843 throw new RuntimeException(e); 1844 } 1845 } catch (JSONException ok) { 1846 // The tag is not present in vkjson; that's fine, just continue 1847 } 1848 } 1849 emitLineRasterizationFeaturesEXT(DeviceInfoStore store, JSONObject parent)1850 private static void emitLineRasterizationFeaturesEXT(DeviceInfoStore store, JSONObject parent) 1851 throws Exception { 1852 try { 1853 JSONObject extLineRasterizationFeatures = 1854 parent.getJSONObject(KEY_VK_EXT_LINE_RASTERIZATION); 1855 try { 1856 store.startGroup(convertName(KEY_VK_EXT_LINE_RASTERIZATION)); 1857 { 1858 JSONObject lineRasterizationFeaturesEXT = 1859 extLineRasterizationFeatures.getJSONObject( 1860 KEY_LINE_RASTERIZATION_FEATURES_EXT); 1861 store.startGroup(convertName(KEY_LINE_RASTERIZATION_FEATURES_EXT)); 1862 { 1863 emitBoolean(store, lineRasterizationFeaturesEXT, KEY_BRESENHAM_LINES); 1864 emitBoolean(store, lineRasterizationFeaturesEXT, KEY_RECTANGULAR_LINES); 1865 emitBoolean(store, lineRasterizationFeaturesEXT, KEY_SMOOTH_LINES); 1866 emitBoolean( 1867 store, lineRasterizationFeaturesEXT, KEY_STIPPLED_BRESENHAM_LINES); 1868 emitBoolean( 1869 store, 1870 lineRasterizationFeaturesEXT, 1871 KEY_STIPPLED_RECTANGULAR_LINES); 1872 emitBoolean(store, lineRasterizationFeaturesEXT, KEY_STIPPLED_SMOOTH_LINES); 1873 } 1874 store.endGroup(); 1875 } 1876 store.endGroup(); 1877 } catch (JSONException e) { 1878 e.printStackTrace(); 1879 throw new RuntimeException(e); 1880 } 1881 } catch (JSONException ok) { 1882 // The tag is not present in vkjson; that's fine, just continue 1883 } 1884 } 1885 emitPrimitivesGeneratedQueryFeaturesEXT( DeviceInfoStore store, JSONObject parent)1886 private static void emitPrimitivesGeneratedQueryFeaturesEXT( 1887 DeviceInfoStore store, JSONObject parent) throws Exception { 1888 try { 1889 JSONObject extPrimitivesGeneratedQueryFeatures = 1890 parent.getJSONObject(KEY_VK_EXT_PRIMITIVES_GENERATED_QUERY); 1891 try { 1892 store.startGroup(convertName(KEY_VK_EXT_PRIMITIVES_GENERATED_QUERY)); 1893 { 1894 JSONObject primitivesGeneratedQueryFeaturesEXT = 1895 extPrimitivesGeneratedQueryFeatures.getJSONObject( 1896 KEY_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT); 1897 store.startGroup(convertName(KEY_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT)); 1898 { 1899 emitBoolean( 1900 store, 1901 primitivesGeneratedQueryFeaturesEXT, 1902 KEY_PRIMITIVES_GENERATED_QUERY); 1903 emitBoolean( 1904 store, 1905 primitivesGeneratedQueryFeaturesEXT, 1906 KEY_PRIMITIVES_GENERATED_QUERY_WITH_NON_ZERO_STREAMS); 1907 emitBoolean( 1908 store, 1909 primitivesGeneratedQueryFeaturesEXT, 1910 KEY_PRIMITIVES_GENERATED_QUERY_WITH_RASTERIZER_DISCARD); 1911 } 1912 store.endGroup(); 1913 } 1914 store.endGroup(); 1915 } catch (JSONException e) { 1916 e.printStackTrace(); 1917 throw new RuntimeException(e); 1918 } 1919 } catch (JSONException ok) { 1920 // The tag is not present in vkjson; that's fine, just continue 1921 } 1922 } 1923 emitFloatControlsPropertiesKHR(DeviceInfoStore store, JSONObject parent)1924 private static void emitFloatControlsPropertiesKHR(DeviceInfoStore store, JSONObject parent) 1925 throws Exception { 1926 try { 1927 JSONObject khrFloatControlsProperties = 1928 parent.getJSONObject(KEY_VK_KHR_SHADER_FLOAT_CONTROLS); 1929 try { 1930 store.startGroup(convertName(KEY_VK_KHR_SHADER_FLOAT_CONTROLS)); 1931 { 1932 JSONObject floatControlsPropertiesKHR = 1933 khrFloatControlsProperties.getJSONObject( 1934 KEY_FLOAT_CONTROLS_PROPERTIES_KHR); 1935 store.startGroup(convertName(KEY_FLOAT_CONTROLS_PROPERTIES_KHR)); 1936 { 1937 emitLong( 1938 store, 1939 floatControlsPropertiesKHR, 1940 KEY_DENORM_BEHAVIOR_INDEPENDENCE); 1941 emitLong( 1942 store, floatControlsPropertiesKHR, KEY_ROUNDING_MODE_INDEPENDENCE); 1943 emitBoolean( 1944 store, 1945 floatControlsPropertiesKHR, 1946 KEY_SHADER_DENORM_FLUSH_TO_ZERO_FLOAT16); 1947 emitBoolean( 1948 store, 1949 floatControlsPropertiesKHR, 1950 KEY_SHADER_DENORM_FLUSH_TO_ZERO_FLOAT32); 1951 emitBoolean( 1952 store, 1953 floatControlsPropertiesKHR, 1954 KEY_SHADER_DENORM_FLUSH_TO_ZERO_FLOAT64); 1955 emitBoolean( 1956 store, 1957 floatControlsPropertiesKHR, 1958 KEY_SHADER_DENORM_PRESERVE_FLOAT16); 1959 emitBoolean( 1960 store, 1961 floatControlsPropertiesKHR, 1962 KEY_SHADER_DENORM_PRESERVE_FLOAT32); 1963 emitBoolean( 1964 store, 1965 floatControlsPropertiesKHR, 1966 KEY_SHADER_DENORM_PRESERVE_FLOAT64); 1967 emitBoolean( 1968 store, 1969 floatControlsPropertiesKHR, 1970 KEY_SHADER_ROUNDING_MODE_RTE_FLOAT16); 1971 emitBoolean( 1972 store, 1973 floatControlsPropertiesKHR, 1974 KEY_SHADER_ROUNDING_MODE_RTE_FLOAT32); 1975 emitBoolean( 1976 store, 1977 floatControlsPropertiesKHR, 1978 KEY_SHADER_ROUNDING_MODE_RTE_FLOAT64); 1979 emitBoolean( 1980 store, 1981 floatControlsPropertiesKHR, 1982 KEY_SHADER_ROUNDING_MODE_RTZ_FLOAT16); 1983 emitBoolean( 1984 store, 1985 floatControlsPropertiesKHR, 1986 KEY_SHADER_ROUNDING_MODE_RTZ_FLOAT32); 1987 emitBoolean( 1988 store, 1989 floatControlsPropertiesKHR, 1990 KEY_SHADER_ROUNDING_MODE_RTZ_FLOAT64); 1991 emitBoolean( 1992 store, 1993 floatControlsPropertiesKHR, 1994 KEY_SHADER_SIGNED_ZERO_INF_NAN_PRESERVE_FLOAT16); 1995 emitBoolean( 1996 store, 1997 floatControlsPropertiesKHR, 1998 KEY_SHADER_SIGNED_ZERO_INF_NAN_PRESERVE_FLOAT32); 1999 emitBoolean( 2000 store, 2001 floatControlsPropertiesKHR, 2002 KEY_SHADER_SIGNED_ZERO_INF_NAN_PRESERVE_FLOAT64); 2003 } 2004 store.endGroup(); 2005 } 2006 store.endGroup(); 2007 } catch (JSONException e) { 2008 e.printStackTrace(); 2009 throw new RuntimeException(e); 2010 } 2011 } catch (JSONException ok) { 2012 // The tag is not present in vkjson; that's fine, just continue 2013 } 2014 } 2015 emitRelaxedLineRasterizationFeaturesIMG( DeviceInfoStore store, JSONObject parent)2016 private static void emitRelaxedLineRasterizationFeaturesIMG( 2017 DeviceInfoStore store, JSONObject parent) throws Exception { 2018 try { 2019 JSONObject imgRelaxedLineRasterizationFeatures = 2020 parent.getJSONObject(KEY_VK_IMG_RELAXED_LINE_RASTERIZATION); 2021 try { 2022 store.startGroup(convertName(KEY_VK_IMG_RELAXED_LINE_RASTERIZATION)); 2023 { 2024 JSONObject relaxedLineRasterizationFeaturesIMG = 2025 imgRelaxedLineRasterizationFeatures.getJSONObject( 2026 KEY_RELAXED_LINE_RASTERIZATION_FEATURES_IMG); 2027 store.startGroup(convertName(KEY_RELAXED_LINE_RASTERIZATION_FEATURES_IMG)); 2028 { 2029 emitBoolean( 2030 store, 2031 relaxedLineRasterizationFeaturesIMG, 2032 RELAXED_LINE_RASTERIZATION); 2033 } 2034 store.endGroup(); 2035 } 2036 store.endGroup(); 2037 } catch (JSONException e) { 2038 e.printStackTrace(); 2039 throw new RuntimeException(e); 2040 } 2041 } catch (JSONException ok) { 2042 // The tag is not present in vkjson; that's fine, just continue 2043 } 2044 } 2045 emitExtension(String key, DeviceInfoStore store, JSONObject parent)2046 private static void emitExtension(String key, DeviceInfoStore store, JSONObject parent) 2047 throws Exception { 2048 if (!extensionNameToEnum.containsKey(key)) return; 2049 switch (extensionNameToEnum.get(key)) { 2050 case ENUM_VK_KHR_VARIABLE_POINTERS: 2051 emitVariablePointerFeaturesKHR(store, parent); 2052 break; 2053 case ENUM_VK_KHR_DRIVER_PROPERTIES: 2054 emitDriverPropertiesKHR(store, parent); 2055 break; 2056 case ENUM_KEY_VK_EXT_CUSTOM_BORDER_COLOR: 2057 emitCustomBorderColorFeaturesEXT(store, parent); 2058 break; 2059 case ENUM_KEY_VK_EXT_IMAGE_2D_VIEW_OF_3D: 2060 emitImage2DViewOf3DFeaturesEXT(store, parent); 2061 break; 2062 case ENUM_KEY_VK_EXT_TRANSFORM_FEEDBACK: 2063 emitransformFeedbackFeaturesEXT(store, parent); 2064 break; 2065 case ENUM_KEY_VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART: 2066 emitPrimitiveTopologyListRestartFeaturesEXT(store, parent); 2067 break; 2068 case ENUM_KEY_VK_EXT_PROVOKING_VERTEX: 2069 emitProvokingVertexFeaturesEXT(store, parent); 2070 break; 2071 case ENUM_KEY_VK_EXT_INDEX_TYPE_UINT8: 2072 emitIndexTypeUint8FeaturesEXT(store, parent); 2073 break; 2074 case ENUM_KEY_VK_KHR_INDEX_TYPE_UINT8: 2075 emitIndexTypeUint8FeaturesKHR(store, parent); 2076 break; 2077 case ENUM_KEY_VK_KHR_8BIT_STORAGE: 2078 emit8bitStorageFeaturesKHR(store, parent); 2079 break; 2080 case ENUM_KEY_VK_KHR_SHADER_FLOAT16_INT8: 2081 emitShaderFloat16Int8FeaturesKHR(store, parent); 2082 break; 2083 case ENUM_KEY_VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW: 2084 emitShaderSubgroupUniformControlFlowFeaturesKHR(store, parent); 2085 break; 2086 case ENUM_KEY_VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES: 2087 emitShaderSubgroupExtendedTypesFeaturesKHR(store, parent); 2088 break; 2089 case ENUM_KEY_VK_KHR_SHADER_INTEGER_DOT_PRODUCT: 2090 emitShaderIntegerDotProductFeaturesKHR(store, parent); 2091 break; 2092 case ENUM_KEY_VK_EXT_LINE_RASTERIZATION: 2093 emitLineRasterizationFeaturesEXT(store, parent); 2094 break; 2095 case ENUM_KEY_VK_EXT_PRIMITIVES_GENERATED_QUERY: 2096 emitPrimitivesGeneratedQueryFeaturesEXT(store, parent); 2097 break; 2098 case ENUM_KEY_VK_KHR_SHADER_FLOAT_CONTROLS: 2099 emitFloatControlsPropertiesKHR(store, parent); 2100 break; 2101 case ENUM_KEY_VK_IMG_RELAXED_LINE_RASTERIZATION: 2102 emitRelaxedLineRasterizationFeaturesIMG(store, parent); 2103 break; 2104 case ENUM_KEY_VK_KHR_VERTEX_ATTRIBUTE_DIVISOR: 2105 emitVertexAttributeDivisorFeaturesKHR(store, parent); 2106 break; 2107 } 2108 } 2109 emitExtensions(DeviceInfoStore store, JSONObject parent)2110 private static void emitExtensions(DeviceInfoStore store, JSONObject parent) 2111 throws Exception { 2112 JSONArray extensions = parent.getJSONArray(KEY_EXTENSIONS); 2113 store.startArray(convertName(KEY_EXTENSIONS)); 2114 for (int i = 0; i < extensions.length(); i++) { 2115 JSONObject extension = extensions.getJSONObject(i); 2116 store.startGroup(); 2117 { 2118 emitString(store, extension, KEY_EXTENSION_NAME); 2119 emitLong(store, extension, KEY_SPEC_VERSION); 2120 } 2121 store.endGroup(); 2122 } 2123 store.endArray(); 2124 2125 for (int i = 0; i < extensions.length(); i++) { 2126 JSONObject extension = extensions.getJSONObject(i); 2127 String key = extension.getString(KEY_EXTENSION_NAME); 2128 emitExtension(key, store, parent); 2129 } 2130 } 2131 emitBoolean(DeviceInfoStore store, JSONObject parent, String name)2132 private static void emitBoolean(DeviceInfoStore store, JSONObject parent, String name) 2133 throws Exception { 2134 store.addResult(convertName(name), parent.getInt(name) != 0 ? true : false); 2135 } 2136 emitLong(DeviceInfoStore store, JSONObject parent, String name)2137 private static void emitLong(DeviceInfoStore store, JSONObject parent, String name) 2138 throws Exception { 2139 store.addResult(convertName(name), parent.getLong(name)); 2140 } 2141 emitDouble(DeviceInfoStore store, JSONObject parent, String name)2142 private static void emitDouble(DeviceInfoStore store, JSONObject parent, String name) 2143 throws Exception { 2144 store.addResult(convertName(name), parent.getDouble(name)); 2145 } 2146 emitString(DeviceInfoStore store, JSONObject parent, String name)2147 private static void emitString(DeviceInfoStore store, JSONObject parent, String name) 2148 throws Exception { 2149 store.addResult(convertName(name), parent.getString(name)); 2150 } 2151 emitLongArray(DeviceInfoStore store, JSONObject parent, String name)2152 private static void emitLongArray(DeviceInfoStore store, JSONObject parent, String name) 2153 throws Exception { 2154 JSONArray jsonArray = parent.getJSONArray(name); 2155 long[] array = new long[jsonArray.length()]; 2156 for (int i = 0; i < jsonArray.length(); i++) { 2157 array[i] = jsonArray.getLong(i); 2158 } 2159 store.addArrayResult(convertName(name), array); 2160 } 2161 emitDoubleArray(DeviceInfoStore store, JSONObject parent, String name)2162 private static void emitDoubleArray(DeviceInfoStore store, JSONObject parent, String name) 2163 throws Exception { 2164 JSONArray jsonArray = parent.getJSONArray(name); 2165 double[] array = new double[jsonArray.length()]; 2166 for (int i = 0; i < jsonArray.length(); i++) { 2167 array[i] = jsonArray.getDouble(i); 2168 } 2169 store.addArrayResult(convertName(name), array); 2170 } 2171 convertName(String name)2172 private static String convertName(String name) { 2173 // This translation could be done algorithmically, but in this case being able to 2174 // code-search for both the original and converted names is more important. 2175 switch (name) { 2176 case KEY_BIT16_STORAGE_FEATURES: return "bit16_storage_features"; 2177 case KEY_ALPHA_TO_ONE: return "alpha_to_one"; 2178 case KEY_API_VERSION: return "api_version"; 2179 case KEY_BUFFER_DEVICE_ADDRESS: return "buffer_device_address"; 2180 case KEY_BUFFER_DEVICE_ADDRESS_CAPTURE_REPLAY: return "buffer_device_address_capture_replay"; 2181 case KEY_BUFFER_DEVICE_ADDRESS_MULTI_DEVICE: return "buffer_device_address_multi_device"; 2182 case KEY_BUFFER_FEATURES: return "buffer_features"; 2183 case KEY_BUFFER_IMAGE_GRANULARITY: return "buffer_image_granularity"; 2184 case KEY_COMPATIBLE_HANDLE_TYPES: return "compatible_handle_types"; 2185 case KEY_COMPUTE_FULL_SUBGROUPS: return "compute_full_subgroups"; 2186 case KEY_CONFORMANCE_VERSION: return "conformance_version"; 2187 case KEY_DENORM_BEHAVIOR_INDEPENDENCE: return "denorm_behavior_independence"; 2188 case KEY_DEPTH: return "depth"; 2189 case KEY_DEPTH_BIAS_CLAMP: return "depth_bias_clamp"; 2190 case KEY_DEPTH_BOUNDS: return "depth_bounds"; 2191 case KEY_DEPTH_CLAMP: return "depth_clamp"; 2192 case KEY_DESCRIPTION: return "description"; 2193 case KEY_DESCRIPTOR_BINDING_INLINE_UNIFORM_BLOCK_UPDATE_AFTER_BIND: return "descriptor_binding_inline_uniform_block_update_after_bind"; 2194 case KEY_DESCRIPTOR_BINDING_PARTIALLY_BOUND: return "descriptor_binding_partially_bound"; 2195 case KEY_DESCRIPTOR_BINDING_SAMPLED_IMAGE_UPDATE_AFTER_BIND: return "descriptor_binding_sampled_image_update_after_bind"; 2196 case KEY_DESCRIPTOR_BINDING_STORAGE_BUFFER_UPDATE_AFTER_BIND: return "descriptor_binding_storage_buffer_update_after_bind"; 2197 case KEY_DESCRIPTOR_BINDING_STORAGE_IMAGE_UPDATE_AFTER_BIND: return "descriptor_binding_storage_image_update_after_bind"; 2198 case KEY_DESCRIPTOR_BINDING_STORAGE_TEXEL_BUFFER_UPDATE_AFTER_BIND: return "descriptor_binding_storage_texel_buffer_update_after_bind"; 2199 case KEY_DESCRIPTOR_BINDING_UNIFORM_BUFFER_UPDATE_AFTER_BIND: return "descriptor_binding_uniform_buffer_update_after_bind"; 2200 case KEY_DESCRIPTOR_BINDING_UNIFORM_TEXEL_BUFFER_UPDATE_AFTER_BIND: return "descriptor_binding_uniform_texel_buffer_update_after_bind"; 2201 case KEY_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING: return "descriptor_binding_update_unused_while_pending"; 2202 case KEY_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT: return "descriptor_binding_variable_descriptor_count"; 2203 case KEY_DESCRIPTOR_INDEXING: return "descriptor_indexing"; 2204 case KEY_DEVICES: return "devices"; 2205 case KEY_DEVICE_GROUPS: return "device_groups"; 2206 case KEY_DEVICE_ID: return "device_id"; 2207 case KEY_DEVICE_LUID: return "device_luid"; 2208 case KEY_DEVICE_LUID_VALID: return "device_luid_valid"; 2209 case KEY_DEVICE_NAME: return "device_name"; 2210 case KEY_DEVICE_NODE_MASK: return "device_node_mask"; 2211 case KEY_DEVICE_TYPE: return "device_type"; 2212 case KEY_DEVICE_UUID: return "device_uuid"; 2213 case KEY_DISCRETE_QUEUE_PRIORITIES: return "discrete_queue_priorities"; 2214 case KEY_DRAW_INDIRECT_COUNT: return "draw_indirect_count"; 2215 case KEY_DRAW_INDIRECT_FIRST_INSTANCE: return "draw_indirect_first_instance"; 2216 case KEY_DRIVER_ID: return "driver_id"; 2217 case KEY_DRIVER_INFO: return "driver_info"; 2218 case KEY_DRIVER_NAME: return "driver_name"; 2219 case KEY_DRIVER_PROPERTIES_KHR: return "driver_properties_khr"; 2220 case KEY_DRIVER_UUID: return "driver_uuid"; 2221 case KEY_DRIVER_VERSION: return "driver_version"; 2222 case KEY_DUAL_SRC_BLEND: return "dual_src_blend"; 2223 case KEY_DYNAMIC_RENDERING: return "dynamic_rendering"; 2224 case KEY_EXPORT_FROM_IMPORTED_HANDLE_TYPES: return "export_from_imported_handle_types"; 2225 case KEY_EXTENSIONS: return "extensions"; 2226 case KEY_EXTENSION_NAME: return "extension_name"; 2227 case KEY_EXTERNAL_FENCE_FEATURES: return "external_fence_features"; 2228 case KEY_EXTERNAL_FENCE_PROPERTIES: return "external_fence_properties"; 2229 case KEY_EXTERNAL_SEMAPHORE_FEATURES: return "external_semaphore_features"; 2230 case KEY_EXTERNAL_SEMAPHORE_PROPERTIES: return "external_semaphore_properties"; 2231 case KEY_FEATURES: return "features"; 2232 case KEY_FILL_MODE_NON_SOLID: return "fill_mode_non_solid"; 2233 case KEY_FILTER_MINMAX_IMAGE_COMPONENT_MAPPING: return "filter_minmax_image_component_mapping"; 2234 case KEY_FILTER_MINMAX_SINGLE_COMPONENT_FORMATS: return "filter_minmax_single_component_formats"; 2235 case KEY_FLAGS: return "flags"; 2236 case KEY_FORMATS: return "formats"; 2237 case KEY_FRAGMENT_STORES_AND_ATOMICS: return "fragment_stores_and_atomics"; 2238 case KEY_FRAMEBUFFER_COLOR_SAMPLE_COUNTS: return "framebuffer_color_sample_counts"; 2239 case KEY_FRAMEBUFFER_DEPTH_SAMPLE_COUNTS: return "framebuffer_depth_sample_counts"; 2240 case KEY_FRAMEBUFFER_INTEGER_COLOR_SAMPLE_COUNTS: return "framebuffer_integer_color_sample_counts"; 2241 case KEY_FRAMEBUFFER_NO_ATTACHMENTS_SAMPLE_COUNTS: return "framebuffer_no_attachments_sample_counts"; 2242 case KEY_FRAMEBUFFER_STENCIL_SAMPLE_COUNTS: return "framebuffer_stencil_sample_counts"; 2243 case KEY_FULL_DRAW_INDEX_UINT32: return "full_draw_index_uint32"; 2244 case KEY_GEOMETRY_SHADER: return "geometry_shader"; 2245 case KEY_HEAP_INDEX: return "heap_index"; 2246 case KEY_HEIGHT: return "height"; 2247 case KEY_HOST_QUERY_RESET: return "host_query_reset"; 2248 case KEY_ID_PROPERTIES: return "id_properties"; 2249 case KEY_IMAGELESS_FRAMEBUFFER: return "imageless_framebuffer"; 2250 case KEY_IMAGE_CUBE_ARRAY: return "image_cube_array"; 2251 case KEY_IMPLEMENTATION_VERSION: return "implementation_version"; 2252 case KEY_INDEPENDENT_BLEND: return "independent_blend"; 2253 case KEY_INDEPENDENT_RESOLVE: return "independent_resolve"; 2254 case KEY_INDEPENDENT_RESOLVE_NONE: return "independent_resolve_none"; 2255 case KEY_INHERITED_QUERIES: return "inherited_queries"; 2256 case KEY_INLINE_UNIFORM_BLOCK: return "inline_uniform_block"; 2257 case KEY_INSTANCE_API_VERSION: return "instance_api_version"; 2258 case KEY_INTEGER_DOT_PRODUCT_16BIT_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_16bit_mixed_signedness_accelerated"; 2259 case KEY_INTEGER_DOT_PRODUCT_16BIT_SIGNED_ACCELERATED: return "integer_dot_product_16bit_signed_accelerated"; 2260 case KEY_INTEGER_DOT_PRODUCT_16BIT_UNSIGNED_ACCELERATED: return "integer_dot_product_16bit_unsigned_accelerated"; 2261 case KEY_INTEGER_DOT_PRODUCT_32BIT_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_32bit_mixed_signedness_accelerated"; 2262 case KEY_INTEGER_DOT_PRODUCT_32BIT_SIGNED_ACCELERATED: return "integer_dot_product_32bit_signed_accelerated"; 2263 case KEY_INTEGER_DOT_PRODUCT_32BIT_UNSIGNED_ACCELERATED: return "integer_dot_product_32bit_unsigned_accelerated"; 2264 case KEY_INTEGER_DOT_PRODUCT_4X8BIT_PACKED_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_4x8bit_packed_mixed_signedness_accelerated"; 2265 case KEY_INTEGER_DOT_PRODUCT_4X8BIT_PACKED_SIGNED_ACCELERATED: return "integer_dot_product_4x8bit_packed_signed_accelerated"; 2266 case KEY_INTEGER_DOT_PRODUCT_4X8BIT_PACKED_UNSIGNED_ACCELERATED: return "integer_dot_product_4x8bit_packed_unsigned_accelerated"; 2267 case KEY_INTEGER_DOT_PRODUCT_64BIT_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_64bit_mixed_signedness_accelerated"; 2268 case KEY_INTEGER_DOT_PRODUCT_64BIT_SIGNED_ACCELERATED: return "integer_dot_product_64bit_signed_accelerated"; 2269 case KEY_INTEGER_DOT_PRODUCT_64BIT_UNSIGNED_ACCELERATED: return "integer_dot_product_64bit_unsigned_accelerated"; 2270 case KEY_INTEGER_DOT_PRODUCT_8BIT_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_8bit_mixed_signedness_accelerated"; 2271 case KEY_INTEGER_DOT_PRODUCT_8BIT_SIGNED_ACCELERATED: return "integer_dot_product_8bit_signed_accelerated"; 2272 case KEY_INTEGER_DOT_PRODUCT_8BIT_UNSIGNED_ACCELERATED: return "integer_dot_product_8bit_unsigned_accelerated"; 2273 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_16BIT_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_accumulating_saturating_16bit_mixed_signedness_accelerated"; 2274 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_16BIT_SIGNED_ACCELERATED: return "integer_dot_product_accumulating_saturating_16bit_signed_accelerated"; 2275 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_16BIT_UNSIGNED_ACCELERATED: return "integer_dot_product_accumulating_saturating_16bit_unsigned_accelerated"; 2276 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_32BIT_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_accumulating_saturating_32bit_mixed_signedness_accelerated"; 2277 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_32BIT_SIGNED_ACCELERATED: return "integer_dot_product_accumulating_saturating_32bit_signed_accelerated"; 2278 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_32BIT_UNSIGNED_ACCELERATED: return "integer_dot_product_accumulating_saturating_32bit_unsigned_accelerated"; 2279 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_4X8BIT_PACKED_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_accumulating_saturating_4x8bit_packed_mixed_signedness_accelerated"; 2280 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_4X8BIT_PACKED_SIGNED_ACCELERATED: return "integer_dot_product_accumulating_saturating_4x8bit_packed_signed_accelerated"; 2281 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_4X8BIT_PACKED_UNSIGNED_ACCELERATED: return "integer_dot_product_accumulating_saturating_4x8bit_packed_unsigned_accelerated"; 2282 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_64BIT_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_accumulating_saturating_64bit_mixed_signedness_accelerated"; 2283 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_64BIT_SIGNEDNESS_ACCELERATED: return "integer_dot_product_accumulating_saturating_64bit_signed_accelerated"; 2284 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_64BIT_UNSIGNED_ACCELERATED: return "integer_dot_product_accumulating_saturating_64bit_unsigned_accelerated"; 2285 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_8BIT_MIXED_SIGNEDNESS_ACCELERATED: return "integer_dot_product_accumulating_saturating_8bit_mixed_signedness_accelerated"; 2286 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_8BIT_SIGNED_ACCELERATED: return "integer_dot_product_accumulating_saturating_8bit_signed_accelerated"; 2287 case KEY_INTEGER_DOT_PRODUCT_ACCUMULATING_SATURATING_8BIT_UNSIGNED_ACCELERATED: return "integer_dot_product_accumulating_saturating_8bit_unsigned_accelerated"; 2288 case KEY_LARGE_POINTS: return "large_points"; 2289 case KEY_LAYERS: return "layers"; 2290 case KEY_LAYER_NAME: return "layer_name"; 2291 case KEY_LIMITS: return "limits"; 2292 case KEY_LINEAR_TILING_FEATURES: return "linear_tiling_features"; 2293 case KEY_LINE_WIDTH_GRANULARITY: return "line_width_granularity"; 2294 case KEY_LINE_WIDTH_RANGE: return "line_width_range"; 2295 case KEY_LOGIC_OP: return "logic_op"; 2296 case KEY_MAINTENANCE4: return "maintenance4"; 2297 case KEY_MAINTENANCE_3_PROPERTIES: return "maintenance_3_properties"; 2298 case KEY_MAJOR: return "major"; 2299 case KEY_MAX_BOUND_DESCRIPTOR_SETS: return "max_bound_descriptor_sets"; 2300 case KEY_MAX_BUFFER_SIZE: return "max_buffer_size"; 2301 case KEY_MAX_CLIP_DISTANCES: return "max_clip_distances"; 2302 case KEY_MAX_COLOR_ATTACHMENTS: return "max_color_attachments"; 2303 case KEY_MAX_COMBINED_CLIP_AND_CULL_DISTANCES: return "max_combined_clip_and_cull_distances"; 2304 case KEY_MAX_COMPUTE_SHARED_MEMORY_SIZE: return "max_compute_shared_memory_size"; 2305 case KEY_MAX_COMPUTE_WORKGROUP_SUBGROUPS: return "max_compute_workgroup_subgroups"; 2306 case KEY_MAX_COMPUTE_WORK_GROUP_COUNT: return "max_compute_work_group_count"; 2307 case KEY_MAX_COMPUTE_WORK_GROUP_INVOCATIONS: return "max_compute_work_group_invocations"; 2308 case KEY_MAX_COMPUTE_WORK_GROUP_SIZE: return "max_compute_work_group_size"; 2309 case KEY_MAX_CULL_DISTANCES: return "max_cull_distances"; 2310 case KEY_MAX_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCKS: return "max_descriptor_set_inline_uniform_blocks"; 2311 case KEY_MAX_DESCRIPTOR_SET_INPUT_ATTACHMENTS: return "max_descriptor_set_input_attachments"; 2312 case KEY_MAX_DESCRIPTOR_SET_SAMPLED_IMAGES: return "max_descriptor_set_sampled_images"; 2313 case KEY_MAX_DESCRIPTOR_SET_SAMPLERS: return "max_descriptor_set_samplers"; 2314 case KEY_MAX_DESCRIPTOR_SET_STORAGE_BUFFERS: return "max_descriptor_set_storage_buffers"; 2315 case KEY_MAX_DESCRIPTOR_SET_STORAGE_BUFFERS_DYNAMIC: return "max_descriptor_set_storage_buffers_dynamic"; 2316 case KEY_MAX_DESCRIPTOR_SET_STORAGE_IMAGES: return "max_descriptor_set_storage_images"; 2317 case KEY_MAX_DESCRIPTOR_SET_UNIFORM_BUFFERS: return "max_descriptor_set_uniform_buffers"; 2318 case KEY_MAX_DESCRIPTOR_SET_UNIFORM_BUFFERS_DYNAMIC: return "max_descriptor_set_uniform_buffers_dynamic"; 2319 case KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_INLINE_UNIFORM_BLOCKS: return "max_descriptor_set_update_after_bind_inline_uniform_blocks"; 2320 case KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_INPUT_ATTACHMENTS: return "max_descriptor_set_update_after_bind_input_attachments"; 2321 case KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_SAMPLED_IMAGES: return "max_descriptor_set_update_after_bind_sampled_images"; 2322 case KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_SAMPLERS: return "max_descriptor_set_update_after_bind_samplers"; 2323 case KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_STORAGE_BUFFERS: return "max_descriptor_set_update_after_bind_storage_buffers"; 2324 case KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_STORAGE_BUFFERS_DYNAMIC: return "max_descriptor_set_update_after_bind_storage_buffers_dynamic"; 2325 case KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_STORAGE_IMAGES: return "max_descriptor_set_update_after_bind_storage_images"; 2326 case KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_UNIFORM_BUFFERS: return "max_descriptor_set_update_after_bind_uniform_buffers"; 2327 case KEY_MAX_DESCRIPTOR_SET_UPDATE_AFTER_BIND_UNIFORM_BUFFERS_DYNAMIC: return "max_descriptor_set_update_after_bind_uniform_buffers_dynamic"; 2328 case KEY_MAX_DRAW_INDEXED_INDEX_VALUE: return "max_draw_indexed_index_value"; 2329 case KEY_MAX_DRAW_INDIRECT_COUNT: return "max_draw_indirect_count"; 2330 case KEY_MAX_FRAGMENT_COMBINED_OUTPUT_RESOURCES: return "max_fragment_combined_output_resources"; 2331 case KEY_MAX_FRAGMENT_DUAL_SRC_ATTACHMENTS: return "max_fragment_dual_src_attachments"; 2332 case KEY_MAX_FRAGMENT_INPUT_COMPONENTS: return "max_fragment_input_components"; 2333 case KEY_MAX_FRAGMENT_OUTPUT_ATTACHMENTS: return "max_fragment_output_attachments"; 2334 case KEY_MAX_FRAMEBUFFER_HEIGHT: return "max_framebuffer_height"; 2335 case KEY_MAX_FRAMEBUFFER_LAYERS: return "max_framebuffer_layers"; 2336 case KEY_MAX_FRAMEBUFFER_WIDTH: return "max_framebuffer_width"; 2337 case KEY_MAX_GEOMETRY_INPUT_COMPONENTS: return "max_geometry_input_components"; 2338 case KEY_MAX_GEOMETRY_OUTPUT_COMPONENTS: return "max_geometry_output_components"; 2339 case KEY_MAX_GEOMETRY_OUTPUT_VERTICES: return "max_geometry_output_vertices"; 2340 case KEY_MAX_GEOMETRY_SHADER_INVOCATIONS: return "max_geometry_shader_invocations"; 2341 case KEY_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS: return "max_geometry_total_output_components"; 2342 case KEY_MAX_IMAGE_ARRAY_LAYERS: return "max_image_array_layers"; 2343 case KEY_MAX_IMAGE_DIMENSION_1D: return "max_image_dimension_1d"; 2344 case KEY_MAX_IMAGE_DIMENSION_2D: return "max_image_dimension_2d"; 2345 case KEY_MAX_IMAGE_DIMENSION_3D: return "max_image_dimension_3d"; 2346 case KEY_MAX_IMAGE_DIMENSION_CUBE: return "max_image_dimension_cube"; 2347 case KEY_MAX_INLINE_UNIFORM_BLOCK_SIZE: return "max_inline_uniform_block_size"; 2348 case KEY_MAX_INLINE_UNIFORM_TOTAL_SIZE: return "max_inline_uniform_total_size"; 2349 case KEY_MAX_INTERPOLATION_OFFSET: return "max_interpolation_offset"; 2350 case KEY_MAX_MEMORY_ALLOCATION_COUNT: return "max_memory_allocation_count"; 2351 case KEY_MAX_MEMORY_ALLOCATION_SIZE: return "max_memory_allocation_size"; 2352 case KEY_MAX_MULTIVIEW_INSTANCE_INDEX: return "max_multiview_instance_index"; 2353 case KEY_MAX_MULTIVIEW_VIEW_COUNT: return "max_multiview_view_count"; 2354 case KEY_MAX_PER_SET_DESCRIPTORS: return "max_per_set_descriptors"; 2355 case KEY_MAX_PER_STAGE_DESCRIPTOR_INLINE_UNIFORM_BLOCKS: return "max_per_stage_descriptor_inline_uniform_blocks"; 2356 case KEY_MAX_PER_STAGE_DESCRIPTOR_INPUT_ATTACHMENTS: return "max_per_stage_descriptor_input_attachments"; 2357 case KEY_MAX_PER_STAGE_DESCRIPTOR_SAMPLED_IMAGES: return "max_per_stage_descriptor_sampled_images"; 2358 case KEY_MAX_PER_STAGE_DESCRIPTOR_SAMPLERS: return "max_per_stage_descriptor_samplers"; 2359 case KEY_MAX_PER_STAGE_DESCRIPTOR_STORAGE_BUFFERS: return "max_per_stage_descriptor_storage_buffers"; 2360 case KEY_MAX_PER_STAGE_DESCRIPTOR_STORAGE_IMAGES: return "max_per_stage_descriptor_storage_images"; 2361 case KEY_MAX_PER_STAGE_DESCRIPTOR_UNIFORM_BUFFERS: return "max_per_stage_descriptor_uniform_buffers"; 2362 case KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_INLINE_UNIFORM_BLOCKS: return "max_per_stage_descriptor_update_after_bind_inline_uniform_blocks"; 2363 case KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_INPUT_ATTACHMENTS: return "max_per_stage_descriptor_update_after_bind_input_attachments"; 2364 case KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_SAMPLED_IMAGES: return "max_per_stage_descriptor_update_after_bind_sampled_images"; 2365 case KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_SAMPLERS: return "max_per_stage_descriptor_update_after_bind_samplers"; 2366 case KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_STORAGE_BUFFERS: return "max_per_stage_descriptor_update_after_bind_storage_buffers"; 2367 case KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_STORAGE_IMAGES: return "max_per_stage_descriptor_update_after_bind_storage_images"; 2368 case KEY_MAX_PER_STAGE_DESCRIPTOR_UPDATE_AFTER_BIND_UNIFORM_BUFFERS: return "max_per_stage_descriptor_update_after_bind_uniform_buffers"; 2369 case KEY_MAX_PER_STAGE_RESOURCES: return "max_per_stage_resources"; 2370 case KEY_MAX_PER_STAGE_UPDATE_AFTER_BIND_RESOURCES: return "max_per_stage_update_after_bind_resources"; 2371 case KEY_MAX_PUSH_CONSTANTS_SIZE: return "max_push_constants_size"; 2372 case KEY_MAX_SAMPLER_ALLOCATION_COUNT: return "max_sampler_allocation_count"; 2373 case KEY_MAX_SAMPLER_ANISOTROPY: return "max_sampler_anisotropy"; 2374 case KEY_MAX_SAMPLER_LOD_BIAS: return "max_sampler_lod_bias"; 2375 case KEY_MAX_SAMPLE_MASK_WORDS: return "max_sample_mask_words"; 2376 case KEY_MAX_STORAGE_BUFFER_RANGE: return "max_storage_buffer_range"; 2377 case KEY_MAX_SUBGROUP_SIZE: return "max_subgroup_size"; 2378 case KEY_MAX_TESSELLATION_CONTROL_PER_PATCH_OUTPUT_COMPONENTS: return "max_tessellation_control_per_patch_output_components"; 2379 case KEY_MAX_TESSELLATION_CONTROL_PER_VERTEX_INPUT_COMPONENTS: return "max_tessellation_control_per_vertex_input_components"; 2380 case KEY_MAX_TESSELLATION_CONTROL_PER_VERTEX_OUTPUT_COMPONENTS: return "max_tessellation_control_per_vertex_output_components"; 2381 case KEY_MAX_TESSELLATION_CONTROL_TOTAL_OUTPUT_COMPONENTS: return "max_tessellation_control_total_output_components"; 2382 case KEY_MAX_TESSELLATION_EVALUATION_INPUT_COMPONENTS: return "max_tessellation_evaluation_input_components"; 2383 case KEY_MAX_TESSELLATION_EVALUATION_OUTPUT_COMPONENTS: return "max_tessellation_evaluation_output_components"; 2384 case KEY_MAX_TESSELLATION_GENERATION_LEVEL: return "max_tessellation_generation_level"; 2385 case KEY_MAX_TESSELLATION_PATCH_SIZE: return "max_tessellation_patch_size"; 2386 case KEY_MAX_TEXEL_BUFFER_ELEMENTS: return "max_texel_buffer_elements"; 2387 case KEY_MAX_TEXEL_GATHER_OFFSET: return "max_texel_gather_offset"; 2388 case KEY_MAX_TEXEL_OFFSET: return "max_texel_offset"; 2389 case KEY_MAX_TIMELINE_SEMAPHORE_VALUE_DIFFERENCE: return "max_timeline_semaphore_value_difference"; 2390 case KEY_MAX_UNIFORM_BUFFER_RANGE: return "max_uniform_buffer_range"; 2391 case KEY_MAX_UPDATE_AFTER_BIND_DESCRIPTORS_IN_ALL_POOLS: return "max_update_after_bind_descriptors_in_all_pools"; 2392 case KEY_MAX_VERTEX_INPUT_ATTRIBUTES: return "max_vertex_input_attributes"; 2393 case KEY_MAX_VERTEX_INPUT_ATTRIBUTE_OFFSET: return "max_vertex_input_attribute_offset"; 2394 case KEY_MAX_VERTEX_INPUT_BINDINGS: return "max_vertex_input_bindings"; 2395 case KEY_MAX_VERTEX_INPUT_BINDING_STRIDE: return "max_vertex_input_binding_stride"; 2396 case KEY_MAX_VERTEX_OUTPUT_COMPONENTS: return "max_vertex_output_components"; 2397 case KEY_MAX_VIEWPORTS: return "max_viewports"; 2398 case KEY_MAX_VIEWPORT_DIMENSIONS: return "max_viewport_dimensions"; 2399 case KEY_MEMORY: return "memory"; 2400 case KEY_MEMORY_HEAPS: return "memory_heaps"; 2401 case KEY_MEMORY_HEAP_COUNT: return "memory_heap_count"; 2402 case KEY_MEMORY_TYPES: return "memory_types"; 2403 case KEY_MEMORY_TYPE_COUNT: return "memory_type_count"; 2404 case KEY_MINOR: return "minor"; 2405 case KEY_MIN_IMAGE_TRANSFER_GRANULARITY: return "min_image_transfer_granularity"; 2406 case KEY_MIN_INTERPOLATION_OFFSET: return "min_interpolation_offset"; 2407 case KEY_MIN_MEMORY_MAP_ALIGNMENT: return "min_memory_map_alignment"; 2408 case KEY_MIN_STORAGE_BUFFER_OFFSET_ALIGNMENT: return "min_storage_buffer_offset_alignment"; 2409 case KEY_MIN_SUBGROUP_SIZE: return "min_subgroup_size"; 2410 case KEY_MIN_TEXEL_BUFFER_OFFSET_ALIGNMENT: return "min_texel_buffer_offset_alignment"; 2411 case KEY_MIN_TEXEL_GATHER_OFFSET: return "min_texel_gather_offset"; 2412 case KEY_MIN_TEXEL_OFFSET: return "min_texel_offset"; 2413 case KEY_MIN_UNIFORM_BUFFER_OFFSET_ALIGNMENT: return "min_uniform_buffer_offset_alignment"; 2414 case KEY_MIPMAP_PRECISION_BITS: return "mipmap_precision_bits"; 2415 case KEY_MULTIVIEW: return "multiview"; 2416 case KEY_MULTIVIEW_FEATURES: return "multiview_features"; 2417 case KEY_MULTIVIEW_GEOMETRY_SHADER: return "multiview_geometry_shader"; 2418 case KEY_MULTIVIEW_PROPERTIES: return "multiview_properties"; 2419 case KEY_MULTIVIEW_TESSELLATION_SHADER: return "multiview_tessellation_shader"; 2420 case KEY_MULTI_DRAW_INDIRECT: return "multi_draw_indirect"; 2421 case KEY_MULTI_VIEWPORT: return "multi_viewport"; 2422 case KEY_NON_COHERENT_ATOM_SIZE: return "non_coherent_atom_size"; 2423 case KEY_OCCLUSION_QUERY_PRECISE: return "occlusion_query_precise"; 2424 case KEY_OPTIMAL_BUFFER_COPY_OFFSET_ALIGNMENT: return "optimal_buffer_copy_offset_alignment"; 2425 case KEY_OPTIMAL_BUFFER_COPY_ROW_PITCH_ALIGNMENT: return "optimal_buffer_copy_row_pitch_alignment"; 2426 case KEY_OPTIMAL_TILING_FEATURES: return "optimal_tiling_features"; 2427 case KEY_PATCH: return "patch"; 2428 case KEY_PIPELINE_CACHE_UUID: return "pipeline_cache_uuid"; 2429 case KEY_PIPELINE_CREATION_CACHE_CONTROL: return "pipeline_creation_cache_control"; 2430 case KEY_PIPELINE_STATISTICS_QUERY: return "pipeline_statistics_query"; 2431 case KEY_POINT_CLIPPING_BEHAVIOR: return "point_clipping_behavior"; 2432 case KEY_POINT_CLIPPING_PROPERTIES: return "point_clipping_properties"; 2433 case KEY_POINT_SIZE_GRANULARITY: return "point_size_granularity"; 2434 case KEY_POINT_SIZE_RANGE: return "point_size_range"; 2435 case KEY_PRIVATE_DATA: return "private_data"; 2436 case KEY_PROPERTIES: return "properties"; 2437 case KEY_PROPERTY_FLAGS: return "property_flags"; 2438 case KEY_PROTECTED_MEMORY: return "protected_memory"; 2439 case KEY_PROTECTED_MEMORY_FEATURES: return "protected_memory_features"; 2440 case KEY_QUAD_DIVERGENT_IMPLICIT_LOD: return "quad_divergent_implicit_lod"; 2441 case KEY_QUAD_OPERATIONS_IN_ALL_STAGES: return "quad_operations_in_all_stages"; 2442 case KEY_QUEUES: return "queues"; 2443 case KEY_QUEUE_COUNT: return "queue_count"; 2444 case KEY_QUEUE_FLAGS: return "queue_flags"; 2445 case KEY_REQUIRED_SUBGROUP_SIZE_STAGES: return "required_subgroup_size_stages"; 2446 case KEY_RESIDENCY_ALIGNED_MIP_SIZE: return "residency_aligned_mip_size"; 2447 case KEY_RESIDENCY_NON_RESIDENT_STRICT: return "residency_non_resident_strict"; 2448 case KEY_RESIDENCY_STANDARD_2D_BLOCK_SHAPE: return "residency_standard_2d_block_shape"; 2449 case KEY_RESIDENCY_STANDARD_2D_MULTISAMPLE_BLOCK_SHAPE: return "residency_standard_2d_multisample_block_shape"; 2450 case KEY_RESIDENCY_STANDARD_3D_BLOCK_SHAPE: return "residency_standard_3d_block_shape"; 2451 case KEY_ROBUST_BUFFER_ACCESS: return "robust_buffer_access"; 2452 case KEY_ROBUST_BUFFER_ACCESS_UPDATE_AFTER_BIND: return "robust_buffer_access_update_after_bind"; 2453 case KEY_ROBUST_IMAGE_ACCESS: return "robust_image_access"; 2454 case KEY_ROUNDING_MODE_INDEPENDENCE: return "rounding_mode_independence"; 2455 case KEY_RUNTIME_DESCRIPTOR_ARRAY: return "runtime_descriptor_array"; 2456 case KEY_SAMPLED_IMAGE_COLOR_SAMPLE_COUNTS: return "sampled_image_color_sample_counts"; 2457 case KEY_SAMPLED_IMAGE_DEPTH_SAMPLE_COUNTS: return "sampled_image_depth_sample_counts"; 2458 case KEY_SAMPLED_IMAGE_INTEGER_SAMPLE_COUNTS: return "sampled_image_integer_sample_counts"; 2459 case KEY_SAMPLED_IMAGE_STENCIL_SAMPLE_COUNTS: return "sampled_image_stencil_sample_counts"; 2460 case KEY_SAMPLER_ANISOTROPY: return "sampler_anisotropy"; 2461 case KEY_SAMPLER_FILTER_MINMAX: return "sampler_filter_minmax"; 2462 case KEY_SAMPLER_MIRROR_CLAMP_TO_EDGE: return "sampler_mirror_clamp_to_edge"; 2463 case KEY_SAMPLER_YCBCR_CONVERSION: return "sampler_ycbcr_conversion"; 2464 case KEY_SAMPLER_YCBCR_CONVERSION_FEATURES: return "sampler_ycbcr_conversion_features"; 2465 case KEY_SAMPLE_RATE_SHADING: return "sample_rate_shading"; 2466 case KEY_SCALAR_BLOCK_LAYOUT: return "scalar_block_layout"; 2467 case KEY_SEPARATE_DEPTH_STENCIL_LAYOUTS: return "separate_depth_stencil_layouts"; 2468 case KEY_SHADER_BUFFER_INT64_ATOMICS: return "shader_buffer_int64_atomics"; 2469 case KEY_SHADER_CLIP_DISTANCE: return "shader_clip_distance"; 2470 case KEY_SHADER_CULL_DISTANCE: return "shader_cull_distance"; 2471 case KEY_SHADER_DEMOTE_TO_HELPER_INVOCATION: return "shader_demote_to_helper_invocation"; 2472 case KEY_SHADER_DENORM_FLUSH_TO_ZERO_FLOAT16: return "shader_denorm_flush_to_zero_float16"; 2473 case KEY_SHADER_DENORM_FLUSH_TO_ZERO_FLOAT32: return "shader_denorm_flush_to_zero_float32"; 2474 case KEY_SHADER_DENORM_FLUSH_TO_ZERO_FLOAT64: return "shader_denorm_flush_to_zero_float64"; 2475 case KEY_SHADER_DENORM_PRESERVE_FLOAT16: return "shader_denorm_preserve_float16"; 2476 case KEY_SHADER_DENORM_PRESERVE_FLOAT32: return "shader_denorm_preserve_float32"; 2477 case KEY_SHADER_DENORM_PRESERVE_FLOAT64: return "shader_denorm_preserve_float64"; 2478 case KEY_SHADER_DRAW_PARAMETERS: return "shader_draw_parameters"; 2479 case KEY_SHADER_DRAW_PARAMETER_FEATURES: return "shader_draw_parameter_features"; 2480 case KEY_SHADER_FLOAT16: return "shader_float16"; 2481 case KEY_SHADER_FLOAT64: return "shader_float64"; 2482 case KEY_SHADER_IMAGE_GATHER_EXTENDED: return "shader_image_gather_extended"; 2483 case KEY_SHADER_INPUT_ATTACHMENT_ARRAY_DYNAMIC_INDEXING: return "shader_input_attachment_array_dynamic_indexing"; 2484 case KEY_SHADER_INPUT_ATTACHMENT_ARRAY_NONUNIFORM_INDEXING_NATIVE: return "shader_input_attachment_array_nonuniform_indexing_native"; 2485 case KEY_SHADER_INPUT_ATTACHMENT_ARRAY_NON_UNIFORM_INDEXING: return "shader_input_attachment_array_non_uniform_indexing"; 2486 case KEY_SHADER_INT16: return "shader_int16"; 2487 case KEY_SHADER_INT64: return "shader_int64"; 2488 case KEY_SHADER_INT8: return "shader_int8"; 2489 case KEY_SHADER_INTEGER_DOT_PRODUCT: return "shader_integer_dot_product"; 2490 case KEY_SHADER_OUTPUT_LAYER: return "shader_output_layer"; 2491 case KEY_SHADER_OUTPUT_VIEWPORT_INDEX: return "shader_output_viewport_index"; 2492 case KEY_SHADER_RESOURCE_MIN_LOD: return "shader_resource_min_lod"; 2493 case KEY_SHADER_RESOURCE_RESIDENCY: return "shader_resource_residency"; 2494 case KEY_SHADER_ROUNDING_MODE_RTE_FLOAT16: return "shader_rounding_mode_rte_float16"; 2495 case KEY_SHADER_ROUNDING_MODE_RTE_FLOAT32: return "shader_rounding_mode_rte_float32"; 2496 case KEY_SHADER_ROUNDING_MODE_RTE_FLOAT64: return "shader_rounding_mode_rte_float64"; 2497 case KEY_SHADER_ROUNDING_MODE_RTZ_FLOAT16: return "shader_rounding_mode_rtz_float16"; 2498 case KEY_SHADER_ROUNDING_MODE_RTZ_FLOAT32: return "shader_rounding_mode_rtz_float32"; 2499 case KEY_SHADER_ROUNDING_MODE_RTZ_FLOAT64: return "shader_rounding_mode_rtz_float64"; 2500 case KEY_SHADER_SAMPLED_IMAGE_ARRAY_DYNAMIC_INDEXING: return "shader_sampled_image_array_dynamic_indexing"; 2501 case KEY_SHADER_SAMPLED_IMAGE_ARRAY_NONUNIFORM_INDEXING_NATIVE: return "shader_sampled_image_array_nonuniform_indexing_native"; 2502 case KEY_SHADER_SAMPLED_IMAGE_ARRAY_NON_UNIFORM_INDEXING: return "shader_sampled_image_array_non_uniform_indexing"; 2503 case KEY_SHADER_SHARED_INT64_ATOMICS: return "shader_shared_int64_atomics"; 2504 case KEY_SHADER_SIGNED_ZERO_INF_NAN_PRESERVE_FLOAT16: return "shader_signed_zero_inf_nan_preserve_float16"; 2505 case KEY_SHADER_SIGNED_ZERO_INF_NAN_PRESERVE_FLOAT32: return "shader_signed_zero_inf_nan_preserve_float32"; 2506 case KEY_SHADER_SIGNED_ZERO_INF_NAN_PRESERVE_FLOAT64: return "shader_signed_zero_inf_nan_preserve_float64"; 2507 case KEY_SHADER_STORAGE_BUFFER_ARRAY_DYNAMIC_INDEXING: return "shader_storage_buffer_array_dynamic_indexing"; 2508 case KEY_SHADER_STORAGE_BUFFER_ARRAY_NONUNIFORM_INDEXING_NATIVE: return "shader_storage_buffer_array_nonuniform_indexing_native"; 2509 case KEY_SHADER_STORAGE_BUFFER_ARRAY_NON_UNIFORM_INDEXING: return "shader_storage_buffer_array_non_uniform_indexing"; 2510 case KEY_SHADER_STORAGE_IMAGE_ARRAY_DYNAMIC_INDEXING: return "shader_storage_image_array_dynamic_indexing"; 2511 case KEY_SHADER_STORAGE_IMAGE_ARRAY_NONUNIFORM_INDEXING_NATIVE: return "shader_storage_image_array_nonuniform_indexing_native"; 2512 case KEY_SHADER_STORAGE_IMAGE_ARRAY_NON_UNIFORM_INDEXING: return "shader_storage_image_array_non_uniform_indexing"; 2513 case KEY_SHADER_STORAGE_IMAGE_EXTENDED_FORMATS: return "shader_storage_image_extended_formats"; 2514 case KEY_SHADER_STORAGE_IMAGE_MULTISAMPLE: return "shader_storage_image_multisample"; 2515 case KEY_SHADER_STORAGE_IMAGE_READ_WITHOUT_FORMAT: return "shader_storage_image_read_without_format"; 2516 case KEY_SHADER_STORAGE_IMAGE_WRITE_WITHOUT_FORMAT: return "shader_storage_image_write_without_format"; 2517 case KEY_SHADER_STORAGE_TEXEL_BUFFER_ARRAY_DYNAMIC_INDEXING: return "shader_storage_texel_buffer_array_dynamic_indexing"; 2518 case KEY_SHADER_STORAGE_TEXEL_BUFFER_ARRAY_NON_UNIFORM_INDEXING: return "shader_storage_texel_buffer_array_non_uniform_indexing"; 2519 case KEY_SHADER_SUBGROUP_EXTENDED_TYPES: return "shader_subgroup_extended_types"; 2520 case KEY_SHADER_TERMINATE_INVOCATION: return "shader_terminate_invocation"; 2521 case KEY_SHADER_TESSELLATION_AND_GEOMETRY_POINT_SIZE: return "shader_tessellation_and_geometry_point_size"; 2522 case KEY_SHADER_UNIFORM_BUFFER_ARRAY_DYNAMIC_INDEXING: return "shader_uniform_buffer_array_dynamic_indexing"; 2523 case KEY_SHADER_UNIFORM_BUFFER_ARRAY_NONUNIFORM_INDEXING_NATIVE: return "shader_uniform_buffer_array_nonuniform_indexing_native"; 2524 case KEY_SHADER_UNIFORM_BUFFER_ARRAY_NON_UNIFORM_INDEXING: return "shader_uniform_buffer_array_non_uniform_indexing"; 2525 case KEY_SHADER_UNIFORM_TEXEL_BUFFER_ARRAY_DYNAMIC_INDEXING: return "shader_uniform_texel_buffer_array_dynamic_indexing"; 2526 case KEY_SHADER_UNIFORM_TEXEL_BUFFER_ARRAY_NON_UNIFORM_INDEXING: return "shader_uniform_texel_buffer_array_non_uniform_indexing"; 2527 case KEY_SHADER_ZERO_INITIALIZE_WORKGROUP_MEMORY: return "shader_zero_initialize_workgroup_memory"; 2528 case KEY_SIZE: return "size"; 2529 case KEY_SPARSE_ADDRESS_SPACE_SIZE: return "sparse_address_space_size"; 2530 case KEY_SPARSE_BINDING: return "sparse_binding"; 2531 case KEY_SPARSE_PROPERTIES: return "sparse_properties"; 2532 case KEY_SPARSE_RESIDENCY_16_SAMPLES: return "sparse_residency_16_samples"; 2533 case KEY_SPARSE_RESIDENCY_2_SAMPLES: return "sparse_residency_2_samples"; 2534 case KEY_SPARSE_RESIDENCY_4_SAMPLES: return "sparse_residency_4_samples"; 2535 case KEY_SPARSE_RESIDENCY_8_SAMPLES: return "sparse_residency_8_samples"; 2536 case KEY_SPARSE_RESIDENCY_ALIASED: return "sparse_residency_aliased"; 2537 case KEY_SPARSE_RESIDENCY_BUFFER: return "sparse_residency_buffer"; 2538 case KEY_SPARSE_RESIDENCY_IMAGE_2D: return "sparse_residency_image_2d"; 2539 case KEY_SPARSE_RESIDENCY_IMAGE_3D: return "sparse_residency_image_3d"; 2540 case KEY_SPEC_VERSION: return "spec_version"; 2541 case KEY_STANDARD_SAMPLE_LOCATIONS: return "standard_sample_locations"; 2542 case KEY_STORAGE_BUFFER_16BIT_ACCESS: return "storage_buffer_16bit_access"; 2543 case KEY_STORAGE_BUFFER_8BIT_ACCESS: return "storage_buffer_8bit_access"; 2544 case KEY_STORAGE_IMAGE_SAMPLE_COUNTS: return "storage_image_sample_counts"; 2545 case KEY_STORAGE_INPUT_OUTPUT_16: return "storage_input_output_16"; 2546 case KEY_STORAGE_PUSH_CONSTANT8: return "storage_push_constant8"; 2547 case KEY_STORAGE_PUSH_CONSTANT_16: return "storage_push_constant_16"; 2548 case KEY_STORAGE_TEXEL_BUFFER_OFFSET_ALIGNMENT_BYTES: return "storage_texel_buffer_offset_alignment_bytes"; 2549 case KEY_STORAGE_TEXEL_BUFFER_OFFSET_SINGLE_TEXEL_ALIGNMENT: return "storage_texel_buffer_offset_single_texel_alignment"; 2550 case KEY_STRICT_LINES: return "strict_lines"; 2551 case KEY_SUBGROUP_BROADCAST_DYNAMIC_ID: return "subgroup_broadcast_dynamic_id"; 2552 case KEY_SUBGROUP_PROPERTIES: return "subgroup_properties"; 2553 case KEY_SUBGROUP_SIZE: return "subgroup_size"; 2554 case KEY_SUBGROUP_SIZE_CONTROL: return "subgroup_size_control"; 2555 case KEY_SUBMINOR: return "subminor"; 2556 case KEY_SUBSET_ALLOCATION: return "subset_allocation"; 2557 case KEY_SUB_PIXEL_INTERPOLATION_OFFSET_BITS: return "sub_pixel_interpolation_offset_bits"; 2558 case KEY_SUB_PIXEL_PRECISION_BITS: return "sub_pixel_precision_bits"; 2559 case KEY_SUB_TEXEL_PRECISION_BITS: return "sub_texel_precision_bits"; 2560 case KEY_SUPPORTED_DEPTH_RESOLVE_MODES: return "supported_depth_resolve_modes"; 2561 case KEY_SUPPORTED_OPERATIONS: return "supported_operations"; 2562 case KEY_SUPPORTED_STAGES: return "supported_stages"; 2563 case KEY_SUPPORTED_STENCIL_RESOLVE_MODES: return "supported_stencil_resolve_modes"; 2564 case KEY_SYNCHRONIZATION2: return "synchronization2"; 2565 case KEY_TESSELLATION_SHADER: return "tessellation_shader"; 2566 case KEY_TEXTURE_COMPRESSION_ASTC_HDR: return "texture_compression_astc_hdr"; 2567 case KEY_TEXTURE_COMPRESSION_ASTC_LDR: return "texture_compression_astc_ldr"; 2568 case KEY_TEXTURE_COMPRESSION_BC: return "texture_compression_bc"; 2569 case KEY_TEXTURE_COMPRESSION_ETC2: return "texture_compression_etc2"; 2570 case KEY_TIMELINE_SEMAPHORE: return "timeline_semaphore"; 2571 case KEY_TIMESTAMP_COMPUTE_AND_GRAPHICS: return "timestamp_compute_and_graphics"; 2572 case KEY_TIMESTAMP_PERIOD: return "timestamp_period"; 2573 case KEY_TIMESTAMP_VALID_BITS: return "timestamp_valid_bits"; 2574 case KEY_UNIFORM_AND_STORAGE_BUFFER_16BIT_ACCESS: return "uniform_and_storage_buffer_16bit_access"; 2575 case KEY_UNIFORM_AND_STORAGE_BUFFER_8BIT_ACCESS: return "uniform_and_storage_buffer_8bit_access"; 2576 case KEY_UNIFORM_BUFFER_STANDARD_LAYOUT: return "uniform_buffer_standard_layout"; 2577 case KEY_UNIFORM_TEXEL_BUFFER_OFFSET_ALIGNMENT_BYTES: return "uniform_texel_buffer_offset_alignment_bytes"; 2578 case KEY_UNIFORM_TEXEL_BUFFER_OFFSET_SINGLE_TEXEL_ALIGNMENT: return "uniform_texel_buffer_offset_single_texel_alignment"; 2579 case KEY_VARIABLE_MULTISAMPLE_RATE: return "variable_multisample_rate"; 2580 case KEY_VARIABLE_POINTERS: return "variable_pointers"; 2581 case KEY_VARIABLE_POINTERS_STORAGE_BUFFER: return "variable_pointers_storage_buffer"; 2582 // Field name should ideally be `variable_pointers_features`, but renaming would cause parsing errors for older JSON reports. 2583 case KEY_VARIABLE_POINTERS_FEATURES: return "variable_pointer_features"; 2584 case KEY_VARIABLE_POINTER_FEATURES_KHR: return "variable_pointer_features_khr"; 2585 case KEY_VARIABLE_POINTERS_FEATURES_KHR: return "variable_pointers_features_khr"; 2586 case KEY_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT: return "image_2d_view_of_3d_features_ext"; 2587 case KEY_IMAGE_2D_VIEW_OF_3D: return "image_2d_view_of_3d"; 2588 case KEY_SAMPLER_2D_VIEW_OF_3D: return "sampler_2d_view_of_3d"; 2589 case KEY_VENDOR_ID: return "vendor_id"; 2590 case KEY_VERTEX_PIPELINE_STORES_AND_ATOMICS: return "vertex_pipeline_stores_and_atomics"; 2591 case KEY_VIEWPORT_BOUNDS_RANGE: return "viewport_bounds_range"; 2592 case KEY_VIEWPORT_SUB_PIXEL_BITS: return "viewport_sub_pixel_bits"; 2593 case KEY_VK_KHR_DRIVER_PROPERTIES: return "vk_khr_driver_properties"; 2594 case KEY_VK_KHR_VARIABLE_POINTERS: return "vk_khr_variable_pointers"; 2595 case KEY_VK_EXT_IMAGE_2D_VIEW_OF_3D: return "vk_ext_image_2d_view_of_3d"; 2596 case KEY_CUSTOM_BORDER_COLOR_FEATURES_EXT: return "custom_border_color_features_ext"; 2597 case KEY_CUSTOM_BORDER_COLOR_WITHOUT_FORMAT: return "custom_border_color_without_format"; 2598 case KEY_CUSTOM_BORDER_COLORS: return "custom_border_colors"; 2599 case KEY_VK_EXT_CUSTOM_BORDER_COLOR: return "vk_ext_custom_border_color"; 2600 case KEY_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT: return "primitive_topology_list_restart_features_ext"; 2601 case KEY_PRIMITIVE_TOPOLOGY_LIST_RESTART: return "primitive_topology_list_restart"; 2602 case KEY_PRIMITIVE_TOPOLOGY_PATCH_LIST_RESTART: return "primitive_topology_patch_list_restart"; 2603 case KEY_VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART: return "vk_ext_primitive_topology_list_restart"; 2604 case KEY_TRANSFORM_FEEDBACK_FEATURES_EXT: return "transform_feedback_features_ext"; 2605 case KEY_GEOMETRY_STREAMS: return "geometry_streams"; 2606 case KEY_TRANSFORM_FEEDBACK: return "transform_feedback"; 2607 case KEY_VK_EXT_TRANSFORM_FEEDBACK: return "vk_ext_transform_feedback"; 2608 case KEY_PROVOKING_VERTEX_FEATURES_EXT: return "provoking_vertex_features_ext"; 2609 case KEY_PROVOKING_VERTEX_LAST: return "provoking_vertex_last"; 2610 case KEY_TRANSFORM_FEEDBACK_PRESERVES_PROVOKING_VERTEX: return "transform_feedback_preserves_provoking_vertex"; 2611 case KEY_VK_EXT_PROVOKING_VERTEX: return "vk_ext_provoking_vertex"; 2612 case KEY_INDEX_TYPE_UINT8_FEATURES_EXT: 2613 return "index_type_uint8_features_ext"; 2614 case KEY_INDEX_TYPE_UINT8: 2615 return "index_type_uint8"; 2616 case KEY_VK_EXT_INDEX_TYPE_UINT8: 2617 return "vk_ext_index_type_uint8"; 2618 case KEY_INDEX_TYPE_UINT8_FEATURES_KHR: 2619 return "index_type_uint8_features_khr"; 2620 case KEY_VK_KHR_INDEX_TYPE_UINT8: 2621 return "vk_khr_index_type_uint8"; 2622 case KEY_SHADER_FLOAT16_INT8_FEATURES_KHR: 2623 return "shader_float16_int8_features_khr"; 2624 case KEY_FLOAT16_INT8_FEATURES_KHR: 2625 return "float16_int8_features_khr"; 2626 case KEY_VK_KHR_SHADER_FLOAT16_INT8: 2627 return "vk_khr_shader_float16_int8"; 2628 case KEY_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR: 2629 return "shader_subgroup_extended_types_features_khr"; 2630 case KEY_VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES: 2631 return "vk_khr_shader_subgroup_extended_types"; 2632 case KEY_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR: 2633 return "shader_subgroup_uniform_control_flow_features_khr"; 2634 case KEY_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW: 2635 return "shader_subgroup_uniform_control_flow"; 2636 case KEY_VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW: 2637 return "vk_khr_shader_subgroup_uniform_control_flow"; 2638 case KEY_BIT8_STORAGE_FEATURES_KHR: 2639 return "bit8_storage_features_khr"; 2640 case KEY_VK_KHR_8BIT_STORAGE: 2641 return "vk_khr_8bit_storage"; 2642 case KEY_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR: 2643 return "shader_integer_dot_product_features_khr"; 2644 case KEY_VK_KHR_SHADER_INTEGER_DOT_PRODUCT: 2645 return "vk_khr_shader_integer_dot_product"; 2646 case KEY_LINE_RASTERIZATION_FEATURES_EXT: 2647 return "line_rasterization_features_ext"; 2648 case KEY_BRESENHAM_LINES: 2649 return "bresenham_lines"; 2650 case KEY_RECTANGULAR_LINES: 2651 return "rectangular_lines"; 2652 case KEY_SMOOTH_LINES: 2653 return "smooth_lines"; 2654 case KEY_STIPPLED_BRESENHAM_LINES: 2655 return "stippled_bresenham_lines"; 2656 case KEY_STIPPLED_RECTANGULAR_LINES: 2657 return "stippled_rectangular_lines"; 2658 case KEY_STIPPLED_SMOOTH_LINES: 2659 return "stippled_smooth_lines"; 2660 case KEY_VK_EXT_LINE_RASTERIZATION: 2661 return "vk_ext_line_rasterization"; 2662 case KEY_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT: 2663 return "primitives_generated_query_features_ext"; 2664 case KEY_PRIMITIVES_GENERATED_QUERY: 2665 return "primitives_generated_query"; 2666 case KEY_PRIMITIVES_GENERATED_QUERY_WITH_NON_ZERO_STREAMS: 2667 return "primitives_generated_query_with_non_zero_streams"; 2668 case KEY_PRIMITIVES_GENERATED_QUERY_WITH_RASTERIZER_DISCARD: 2669 return "primitives_generated_query_with_rasterizer_discard"; 2670 case KEY_VK_EXT_PRIMITIVES_GENERATED_QUERY: 2671 return "vk_ext_primitives_generated_query"; 2672 case KEY_FLOAT_CONTROLS_PROPERTIES_KHR: 2673 return "float_controls_properties_khr"; 2674 case KEY_VK_KHR_SHADER_FLOAT_CONTROLS: 2675 return "vk_khr_shader_float_controls"; 2676 case KEY_RELAXED_LINE_RASTERIZATION_FEATURES_IMG: 2677 return "relaxed_line_rasterization_features_img"; 2678 case RELAXED_LINE_RASTERIZATION: 2679 return "relaxed_line_rasterization"; 2680 case KEY_VK_IMG_RELAXED_LINE_RASTERIZATION: 2681 return "vk_img_relaxed_line_rasterization"; 2682 case KEY_VULKAN_11_PROPERTIES: 2683 return "vulkan_11_properties"; 2684 case KEY_VULKAN_11_FEATURES: 2685 return "vulkan_11_features"; 2686 case KEY_PROTECTED_NO_FAULT: 2687 return "protected_no_fault"; 2688 case KEY_SUBGROUP_QUAD_OPERATIONS_IN_ALL_STAGES: 2689 return "subgroup_quad_operations_in_all_stages"; 2690 case KEY_SUBGROUP_SUPPORTED_OPERATIONS: 2691 return "subgroup_supported_operations"; 2692 case KEY_SUBGROUP_SUPPORTED_STAGES: 2693 return "subgroup_supported_stages"; 2694 case KEY_VK_KHR_VERTEX_ATTRIBUTE_DIVISOR: return "vk_khr_vertex_attribute_divisor"; 2695 case KEY_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR: return "vertex_attribute_divisor_features_khr"; 2696 case KEY_VERTEX_ATTRIBUTE_INSTANCE_RATE_DIVISOR: return "vertex_attribute_instance_rate_divisor"; 2697 case KEY_VERTEX_ATTRIBUTE_INSTANCE_RATE_ZERO_DIVISOR: return "vertex_attribute_instance_rate_zero_divisor"; 2698 case KEY_VULKAN_12_FEATURES: return "vulkan_12_features"; 2699 case KEY_VULKAN_12_PROPERTIES: return "vulkan_12_properties"; 2700 case KEY_VULKAN_13_FEATURES: return "vulkan_13_features"; 2701 case KEY_VULKAN_13_PROPERTIES: return "vulkan_13_properties"; 2702 case KEY_VULKAN_MEMORY_MODEL: return "vulkan_memory_model"; 2703 case KEY_VULKAN_MEMORY_MODEL_AVAILABILITY_VISIBILITY_CHAINS: return "vulkan_memory_model_availability_visibility_chains"; 2704 case KEY_VULKAN_MEMORY_MODEL_DEVICE_SCOPE: return "vulkan_memory_model_device_scope"; 2705 case KEY_WIDE_LINES: return "wide_lines"; 2706 case KEY_WIDTH: return "width"; 2707 default: throw new RuntimeException("unknown key name: " + name); 2708 } 2709 } 2710 nativeGetVkJSON()2711 private static native String nativeGetVkJSON(); 2712 2713 } 2714