From 79b8498c050c421ba144fdb1b0d3e7b1639b8274 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Thu, 26 Aug 2021 11:25:33 -0700 Subject: [PATCH] venus: update venus-protocol headers There are some decoder changes. But we mainly want to gain largeRing support. Signed-off-by: Chia-I Wu Reviewed-by: Yiwei Zhang Reviewed-by: Ryan Neph Part-of: --- src/virtio/venus-protocol/vn_protocol_driver.h | 2 +- .../venus-protocol/vn_protocol_driver_buffer.h | 2 +- .../vn_protocol_driver_command_buffer.h | 6 +- .../venus-protocol/vn_protocol_driver_defines.h | 1 + .../vn_protocol_driver_descriptor_set.h | 6 +- .../venus-protocol/vn_protocol_driver_device.h | 102 ++++++++++----------- .../venus-protocol/vn_protocol_driver_image.h | 20 ++-- .../venus-protocol/vn_protocol_driver_instance.h | 32 +++---- .../venus-protocol/vn_protocol_driver_pipeline.h | 16 ++-- .../vn_protocol_driver_pipeline_cache.h | 2 +- .../venus-protocol/vn_protocol_driver_query_pool.h | 2 +- .../venus-protocol/vn_protocol_driver_structs.h | 14 +-- .../venus-protocol/vn_protocol_driver_transport.h | 2 +- .../venus-protocol/vn_protocol_driver_types.h | 39 +++++++- 14 files changed, 140 insertions(+), 106 deletions(-) diff --git a/src/virtio/venus-protocol/vn_protocol_driver.h b/src/virtio/venus-protocol/vn_protocol_driver.h index 535f067..a744090 100644 --- a/src/virtio/venus-protocol/vn_protocol_driver.h +++ b/src/virtio/venus-protocol/vn_protocol_driver.h @@ -1,4 +1,4 @@ -/* This file is generated by venus-protocol git-0d51970a. */ +/* This file is generated by venus-protocol git-74c1c432. */ /* * Copyright 2020 Google LLC diff --git a/src/virtio/venus-protocol/vn_protocol_driver_buffer.h b/src/virtio/venus-protocol/vn_protocol_driver_buffer.h index 7f80b40..e811964 100644 --- a/src/virtio/venus-protocol/vn_protocol_driver_buffer.h +++ b/src/virtio/venus-protocol/vn_protocol_driver_buffer.h @@ -317,7 +317,7 @@ vn_decode_VkBindBufferMemoryDeviceGroupInfo_self(struct vn_cs_decoder *dec, VkBi const size_t array_size = vn_decode_array_size(dec, val->deviceIndexCount); vn_decode_uint32_t_array(dec, (uint32_t *)val->pDeviceIndices, array_size); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); val->pDeviceIndices = NULL; } } diff --git a/src/virtio/venus-protocol/vn_protocol_driver_command_buffer.h b/src/virtio/venus-protocol/vn_protocol_driver_command_buffer.h index 7aeaf73..a251bfc 100644 --- a/src/virtio/venus-protocol/vn_protocol_driver_command_buffer.h +++ b/src/virtio/venus-protocol/vn_protocol_driver_command_buffer.h @@ -1315,11 +1315,11 @@ static inline VkResult vn_decode_vkAllocateCommandBuffers_reply(struct vn_cs_dec /* skip device */ /* skip pAllocateInfo */ if (vn_peek_array_size(dec)) { - vn_decode_array_size(dec, (pAllocateInfo ? pAllocateInfo->commandBufferCount : 0)); - for (uint32_t i = 0; i < (pAllocateInfo ? pAllocateInfo->commandBufferCount : 0); i++) + const uint32_t iter_count = vn_decode_array_size(dec, (pAllocateInfo ? pAllocateInfo->commandBufferCount : 0)); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkCommandBuffer(dec, &pCommandBuffers[i]); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pCommandBuffers = NULL; } diff --git a/src/virtio/venus-protocol/vn_protocol_driver_defines.h b/src/virtio/venus-protocol/vn_protocol_driver_defines.h index a0e3610..76ee8f9 100644 --- a/src/virtio/venus-protocol/vn_protocol_driver_defines.h +++ b/src/virtio/venus-protocol/vn_protocol_driver_defines.h @@ -318,6 +318,7 @@ typedef struct VkImportMemoryResourceInfoMESA { typedef struct VkVenusExperimentalFeatures100000MESA { VkBool32 memoryResourceAllocationSize; VkBool32 globalFencing; + VkBool32 largeRing; } VkVenusExperimentalFeatures100000MESA; typedef struct VkMemoryResourceAllocationSizeProperties100000MESA { diff --git a/src/virtio/venus-protocol/vn_protocol_driver_descriptor_set.h b/src/virtio/venus-protocol/vn_protocol_driver_descriptor_set.h index 9c55d8f..0a9e450 100644 --- a/src/virtio/venus-protocol/vn_protocol_driver_descriptor_set.h +++ b/src/virtio/venus-protocol/vn_protocol_driver_descriptor_set.h @@ -463,11 +463,11 @@ static inline VkResult vn_decode_vkAllocateDescriptorSets_reply(struct vn_cs_dec /* skip device */ /* skip pAllocateInfo */ if (vn_peek_array_size(dec)) { - vn_decode_array_size(dec, (pAllocateInfo ? pAllocateInfo->descriptorSetCount : 0)); - for (uint32_t i = 0; i < (pAllocateInfo ? pAllocateInfo->descriptorSetCount : 0); i++) + const uint32_t iter_count = vn_decode_array_size(dec, (pAllocateInfo ? pAllocateInfo->descriptorSetCount : 0)); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkDescriptorSet(dec, &pDescriptorSets[i]); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pDescriptorSets = NULL; } diff --git a/src/virtio/venus-protocol/vn_protocol_driver_device.h b/src/virtio/venus-protocol/vn_protocol_driver_device.h index 1ee0ac2..9be82b5 100644 --- a/src/virtio/venus-protocol/vn_protocol_driver_device.h +++ b/src/virtio/venus-protocol/vn_protocol_driver_device.h @@ -549,7 +549,7 @@ vn_sizeof_VkPhysicalDeviceProperties(const VkPhysicalDeviceProperties *val) size += vn_sizeof_uint32_t(&val->deviceID); size += vn_sizeof_VkPhysicalDeviceType(&val->deviceType); size += vn_sizeof_array_size(VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); - size += vn_sizeof_blob_array(val->deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); + size += vn_sizeof_char_array(val->deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); size += vn_sizeof_array_size(VK_UUID_SIZE); size += vn_sizeof_uint8_t_array(val->pipelineCacheUUID, VK_UUID_SIZE); size += vn_sizeof_VkPhysicalDeviceLimits(&val->limits); @@ -567,7 +567,7 @@ vn_decode_VkPhysicalDeviceProperties(struct vn_cs_decoder *dec, VkPhysicalDevice vn_decode_VkPhysicalDeviceType(dec, &val->deviceType); { const size_t array_size = vn_decode_array_size(dec, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); - vn_decode_blob_array(dec, val->deviceName, array_size); + vn_decode_char_array(dec, val->deviceName, array_size); } { const size_t array_size = vn_decode_array_size(dec, VK_UUID_SIZE); @@ -739,14 +739,14 @@ vn_decode_VkPhysicalDeviceMemoryProperties(struct vn_cs_decoder *dec, VkPhysical { vn_decode_uint32_t(dec, &val->memoryTypeCount); { - vn_decode_array_size(dec, VK_MAX_MEMORY_TYPES); - for (uint32_t i = 0; i < VK_MAX_MEMORY_TYPES; i++) + const uint32_t iter_count = vn_decode_array_size(dec, VK_MAX_MEMORY_TYPES); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkMemoryType(dec, &val->memoryTypes[i]); } vn_decode_uint32_t(dec, &val->memoryHeapCount); { - vn_decode_array_size(dec, VK_MAX_MEMORY_HEAPS); - for (uint32_t i = 0; i < VK_MAX_MEMORY_HEAPS; i++) + const uint32_t iter_count = vn_decode_array_size(dec, VK_MAX_MEMORY_HEAPS); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkMemoryHeap(dec, &val->memoryHeaps[i]); } } @@ -5630,7 +5630,7 @@ vn_sizeof_VkDeviceCreateInfo_self(const VkDeviceCreateInfo *val) for (uint32_t i = 0; i < val->enabledLayerCount; i++) { const size_t string_size = strlen(val->ppEnabledLayerNames[i]) + 1; size += vn_sizeof_array_size(string_size); - size += vn_sizeof_blob_array(val->ppEnabledLayerNames[i], string_size); + size += vn_sizeof_char_array(val->ppEnabledLayerNames[i], string_size); } } else { size += vn_sizeof_array_size(0); @@ -5641,7 +5641,7 @@ vn_sizeof_VkDeviceCreateInfo_self(const VkDeviceCreateInfo *val) for (uint32_t i = 0; i < val->enabledExtensionCount; i++) { const size_t string_size = strlen(val->ppEnabledExtensionNames[i]) + 1; size += vn_sizeof_array_size(string_size); - size += vn_sizeof_blob_array(val->ppEnabledExtensionNames[i], string_size); + size += vn_sizeof_char_array(val->ppEnabledExtensionNames[i], string_size); } } else { size += vn_sizeof_array_size(0); @@ -5844,7 +5844,7 @@ vn_encode_VkDeviceCreateInfo_self(struct vn_cs_encoder *enc, const VkDeviceCreat for (uint32_t i = 0; i < val->enabledLayerCount; i++) { const size_t string_size = strlen(val->ppEnabledLayerNames[i]) + 1; vn_encode_array_size(enc, string_size); - vn_encode_blob_array(enc, val->ppEnabledLayerNames[i], string_size); + vn_encode_char_array(enc, val->ppEnabledLayerNames[i], string_size); } } else { vn_encode_array_size(enc, 0); @@ -5855,7 +5855,7 @@ vn_encode_VkDeviceCreateInfo_self(struct vn_cs_encoder *enc, const VkDeviceCreat for (uint32_t i = 0; i < val->enabledExtensionCount; i++) { const size_t string_size = strlen(val->ppEnabledExtensionNames[i]) + 1; vn_encode_array_size(enc, string_size); - vn_encode_blob_array(enc, val->ppEnabledExtensionNames[i], string_size); + vn_encode_char_array(enc, val->ppEnabledExtensionNames[i], string_size); } } else { vn_encode_array_size(enc, 0); @@ -5931,9 +5931,9 @@ vn_sizeof_VkPhysicalDeviceDriverProperties_self(const VkPhysicalDeviceDriverProp /* skip val->{sType,pNext} */ size += vn_sizeof_VkDriverId(&val->driverID); size += vn_sizeof_array_size(VK_MAX_DRIVER_NAME_SIZE); - size += vn_sizeof_blob_array(val->driverName, VK_MAX_DRIVER_NAME_SIZE); + size += vn_sizeof_char_array(val->driverName, VK_MAX_DRIVER_NAME_SIZE); size += vn_sizeof_array_size(VK_MAX_DRIVER_INFO_SIZE); - size += vn_sizeof_blob_array(val->driverInfo, VK_MAX_DRIVER_INFO_SIZE); + size += vn_sizeof_char_array(val->driverInfo, VK_MAX_DRIVER_INFO_SIZE); size += vn_sizeof_VkConformanceVersion(&val->conformanceVersion); return size; } @@ -5965,11 +5965,11 @@ vn_decode_VkPhysicalDeviceDriverProperties_self(struct vn_cs_decoder *dec, VkPhy vn_decode_VkDriverId(dec, &val->driverID); { const size_t array_size = vn_decode_array_size(dec, VK_MAX_DRIVER_NAME_SIZE); - vn_decode_blob_array(dec, val->driverName, array_size); + vn_decode_char_array(dec, val->driverName, array_size); } { const size_t array_size = vn_decode_array_size(dec, VK_MAX_DRIVER_INFO_SIZE); - vn_decode_blob_array(dec, val->driverInfo, array_size); + vn_decode_char_array(dec, val->driverInfo, array_size); } vn_decode_VkConformanceVersion(dec, &val->conformanceVersion); } @@ -7783,9 +7783,9 @@ vn_sizeof_VkPhysicalDeviceVulkan12Properties_self(const VkPhysicalDeviceVulkan12 /* skip val->{sType,pNext} */ size += vn_sizeof_VkDriverId(&val->driverID); size += vn_sizeof_array_size(VK_MAX_DRIVER_NAME_SIZE); - size += vn_sizeof_blob_array(val->driverName, VK_MAX_DRIVER_NAME_SIZE); + size += vn_sizeof_char_array(val->driverName, VK_MAX_DRIVER_NAME_SIZE); size += vn_sizeof_array_size(VK_MAX_DRIVER_INFO_SIZE); - size += vn_sizeof_blob_array(val->driverInfo, VK_MAX_DRIVER_INFO_SIZE); + size += vn_sizeof_char_array(val->driverInfo, VK_MAX_DRIVER_INFO_SIZE); size += vn_sizeof_VkConformanceVersion(&val->conformanceVersion); size += vn_sizeof_VkShaderFloatControlsIndependence(&val->denormBehaviorIndependence); size += vn_sizeof_VkShaderFloatControlsIndependence(&val->roundingModeIndependence); @@ -7865,11 +7865,11 @@ vn_decode_VkPhysicalDeviceVulkan12Properties_self(struct vn_cs_decoder *dec, VkP vn_decode_VkDriverId(dec, &val->driverID); { const size_t array_size = vn_decode_array_size(dec, VK_MAX_DRIVER_NAME_SIZE); - vn_decode_blob_array(dec, val->driverName, array_size); + vn_decode_char_array(dec, val->driverName, array_size); } { const size_t array_size = vn_decode_array_size(dec, VK_MAX_DRIVER_INFO_SIZE); - vn_decode_blob_array(dec, val->driverInfo, array_size); + vn_decode_char_array(dec, val->driverInfo, array_size); } vn_decode_VkConformanceVersion(dec, &val->conformanceVersion); vn_decode_VkShaderFloatControlsIndependence(dec, &val->denormBehaviorIndependence); @@ -8661,11 +8661,11 @@ vn_decode_VkDrmFormatModifierPropertiesListEXT_self(struct vn_cs_decoder *dec, V /* skip val->{sType,pNext} */ vn_decode_uint32_t(dec, &val->drmFormatModifierCount); if (vn_peek_array_size(dec)) { - vn_decode_array_size(dec, val->drmFormatModifierCount); - for (uint32_t i = 0; i < val->drmFormatModifierCount; i++) + const uint32_t iter_count = vn_decode_array_size(dec, val->drmFormatModifierCount); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkDrmFormatModifierPropertiesEXT(dec, &val->pDrmFormatModifierProperties[i]); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); val->pDrmFormatModifierProperties = NULL; } } @@ -8694,7 +8694,7 @@ vn_sizeof_VkDrmFormatModifierPropertiesListEXT_self_partial(const VkDrmFormatMod { size_t size = 0; /* skip val->{sType,pNext} */ - /* skip val->drmFormatModifierCount */ + /* WA1: size += vn_sizeof_uint32_t(&val->drmFormatModifierCount) */(void)0; if (val->pDrmFormatModifierProperties) { size += vn_sizeof_array_size(val->drmFormatModifierCount); for (uint32_t i = 0; i < val->drmFormatModifierCount; i++) @@ -8728,7 +8728,7 @@ static inline void vn_encode_VkDrmFormatModifierPropertiesListEXT_self_partial(struct vn_cs_encoder *enc, const VkDrmFormatModifierPropertiesListEXT *val) { /* skip val->{sType,pNext} */ - /* skip val->drmFormatModifierCount */ + /* WA1: vn_encode_uint32_t(enc, &val->drmFormatModifierCount) */(void)0; if (val->pDrmFormatModifierProperties) { vn_encode_array_size(enc, val->drmFormatModifierCount); for (uint32_t i = 0; i < val->drmFormatModifierCount; i++) @@ -10598,8 +10598,8 @@ vn_decode_VkPhysicalDeviceGroupProperties_self(struct vn_cs_decoder *dec, VkPhys /* skip val->{sType,pNext} */ vn_decode_uint32_t(dec, &val->physicalDeviceCount); { - vn_decode_array_size(dec, VK_MAX_DEVICE_GROUP_SIZE); - for (uint32_t i = 0; i < VK_MAX_DEVICE_GROUP_SIZE; i++) + const uint32_t iter_count = vn_decode_array_size(dec, VK_MAX_DEVICE_GROUP_SIZE); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkPhysicalDevice(dec, &val->physicalDevices[i]); } vn_decode_VkBool32(dec, &val->subsetAllocation); @@ -10810,11 +10810,11 @@ static inline VkResult vn_decode_vkEnumeratePhysicalDevices_reply(struct vn_cs_d pPhysicalDeviceCount = NULL; } if (vn_peek_array_size(dec)) { - vn_decode_array_size(dec, (pPhysicalDeviceCount ? *pPhysicalDeviceCount : 0)); - for (uint32_t i = 0; i < (pPhysicalDeviceCount ? *pPhysicalDeviceCount : 0); i++) + const uint32_t iter_count = vn_decode_array_size(dec, (pPhysicalDeviceCount ? *pPhysicalDeviceCount : 0)); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkPhysicalDevice(dec, &pPhysicalDevices[i]); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pPhysicalDevices = NULL; } @@ -10947,11 +10947,11 @@ static inline void vn_decode_vkGetPhysicalDeviceQueueFamilyProperties_reply(stru pQueueFamilyPropertyCount = NULL; } if (vn_peek_array_size(dec)) { - vn_decode_array_size(dec, (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0)); - for (uint32_t i = 0; i < (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0); i++) + const uint32_t iter_count = vn_decode_array_size(dec, (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0)); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkQueueFamilyProperties(dec, &pQueueFamilyProperties[i]); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pQueueFamilyProperties = NULL; } } @@ -11395,11 +11395,11 @@ static inline VkResult vn_decode_vkEnumerateDeviceLayerProperties_reply(struct v pPropertyCount = NULL; } if (vn_peek_array_size(dec)) { - vn_decode_array_size(dec, (pPropertyCount ? *pPropertyCount : 0)); - for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++) + const uint32_t iter_count = vn_decode_array_size(dec, (pPropertyCount ? *pPropertyCount : 0)); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkLayerProperties(dec, &pProperties[i]); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pProperties = NULL; } @@ -11416,7 +11416,7 @@ static inline size_t vn_sizeof_vkEnumerateDeviceExtensionProperties(VkPhysicalDe if (pLayerName) { const size_t string_size = strlen(pLayerName) + 1; cmd_size += vn_sizeof_array_size(string_size); - cmd_size += vn_sizeof_blob_array(pLayerName, string_size); + cmd_size += vn_sizeof_char_array(pLayerName, string_size); } else { cmd_size += vn_sizeof_array_size(0); } @@ -11445,7 +11445,7 @@ static inline void vn_encode_vkEnumerateDeviceExtensionProperties(struct vn_cs_e if (pLayerName) { const size_t string_size = strlen(pLayerName) + 1; vn_encode_array_size(enc, string_size); - vn_encode_blob_array(enc, pLayerName, string_size); + vn_encode_char_array(enc, pLayerName, string_size); } else { vn_encode_array_size(enc, 0); } @@ -11499,11 +11499,11 @@ static inline VkResult vn_decode_vkEnumerateDeviceExtensionProperties_reply(stru pPropertyCount = NULL; } if (vn_peek_array_size(dec)) { - vn_decode_array_size(dec, (pPropertyCount ? *pPropertyCount : 0)); - for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++) + const uint32_t iter_count = vn_decode_array_size(dec, (pPropertyCount ? *pPropertyCount : 0)); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkExtensionProperties(dec, &pProperties[i]); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pProperties = NULL; } @@ -11710,11 +11710,11 @@ static inline void vn_decode_vkGetPhysicalDeviceSparseImageFormatProperties_repl pPropertyCount = NULL; } if (vn_peek_array_size(dec)) { - vn_decode_array_size(dec, (pPropertyCount ? *pPropertyCount : 0)); - for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++) + const uint32_t iter_count = vn_decode_array_size(dec, (pPropertyCount ? *pPropertyCount : 0)); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkSparseImageFormatProperties(dec, &pProperties[i]); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pProperties = NULL; } } @@ -12021,11 +12021,11 @@ static inline void vn_decode_vkGetPhysicalDeviceQueueFamilyProperties2_reply(str pQueueFamilyPropertyCount = NULL; } if (vn_peek_array_size(dec)) { - vn_decode_array_size(dec, (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0)); - for (uint32_t i = 0; i < (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0); i++) + const uint32_t iter_count = vn_decode_array_size(dec, (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0)); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkQueueFamilyProperties2(dec, &pQueueFamilyProperties[i]); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pQueueFamilyProperties = NULL; } } @@ -12163,11 +12163,11 @@ static inline void vn_decode_vkGetPhysicalDeviceSparseImageFormatProperties2_rep pPropertyCount = NULL; } if (vn_peek_array_size(dec)) { - vn_decode_array_size(dec, (pPropertyCount ? *pPropertyCount : 0)); - for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++) + const uint32_t iter_count = vn_decode_array_size(dec, (pPropertyCount ? *pPropertyCount : 0)); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkSparseImageFormatProperties2(dec, &pProperties[i]); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pProperties = NULL; } } @@ -12429,11 +12429,11 @@ static inline VkResult vn_decode_vkEnumeratePhysicalDeviceGroups_reply(struct vn pPhysicalDeviceGroupCount = NULL; } if (vn_peek_array_size(dec)) { - vn_decode_array_size(dec, (pPhysicalDeviceGroupCount ? *pPhysicalDeviceGroupCount : 0)); - for (uint32_t i = 0; i < (pPhysicalDeviceGroupCount ? *pPhysicalDeviceGroupCount : 0); i++) + const uint32_t iter_count = vn_decode_array_size(dec, (pPhysicalDeviceGroupCount ? *pPhysicalDeviceGroupCount : 0)); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkPhysicalDeviceGroupProperties(dec, &pPhysicalDeviceGroupProperties[i]); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pPhysicalDeviceGroupProperties = NULL; } diff --git a/src/virtio/venus-protocol/vn_protocol_driver_image.h b/src/virtio/venus-protocol/vn_protocol_driver_image.h index 5f324fa..b161d35 100644 --- a/src/virtio/venus-protocol/vn_protocol_driver_image.h +++ b/src/virtio/venus-protocol/vn_protocol_driver_image.h @@ -566,16 +566,16 @@ vn_decode_VkBindImageMemoryDeviceGroupInfo_self(struct vn_cs_decoder *dec, VkBin const size_t array_size = vn_decode_array_size(dec, val->deviceIndexCount); vn_decode_uint32_t_array(dec, (uint32_t *)val->pDeviceIndices, array_size); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); val->pDeviceIndices = NULL; } vn_decode_uint32_t(dec, &val->splitInstanceBindRegionCount); if (vn_peek_array_size(dec)) { - vn_decode_array_size(dec, val->splitInstanceBindRegionCount); - for (uint32_t i = 0; i < val->splitInstanceBindRegionCount; i++) + const uint32_t iter_count = vn_decode_array_size(dec, val->splitInstanceBindRegionCount); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkRect2D(dec, &((VkRect2D *)val->pSplitInstanceBindRegions)[i]); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); val->pSplitInstanceBindRegions = NULL; } } @@ -1426,11 +1426,11 @@ static inline void vn_decode_vkGetImageSparseMemoryRequirements_reply(struct vn_ pSparseMemoryRequirementCount = NULL; } if (vn_peek_array_size(dec)) { - vn_decode_array_size(dec, (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0)); - for (uint32_t i = 0; i < (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0); i++) + const uint32_t iter_count = vn_decode_array_size(dec, (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0)); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkSparseImageMemoryRequirements(dec, &pSparseMemoryRequirements[i]); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pSparseMemoryRequirements = NULL; } } @@ -1829,11 +1829,11 @@ static inline void vn_decode_vkGetImageSparseMemoryRequirements2_reply(struct vn pSparseMemoryRequirementCount = NULL; } if (vn_peek_array_size(dec)) { - vn_decode_array_size(dec, (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0)); - for (uint32_t i = 0; i < (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0); i++) + const uint32_t iter_count = vn_decode_array_size(dec, (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0)); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkSparseImageMemoryRequirements2(dec, &pSparseMemoryRequirements[i]); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pSparseMemoryRequirements = NULL; } } diff --git a/src/virtio/venus-protocol/vn_protocol_driver_instance.h b/src/virtio/venus-protocol/vn_protocol_driver_instance.h index fa52e81..f6217e1 100644 --- a/src/virtio/venus-protocol/vn_protocol_driver_instance.h +++ b/src/virtio/venus-protocol/vn_protocol_driver_instance.h @@ -34,7 +34,7 @@ vn_sizeof_VkApplicationInfo_self(const VkApplicationInfo *val) if (val->pApplicationName) { const size_t string_size = strlen(val->pApplicationName) + 1; size += vn_sizeof_array_size(string_size); - size += vn_sizeof_blob_array(val->pApplicationName, string_size); + size += vn_sizeof_char_array(val->pApplicationName, string_size); } else { size += vn_sizeof_array_size(0); } @@ -42,7 +42,7 @@ vn_sizeof_VkApplicationInfo_self(const VkApplicationInfo *val) if (val->pEngineName) { const size_t string_size = strlen(val->pEngineName) + 1; size += vn_sizeof_array_size(string_size); - size += vn_sizeof_blob_array(val->pEngineName, string_size); + size += vn_sizeof_char_array(val->pEngineName, string_size); } else { size += vn_sizeof_array_size(0); } @@ -77,7 +77,7 @@ vn_encode_VkApplicationInfo_self(struct vn_cs_encoder *enc, const VkApplicationI if (val->pApplicationName) { const size_t string_size = strlen(val->pApplicationName) + 1; vn_encode_array_size(enc, string_size); - vn_encode_blob_array(enc, val->pApplicationName, string_size); + vn_encode_char_array(enc, val->pApplicationName, string_size); } else { vn_encode_array_size(enc, 0); } @@ -85,7 +85,7 @@ vn_encode_VkApplicationInfo_self(struct vn_cs_encoder *enc, const VkApplicationI if (val->pEngineName) { const size_t string_size = strlen(val->pEngineName) + 1; vn_encode_array_size(enc, string_size); - vn_encode_blob_array(enc, val->pEngineName, string_size); + vn_encode_char_array(enc, val->pEngineName, string_size); } else { vn_encode_array_size(enc, 0); } @@ -126,7 +126,7 @@ vn_sizeof_VkInstanceCreateInfo_self(const VkInstanceCreateInfo *val) for (uint32_t i = 0; i < val->enabledLayerCount; i++) { const size_t string_size = strlen(val->ppEnabledLayerNames[i]) + 1; size += vn_sizeof_array_size(string_size); - size += vn_sizeof_blob_array(val->ppEnabledLayerNames[i], string_size); + size += vn_sizeof_char_array(val->ppEnabledLayerNames[i], string_size); } } else { size += vn_sizeof_array_size(0); @@ -137,7 +137,7 @@ vn_sizeof_VkInstanceCreateInfo_self(const VkInstanceCreateInfo *val) for (uint32_t i = 0; i < val->enabledExtensionCount; i++) { const size_t string_size = strlen(val->ppEnabledExtensionNames[i]) + 1; size += vn_sizeof_array_size(string_size); - size += vn_sizeof_blob_array(val->ppEnabledExtensionNames[i], string_size); + size += vn_sizeof_char_array(val->ppEnabledExtensionNames[i], string_size); } } else { size += vn_sizeof_array_size(0); @@ -177,7 +177,7 @@ vn_encode_VkInstanceCreateInfo_self(struct vn_cs_encoder *enc, const VkInstanceC for (uint32_t i = 0; i < val->enabledLayerCount; i++) { const size_t string_size = strlen(val->ppEnabledLayerNames[i]) + 1; vn_encode_array_size(enc, string_size); - vn_encode_blob_array(enc, val->ppEnabledLayerNames[i], string_size); + vn_encode_char_array(enc, val->ppEnabledLayerNames[i], string_size); } } else { vn_encode_array_size(enc, 0); @@ -188,7 +188,7 @@ vn_encode_VkInstanceCreateInfo_self(struct vn_cs_encoder *enc, const VkInstanceC for (uint32_t i = 0; i < val->enabledExtensionCount; i++) { const size_t string_size = strlen(val->ppEnabledExtensionNames[i]) + 1; vn_encode_array_size(enc, string_size); - vn_encode_blob_array(enc, val->ppEnabledExtensionNames[i], string_size); + vn_encode_char_array(enc, val->ppEnabledExtensionNames[i], string_size); } } else { vn_encode_array_size(enc, 0); @@ -445,11 +445,11 @@ static inline VkResult vn_decode_vkEnumerateInstanceLayerProperties_reply(struct pPropertyCount = NULL; } if (vn_peek_array_size(dec)) { - vn_decode_array_size(dec, (pPropertyCount ? *pPropertyCount : 0)); - for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++) + const uint32_t iter_count = vn_decode_array_size(dec, (pPropertyCount ? *pPropertyCount : 0)); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkLayerProperties(dec, &pProperties[i]); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pProperties = NULL; } @@ -465,7 +465,7 @@ static inline size_t vn_sizeof_vkEnumerateInstanceExtensionProperties(const char if (pLayerName) { const size_t string_size = strlen(pLayerName) + 1; cmd_size += vn_sizeof_array_size(string_size); - cmd_size += vn_sizeof_blob_array(pLayerName, string_size); + cmd_size += vn_sizeof_char_array(pLayerName, string_size); } else { cmd_size += vn_sizeof_array_size(0); } @@ -493,7 +493,7 @@ static inline void vn_encode_vkEnumerateInstanceExtensionProperties(struct vn_cs if (pLayerName) { const size_t string_size = strlen(pLayerName) + 1; vn_encode_array_size(enc, string_size); - vn_encode_blob_array(enc, pLayerName, string_size); + vn_encode_char_array(enc, pLayerName, string_size); } else { vn_encode_array_size(enc, 0); } @@ -545,11 +545,11 @@ static inline VkResult vn_decode_vkEnumerateInstanceExtensionProperties_reply(st pPropertyCount = NULL; } if (vn_peek_array_size(dec)) { - vn_decode_array_size(dec, (pPropertyCount ? *pPropertyCount : 0)); - for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++) + const uint32_t iter_count = vn_decode_array_size(dec, (pPropertyCount ? *pPropertyCount : 0)); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkExtensionProperties(dec, &pProperties[i]); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pProperties = NULL; } diff --git a/src/virtio/venus-protocol/vn_protocol_driver_pipeline.h b/src/virtio/venus-protocol/vn_protocol_driver_pipeline.h index 8df0f56..d6b3742 100644 --- a/src/virtio/venus-protocol/vn_protocol_driver_pipeline.h +++ b/src/virtio/venus-protocol/vn_protocol_driver_pipeline.h @@ -95,7 +95,7 @@ vn_sizeof_VkPipelineShaderStageCreateInfo_self(const VkPipelineShaderStageCreate if (val->pName) { const size_t string_size = strlen(val->pName) + 1; size += vn_sizeof_array_size(string_size); - size += vn_sizeof_blob_array(val->pName, string_size); + size += vn_sizeof_char_array(val->pName, string_size); } else { size += vn_sizeof_array_size(0); } @@ -134,7 +134,7 @@ vn_encode_VkPipelineShaderStageCreateInfo_self(struct vn_cs_encoder *enc, const if (val->pName) { const size_t string_size = strlen(val->pName) + 1; vn_encode_array_size(enc, string_size); - vn_encode_blob_array(enc, val->pName, string_size); + vn_encode_char_array(enc, val->pName, string_size); } else { vn_encode_array_size(enc, 0); } @@ -1350,11 +1350,11 @@ static inline VkResult vn_decode_vkCreateGraphicsPipelines_reply(struct vn_cs_de /* skip pCreateInfos */ /* skip pAllocator */ if (vn_peek_array_size(dec)) { - vn_decode_array_size(dec, createInfoCount); - for (uint32_t i = 0; i < createInfoCount; i++) + const uint32_t iter_count = vn_decode_array_size(dec, createInfoCount); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkPipeline(dec, &pPipelines[i]); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pPipelines = NULL; } @@ -1456,11 +1456,11 @@ static inline VkResult vn_decode_vkCreateComputePipelines_reply(struct vn_cs_dec /* skip pCreateInfos */ /* skip pAllocator */ if (vn_peek_array_size(dec)) { - vn_decode_array_size(dec, createInfoCount); - for (uint32_t i = 0; i < createInfoCount; i++) + const uint32_t iter_count = vn_decode_array_size(dec, createInfoCount); + for (uint32_t i = 0; i < iter_count; i++) vn_decode_VkPipeline(dec, &pPipelines[i]); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pPipelines = NULL; } diff --git a/src/virtio/venus-protocol/vn_protocol_driver_pipeline_cache.h b/src/virtio/venus-protocol/vn_protocol_driver_pipeline_cache.h index c68b49e..a0793ea 100644 --- a/src/virtio/venus-protocol/vn_protocol_driver_pipeline_cache.h +++ b/src/virtio/venus-protocol/vn_protocol_driver_pipeline_cache.h @@ -273,7 +273,7 @@ static inline VkResult vn_decode_vkGetPipelineCacheData_reply(struct vn_cs_decod const size_t array_size = vn_decode_array_size(dec, (pDataSize ? *pDataSize : 0)); vn_decode_blob_array(dec, pData, array_size); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pData = NULL; } diff --git a/src/virtio/venus-protocol/vn_protocol_driver_query_pool.h b/src/virtio/venus-protocol/vn_protocol_driver_query_pool.h index 416cb39..861fc8d 100644 --- a/src/virtio/venus-protocol/vn_protocol_driver_query_pool.h +++ b/src/virtio/venus-protocol/vn_protocol_driver_query_pool.h @@ -270,7 +270,7 @@ static inline VkResult vn_decode_vkGetQueryPoolResults_reply(struct vn_cs_decode const size_t array_size = vn_decode_array_size(dec, dataSize); vn_decode_blob_array(dec, pData, array_size); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pData = NULL; } /* skip stride */ diff --git a/src/virtio/venus-protocol/vn_protocol_driver_structs.h b/src/virtio/venus-protocol/vn_protocol_driver_structs.h index 53d2418..183fa73 100644 --- a/src/virtio/venus-protocol/vn_protocol_driver_structs.h +++ b/src/virtio/venus-protocol/vn_protocol_driver_structs.h @@ -69,11 +69,11 @@ vn_sizeof_VkLayerProperties(const VkLayerProperties *val) { size_t size = 0; size += vn_sizeof_array_size(VK_MAX_EXTENSION_NAME_SIZE); - size += vn_sizeof_blob_array(val->layerName, VK_MAX_EXTENSION_NAME_SIZE); + size += vn_sizeof_char_array(val->layerName, VK_MAX_EXTENSION_NAME_SIZE); size += vn_sizeof_uint32_t(&val->specVersion); size += vn_sizeof_uint32_t(&val->implementationVersion); size += vn_sizeof_array_size(VK_MAX_DESCRIPTION_SIZE); - size += vn_sizeof_blob_array(val->description, VK_MAX_DESCRIPTION_SIZE); + size += vn_sizeof_char_array(val->description, VK_MAX_DESCRIPTION_SIZE); return size; } @@ -82,13 +82,13 @@ vn_decode_VkLayerProperties(struct vn_cs_decoder *dec, VkLayerProperties *val) { { const size_t array_size = vn_decode_array_size(dec, VK_MAX_EXTENSION_NAME_SIZE); - vn_decode_blob_array(dec, val->layerName, array_size); + vn_decode_char_array(dec, val->layerName, array_size); } vn_decode_uint32_t(dec, &val->specVersion); vn_decode_uint32_t(dec, &val->implementationVersion); { const size_t array_size = vn_decode_array_size(dec, VK_MAX_DESCRIPTION_SIZE); - vn_decode_blob_array(dec, val->description, array_size); + vn_decode_char_array(dec, val->description, array_size); } } @@ -119,7 +119,7 @@ vn_sizeof_VkExtensionProperties(const VkExtensionProperties *val) { size_t size = 0; size += vn_sizeof_array_size(VK_MAX_EXTENSION_NAME_SIZE); - size += vn_sizeof_blob_array(val->extensionName, VK_MAX_EXTENSION_NAME_SIZE); + size += vn_sizeof_char_array(val->extensionName, VK_MAX_EXTENSION_NAME_SIZE); size += vn_sizeof_uint32_t(&val->specVersion); return size; } @@ -128,7 +128,7 @@ static inline void vn_encode_VkExtensionProperties(struct vn_cs_encoder *enc, const VkExtensionProperties *val) { vn_encode_array_size(enc, VK_MAX_EXTENSION_NAME_SIZE); - vn_encode_blob_array(enc, val->extensionName, VK_MAX_EXTENSION_NAME_SIZE); + vn_encode_char_array(enc, val->extensionName, VK_MAX_EXTENSION_NAME_SIZE); vn_encode_uint32_t(enc, &val->specVersion); } @@ -137,7 +137,7 @@ vn_decode_VkExtensionProperties(struct vn_cs_decoder *dec, VkExtensionProperties { { const size_t array_size = vn_decode_array_size(dec, VK_MAX_EXTENSION_NAME_SIZE); - vn_decode_blob_array(dec, val->extensionName, array_size); + vn_decode_char_array(dec, val->extensionName, array_size); } vn_decode_uint32_t(dec, &val->specVersion); } diff --git a/src/virtio/venus-protocol/vn_protocol_driver_transport.h b/src/virtio/venus-protocol/vn_protocol_driver_transport.h index c9c12fc..f665270 100644 --- a/src/virtio/venus-protocol/vn_protocol_driver_transport.h +++ b/src/virtio/venus-protocol/vn_protocol_driver_transport.h @@ -898,7 +898,7 @@ static inline void vn_decode_vkGetVenusExperimentalFeatureData100000MESA_reply(s const size_t array_size = vn_decode_array_size(dec, (pDataSize ? *pDataSize : 0)); vn_decode_blob_array(dec, pData, array_size); } else { - vn_decode_array_size(dec, 0); + vn_decode_array_size_unchecked(dec); pData = NULL; } } diff --git a/src/virtio/venus-protocol/vn_protocol_driver_types.h b/src/virtio/venus-protocol/vn_protocol_driver_types.h index 94fade6..b545bdc 100644 --- a/src/virtio/venus-protocol/vn_protocol_driver_types.h +++ b/src/virtio/venus-protocol/vn_protocol_driver_types.h @@ -194,6 +194,31 @@ vn_decode_blob_array(struct vn_cs_decoder *dec, void *val, size_t size) vn_decode(dec, (size + 3) & ~3, val, size); } +/* string */ + +static inline size_t +vn_sizeof_char_array(const char *val, size_t size) +{ + return vn_sizeof_blob_array(val, size); +} + +static inline void +vn_encode_char_array(struct vn_cs_encoder *enc, const char *val, size_t size) +{ + assert(size && strlen(val) < size); + vn_encode_blob_array(enc, val, size); +} + +static inline void +vn_decode_char_array(struct vn_cs_decoder *dec, char *val, size_t size) +{ + vn_decode_blob_array(dec, val, size); + if (size) + val[size - 1] = '\0'; + else + vn_cs_decoder_set_fatal(dec); +} + /* array size (uint64_t) */ static inline size_t @@ -209,11 +234,11 @@ vn_encode_array_size(struct vn_cs_encoder *enc, uint64_t size) } static inline uint64_t -vn_decode_array_size(struct vn_cs_decoder *dec, uint64_t max_size) +vn_decode_array_size(struct vn_cs_decoder *dec, uint64_t expected_size) { uint64_t size; vn_decode_uint64_t(dec, &size); - if (size > max_size) { + if (size != expected_size) { vn_cs_decoder_set_fatal(dec); size = 0; } @@ -221,6 +246,14 @@ vn_decode_array_size(struct vn_cs_decoder *dec, uint64_t max_size) } static inline uint64_t +vn_decode_array_size_unchecked(struct vn_cs_decoder *dec) +{ + uint64_t size; + vn_decode_uint64_t(dec, &size); + return size; +} + +static inline uint64_t vn_peek_array_size(struct vn_cs_decoder *dec) { uint64_t size; @@ -246,7 +279,7 @@ vn_encode_simple_pointer(struct vn_cs_encoder *enc, const void *val) static inline bool vn_decode_simple_pointer(struct vn_cs_decoder *dec) { - return vn_decode_array_size(dec, 1); + return vn_decode_array_size_unchecked(dec); } /* uint32_t */ -- 2.7.4