@@ -400,6 +400,78 @@ struct EnumTraits<VkShaderFloatControlsIndependence> {
400400 }
401401};
402402
403+ template <>
404+ struct EnumTraits <VkPipelineRobustnessBufferBehavior> {
405+ static bool exist (uint32_t e) {
406+ switch (e) {
407+ case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT:
408+ case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED:
409+ case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS:
410+ case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2:
411+ return true ;
412+ }
413+ return false ;
414+ }
415+ };
416+
417+ template <>
418+ struct EnumTraits <VkPipelineRobustnessImageBehavior> {
419+ static bool exist (uint32_t e) {
420+ switch (e) {
421+ case VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT:
422+ case VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED:
423+ case VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS:
424+ case VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2:
425+ return true ;
426+ }
427+ return false ;
428+ }
429+ };
430+
431+ template <>
432+ struct EnumTraits <VkImageLayout> {
433+ static bool exist (uint32_t e) {
434+ switch (e) {
435+ case VK_IMAGE_LAYOUT_UNDEFINED:
436+ case VK_IMAGE_LAYOUT_GENERAL:
437+ case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL:
438+ case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL:
439+ case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL:
440+ case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:
441+ case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL:
442+ case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:
443+ case VK_IMAGE_LAYOUT_PREINITIALIZED:
444+ case VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL:
445+ case VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL:
446+ case VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL:
447+ case VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL:
448+ case VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL:
449+ case VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL:
450+ case VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL:
451+ case VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL:
452+ case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR:
453+ case VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR:
454+ case VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR:
455+ case VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR:
456+ case VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR:
457+ case VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT:
458+ case VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR:
459+ #ifdef VK_ENABLE_BETA_EXTENSIONS
460+ case VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR:
461+ #endif
462+ #ifdef VK_ENABLE_BETA_EXTENSIONS
463+ case VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR:
464+ #endif
465+ #ifdef VK_ENABLE_BETA_EXTENSIONS
466+ case VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR:
467+ #endif
468+ case VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT:
469+ return true ;
470+ }
471+ return false ;
472+ }
473+ };
474+
403475// VkSparseImageFormatProperties
404476
405477template <typename Visitor>
@@ -810,6 +882,68 @@ inline bool Iterate(Visitor* visitor, VkPhysicalDeviceVulkan13Features* features
810882 visitor->Visit (" shaderIntegerDotProduct" , &features->shaderIntegerDotProduct ) &&
811883 visitor->Visit (" maintenance4" , &features->maintenance4 );
812884}
885+
886+ template <typename Visitor>
887+ inline bool Iterate (Visitor* visitor, VkJsonCore14* core) {
888+ return
889+ visitor->Visit (" features" , &core->features ) &&
890+ visitor->Visit (" properties" , &core->properties );
891+ }
892+
893+ template <typename Visitor>
894+ inline bool Iterate (Visitor* visitor, VkPhysicalDeviceVulkan14Properties* properties) {
895+ return
896+ visitor->Visit (" lineSubPixelPrecisionBits" , &properties->lineSubPixelPrecisionBits ) &&
897+ visitor->Visit (" maxVertexAttribDivisor" , &properties->maxVertexAttribDivisor ) &&
898+ visitor->Visit (" supportsNonZeroFirstInstance" , &properties->supportsNonZeroFirstInstance ) &&
899+ visitor->Visit (" maxPushDescriptors" , &properties->maxPushDescriptors ) &&
900+ visitor->Visit (" dynamicRenderingLocalReadDepthStencilAttachments" , &properties->dynamicRenderingLocalReadDepthStencilAttachments ) &&
901+ visitor->Visit (" dynamicRenderingLocalReadMultisampledAttachments" , &properties->dynamicRenderingLocalReadMultisampledAttachments ) &&
902+ visitor->Visit (" earlyFragmentMultisampleCoverageAfterSampleCounting" , &properties->earlyFragmentMultisampleCoverageAfterSampleCounting ) &&
903+ visitor->Visit (" earlyFragmentSampleMaskTestBeforeSampleCounting" , &properties->earlyFragmentSampleMaskTestBeforeSampleCounting ) &&
904+ visitor->Visit (" depthStencilSwizzleOneSupport" , &properties->depthStencilSwizzleOneSupport ) &&
905+ visitor->Visit (" polygonModePointSize" , &properties->polygonModePointSize ) &&
906+ visitor->Visit (" nonStrictSinglePixelWideLinesUseParallelogram" , &properties->nonStrictSinglePixelWideLinesUseParallelogram ) &&
907+ visitor->Visit (" nonStrictWideLinesUseParallelogram" , &properties->nonStrictWideLinesUseParallelogram ) &&
908+ visitor->Visit (" blockTexelViewCompatibleMultipleLayers" , &properties->blockTexelViewCompatibleMultipleLayers ) &&
909+ visitor->Visit (" maxCombinedImageSamplerDescriptorCount" , &properties->maxCombinedImageSamplerDescriptorCount ) &&
910+ visitor->Visit (" fragmentShadingRateClampCombinerInputs" , &properties->fragmentShadingRateClampCombinerInputs ) &&
911+ visitor->Visit (" defaultRobustnessStorageBuffers" , &properties->defaultRobustnessStorageBuffers ) &&
912+ visitor->Visit (" defaultRobustnessUniformBuffers" , &properties->defaultRobustnessUniformBuffers ) &&
913+ visitor->Visit (" defaultRobustnessVertexInputs" , &properties->defaultRobustnessVertexInputs ) &&
914+ visitor->Visit (" defaultRobustnessImages" , &properties->defaultRobustnessImages ) &&
915+ visitor->Visit (" copySrcLayoutCount" , &properties->copySrcLayoutCount ) &&
916+ visitor->VisitArray (" pCopySrcLayouts" , properties->copySrcLayoutCount , &properties->pCopySrcLayouts ) &&
917+ visitor->Visit (" copyDstLayoutCount" , &properties->copyDstLayoutCount ) &&
918+ visitor->VisitArray (" pCopyDstLayouts" , properties->copyDstLayoutCount , &properties->pCopyDstLayouts ) &&
919+ visitor->Visit (" optimalTilingLayoutUUID" , &properties->optimalTilingLayoutUUID ) &&
920+ visitor->Visit (" identicalMemoryTypeRequirements" , &properties->identicalMemoryTypeRequirements );
921+ }
922+
923+ template <typename Visitor>
924+ inline bool Iterate (Visitor* visitor, VkPhysicalDeviceVulkan14Features* features) {
925+ return
926+ visitor->Visit (" globalPriorityQuery" , &features->globalPriorityQuery ) &&
927+ visitor->Visit (" shaderSubgroupRotate" , &features->shaderSubgroupRotate ) &&
928+ visitor->Visit (" shaderSubgroupRotateClustered" , &features->shaderSubgroupRotateClustered ) &&
929+ visitor->Visit (" shaderFloatControls2" , &features->shaderFloatControls2 ) &&
930+ visitor->Visit (" shaderExpectAssume" , &features->shaderExpectAssume ) &&
931+ visitor->Visit (" rectangularLines" , &features->rectangularLines ) &&
932+ visitor->Visit (" bresenhamLines" , &features->bresenhamLines ) &&
933+ visitor->Visit (" smoothLines" , &features->smoothLines ) &&
934+ visitor->Visit (" stippledRectangularLines" , &features->stippledRectangularLines ) &&
935+ visitor->Visit (" stippledBresenhamLines" , &features->stippledBresenhamLines ) &&
936+ visitor->Visit (" stippledSmoothLines" , &features->stippledSmoothLines ) &&
937+ visitor->Visit (" vertexAttributeInstanceRateDivisor" , &features->vertexAttributeInstanceRateDivisor ) &&
938+ visitor->Visit (" vertexAttributeInstanceRateZeroDivisor" , &features->vertexAttributeInstanceRateZeroDivisor ) &&
939+ visitor->Visit (" indexTypeUint8" , &features->indexTypeUint8 ) &&
940+ visitor->Visit (" dynamicRenderingLocalRead" , &features->dynamicRenderingLocalRead ) &&
941+ visitor->Visit (" maintenance5" , &features->maintenance5 ) &&
942+ visitor->Visit (" maintenance6" , &features->maintenance6 ) &&
943+ visitor->Visit (" pipelineProtectedAccess" , &features->pipelineProtectedAccess ) &&
944+ visitor->Visit (" pipelineRobustness" , &features->pipelineRobustness ) &&
945+ visitor->Visit (" hostImageCopy" , &features->hostImageCopy );
946+ }
813947// clang-format on
814948
815949template <typename Visitor>
@@ -1051,7 +1185,7 @@ inline bool Iterate(Visitor* visitor, VkJsonDevice* device) {
10511185 switch (device->properties .apiVersion ^
10521186 VK_API_VERSION_PATCH (device->properties .apiVersion )) {
10531187 case VK_API_VERSION_1_4:
1054- // TODO: real 1.4 support here
1188+ ret &= visitor-> Visit ( " core14 " , &device-> core14 );
10551189 FALLTHROUGH_INTENDED;
10561190 case VK_API_VERSION_1_3:
10571191 ret &= visitor->Visit (" core13" , &device->core13 );
@@ -1224,6 +1358,12 @@ class JsonWriterVisitor {
12241358 return true ;
12251359 }
12261360
1361+ template <typename T>
1362+ bool VisitArray (const char * key, uint32_t count, const T *value) {
1363+ object_[key] = ArrayToJsonValue (count, *value);
1364+ return true ;
1365+ }
1366+
12271367 Json::Value get_object () const { return object_; }
12281368
12291369 private:
@@ -1288,6 +1428,15 @@ inline bool AsValue(Json::Value* json_value, float* value) {
12881428 return true ;
12891429}
12901430
1431+ inline bool AsValue (Json::Value* json_value, VkImageLayout* t) {
1432+ uint32_t value = 0 ;
1433+ if (!AsValue (json_value, &value))
1434+ return false ;
1435+ if (!EnumTraits<VkImageLayout>::exist (value)) return false ;
1436+ *t = static_cast <VkImageLayout>(value);
1437+ return true ;
1438+ }
1439+
12911440template <typename T>
12921441inline bool AsArray (Json::Value* json_value, uint32_t count, T* values) {
12931442 if (json_value->type () != Json::arrayValue || json_value->size () != count)
@@ -1398,6 +1547,20 @@ class JsonReaderVisitor {
13981547 return false ;
13991548 }
14001549
1550+ template <typename T>
1551+ bool VisitArray (const char * key, uint32_t count, T *value) {
1552+ Json::Value json_value = (*object_)[key];
1553+ if (!json_value) {
1554+ if (errors_)
1555+ *errors_ = std::string (key) + " missing." ;
1556+ return false ;
1557+ }
1558+ if (AsArray (&json_value, count, *value)) return true ;
1559+ if (errors_)
1560+ *errors_ = std::string (" Wrong type for " ) + std::string (key) + " ." ;
1561+ return false ;
1562+ }
1563+
14011564
14021565 private:
14031566 Json::Value* object_;
0 commit comments