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

Author: Ryan Neph <[email protected]>
Date:   Mon Mar 20 10:15:09 2023 -0700

venus: update to latest protocol for ringMonitoring

Signed-off-by: Ryan Neph <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22036>

---

 src/virtio/venus-protocol/vn_protocol_driver.h     |  2 +-
 .../venus-protocol/vn_protocol_driver_defines.h    |  9 +++
 .../venus-protocol/vn_protocol_driver_transport.h  | 90 +++++++++++++++++++++-
 3 files changed, 98 insertions(+), 3 deletions(-)

diff --git a/src/virtio/venus-protocol/vn_protocol_driver.h 
b/src/virtio/venus-protocol/vn_protocol_driver.h
index 83b4fcf4292..2e51998108c 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-8127c731. */
+/* This file is generated by venus-protocol git-0b377c5a. */
 
 /*
  * Copyright 2020 Google LLC
diff --git a/src/virtio/venus-protocol/vn_protocol_driver_defines.h 
b/src/virtio/venus-protocol/vn_protocol_driver_defines.h
index 8e05b3cc96a..208766cac16 100644
--- a/src/virtio/venus-protocol/vn_protocol_driver_defines.h
+++ b/src/virtio/venus-protocol/vn_protocol_driver_defines.h
@@ -21,6 +21,7 @@
 #define 
VK_STRUCTURE_TYPE_MEMORY_RESOURCE_ALLOCATION_SIZE_PROPERTIES_100000_MESA 
((VkStructureType)1000384003)
 #define VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_RESOURCE_INFO_100000_MESA 
((VkStructureType)1000384004)
 #define VK_STRUCTURE_TYPE_DEVICE_QUEUE_TIMELINE_INFO_MESA 
((VkStructureType)1000384005)
+#define VK_STRUCTURE_TYPE_RING_MONITOR_INFO_MESA ((VkStructureType)1000384006)
 
 typedef enum VkCommandTypeEXT {
     VK_COMMAND_TYPE_vkCreateInstance_EXT = 0,
@@ -366,6 +367,7 @@ typedef enum VkRingStatusFlagBitsMESA {
     VK_RING_STATUS_NONE_MESA = 0,
     VK_RING_STATUS_IDLE_BIT_MESA = 0x00000001,
     VK_RING_STATUS_FATAL_BIT_MESA = 0x00000002,
+    VK_RING_STATUS_ALIVE_BIT_MESA = 0x00000004,
 } VkRingStatusFlagBitsMESA;
 
 typedef VkFlags VkCommandFlagsEXT;
@@ -406,6 +408,12 @@ typedef struct VkRingCreateInfoMESA {
     size_t extraSize;
 } VkRingCreateInfoMESA;
 
+typedef struct VkRingMonitorInfoMESA {
+    VkStructureType sType;
+    const void* pNext;
+    uint32_t maxReportingPeriodMicroseconds;
+} VkRingMonitorInfoMESA;
+
 typedef struct VkMemoryResourcePropertiesMESA {
     VkStructureType sType;
     void* pNext;
@@ -424,6 +432,7 @@ typedef struct VkVenusExperimentalFeatures100000MESA {
     VkBool32 largeRing;
     VkBool32 syncFdFencing;
     VkBool32 asyncRoundtrip;
+    VkBool32 ringMonitoring;
 } VkVenusExperimentalFeatures100000MESA;
 
 typedef struct VkMemoryResourceAllocationSizeProperties100000MESA {
diff --git a/src/virtio/venus-protocol/vn_protocol_driver_transport.h 
b/src/virtio/venus-protocol/vn_protocol_driver_transport.h
index dcc87fda8c8..345788290b9 100644
--- a/src/virtio/venus-protocol/vn_protocol_driver_transport.h
+++ b/src/virtio/venus-protocol/vn_protocol_driver_transport.h
@@ -49,12 +49,82 @@ vn_encode_VkCommandStreamDependencyMESA(struct 
vn_cs_encoder *enc, const VkComma
     vn_encode_uint32_t(enc, &val->dstCommandStream);
 }
 
+/* struct VkRingMonitorInfoMESA chain */
+
+static inline size_t
+vn_sizeof_VkRingMonitorInfoMESA_pnext(const void *val)
+{
+    /* no known/supported struct */
+    return vn_sizeof_simple_pointer(NULL);
+}
+
+static inline size_t
+vn_sizeof_VkRingMonitorInfoMESA_self(const VkRingMonitorInfoMESA *val)
+{
+    size_t size = 0;
+    /* skip val->{sType,pNext} */
+    size += vn_sizeof_uint32_t(&val->maxReportingPeriodMicroseconds);
+    return size;
+}
+
+static inline size_t
+vn_sizeof_VkRingMonitorInfoMESA(const VkRingMonitorInfoMESA *val)
+{
+    size_t size = 0;
+
+    size += vn_sizeof_VkStructureType(&val->sType);
+    size += vn_sizeof_VkRingMonitorInfoMESA_pnext(val->pNext);
+    size += vn_sizeof_VkRingMonitorInfoMESA_self(val);
+
+    return size;
+}
+
+static inline void
+vn_encode_VkRingMonitorInfoMESA_pnext(struct vn_cs_encoder *enc, const void 
*val)
+{
+    /* no known/supported struct */
+    vn_encode_simple_pointer(enc, NULL);
+}
+
+static inline void
+vn_encode_VkRingMonitorInfoMESA_self(struct vn_cs_encoder *enc, const 
VkRingMonitorInfoMESA *val)
+{
+    /* skip val->{sType,pNext} */
+    vn_encode_uint32_t(enc, &val->maxReportingPeriodMicroseconds);
+}
+
+static inline void
+vn_encode_VkRingMonitorInfoMESA(struct vn_cs_encoder *enc, const 
VkRingMonitorInfoMESA *val)
+{
+    assert(val->sType == VK_STRUCTURE_TYPE_RING_MONITOR_INFO_MESA);
+    vn_encode_VkStructureType(enc, &(VkStructureType){ 
VK_STRUCTURE_TYPE_RING_MONITOR_INFO_MESA });
+    vn_encode_VkRingMonitorInfoMESA_pnext(enc, val->pNext);
+    vn_encode_VkRingMonitorInfoMESA_self(enc, val);
+}
+
 /* struct VkRingCreateInfoMESA chain */
 
 static inline size_t
 vn_sizeof_VkRingCreateInfoMESA_pnext(const void *val)
 {
-    /* no known/supported struct */
+    const VkBaseInStructure *pnext = val;
+    size_t size = 0;
+
+    while (pnext) {
+        switch ((int32_t)pnext->sType) {
+        case VK_STRUCTURE_TYPE_RING_MONITOR_INFO_MESA:
+            size += vn_sizeof_simple_pointer(pnext);
+            size += vn_sizeof_VkStructureType(&pnext->sType);
+            size += vn_sizeof_VkRingCreateInfoMESA_pnext(pnext->pNext);
+            size += vn_sizeof_VkRingMonitorInfoMESA_self((const 
VkRingMonitorInfoMESA *)pnext);
+            return size;
+        default:
+            /* ignore unknown/unsupported struct */
+            break;
+        }
+        pnext = pnext->pNext;
+    }
+
     return vn_sizeof_simple_pointer(NULL);
 }
 
@@ -93,7 +163,23 @@ vn_sizeof_VkRingCreateInfoMESA(const VkRingCreateInfoMESA 
*val)
 static inline void
 vn_encode_VkRingCreateInfoMESA_pnext(struct vn_cs_encoder *enc, const void 
*val)
 {
-    /* no known/supported struct */
+    const VkBaseInStructure *pnext = val;
+
+    while (pnext) {
+        switch ((int32_t)pnext->sType) {
+        case VK_STRUCTURE_TYPE_RING_MONITOR_INFO_MESA:
+            vn_encode_simple_pointer(enc, pnext);
+            vn_encode_VkStructureType(enc, &pnext->sType);
+            vn_encode_VkRingCreateInfoMESA_pnext(enc, pnext->pNext);
+            vn_encode_VkRingMonitorInfoMESA_self(enc, (const 
VkRingMonitorInfoMESA *)pnext);
+            return;
+        default:
+            /* ignore unknown/unsupported struct */
+            break;
+        }
+        pnext = pnext->pNext;
+    }
+
     vn_encode_simple_pointer(enc, NULL);
 }
 

Reply via email to