| /* |
| * Copyright (c) 2025 The Khronos Group Inc. |
| * Copyright (c) 2025 Valve Corporation |
| * Copyright (c) 2025 LunarG, Inc. |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a copy |
| * of this software and/or associated documentation files (the "Materials"), to |
| * deal in the Materials without restriction, including without limitation the |
| * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
| * sell copies of the Materials, and to permit persons to whom the Materials are |
| * furnished to do so, subject to the following conditions: |
| * |
| * The above copyright notice(s) and this permission notice shall be included in |
| * all copies or substantial portions of the Materials. |
| * |
| * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
| * |
| * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE |
| * USE OR OTHER DEALINGS IN THE MATERIALS. |
| * |
| */ |
| |
| #include "equality_helpers.h" |
| |
| bool operator==(const VkExtent3D& a, const VkExtent3D& b) { |
| return a.width == b.width && a.height == b.height && a.depth == b.depth; |
| } |
| bool operator!=(const VkExtent3D& a, const VkExtent3D& b) { return !(a == b); } |
| |
| bool operator==(const VkQueueFamilyProperties& a, const VkQueueFamilyProperties& b) { |
| return a.minImageTransferGranularity == b.minImageTransferGranularity && a.queueCount == b.queueCount && |
| a.queueFlags == b.queueFlags && a.timestampValidBits == b.timestampValidBits; |
| } |
| bool operator!=(const VkQueueFamilyProperties& a, const VkQueueFamilyProperties& b) { return !(a == b); } |
| |
| bool operator==(const VkQueueFamilyProperties& a, const VkQueueFamilyProperties2& b) { return a == b.queueFamilyProperties; } |
| bool operator!=(const VkQueueFamilyProperties& a, const VkQueueFamilyProperties2& b) { return a != b.queueFamilyProperties; } |
| |
| bool operator==(const VkLayerProperties& a, const VkLayerProperties& b) { |
| return string_eq(a.layerName, b.layerName, 256) && string_eq(a.description, b.description, 256) && |
| a.implementationVersion == b.implementationVersion && a.specVersion == b.specVersion; |
| } |
| bool operator!=(const VkLayerProperties& a, const VkLayerProperties& b) { return !(a == b); } |
| |
| bool operator==(const VkExtensionProperties& a, const VkExtensionProperties& b) { |
| return string_eq(a.extensionName, b.extensionName, 256) && a.specVersion == b.specVersion; |
| } |
| bool operator!=(const VkExtensionProperties& a, const VkExtensionProperties& b) { return !(a == b); } |
| |
| bool operator==(const VkPhysicalDeviceFeatures& feats1, const VkPhysicalDeviceFeatures2& feats2) { |
| return feats1.robustBufferAccess == feats2.features.robustBufferAccess && |
| feats1.fullDrawIndexUint32 == feats2.features.fullDrawIndexUint32 && |
| feats1.imageCubeArray == feats2.features.imageCubeArray && feats1.independentBlend == feats2.features.independentBlend && |
| feats1.geometryShader == feats2.features.geometryShader && |
| feats1.tessellationShader == feats2.features.tessellationShader && |
| feats1.sampleRateShading == feats2.features.sampleRateShading && feats1.dualSrcBlend == feats2.features.dualSrcBlend && |
| feats1.logicOp == feats2.features.logicOp && feats1.multiDrawIndirect == feats2.features.multiDrawIndirect && |
| feats1.drawIndirectFirstInstance == feats2.features.drawIndirectFirstInstance && |
| feats1.depthClamp == feats2.features.depthClamp && feats1.depthBiasClamp == feats2.features.depthBiasClamp && |
| feats1.fillModeNonSolid == feats2.features.fillModeNonSolid && feats1.depthBounds == feats2.features.depthBounds && |
| feats1.wideLines == feats2.features.wideLines && feats1.largePoints == feats2.features.largePoints && |
| feats1.alphaToOne == feats2.features.alphaToOne && feats1.multiViewport == feats2.features.multiViewport && |
| feats1.samplerAnisotropy == feats2.features.samplerAnisotropy && |
| feats1.textureCompressionETC2 == feats2.features.textureCompressionETC2 && |
| feats1.textureCompressionASTC_LDR == feats2.features.textureCompressionASTC_LDR && |
| feats1.textureCompressionBC == feats2.features.textureCompressionBC && |
| feats1.occlusionQueryPrecise == feats2.features.occlusionQueryPrecise && |
| feats1.pipelineStatisticsQuery == feats2.features.pipelineStatisticsQuery && |
| feats1.vertexPipelineStoresAndAtomics == feats2.features.vertexPipelineStoresAndAtomics && |
| feats1.fragmentStoresAndAtomics == feats2.features.fragmentStoresAndAtomics && |
| feats1.shaderTessellationAndGeometryPointSize == feats2.features.shaderTessellationAndGeometryPointSize && |
| feats1.shaderImageGatherExtended == feats2.features.shaderImageGatherExtended && |
| feats1.shaderStorageImageExtendedFormats == feats2.features.shaderStorageImageExtendedFormats && |
| feats1.shaderStorageImageMultisample == feats2.features.shaderStorageImageMultisample && |
| feats1.shaderStorageImageReadWithoutFormat == feats2.features.shaderStorageImageReadWithoutFormat && |
| feats1.shaderStorageImageWriteWithoutFormat == feats2.features.shaderStorageImageWriteWithoutFormat && |
| feats1.shaderUniformBufferArrayDynamicIndexing == feats2.features.shaderUniformBufferArrayDynamicIndexing && |
| feats1.shaderSampledImageArrayDynamicIndexing == feats2.features.shaderSampledImageArrayDynamicIndexing && |
| feats1.shaderStorageBufferArrayDynamicIndexing == feats2.features.shaderStorageBufferArrayDynamicIndexing && |
| feats1.shaderStorageImageArrayDynamicIndexing == feats2.features.shaderStorageImageArrayDynamicIndexing && |
| feats1.shaderClipDistance == feats2.features.shaderClipDistance && |
| feats1.shaderCullDistance == feats2.features.shaderCullDistance && |
| feats1.shaderFloat64 == feats2.features.shaderFloat64 && feats1.shaderInt64 == feats2.features.shaderInt64 && |
| feats1.shaderInt16 == feats2.features.shaderInt16 && |
| feats1.shaderResourceResidency == feats2.features.shaderResourceResidency && |
| feats1.shaderResourceMinLod == feats2.features.shaderResourceMinLod && |
| feats1.sparseBinding == feats2.features.sparseBinding && |
| feats1.sparseResidencyBuffer == feats2.features.sparseResidencyBuffer && |
| feats1.sparseResidencyImage2D == feats2.features.sparseResidencyImage2D && |
| feats1.sparseResidencyImage3D == feats2.features.sparseResidencyImage3D && |
| feats1.sparseResidency2Samples == feats2.features.sparseResidency2Samples && |
| feats1.sparseResidency4Samples == feats2.features.sparseResidency4Samples && |
| feats1.sparseResidency8Samples == feats2.features.sparseResidency8Samples && |
| feats1.sparseResidency16Samples == feats2.features.sparseResidency16Samples && |
| feats1.sparseResidencyAliased == feats2.features.sparseResidencyAliased && |
| feats1.variableMultisampleRate == feats2.features.variableMultisampleRate && |
| feats1.inheritedQueries == feats2.features.inheritedQueries; |
| } |
| |
| bool operator==(const VkPhysicalDeviceMemoryProperties& props1, const VkPhysicalDeviceMemoryProperties2& props2) { |
| bool equal = true; |
| equal = equal && props1.memoryTypeCount == props2.memoryProperties.memoryTypeCount; |
| equal = equal && props1.memoryHeapCount == props2.memoryProperties.memoryHeapCount; |
| for (uint32_t i = 0; i < props1.memoryHeapCount; ++i) { |
| equal = equal && props1.memoryHeaps[i].size == props2.memoryProperties.memoryHeaps[i].size; |
| equal = equal && props1.memoryHeaps[i].flags == props2.memoryProperties.memoryHeaps[i].flags; |
| } |
| for (uint32_t i = 0; i < props1.memoryTypeCount; ++i) { |
| equal = equal && props1.memoryTypes[i].propertyFlags == props2.memoryProperties.memoryTypes[i].propertyFlags; |
| equal = equal && props1.memoryTypes[i].heapIndex == props2.memoryProperties.memoryTypes[i].heapIndex; |
| } |
| return equal; |
| } |
| bool operator==(const VkSparseImageFormatProperties& props1, const VkSparseImageFormatProperties& props2) { |
| return props1.aspectMask == props2.aspectMask && props1.imageGranularity.width == props2.imageGranularity.width && |
| props1.imageGranularity.height == props2.imageGranularity.height && |
| props1.imageGranularity.depth == props2.imageGranularity.depth && props1.flags == props2.flags; |
| } |
| bool operator==(const VkSparseImageFormatProperties& props1, const VkSparseImageFormatProperties2& props2) { |
| return props1 == props2.properties; |
| } |
| bool operator==(const VkExternalMemoryProperties& props1, const VkExternalMemoryProperties& props2) { |
| return props1.externalMemoryFeatures == props2.externalMemoryFeatures && |
| props1.exportFromImportedHandleTypes == props2.exportFromImportedHandleTypes && |
| props1.compatibleHandleTypes == props2.compatibleHandleTypes; |
| } |
| bool operator==(const VkExternalSemaphoreProperties& props1, const VkExternalSemaphoreProperties& props2) { |
| return props1.externalSemaphoreFeatures == props2.externalSemaphoreFeatures && |
| props1.exportFromImportedHandleTypes == props2.exportFromImportedHandleTypes && |
| props1.compatibleHandleTypes == props2.compatibleHandleTypes; |
| } |
| bool operator==(const VkExternalFenceProperties& props1, const VkExternalFenceProperties& props2) { |
| return props1.externalFenceFeatures == props2.externalFenceFeatures && |
| props1.exportFromImportedHandleTypes == props2.exportFromImportedHandleTypes && |
| props1.compatibleHandleTypes == props2.compatibleHandleTypes; |
| } |
| bool operator==(const VkSurfaceCapabilitiesKHR& props1, const VkSurfaceCapabilitiesKHR& props2) { |
| return props1.minImageCount == props2.minImageCount && props1.maxImageCount == props2.maxImageCount && |
| props1.currentExtent.width == props2.currentExtent.width && props1.currentExtent.height == props2.currentExtent.height && |
| props1.minImageExtent.width == props2.minImageExtent.width && |
| props1.minImageExtent.height == props2.minImageExtent.height && |
| props1.maxImageExtent.width == props2.maxImageExtent.width && |
| props1.maxImageExtent.height == props2.maxImageExtent.height && |
| props1.maxImageArrayLayers == props2.maxImageArrayLayers && props1.supportedTransforms == props2.supportedTransforms && |
| props1.currentTransform == props2.currentTransform && props1.supportedCompositeAlpha == props2.supportedCompositeAlpha && |
| props1.supportedUsageFlags == props2.supportedUsageFlags; |
| } |
| bool operator==(const VkSurfacePresentScalingCapabilitiesEXT& caps1, const VkSurfacePresentScalingCapabilitiesEXT& caps2) { |
| return caps1.supportedPresentScaling == caps2.supportedPresentScaling && |
| caps1.supportedPresentGravityX == caps2.supportedPresentGravityX && |
| caps1.supportedPresentGravityY == caps2.supportedPresentGravityY && |
| caps1.minScaledImageExtent.width == caps2.minScaledImageExtent.width && |
| caps1.minScaledImageExtent.height == caps2.minScaledImageExtent.height && |
| caps1.maxScaledImageExtent.width == caps2.maxScaledImageExtent.width && |
| caps1.maxScaledImageExtent.height == caps2.maxScaledImageExtent.height; |
| } |
| bool operator==(const VkSurfaceFormatKHR& format1, const VkSurfaceFormatKHR& format2) { |
| return format1.format == format2.format && format1.colorSpace == format2.colorSpace; |
| } |
| bool operator==(const VkSurfaceFormatKHR& format1, const VkSurfaceFormat2KHR& format2) { return format1 == format2.surfaceFormat; } |
| bool operator==(const VkDisplayPropertiesKHR& props1, const VkDisplayPropertiesKHR& props2) { |
| return props1.display == props2.display && props1.physicalDimensions.width == props2.physicalDimensions.width && |
| props1.physicalDimensions.height == props2.physicalDimensions.height && |
| props1.physicalResolution.width == props2.physicalResolution.width && |
| props1.physicalResolution.height == props2.physicalResolution.height && |
| props1.supportedTransforms == props2.supportedTransforms && props1.planeReorderPossible == props2.planeReorderPossible && |
| props1.persistentContent == props2.persistentContent; |
| } |
| bool operator==(const VkDisplayPropertiesKHR& props1, const VkDisplayProperties2KHR& props2) { |
| return props1 == props2.displayProperties; |
| } |
| bool operator==(const VkDisplayModePropertiesKHR& disp1, const VkDisplayModePropertiesKHR& disp2) { |
| return disp1.displayMode == disp2.displayMode && disp1.parameters.visibleRegion.width == disp2.parameters.visibleRegion.width && |
| disp1.parameters.visibleRegion.height == disp2.parameters.visibleRegion.height && |
| disp1.parameters.refreshRate == disp2.parameters.refreshRate; |
| } |
| |
| bool operator==(const VkDisplayModePropertiesKHR& disp1, const VkDisplayModeProperties2KHR& disp2) { |
| return disp1 == disp2.displayModeProperties; |
| } |
| bool operator==(const VkDisplayPlaneCapabilitiesKHR& caps1, const VkDisplayPlaneCapabilitiesKHR& caps2) { |
| return caps1.supportedAlpha == caps2.supportedAlpha && caps1.minSrcPosition.x == caps2.minSrcPosition.x && |
| caps1.minSrcPosition.y == caps2.minSrcPosition.y && caps1.maxSrcPosition.x == caps2.maxSrcPosition.x && |
| caps1.maxSrcPosition.y == caps2.maxSrcPosition.y && caps1.minSrcExtent.width == caps2.minSrcExtent.width && |
| caps1.minSrcExtent.height == caps2.minSrcExtent.height && caps1.maxSrcExtent.width == caps2.maxSrcExtent.width && |
| caps1.maxSrcExtent.height == caps2.maxSrcExtent.height && caps1.minDstPosition.x == caps2.minDstPosition.x && |
| caps1.minDstPosition.y == caps2.minDstPosition.y && caps1.maxDstPosition.x == caps2.maxDstPosition.x && |
| caps1.maxDstPosition.y == caps2.maxDstPosition.y && caps1.minDstExtent.width == caps2.minDstExtent.width && |
| caps1.minDstExtent.height == caps2.minDstExtent.height && caps1.maxDstExtent.width == caps2.maxDstExtent.width && |
| caps1.maxDstExtent.height == caps2.maxDstExtent.height; |
| } |
| |
| bool operator==(const VkDisplayPlaneCapabilitiesKHR& caps1, const VkDisplayPlaneCapabilities2KHR& caps2) { |
| return caps1 == caps2.capabilities; |
| } |
| bool operator==(const VkDisplayPlanePropertiesKHR& props1, const VkDisplayPlanePropertiesKHR& props2) { |
| return props1.currentDisplay == props2.currentDisplay && props1.currentStackIndex == props2.currentStackIndex; |
| } |
| bool operator==(const VkDisplayPlanePropertiesKHR& props1, const VkDisplayPlaneProperties2KHR& props2) { |
| return props1 == props2.displayPlaneProperties; |
| } |
| bool operator==(const VkExtent2D& ext1, const VkExtent2D& ext2) { return ext1.height == ext2.height && ext1.width == ext2.width; } |