Mesa (main): venus: update venus-protocol headers

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Aug 2 22:54:44 UTC 2021


Module: Mesa
Branch: main
Commit: 4b364ab4bcd70c821c6830e1a4858a2a7ce143da
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=4b364ab4bcd70c821c6830e1a4858a2a7ce143da

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Fri Jul 30 11:40:29 2021 -0700

venus: update venus-protocol headers

Updated to 1.2.182.  Added some NULL checks.

Signed-off-by: Chia-I Wu <olvaffe at gmail.com>
Reviewed-by: Yiwei Zhang <zzyiwei at chromium.org>
Reviewed-by: Ryan Neph <ryanneph at google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12144>

---

 src/virtio/venus-protocol/vn_protocol_driver.h     |   2 +-
 .../vn_protocol_driver_command_buffer.h            |  16 +--
 .../vn_protocol_driver_descriptor_set.h            |  16 +--
 .../venus-protocol/vn_protocol_driver_device.h     | 128 ++++++++++-----------
 .../venus-protocol/vn_protocol_driver_image.h      |  32 +++---
 .../venus-protocol/vn_protocol_driver_info.h       |   2 +-
 .../venus-protocol/vn_protocol_driver_instance.h   |  32 +++---
 .../vn_protocol_driver_pipeline_cache.h            |   8 +-
 .../venus-protocol/vn_protocol_driver_structs.h    |  19 +++
 .../venus-protocol/vn_protocol_driver_transport.h  |   8 +-
 .../venus-protocol/vn_protocol_driver_types.h      |  21 ++++
 11 files changed, 162 insertions(+), 122 deletions(-)

