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

Author: Dave Airlie <airl...@redhat.com>
Date:   Mon Jan 15 15:14:48 2024 +1000

vulkan/video: start to wrap the video structs for deep copies.

This doesn't do any of the deep copies, it's just more non-functional changes
in preparation.

v2: fix alloc sizes

Reviewed-by: Hyunjun Ko <zz...@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27066>

---

 src/vulkan/runtime/vk_video.c | 74 +++++++++++++++++++++----------------------
 src/vulkan/runtime/vk_video.h | 40 +++++++++++++++++------
 2 files changed, 67 insertions(+), 47 deletions(-)

diff --git a/src/vulkan/runtime/vk_video.c b/src/vulkan/runtime/vk_video.c
index 18e555652e8..382fcdfe511 100644
--- a/src/vulkan/runtime/vk_video.c
+++ b/src/vulkan/runtime/vk_video.c
@@ -94,30 +94,30 @@ vk_video_session_init(struct vk_device *device,
 }
 
 #define FIND(PARAMSET, SS, SET, ID)                                     \
-   static PARAMSET *find_##SS##_##SET(const struct vk_video_session_parameters 
*params, uint32_t id) { \
+   static struct vk_video_##SET *find_##SS##_##SET(const struct 
vk_video_session_parameters *params, uint32_t id) { \
       for (unsigned i = 0; i < params->SS.SET##_count; i++) {           \
-         if (params->SS.SET[i].ID == id)                                \
-            return &params->SS.SET[i];                                  \
+         if (params->SS.SET[i].base.ID == id)                           \
+            return &params->SS.SET[i];                             \
       }                                                                 \
       return NULL;                                                      \
    }                                                                    \
                                                                         \
    static void add_##SS##_##SET(struct vk_video_session_parameters *params, \
                                 const PARAMSET *new_set, bool noreplace) {  \
-      PARAMSET *set = find_##SS##_##SET(params, new_set->ID);           \
+      struct vk_video_##SET *set = find_##SS##_##SET(params, new_set->ID);     
      \
       if (set) {                                                        \
         if (noreplace)                                                 \
             return;                                                     \
-         *set = *new_set;                                               \
+         set->base = *new_set;                                          \
       } else                                                            \
-         params->SS.SET[params->SS.SET##_count++] = *new_set;           \
+         params->SS.SET[params->SS.SET##_count++].base = *new_set;      \
    }                                                                    \
                                                                         \
    static VkResult update_##SS##_##SET(struct vk_video_session_parameters 
*params, \
                                        uint32_t count, const PARAMSET 
*updates) { \
       if (params->SS.SET##_count + count >= params->SS.max_##SET##_count) \
          return VK_ERROR_TOO_MANY_OBJECTS;                              \
-      typed_memcpy(&params->SS.SET[params->SS.SET##_count], updates, count); \
+      typed_memcpy(&params->SS.SET[params->SS.SET##_count].base, updates, 
count); \
       params->SS.SET##_count += count;                                  \
       return VK_SUCCESS;                                                \
    }
@@ -149,7 +149,7 @@ init_add_h264_dec_session_parameters(struct 
vk_video_session_parameters *params,
    }
    if (templ) {
       for (i = 0; i < templ->h264_dec.h264_sps_count; i++) {
-         add_h264_dec_h264_sps(params, &templ->h264_dec.h264_sps[i], true);
+         add_h264_dec_h264_sps(params, &templ->h264_dec.h264_sps[i].base, 
true);
       }
    }
 
@@ -160,7 +160,7 @@ init_add_h264_dec_session_parameters(struct 
vk_video_session_parameters *params,
    }
    if (templ) {
       for (i = 0; i < templ->h264_dec.h264_pps_count; i++) {
-         add_h264_dec_h264_pps(params, &templ->h264_dec.h264_pps[i], true);
+         add_h264_dec_h264_pps(params, &templ->h264_dec.h264_pps[i].base, 
true);
       }
    }
 }
@@ -178,7 +178,7 @@ init_add_h264_enc_session_parameters(struct 
vk_video_session_parameters *params,
    }
    if (templ) {
       for (i = 0; i < templ->h264_dec.h264_sps_count; i++) {
-         add_h264_enc_h264_sps(params, &templ->h264_enc.h264_sps[i], true);
+         add_h264_enc_h264_sps(params, &templ->h264_enc.h264_sps[i].base, 
true);
       }
    }
 
@@ -189,7 +189,7 @@ init_add_h264_enc_session_parameters(struct 
vk_video_session_parameters *params,
    }
    if (templ) {
       for (i = 0; i < templ->h264_enc.h264_pps_count; i++) {
-         add_h264_enc_h264_pps(params, &templ->h264_enc.h264_pps[i], true);
+         add_h264_enc_h264_pps(params, &templ->h264_enc.h264_pps[i].base, 
true);
       }
    }
 }
@@ -208,7 +208,7 @@ init_add_h265_dec_session_parameters(struct 
vk_video_session_parameters *params,
    }
    if (templ) {
       for (i = 0; i < templ->h265_dec.h265_vps_count; i++) {
-         add_h265_dec_h265_vps(params, &templ->h265_dec.h265_vps[i], true);
+         add_h265_dec_h265_vps(params, &templ->h265_dec.h265_vps[i].base, 
true);
       }
    }
    if (h265_add) {
@@ -218,7 +218,7 @@ init_add_h265_dec_session_parameters(struct 
vk_video_session_parameters *params,
    }
    if (templ) {
       for (i = 0; i < templ->h265_dec.h265_sps_count; i++) {
-         add_h265_dec_h265_sps(params, &templ->h265_dec.h265_sps[i], true);
+         add_h265_dec_h265_sps(params, &templ->h265_dec.h265_sps[i].base, 
true);
       }
    }
 
@@ -229,7 +229,7 @@ init_add_h265_dec_session_parameters(struct 
vk_video_session_parameters *params,
    }
    if (templ) {
       for (i = 0; i < templ->h265_dec.h265_pps_count; i++) {
-         add_h265_dec_h265_pps(params, &templ->h265_dec.h265_pps[i], true);
+         add_h265_dec_h265_pps(params, &templ->h265_dec.h265_pps[i].base, 
true);
       }
    }
 }
@@ -248,7 +248,7 @@ init_add_h265_enc_session_parameters(struct 
vk_video_session_parameters *params,
    }
    if (templ) {
       for (i = 0; i < templ->h265_enc.h265_vps_count; i++) {
-         add_h265_enc_h265_vps(params, &templ->h265_enc.h265_vps[i], true);
+         add_h265_enc_h265_vps(params, &templ->h265_enc.h265_vps[i].base, 
true);
       }
    }
    if (h265_add) {
@@ -258,7 +258,7 @@ init_add_h265_enc_session_parameters(struct 
vk_video_session_parameters *params,
    }
    if (templ) {
       for (i = 0; i < templ->h265_enc.h265_sps_count; i++) {
-         add_h265_enc_h265_sps(params, &templ->h265_enc.h265_sps[i], true);
+         add_h265_enc_h265_sps(params, &templ->h265_enc.h265_sps[i].base, 
true);
       }
    }
 
@@ -269,7 +269,7 @@ init_add_h265_enc_session_parameters(struct 
vk_video_session_parameters *params,
    }
    if (templ) {
       for (i = 0; i < templ->h265_enc.h265_pps_count; i++) {
-         add_h265_enc_h265_pps(params, &templ->h265_enc.h265_pps[i], true);
+         add_h265_enc_h265_pps(params, &templ->h265_enc.h265_pps[i].base, 
true);
       }
    }
 }
@@ -294,8 +294,8 @@ vk_video_session_parameters_init(struct vk_device *device,
       params->h264_dec.max_h264_sps_count = h264_create->maxStdSPSCount;
       params->h264_dec.max_h264_pps_count = h264_create->maxStdPPSCount;
 
-      uint32_t sps_size = params->h264_dec.max_h264_sps_count * 
sizeof(StdVideoH264SequenceParameterSet);
-      uint32_t pps_size = params->h264_dec.max_h264_pps_count * 
sizeof(StdVideoH264PictureParameterSet);
+      uint32_t sps_size = params->h264_dec.max_h264_sps_count * sizeof(struct 
vk_video_h264_sps);
+      uint32_t pps_size = params->h264_dec.max_h264_pps_count * sizeof(struct 
vk_video_h264_pps);
 
       params->h264_dec.h264_sps = vk_alloc(&device->alloc, sps_size, 8, 
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       params->h264_dec.h264_pps = vk_alloc(&device->alloc, pps_size, 8, 
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
@@ -316,9 +316,9 @@ vk_video_session_parameters_init(struct vk_device *device,
       params->h265_dec.max_h265_sps_count = h265_create->maxStdSPSCount;
       params->h265_dec.max_h265_pps_count = h265_create->maxStdPPSCount;
 
-      uint32_t vps_size = params->h265_dec.max_h265_vps_count * 
sizeof(StdVideoH265VideoParameterSet);
-      uint32_t sps_size = params->h265_dec.max_h265_sps_count * 
sizeof(StdVideoH265SequenceParameterSet);
-      uint32_t pps_size = params->h265_dec.max_h265_pps_count * 
sizeof(StdVideoH265PictureParameterSet);
+      uint32_t vps_size = params->h265_dec.max_h265_vps_count * sizeof(struct 
vk_video_h265_vps);
+      uint32_t sps_size = params->h265_dec.max_h265_sps_count * sizeof(struct 
vk_video_h265_sps);
+      uint32_t pps_size = params->h265_dec.max_h265_pps_count * sizeof(struct 
vk_video_h265_pps);
 
       params->h265_dec.h265_vps = vk_alloc(&device->alloc, vps_size, 8, 
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       params->h265_dec.h265_sps = vk_alloc(&device->alloc, sps_size, 8, 
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
@@ -340,8 +340,8 @@ vk_video_session_parameters_init(struct vk_device *device,
       params->h264_enc.max_h264_sps_count = h264_create->maxStdSPSCount;
       params->h264_enc.max_h264_pps_count = h264_create->maxStdPPSCount;
 
-      uint32_t sps_size = params->h264_enc.max_h264_sps_count * 
sizeof(StdVideoH264SequenceParameterSet);
-      uint32_t pps_size = params->h264_enc.max_h264_pps_count * 
sizeof(StdVideoH264PictureParameterSet);
+      uint32_t sps_size = params->h264_enc.max_h264_sps_count * sizeof(struct 
vk_video_h264_sps);
+      uint32_t pps_size = params->h264_enc.max_h264_pps_count * sizeof(struct 
vk_video_h264_pps);
 
       params->h264_enc.h264_sps = vk_alloc(&device->alloc, sps_size, 8, 
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       params->h264_enc.h264_pps = vk_alloc(&device->alloc, pps_size, 8, 
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
@@ -362,9 +362,9 @@ vk_video_session_parameters_init(struct vk_device *device,
       params->h265_enc.max_h265_sps_count = h265_create->maxStdSPSCount;
       params->h265_enc.max_h265_pps_count = h265_create->maxStdPPSCount;
 
-      uint32_t vps_size = params->h265_enc.max_h265_vps_count * 
sizeof(StdVideoH265VideoParameterSet);
-      uint32_t sps_size = params->h265_enc.max_h265_sps_count * 
sizeof(StdVideoH265SequenceParameterSet);
-      uint32_t pps_size = params->h265_enc.max_h265_pps_count * 
sizeof(StdVideoH265PictureParameterSet);
+      uint32_t vps_size = params->h265_enc.max_h265_vps_count * sizeof(struct 
vk_video_h265_vps);
+      uint32_t sps_size = params->h265_enc.max_h265_sps_count * sizeof(struct 
vk_video_h265_sps);
+      uint32_t pps_size = params->h265_enc.max_h265_pps_count * sizeof(struct 
vk_video_h265_pps);
 
       params->h265_enc.h265_vps = vk_alloc(&device->alloc, vps_size, 8, 
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       params->h265_enc.h265_sps = vk_alloc(&device->alloc, sps_size, 8, 
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
@@ -697,35 +697,35 @@ const StdVideoH264SequenceParameterSet *
 vk_video_find_h264_dec_std_sps(const struct vk_video_session_parameters 
*params,
                                uint32_t id)
 {
-   return find_h264_dec_h264_sps(params, id);
+   return &find_h264_dec_h264_sps(params, id)->base;
 }
 
 const StdVideoH264PictureParameterSet *
 vk_video_find_h264_dec_std_pps(const struct vk_video_session_parameters 
*params,
                                uint32_t id)
 {
-   return find_h264_dec_h264_pps(params, id);
+   return &find_h264_dec_h264_pps(params, id)->base;
 }
 
 const StdVideoH265VideoParameterSet *
 vk_video_find_h265_dec_std_vps(const struct vk_video_session_parameters 
*params,
                                uint32_t id)
 {
-   return find_h265_dec_h265_vps(params, id);
+   return &find_h265_dec_h265_vps(params, id)->base;
 }
 
 const StdVideoH265SequenceParameterSet *
 vk_video_find_h265_dec_std_sps(const struct vk_video_session_parameters 
*params,
                                uint32_t id)
 {
-   return find_h265_dec_h265_sps(params, id);
+   return &find_h265_dec_h265_sps(params, id)->base;
 }
 
 const StdVideoH265PictureParameterSet *
 vk_video_find_h265_dec_std_pps(const struct vk_video_session_parameters 
*params,
                                uint32_t id)
 {
-   return find_h265_dec_h265_pps(params, id);
+   return &find_h265_dec_h265_pps(params, id)->base;
 }
 
 int
@@ -1219,35 +1219,35 @@ const StdVideoH264SequenceParameterSet *
 vk_video_find_h264_enc_std_sps(const struct vk_video_session_parameters 
*params,
                                uint32_t id)
 {
-   return find_h264_enc_h264_sps(params, id);
+   return &find_h264_enc_h264_sps(params, id)->base;
 }
 
 const StdVideoH264PictureParameterSet *
 vk_video_find_h264_enc_std_pps(const struct vk_video_session_parameters 
*params,
                                uint32_t id)
 {
-   return find_h264_enc_h264_pps(params, id);
+   return &find_h264_enc_h264_pps(params, id)->base;
 }
 
 const StdVideoH265VideoParameterSet *
 vk_video_find_h265_enc_std_vps(const struct vk_video_session_parameters 
*params,
                                uint32_t id)
 {
-   return find_h265_enc_h265_vps(params, id);
+   return &find_h265_enc_h265_vps(params, id)->base;
 }
 
 const StdVideoH265SequenceParameterSet *
 vk_video_find_h265_enc_std_sps(const struct vk_video_session_parameters 
*params,
                                uint32_t id)
 {
-   return find_h265_enc_h265_sps(params, id);
+   return &find_h265_enc_h265_sps(params, id)->base;
 }
 
 const StdVideoH265PictureParameterSet *
 vk_video_find_h265_enc_std_pps(const struct vk_video_session_parameters 
*params,
                                uint32_t id)
 {
-   return find_h265_enc_h265_pps(params, id);
+   return &find_h265_enc_h265_pps(params, id)->base;
 }
 
 enum H264NALUType
diff --git a/src/vulkan/runtime/vk_video.h b/src/vulkan/runtime/vk_video.h
index 55e78398dcf..f7331b6b672 100644
--- a/src/vulkan/runtime/vk_video.h
+++ b/src/vulkan/runtime/vk_video.h
@@ -29,6 +29,26 @@
 extern "C" {
 #endif
 
+struct vk_video_h264_sps {
+   StdVideoH264SequenceParameterSet base;
+};
+
+struct vk_video_h264_pps {
+   StdVideoH264PictureParameterSet base;
+};
+
+struct vk_video_h265_vps {
+   StdVideoH265VideoParameterSet base;
+};
+
+struct vk_video_h265_sps {
+   StdVideoH265SequenceParameterSet base;
+};
+
+struct vk_video_h265_pps {
+   StdVideoH265PictureParameterSet base;
+};
+
 struct vk_video_session {
    struct vk_object_base base;
    VkVideoSessionCreateFlagsKHR flags;
@@ -63,9 +83,9 @@ struct vk_video_session_parameters {
          uint32_t max_h264_pps_count;
 
          uint32_t h264_sps_count;
-         StdVideoH264SequenceParameterSet *h264_sps;
+         struct vk_video_h264_sps *h264_sps;
          uint32_t h264_pps_count;
-         StdVideoH264PictureParameterSet *h264_pps;
+         struct vk_video_h264_pps *h264_pps;
       } h264_dec;
 
       struct {
@@ -74,11 +94,11 @@ struct vk_video_session_parameters {
          uint32_t max_h265_pps_count;
 
          uint32_t h265_vps_count;
-         StdVideoH265VideoParameterSet *h265_vps;
+         struct vk_video_h265_vps *h265_vps;
          uint32_t h265_sps_count;
-         StdVideoH265SequenceParameterSet *h265_sps;
+         struct vk_video_h265_sps *h265_sps;
          uint32_t h265_pps_count;
-         StdVideoH265PictureParameterSet *h265_pps;
+         struct vk_video_h265_pps *h265_pps;
       } h265_dec;
 
       struct {
@@ -86,9 +106,9 @@ struct vk_video_session_parameters {
          uint32_t max_h264_pps_count;
 
          uint32_t h264_sps_count;
-         StdVideoH264SequenceParameterSet *h264_sps;
+         struct vk_video_h264_sps *h264_sps;
          uint32_t h264_pps_count;
-         StdVideoH264PictureParameterSet *h264_pps;
+         struct vk_video_h264_pps *h264_pps;
       } h264_enc;
 
       struct {
@@ -97,11 +117,11 @@ struct vk_video_session_parameters {
          uint32_t max_h265_pps_count;
 
          uint32_t h265_vps_count;
-         StdVideoH265VideoParameterSet *h265_vps;
+         struct vk_video_h265_vps *h265_vps;
          uint32_t h265_sps_count;
-         StdVideoH265SequenceParameterSet *h265_sps;
+         struct vk_video_h265_sps *h265_sps;
          uint32_t h265_pps_count;
-         StdVideoH265PictureParameterSet *h265_pps;
+         struct vk_video_h265_pps *h265_pps;
       } h265_enc;
    };
 };

Reply via email to