diff --git a/src/virtio/venus-protocol/vn_protocol_driver.h b/src/virtio/venus-protocol/vn_protocol_driver.h
index a88e1ee903b..0ee2996cd7b 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-3854cba2. */
+/* This file is generated by venus-protocol git-f59e7aad. */
 
 /*
  * Copyright 2020 Google LLC
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 a0cfa0fe680..18d155f9101 100644
--- a/src/virtio/venus-protocol/vn_protocol_driver_command_buffer.h
+++ b/src/virtio/venus-protocol/vn_protocol_driver_command_buffer.h
@@ -1255,8 +1255,8 @@ static inline size_t vn_sizeof_vkAllocateCommandBuffers(VkDevice device, const V
     if (pAllocateInfo)
         cmd_size += vn_sizeof_VkCommandBufferAllocateInfo(pAllocateInfo);
     if (pCommandBuffers) {
-        cmd_size += vn_sizeof_array_size(pAllocateInfo->commandBufferCount);
-        for (uint32_t i = 0; i < pAllocateInfo->commandBufferCount; i++)
+        cmd_size += vn_sizeof_array_size((pAllocateInfo ? pAllocateInfo->commandBufferCount : 0));
+        for (uint32_t i = 0; i < (pAllocateInfo ? pAllocateInfo->commandBufferCount : 0); i++)
             cmd_size += vn_sizeof_VkCommandBuffer(&pCommandBuffers[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -1276,8 +1276,8 @@ static inline void vn_encode_vkAllocateCommandBuffers(struct vn_cs_encoder *enc,
     if (vn_encode_simple_pointer(enc, pAllocateInfo))
         vn_encode_VkCommandBufferAllocateInfo(enc, pAllocateInfo);
     if (pCommandBuffers) {
-        vn_encode_array_size(enc, pAllocateInfo->commandBufferCount);
-        for (uint32_t i = 0; i < pAllocateInfo->commandBufferCount; i++)
+        vn_encode_array_size(enc, (pAllocateInfo ? pAllocateInfo->commandBufferCount : 0));
+        for (uint32_t i = 0; i < (pAllocateInfo ? pAllocateInfo->commandBufferCount : 0); i++)
             vn_encode_VkCommandBuffer(enc, &pCommandBuffers[i]);
     } else {
         vn_encode_array_size(enc, 0);
@@ -1294,8 +1294,8 @@ static inline size_t vn_sizeof_vkAllocateCommandBuffers_reply(VkDevice device, c
     /* skip device */
     /* skip pAllocateInfo */
     if (pCommandBuffers) {
-        cmd_size += vn_sizeof_array_size(pAllocateInfo->commandBufferCount);
-        for (uint32_t i = 0; i < pAllocateInfo->commandBufferCount; i++)
+        cmd_size += vn_sizeof_array_size((pAllocateInfo ? pAllocateInfo->commandBufferCount : 0));
+        for (uint32_t i = 0; i < (pAllocateInfo ? pAllocateInfo->commandBufferCount : 0); i++)
             cmd_size += vn_sizeof_VkCommandBuffer(&pCommandBuffers[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -1315,8 +1315,8 @@ 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->commandBufferCount);
-        for (uint32_t i = 0; i < pAllocateInfo->commandBufferCount; i++)
+        vn_decode_array_size(dec, (pAllocateInfo ? pAllocateInfo->commandBufferCount : 0));
+        for (uint32_t i = 0; i < (pAllocateInfo ? pAllocateInfo->commandBufferCount : 0); i++)
             vn_decode_VkCommandBuffer(dec, &pCommandBuffers[i]);
     } else {
         vn_decode_array_size(dec, 0);
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 b74147ceb32..ded739f38f1 100644
--- a/src/virtio/venus-protocol/vn_protocol_driver_descriptor_set.h
+++ b/src/virtio/venus-protocol/vn_protocol_driver_descriptor_set.h
@@ -403,8 +403,8 @@ static inline size_t vn_sizeof_vkAllocateDescriptorSets(VkDevice device, const V
     if (pAllocateInfo)
         cmd_size += vn_sizeof_VkDescriptorSetAllocateInfo(pAllocateInfo);
     if (pDescriptorSets) {
-        cmd_size += vn_sizeof_array_size(pAllocateInfo->descriptorSetCount);
-        for (uint32_t i = 0; i < pAllocateInfo->descriptorSetCount; i++)
+        cmd_size += vn_sizeof_array_size((pAllocateInfo ? pAllocateInfo->descriptorSetCount : 0));
+        for (uint32_t i = 0; i < (pAllocateInfo ? pAllocateInfo->descriptorSetCount : 0); i++)
             cmd_size += vn_sizeof_VkDescriptorSet(&pDescriptorSets[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -424,8 +424,8 @@ static inline void vn_encode_vkAllocateDescriptorSets(struct vn_cs_encoder *enc,
     if (vn_encode_simple_pointer(enc, pAllocateInfo))
         vn_encode_VkDescriptorSetAllocateInfo(enc, pAllocateInfo);
     if (pDescriptorSets) {
-        vn_encode_array_size(enc, pAllocateInfo->descriptorSetCount);
-        for (uint32_t i = 0; i < pAllocateInfo->descriptorSetCount; i++)
+        vn_encode_array_size(enc, (pAllocateInfo ? pAllocateInfo->descriptorSetCount : 0));
+        for (uint32_t i = 0; i < (pAllocateInfo ? pAllocateInfo->descriptorSetCount : 0); i++)
             vn_encode_VkDescriptorSet(enc, &pDescriptorSets[i]);
     } else {
         vn_encode_array_size(enc, 0);
@@ -442,8 +442,8 @@ static inline size_t vn_sizeof_vkAllocateDescriptorSets_reply(VkDevice device, c
     /* skip device */
     /* skip pAllocateInfo */
     if (pDescriptorSets) {
-        cmd_size += vn_sizeof_array_size(pAllocateInfo->descriptorSetCount);
-        for (uint32_t i = 0; i < pAllocateInfo->descriptorSetCount; i++)
+        cmd_size += vn_sizeof_array_size((pAllocateInfo ? pAllocateInfo->descriptorSetCount : 0));
+        for (uint32_t i = 0; i < (pAllocateInfo ? pAllocateInfo->descriptorSetCount : 0); i++)
             cmd_size += vn_sizeof_VkDescriptorSet(&pDescriptorSets[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -463,8 +463,8 @@ 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->descriptorSetCount);
-        for (uint32_t i = 0; i < pAllocateInfo->descriptorSetCount; i++)
+        vn_decode_array_size(dec, (pAllocateInfo ? pAllocateInfo->descriptorSetCount : 0));
+        for (uint32_t i = 0; i < (pAllocateInfo ? pAllocateInfo->descriptorSetCount : 0); i++)
             vn_decode_VkDescriptorSet(dec, &pDescriptorSets[i]);
     } else {
         vn_decode_array_size(dec, 0);
diff --git a/src/virtio/venus-protocol/vn_protocol_driver_device.h b/src/virtio/venus-protocol/vn_protocol_driver_device.h
index 14c4d678133..96e72003764 100644
--- a/src/virtio/venus-protocol/vn_protocol_driver_device.h
+++ b/src/virtio/venus-protocol/vn_protocol_driver_device.h
@@ -10744,8 +10744,8 @@ static inline size_t vn_sizeof_vkEnumeratePhysicalDevices(VkInstance instance, u
     if (pPhysicalDeviceCount)
         cmd_size += vn_sizeof_uint32_t(pPhysicalDeviceCount);
     if (pPhysicalDevices) {
-        cmd_size += vn_sizeof_array_size(*pPhysicalDeviceCount);
-        for (uint32_t i = 0; i < *pPhysicalDeviceCount; i++)
+        cmd_size += vn_sizeof_array_size((pPhysicalDeviceCount ? *pPhysicalDeviceCount : 0));
+        for (uint32_t i = 0; i < (pPhysicalDeviceCount ? *pPhysicalDeviceCount : 0); i++)
             cmd_size += vn_sizeof_VkPhysicalDevice(&pPhysicalDevices[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -10765,8 +10765,8 @@ static inline void vn_encode_vkEnumeratePhysicalDevices(struct vn_cs_encoder *en
     if (vn_encode_simple_pointer(enc, pPhysicalDeviceCount))
         vn_encode_uint32_t(enc, pPhysicalDeviceCount);
     if (pPhysicalDevices) {
-        vn_encode_array_size(enc, *pPhysicalDeviceCount);
-        for (uint32_t i = 0; i < *pPhysicalDeviceCount; i++)
+        vn_encode_array_size(enc, (pPhysicalDeviceCount ? *pPhysicalDeviceCount : 0));
+        for (uint32_t i = 0; i < (pPhysicalDeviceCount ? *pPhysicalDeviceCount : 0); i++)
             vn_encode_VkPhysicalDevice(enc, &pPhysicalDevices[i]);
     } else {
         vn_encode_array_size(enc, 0);
@@ -10785,8 +10785,8 @@ static inline size_t vn_sizeof_vkEnumeratePhysicalDevices_reply(VkInstance insta
     if (pPhysicalDeviceCount)
         cmd_size += vn_sizeof_uint32_t(pPhysicalDeviceCount);
     if (pPhysicalDevices) {
-        cmd_size += vn_sizeof_array_size(*pPhysicalDeviceCount);
-        for (uint32_t i = 0; i < *pPhysicalDeviceCount; i++)
+        cmd_size += vn_sizeof_array_size((pPhysicalDeviceCount ? *pPhysicalDeviceCount : 0));
+        for (uint32_t i = 0; i < (pPhysicalDeviceCount ? *pPhysicalDeviceCount : 0); i++)
             cmd_size += vn_sizeof_VkPhysicalDevice(&pPhysicalDevices[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -10810,8 +10810,8 @@ 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);
-        for (uint32_t i = 0; i < *pPhysicalDeviceCount; i++)
+        vn_decode_array_size(dec, (pPhysicalDeviceCount ? *pPhysicalDeviceCount : 0));
+        for (uint32_t i = 0; i < (pPhysicalDeviceCount ? *pPhysicalDeviceCount : 0); i++)
             vn_decode_VkPhysicalDevice(dec, &pPhysicalDevices[i]);
     } else {
         vn_decode_array_size(dec, 0);
@@ -10885,8 +10885,8 @@ static inline size_t vn_sizeof_vkGetPhysicalDeviceQueueFamilyProperties(VkPhysic
     if (pQueueFamilyPropertyCount)
         cmd_size += vn_sizeof_uint32_t(pQueueFamilyPropertyCount);
     if (pQueueFamilyProperties) {
-        cmd_size += vn_sizeof_array_size(*pQueueFamilyPropertyCount);
-        for (uint32_t i = 0; i < *pQueueFamilyPropertyCount; i++)
+        cmd_size += vn_sizeof_array_size((pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0));
+        for (uint32_t i = 0; i < (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0); i++)
             cmd_size += vn_sizeof_VkQueueFamilyProperties_partial(&pQueueFamilyProperties[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -10906,8 +10906,8 @@ static inline void vn_encode_vkGetPhysicalDeviceQueueFamilyProperties(struct vn_
     if (vn_encode_simple_pointer(enc, pQueueFamilyPropertyCount))
         vn_encode_uint32_t(enc, pQueueFamilyPropertyCount);
     if (pQueueFamilyProperties) {
-        vn_encode_array_size(enc, *pQueueFamilyPropertyCount);
-        for (uint32_t i = 0; i < *pQueueFamilyPropertyCount; i++)
+        vn_encode_array_size(enc, (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0));
+        for (uint32_t i = 0; i < (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0); i++)
             vn_encode_VkQueueFamilyProperties_partial(enc, &pQueueFamilyProperties[i]);
     } else {
         vn_encode_array_size(enc, 0);
@@ -10924,8 +10924,8 @@ static inline size_t vn_sizeof_vkGetPhysicalDeviceQueueFamilyProperties_reply(Vk
     if (pQueueFamilyPropertyCount)
         cmd_size += vn_sizeof_uint32_t(pQueueFamilyPropertyCount);
     if (pQueueFamilyProperties) {
-        cmd_size += vn_sizeof_array_size(*pQueueFamilyPropertyCount);
-        for (uint32_t i = 0; i < *pQueueFamilyPropertyCount; i++)
+        cmd_size += vn_sizeof_array_size((pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0));
+        for (uint32_t i = 0; i < (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0); i++)
             cmd_size += vn_sizeof_VkQueueFamilyProperties(&pQueueFamilyProperties[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -10947,8 +10947,8 @@ static inline void vn_decode_vkGetPhysicalDeviceQueueFamilyProperties_reply(stru
         pQueueFamilyPropertyCount = NULL;
     }
     if (vn_peek_array_size(dec)) {
-        vn_decode_array_size(dec, *pQueueFamilyPropertyCount);
-        for (uint32_t i = 0; i < *pQueueFamilyPropertyCount; i++)
+        vn_decode_array_size(dec, (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0));
+        for (uint32_t i = 0; i < (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0); i++)
             vn_decode_VkQueueFamilyProperties(dec, &pQueueFamilyProperties[i]);
     } else {
         vn_decode_array_size(dec, 0);
@@ -11329,8 +11329,8 @@ static inline size_t vn_sizeof_vkEnumerateDeviceLayerProperties(VkPhysicalDevice
     if (pPropertyCount)
         cmd_size += vn_sizeof_uint32_t(pPropertyCount);
     if (pProperties) {
-        cmd_size += vn_sizeof_array_size(*pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        cmd_size += vn_sizeof_array_size((pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             cmd_size += vn_sizeof_VkLayerProperties_partial(&pProperties[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -11350,8 +11350,8 @@ static inline void vn_encode_vkEnumerateDeviceLayerProperties(struct vn_cs_encod
     if (vn_encode_simple_pointer(enc, pPropertyCount))
         vn_encode_uint32_t(enc, pPropertyCount);
     if (pProperties) {
-        vn_encode_array_size(enc, *pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        vn_encode_array_size(enc, (pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             vn_encode_VkLayerProperties_partial(enc, &pProperties[i]);
     } else {
         vn_encode_array_size(enc, 0);
@@ -11370,8 +11370,8 @@ static inline size_t vn_sizeof_vkEnumerateDeviceLayerProperties_reply(VkPhysical
     if (pPropertyCount)
         cmd_size += vn_sizeof_uint32_t(pPropertyCount);
     if (pProperties) {
-        cmd_size += vn_sizeof_array_size(*pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        cmd_size += vn_sizeof_array_size((pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             cmd_size += vn_sizeof_VkLayerProperties(&pProperties[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -11395,8 +11395,8 @@ static inline VkResult vn_decode_vkEnumerateDeviceLayerProperties_reply(struct v
         pPropertyCount = NULL;
     }
     if (vn_peek_array_size(dec)) {
-        vn_decode_array_size(dec, *pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        vn_decode_array_size(dec, (pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             vn_decode_VkLayerProperties(dec, &pProperties[i]);
     } else {
         vn_decode_array_size(dec, 0);
@@ -11424,8 +11424,8 @@ static inline size_t vn_sizeof_vkEnumerateDeviceExtensionProperties(VkPhysicalDe
     if (pPropertyCount)
         cmd_size += vn_sizeof_uint32_t(pPropertyCount);
     if (pProperties) {
-        cmd_size += vn_sizeof_array_size(*pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        cmd_size += vn_sizeof_array_size((pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             cmd_size += vn_sizeof_VkExtensionProperties_partial(&pProperties[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -11452,8 +11452,8 @@ static inline void vn_encode_vkEnumerateDeviceExtensionProperties(struct vn_cs_e
     if (vn_encode_simple_pointer(enc, pPropertyCount))
         vn_encode_uint32_t(enc, pPropertyCount);
     if (pProperties) {
-        vn_encode_array_size(enc, *pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        vn_encode_array_size(enc, (pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             vn_encode_VkExtensionProperties_partial(enc, &pProperties[i]);
     } else {
         vn_encode_array_size(enc, 0);
@@ -11473,8 +11473,8 @@ static inline size_t vn_sizeof_vkEnumerateDeviceExtensionProperties_reply(VkPhys
     if (pPropertyCount)
         cmd_size += vn_sizeof_uint32_t(pPropertyCount);
     if (pProperties) {
-        cmd_size += vn_sizeof_array_size(*pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        cmd_size += vn_sizeof_array_size((pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             cmd_size += vn_sizeof_VkExtensionProperties(&pProperties[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -11499,8 +11499,8 @@ static inline VkResult vn_decode_vkEnumerateDeviceExtensionProperties_reply(stru
         pPropertyCount = NULL;
     }
     if (vn_peek_array_size(dec)) {
-        vn_decode_array_size(dec, *pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        vn_decode_array_size(dec, (pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             vn_decode_VkExtensionProperties(dec, &pProperties[i]);
     } else {
         vn_decode_array_size(dec, 0);
@@ -11633,8 +11633,8 @@ static inline size_t vn_sizeof_vkGetPhysicalDeviceSparseImageFormatProperties(Vk
     if (pPropertyCount)
         cmd_size += vn_sizeof_uint32_t(pPropertyCount);
     if (pProperties) {
-        cmd_size += vn_sizeof_array_size(*pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        cmd_size += vn_sizeof_array_size((pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             cmd_size += vn_sizeof_VkSparseImageFormatProperties_partial(&pProperties[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -11659,8 +11659,8 @@ static inline void vn_encode_vkGetPhysicalDeviceSparseImageFormatProperties(stru
     if (vn_encode_simple_pointer(enc, pPropertyCount))
         vn_encode_uint32_t(enc, pPropertyCount);
     if (pProperties) {
-        vn_encode_array_size(enc, *pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        vn_encode_array_size(enc, (pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             vn_encode_VkSparseImageFormatProperties_partial(enc, &pProperties[i]);
     } else {
         vn_encode_array_size(enc, 0);
@@ -11682,8 +11682,8 @@ static inline size_t vn_sizeof_vkGetPhysicalDeviceSparseImageFormatProperties_re
     if (pPropertyCount)
         cmd_size += vn_sizeof_uint32_t(pPropertyCount);
     if (pProperties) {
-        cmd_size += vn_sizeof_array_size(*pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        cmd_size += vn_sizeof_array_size((pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             cmd_size += vn_sizeof_VkSparseImageFormatProperties(&pProperties[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -11710,8 +11710,8 @@ static inline void vn_decode_vkGetPhysicalDeviceSparseImageFormatProperties_repl
         pPropertyCount = NULL;
     }
     if (vn_peek_array_size(dec)) {
-        vn_decode_array_size(dec, *pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        vn_decode_array_size(dec, (pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             vn_decode_VkSparseImageFormatProperties(dec, &pProperties[i]);
     } else {
         vn_decode_array_size(dec, 0);
@@ -11959,8 +11959,8 @@ static inline size_t vn_sizeof_vkGetPhysicalDeviceQueueFamilyProperties2(VkPhysi
     if (pQueueFamilyPropertyCount)
         cmd_size += vn_sizeof_uint32_t(pQueueFamilyPropertyCount);
     if (pQueueFamilyProperties) {
-        cmd_size += vn_sizeof_array_size(*pQueueFamilyPropertyCount);
-        for (uint32_t i = 0; i < *pQueueFamilyPropertyCount; i++)
+        cmd_size += vn_sizeof_array_size((pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0));
+        for (uint32_t i = 0; i < (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0); i++)
             cmd_size += vn_sizeof_VkQueueFamilyProperties2_partial(&pQueueFamilyProperties[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -11980,8 +11980,8 @@ static inline void vn_encode_vkGetPhysicalDeviceQueueFamilyProperties2(struct vn
     if (vn_encode_simple_pointer(enc, pQueueFamilyPropertyCount))
         vn_encode_uint32_t(enc, pQueueFamilyPropertyCount);
     if (pQueueFamilyProperties) {
-        vn_encode_array_size(enc, *pQueueFamilyPropertyCount);
-        for (uint32_t i = 0; i < *pQueueFamilyPropertyCount; i++)
+        vn_encode_array_size(enc, (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0));
+        for (uint32_t i = 0; i < (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0); i++)
             vn_encode_VkQueueFamilyProperties2_partial(enc, &pQueueFamilyProperties[i]);
     } else {
         vn_encode_array_size(enc, 0);
@@ -11998,8 +11998,8 @@ static inline size_t vn_sizeof_vkGetPhysicalDeviceQueueFamilyProperties2_reply(V
     if (pQueueFamilyPropertyCount)
         cmd_size += vn_sizeof_uint32_t(pQueueFamilyPropertyCount);
     if (pQueueFamilyProperties) {
-        cmd_size += vn_sizeof_array_size(*pQueueFamilyPropertyCount);
-        for (uint32_t i = 0; i < *pQueueFamilyPropertyCount; i++)
+        cmd_size += vn_sizeof_array_size((pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0));
+        for (uint32_t i = 0; i < (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0); i++)
             cmd_size += vn_sizeof_VkQueueFamilyProperties2(&pQueueFamilyProperties[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -12021,8 +12021,8 @@ static inline void vn_decode_vkGetPhysicalDeviceQueueFamilyProperties2_reply(str
         pQueueFamilyPropertyCount = NULL;
     }
     if (vn_peek_array_size(dec)) {
-        vn_decode_array_size(dec, *pQueueFamilyPropertyCount);
-        for (uint32_t i = 0; i < *pQueueFamilyPropertyCount; i++)
+        vn_decode_array_size(dec, (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0));
+        for (uint32_t i = 0; i < (pQueueFamilyPropertyCount ? *pQueueFamilyPropertyCount : 0); i++)
             vn_decode_VkQueueFamilyProperties2(dec, &pQueueFamilyProperties[i]);
     } else {
         vn_decode_array_size(dec, 0);
@@ -12097,8 +12097,8 @@ static inline size_t vn_sizeof_vkGetPhysicalDeviceSparseImageFormatProperties2(V
     if (pPropertyCount)
         cmd_size += vn_sizeof_uint32_t(pPropertyCount);
     if (pProperties) {
-        cmd_size += vn_sizeof_array_size(*pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        cmd_size += vn_sizeof_array_size((pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             cmd_size += vn_sizeof_VkSparseImageFormatProperties2_partial(&pProperties[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -12120,8 +12120,8 @@ static inline void vn_encode_vkGetPhysicalDeviceSparseImageFormatProperties2(str
     if (vn_encode_simple_pointer(enc, pPropertyCount))
         vn_encode_uint32_t(enc, pPropertyCount);
     if (pProperties) {
-        vn_encode_array_size(enc, *pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        vn_encode_array_size(enc, (pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             vn_encode_VkSparseImageFormatProperties2_partial(enc, &pProperties[i]);
     } else {
         vn_encode_array_size(enc, 0);
@@ -12139,8 +12139,8 @@ static inline size_t vn_sizeof_vkGetPhysicalDeviceSparseImageFormatProperties2_r
     if (pPropertyCount)
         cmd_size += vn_sizeof_uint32_t(pPropertyCount);
     if (pProperties) {
-        cmd_size += vn_sizeof_array_size(*pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        cmd_size += vn_sizeof_array_size((pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             cmd_size += vn_sizeof_VkSparseImageFormatProperties2(&pProperties[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -12163,8 +12163,8 @@ static inline void vn_decode_vkGetPhysicalDeviceSparseImageFormatProperties2_rep
         pPropertyCount = NULL;
     }
     if (vn_peek_array_size(dec)) {
-        vn_decode_array_size(dec, *pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        vn_decode_array_size(dec, (pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             vn_decode_VkSparseImageFormatProperties2(dec, &pProperties[i]);
     } else {
         vn_decode_array_size(dec, 0);
@@ -12363,8 +12363,8 @@ static inline size_t vn_sizeof_vkEnumeratePhysicalDeviceGroups(VkInstance instan
     if (pPhysicalDeviceGroupCount)
         cmd_size += vn_sizeof_uint32_t(pPhysicalDeviceGroupCount);
     if (pPhysicalDeviceGroupProperties) {
-        cmd_size += vn_sizeof_array_size(*pPhysicalDeviceGroupCount);
-        for (uint32_t i = 0; i < *pPhysicalDeviceGroupCount; i++)
+        cmd_size += vn_sizeof_array_size((pPhysicalDeviceGroupCount ? *pPhysicalDeviceGroupCount : 0));
+        for (uint32_t i = 0; i < (pPhysicalDeviceGroupCount ? *pPhysicalDeviceGroupCount : 0); i++)
             cmd_size += vn_sizeof_VkPhysicalDeviceGroupProperties_partial(&pPhysicalDeviceGroupProperties[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -12384,8 +12384,8 @@ static inline void vn_encode_vkEnumeratePhysicalDeviceGroups(struct vn_cs_encode
     if (vn_encode_simple_pointer(enc, pPhysicalDeviceGroupCount))
         vn_encode_uint32_t(enc, pPhysicalDeviceGroupCount);
     if (pPhysicalDeviceGroupProperties) {
-        vn_encode_array_size(enc, *pPhysicalDeviceGroupCount);
-        for (uint32_t i = 0; i < *pPhysicalDeviceGroupCount; i++)
+        vn_encode_array_size(enc, (pPhysicalDeviceGroupCount ? *pPhysicalDeviceGroupCount : 0));
+        for (uint32_t i = 0; i < (pPhysicalDeviceGroupCount ? *pPhysicalDeviceGroupCount : 0); i++)
             vn_encode_VkPhysicalDeviceGroupProperties_partial(enc, &pPhysicalDeviceGroupProperties[i]);
     } else {
         vn_encode_array_size(enc, 0);
@@ -12404,8 +12404,8 @@ static inline size_t vn_sizeof_vkEnumeratePhysicalDeviceGroups_reply(VkInstance
     if (pPhysicalDeviceGroupCount)
         cmd_size += vn_sizeof_uint32_t(pPhysicalDeviceGroupCount);
     if (pPhysicalDeviceGroupProperties) {
-        cmd_size += vn_sizeof_array_size(*pPhysicalDeviceGroupCount);
-        for (uint32_t i = 0; i < *pPhysicalDeviceGroupCount; i++)
+        cmd_size += vn_sizeof_array_size((pPhysicalDeviceGroupCount ? *pPhysicalDeviceGroupCount : 0));
+        for (uint32_t i = 0; i < (pPhysicalDeviceGroupCount ? *pPhysicalDeviceGroupCount : 0); i++)
             cmd_size += vn_sizeof_VkPhysicalDeviceGroupProperties(&pPhysicalDeviceGroupProperties[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -12429,8 +12429,8 @@ static inline VkResult vn_decode_vkEnumeratePhysicalDeviceGroups_reply(struct vn
         pPhysicalDeviceGroupCount = NULL;
     }
     if (vn_peek_array_size(dec)) {
-        vn_decode_array_size(dec, *pPhysicalDeviceGroupCount);
-        for (uint32_t i = 0; i < *pPhysicalDeviceGroupCount; i++)
+        vn_decode_array_size(dec, (pPhysicalDeviceGroupCount ? *pPhysicalDeviceGroupCount : 0));
+        for (uint32_t i = 0; i < (pPhysicalDeviceGroupCount ? *pPhysicalDeviceGroupCount : 0); i++)
             vn_decode_VkPhysicalDeviceGroupProperties(dec, &pPhysicalDeviceGroupProperties[i]);
     } else {
         vn_decode_array_size(dec, 0);
diff --git a/src/virtio/venus-protocol/vn_protocol_driver_image.h b/src/virtio/venus-protocol/vn_protocol_driver_image.h
index 62b56be8545..cdb4659dc89 100644
--- a/src/virtio/venus-protocol/vn_protocol_driver_image.h
+++ b/src/virtio/venus-protocol/vn_protocol_driver_image.h
@@ -1361,8 +1361,8 @@ static inline size_t vn_sizeof_vkGetImageSparseMemoryRequirements(VkDevice devic
     if (pSparseMemoryRequirementCount)
         cmd_size += vn_sizeof_uint32_t(pSparseMemoryRequirementCount);
     if (pSparseMemoryRequirements) {
-        cmd_size += vn_sizeof_array_size(*pSparseMemoryRequirementCount);
-        for (uint32_t i = 0; i < *pSparseMemoryRequirementCount; i++)
+        cmd_size += vn_sizeof_array_size((pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0));
+        for (uint32_t i = 0; i < (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0); i++)
             cmd_size += vn_sizeof_VkSparseImageMemoryRequirements_partial(&pSparseMemoryRequirements[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -1383,8 +1383,8 @@ static inline void vn_encode_vkGetImageSparseMemoryRequirements(struct vn_cs_enc
     if (vn_encode_simple_pointer(enc, pSparseMemoryRequirementCount))
         vn_encode_uint32_t(enc, pSparseMemoryRequirementCount);
     if (pSparseMemoryRequirements) {
-        vn_encode_array_size(enc, *pSparseMemoryRequirementCount);
-        for (uint32_t i = 0; i < *pSparseMemoryRequirementCount; i++)
+        vn_encode_array_size(enc, (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0));
+        for (uint32_t i = 0; i < (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0); i++)
             vn_encode_VkSparseImageMemoryRequirements_partial(enc, &pSparseMemoryRequirements[i]);
     } else {
         vn_encode_array_size(enc, 0);
@@ -1402,8 +1402,8 @@ static inline size_t vn_sizeof_vkGetImageSparseMemoryRequirements_reply(VkDevice
     if (pSparseMemoryRequirementCount)
         cmd_size += vn_sizeof_uint32_t(pSparseMemoryRequirementCount);
     if (pSparseMemoryRequirements) {
-        cmd_size += vn_sizeof_array_size(*pSparseMemoryRequirementCount);
-        for (uint32_t i = 0; i < *pSparseMemoryRequirementCount; i++)
+        cmd_size += vn_sizeof_array_size((pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0));
+        for (uint32_t i = 0; i < (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0); i++)
             cmd_size += vn_sizeof_VkSparseImageMemoryRequirements(&pSparseMemoryRequirements[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -1426,8 +1426,8 @@ static inline void vn_decode_vkGetImageSparseMemoryRequirements_reply(struct vn_
         pSparseMemoryRequirementCount = NULL;
     }
     if (vn_peek_array_size(dec)) {
-        vn_decode_array_size(dec, *pSparseMemoryRequirementCount);
-        for (uint32_t i = 0; i < *pSparseMemoryRequirementCount; i++)
+        vn_decode_array_size(dec, (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0));
+        for (uint32_t i = 0; i < (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0); i++)
             vn_decode_VkSparseImageMemoryRequirements(dec, &pSparseMemoryRequirements[i]);
     } else {
         vn_decode_array_size(dec, 0);
@@ -1763,8 +1763,8 @@ static inline size_t vn_sizeof_vkGetImageSparseMemoryRequirements2(VkDevice devi
     if (pSparseMemoryRequirementCount)
         cmd_size += vn_sizeof_uint32_t(pSparseMemoryRequirementCount);
     if (pSparseMemoryRequirements) {
-        cmd_size += vn_sizeof_array_size(*pSparseMemoryRequirementCount);
-        for (uint32_t i = 0; i < *pSparseMemoryRequirementCount; i++)
+        cmd_size += vn_sizeof_array_size((pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0));
+        for (uint32_t i = 0; i < (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0); i++)
             cmd_size += vn_sizeof_VkSparseImageMemoryRequirements2_partial(&pSparseMemoryRequirements[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -1786,8 +1786,8 @@ static inline void vn_encode_vkGetImageSparseMemoryRequirements2(struct vn_cs_en
     if (vn_encode_simple_pointer(enc, pSparseMemoryRequirementCount))
         vn_encode_uint32_t(enc, pSparseMemoryRequirementCount);
     if (pSparseMemoryRequirements) {
-        vn_encode_array_size(enc, *pSparseMemoryRequirementCount);
-        for (uint32_t i = 0; i < *pSparseMemoryRequirementCount; i++)
+        vn_encode_array_size(enc, (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0));
+        for (uint32_t i = 0; i < (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0); i++)
             vn_encode_VkSparseImageMemoryRequirements2_partial(enc, &pSparseMemoryRequirements[i]);
     } else {
         vn_encode_array_size(enc, 0);
@@ -1805,8 +1805,8 @@ static inline size_t vn_sizeof_vkGetImageSparseMemoryRequirements2_reply(VkDevic
     if (pSparseMemoryRequirementCount)
         cmd_size += vn_sizeof_uint32_t(pSparseMemoryRequirementCount);
     if (pSparseMemoryRequirements) {
-        cmd_size += vn_sizeof_array_size(*pSparseMemoryRequirementCount);
-        for (uint32_t i = 0; i < *pSparseMemoryRequirementCount; i++)
+        cmd_size += vn_sizeof_array_size((pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0));
+        for (uint32_t i = 0; i < (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0); i++)
             cmd_size += vn_sizeof_VkSparseImageMemoryRequirements2(&pSparseMemoryRequirements[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -1829,8 +1829,8 @@ static inline void vn_decode_vkGetImageSparseMemoryRequirements2_reply(struct vn
         pSparseMemoryRequirementCount = NULL;
     }
     if (vn_peek_array_size(dec)) {
-        vn_decode_array_size(dec, *pSparseMemoryRequirementCount);
-        for (uint32_t i = 0; i < *pSparseMemoryRequirementCount; i++)
+        vn_decode_array_size(dec, (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0));
+        for (uint32_t i = 0; i < (pSparseMemoryRequirementCount ? *pSparseMemoryRequirementCount : 0); i++)
             vn_decode_VkSparseImageMemoryRequirements2(dec, &pSparseMemoryRequirements[i]);
     } else {
         vn_decode_array_size(dec, 0);
diff --git a/src/virtio/venus-protocol/vn_protocol_driver_info.h b/src/virtio/venus-protocol/vn_protocol_driver_info.h
index f535a181579..3ba00d8cc94 100644
--- a/src/virtio/venus-protocol/vn_protocol_driver_info.h
+++ b/src/virtio/venus-protocol/vn_protocol_driver_info.h
@@ -19,7 +19,7 @@ vn_info_wire_format_version(void)
 static inline uint32_t
 vn_info_vk_xml_version(void)
 {
-    return VK_MAKE_VERSION(1, 2, 168);
+    return VK_MAKE_API_VERSION(0, 1, 2, 182);
 }
 
 static inline int
diff --git a/src/virtio/venus-protocol/vn_protocol_driver_instance.h b/src/virtio/venus-protocol/vn_protocol_driver_instance.h
index 848ee999fdb..a6c910be790 100644
--- a/src/virtio/venus-protocol/vn_protocol_driver_instance.h
+++ b/src/virtio/venus-protocol/vn_protocol_driver_instance.h
@@ -382,8 +382,8 @@ static inline size_t vn_sizeof_vkEnumerateInstanceLayerProperties(uint32_t* pPro
     if (pPropertyCount)
         cmd_size += vn_sizeof_uint32_t(pPropertyCount);
     if (pProperties) {
-        cmd_size += vn_sizeof_array_size(*pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        cmd_size += vn_sizeof_array_size((pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             cmd_size += vn_sizeof_VkLayerProperties_partial(&pProperties[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -402,8 +402,8 @@ static inline void vn_encode_vkEnumerateInstanceLayerProperties(struct vn_cs_enc
     if (vn_encode_simple_pointer(enc, pPropertyCount))
         vn_encode_uint32_t(enc, pPropertyCount);
     if (pProperties) {
-        vn_encode_array_size(enc, *pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        vn_encode_array_size(enc, (pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             vn_encode_VkLayerProperties_partial(enc, &pProperties[i]);
     } else {
         vn_encode_array_size(enc, 0);
@@ -421,8 +421,8 @@ static inline size_t vn_sizeof_vkEnumerateInstanceLayerProperties_reply(uint32_t
     if (pPropertyCount)
         cmd_size += vn_sizeof_uint32_t(pPropertyCount);
     if (pProperties) {
-        cmd_size += vn_sizeof_array_size(*pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        cmd_size += vn_sizeof_array_size((pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             cmd_size += vn_sizeof_VkLayerProperties(&pProperties[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -445,8 +445,8 @@ static inline VkResult vn_decode_vkEnumerateInstanceLayerProperties_reply(struct
         pPropertyCount = NULL;
     }
     if (vn_peek_array_size(dec)) {
-        vn_decode_array_size(dec, *pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        vn_decode_array_size(dec, (pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             vn_decode_VkLayerProperties(dec, &pProperties[i]);
     } else {
         vn_decode_array_size(dec, 0);
@@ -473,8 +473,8 @@ static inline size_t vn_sizeof_vkEnumerateInstanceExtensionProperties(const char
     if (pPropertyCount)
         cmd_size += vn_sizeof_uint32_t(pPropertyCount);
     if (pProperties) {
-        cmd_size += vn_sizeof_array_size(*pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        cmd_size += vn_sizeof_array_size((pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             cmd_size += vn_sizeof_VkExtensionProperties_partial(&pProperties[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -500,8 +500,8 @@ static inline void vn_encode_vkEnumerateInstanceExtensionProperties(struct vn_cs
     if (vn_encode_simple_pointer(enc, pPropertyCount))
         vn_encode_uint32_t(enc, pPropertyCount);
     if (pProperties) {
-        vn_encode_array_size(enc, *pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        vn_encode_array_size(enc, (pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             vn_encode_VkExtensionProperties_partial(enc, &pProperties[i]);
     } else {
         vn_encode_array_size(enc, 0);
@@ -520,8 +520,8 @@ static inline size_t vn_sizeof_vkEnumerateInstanceExtensionProperties_reply(cons
     if (pPropertyCount)
         cmd_size += vn_sizeof_uint32_t(pPropertyCount);
     if (pProperties) {
-        cmd_size += vn_sizeof_array_size(*pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        cmd_size += vn_sizeof_array_size((pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             cmd_size += vn_sizeof_VkExtensionProperties(&pProperties[i]);
     } else {
         cmd_size += vn_sizeof_array_size(0);
@@ -545,8 +545,8 @@ static inline VkResult vn_decode_vkEnumerateInstanceExtensionProperties_reply(st
         pPropertyCount = NULL;
     }
     if (vn_peek_array_size(dec)) {
-        vn_decode_array_size(dec, *pPropertyCount);
-        for (uint32_t i = 0; i < *pPropertyCount; i++)
+        vn_decode_array_size(dec, (pPropertyCount ? *pPropertyCount : 0));
+        for (uint32_t i = 0; i < (pPropertyCount ? *pPropertyCount : 0); i++)
             vn_decode_VkExtensionProperties(dec, &pProperties[i]);
     } else {
         vn_decode_array_size(dec, 0);
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 d9fee80f487..ce08acce13c 100644
--- a/src/virtio/venus-protocol/vn_protocol_driver_pipeline_cache.h
+++ b/src/virtio/venus-protocol/vn_protocol_driver_pipeline_cache.h
@@ -229,7 +229,7 @@ static inline void vn_encode_vkGetPipelineCacheData(struct vn_cs_encoder *enc, V
     vn_encode_VkPipelineCache(enc, &pipelineCache);
     if (vn_encode_simple_pointer(enc, pDataSize))
         vn_encode_size_t(enc, pDataSize);
-    vn_encode_array_size(enc, pData ? *pDataSize : 0); /* out */
+    vn_encode_array_size(enc, pData ? (pDataSize ? *pDataSize : 0) : 0); /* out */
 }
 
 static inline size_t vn_sizeof_vkGetPipelineCacheData_reply(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData)
@@ -245,8 +245,8 @@ static inline size_t vn_sizeof_vkGetPipelineCacheData_reply(VkDevice device, VkP
     if (pDataSize)
         cmd_size += vn_sizeof_size_t(pDataSize);
     if (pData) {
-        cmd_size += vn_sizeof_array_size(*pDataSize);
-        cmd_size += vn_sizeof_blob_array(pData, *pDataSize);
+        cmd_size += vn_sizeof_array_size((pDataSize ? *pDataSize : 0));
+        cmd_size += vn_sizeof_blob_array(pData, (pDataSize ? *pDataSize : 0));
     } else {
         cmd_size += vn_sizeof_array_size(0);
     }
@@ -270,7 +270,7 @@ static inline VkResult vn_decode_vkGetPipelineCacheData_reply(struct vn_cs_decod
         pDataSize = NULL;
     }
     if (vn_peek_array_size(dec)) {
-        const size_t array_size = vn_decode_array_size(dec, *pDataSize);
+        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);
diff --git a/src/virtio/venus-protocol/vn_protocol_driver_structs.h b/src/virtio/venus-protocol/vn_protocol_driver_structs.h
index 509d7dbed86..53d24189d27 100644
--- a/src/virtio/venus-protocol/vn_protocol_driver_structs.h
+++ b/src/virtio/venus-protocol/vn_protocol_driver_structs.h
@@ -124,6 +124,14 @@ vn_sizeof_VkExtensionProperties(const VkExtensionProperties *val)
     return size;
 }
 
+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_uint32_t(enc, &val->specVersion);
+}
+
 static inline void
 vn_decode_VkExtensionProperties(struct vn_cs_decoder *dec, VkExtensionProperties *val)
 {
@@ -593,6 +601,17 @@ vn_encode_VkViewport(struct vn_cs_encoder *enc, const VkViewport *val)
     vn_encode_float(enc, &val->maxDepth);
 }
 
+static inline void
+vn_decode_VkViewport(struct vn_cs_decoder *dec, VkViewport *val)
+{
+    vn_decode_float(dec, &val->x);
+    vn_decode_float(dec, &val->y);
+    vn_decode_float(dec, &val->width);
+    vn_decode_float(dec, &val->height);
+    vn_decode_float(dec, &val->minDepth);
+    vn_decode_float(dec, &val->maxDepth);
+}
+
 /* struct VkOffset2D */
 
 static inline size_t
diff --git a/src/virtio/venus-protocol/vn_protocol_driver_transport.h b/src/virtio/venus-protocol/vn_protocol_driver_transport.h
index a319a04a01f..0a3f05e59df 100644
--- a/src/virtio/venus-protocol/vn_protocol_driver_transport.h
+++ b/src/virtio/venus-protocol/vn_protocol_driver_transport.h
@@ -862,7 +862,7 @@ static inline void vn_encode_vkGetVenusExperimentalFeatureData100000MESA(struct
 
     if (vn_encode_simple_pointer(enc, pDataSize))
         vn_encode_size_t(enc, pDataSize);
-    vn_encode_array_size(enc, pData ? *pDataSize : 0); /* out */
+    vn_encode_array_size(enc, pData ? (pDataSize ? *pDataSize : 0) : 0); /* out */
 }
 
 static inline size_t vn_sizeof_vkGetVenusExperimentalFeatureData100000MESA_reply(size_t* pDataSize, void* pData)
@@ -874,8 +874,8 @@ static inline size_t vn_sizeof_vkGetVenusExperimentalFeatureData100000MESA_reply
     if (pDataSize)
         cmd_size += vn_sizeof_size_t(pDataSize);
     if (pData) {
-        cmd_size += vn_sizeof_array_size(*pDataSize);
-        cmd_size += vn_sizeof_blob_array(pData, *pDataSize);
+        cmd_size += vn_sizeof_array_size((pDataSize ? *pDataSize : 0));
+        cmd_size += vn_sizeof_blob_array(pData, (pDataSize ? *pDataSize : 0));
     } else {
         cmd_size += vn_sizeof_array_size(0);
     }
@@ -895,7 +895,7 @@ static inline void vn_decode_vkGetVenusExperimentalFeatureData100000MESA_reply(s
         pDataSize = NULL;
     }
     if (vn_peek_array_size(dec)) {
-        const size_t array_size = vn_decode_array_size(dec, *pDataSize);
+        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);
diff --git a/src/virtio/venus-protocol/vn_protocol_driver_types.h b/src/virtio/venus-protocol/vn_protocol_driver_types.h
index b61572a669e..94fade6ee9a 100644
--- a/src/virtio/venus-protocol/vn_protocol_driver_types.h
+++ b/src/virtio/venus-protocol/vn_protocol_driver_types.h
@@ -1060,6 +1060,27 @@ vn_decode_VkQueryResultFlagBits(struct vn_cs_decoder *dec, VkQueryResultFlagBits
     vn_decode_int32_t(dec, (int32_t *)val);
 }
 
+/* enum VkEventCreateFlagBits */
+
+static inline size_t
+vn_sizeof_VkEventCreateFlagBits(const VkEventCreateFlagBits *val)
+{
+    assert(sizeof(*val) == sizeof(int32_t));
+    return vn_sizeof_int32_t((const int32_t *)val);
+}
+
+static inline void
+vn_encode_VkEventCreateFlagBits(struct vn_cs_encoder *enc, const VkEventCreateFlagBits *val)
+{
+    vn_encode_int32_t(enc, (const int32_t *)val);
+}
+
+static inline void
+vn_decode_VkEventCreateFlagBits(struct vn_cs_decoder *dec, VkEventCreateFlagBits *val)
+{
+    vn_decode_int32_t(dec, (int32_t *)val);
+}
+
 /* enum VkCommandPoolCreateFlagBits */
 
 static inline size_t



More information about the mesa-commit mailing list