radv/video: convert session memory requirements to outarray.
authorDave Airlie <airlied@redhat.com>
Tue, 30 May 2023 04:45:48 +0000 (14:45 +1000)
committerMarge Bot <emma+marge@anholt.net>
Thu, 8 Jun 2023 05:34:06 +0000 (05:34 +0000)
These are just standard outarray so use the common code.

Reviewed-by: Lynne <dev@lynne.ee>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23476>

src/amd/vulkan/radv_video.c

index e2c945e..e4f06a4 100644 (file)
@@ -521,35 +521,29 @@ radv_GetVideoSessionMemoryRequirementsKHR(VkDevice _device,
    RADV_FROM_HANDLE(radv_device, device, _device);
    RADV_FROM_HANDLE(radv_video_session, vid, videoSession);
    uint32_t memory_type_bits = (1u << device->physical_device->memory_properties.memoryTypeCount) - 1;
-   uint32_t num_memory_reqs = 0;
-   int idx = 0;
 
-   if (device->physical_device->rad_info.family >= CHIP_POLARIS10)
-      num_memory_reqs++;
-
-   if (vid->stream_type == RDECODE_CODEC_H264_PERF || vid->stream_type == RDECODE_CODEC_H265)
-      num_memory_reqs++;
-
-   *pMemoryRequirementsCount = num_memory_reqs;
-
-   if (!pMemoryRequirements)
-      return VK_SUCCESS;
+   VK_OUTARRAY_MAKE_TYPED(VkVideoSessionMemoryRequirementsKHR, out,
+                          pMemoryRequirements,
+                          pMemoryRequirementsCount);
 
    /* 1 buffer for session context */
    if (device->physical_device->rad_info.family >= CHIP_POLARIS10) {
-      pMemoryRequirements[idx].memoryBindIndex = RADV_BIND_SESSION_CTX;
-      pMemoryRequirements[idx].memoryRequirements.size = RDECODE_SESSION_CONTEXT_SIZE;
-      pMemoryRequirements[idx].memoryRequirements.alignment = 0;
-      pMemoryRequirements[idx].memoryRequirements.memoryTypeBits = memory_type_bits;
-      idx++;
+      vk_outarray_append_typed(VkVideoSessionMemoryRequirementsKHR, &out, m) {
+         m->memoryBindIndex = RADV_BIND_SESSION_CTX;
+         m->memoryRequirements.size = RDECODE_SESSION_CONTEXT_SIZE;
+         m->memoryRequirements.alignment = 0;
+         m->memoryRequirements.memoryTypeBits = memory_type_bits;
+      }
    }
 
    if (vid->stream_type == RDECODE_CODEC_H264_PERF &&
        device->physical_device->rad_info.family >= CHIP_POLARIS10) {
-      pMemoryRequirements[idx].memoryBindIndex = RADV_BIND_DECODER_CTX;
-      pMemoryRequirements[idx].memoryRequirements.size = align(calc_ctx_size_h264_perf(vid), 4096);
-      pMemoryRequirements[idx].memoryRequirements.alignment = 0;
-      pMemoryRequirements[idx].memoryRequirements.memoryTypeBits = memory_type_bits;
+      vk_outarray_append_typed(VkVideoSessionMemoryRequirementsKHR, &out, m) {
+         m->memoryBindIndex = RADV_BIND_DECODER_CTX;
+         m->memoryRequirements.size = align(calc_ctx_size_h264_perf(vid), 4096);
+         m->memoryRequirements.alignment = 0;
+         m->memoryRequirements.memoryTypeBits = memory_type_bits;
+      }
    }
    if (vid->stream_type == RDECODE_CODEC_H265) {
       uint32_t ctx_size;
@@ -558,12 +552,14 @@ radv_GetVideoSessionMemoryRequirementsKHR(VkDevice _device,
          ctx_size = calc_ctx_size_h265_main10(vid);
       else
          ctx_size = calc_ctx_size_h265_main(vid);
-      pMemoryRequirements[idx].memoryBindIndex = RADV_BIND_DECODER_CTX;
-      pMemoryRequirements[idx].memoryRequirements.size = align(ctx_size, 4096);
-      pMemoryRequirements[idx].memoryRequirements.alignment = 0;
-      pMemoryRequirements[idx].memoryRequirements.memoryTypeBits = memory_type_bits;
+      vk_outarray_append_typed(VkVideoSessionMemoryRequirementsKHR, &out, m) {
+         m->memoryBindIndex = RADV_BIND_DECODER_CTX;
+         m->memoryRequirements.size = align(ctx_size, 4096);
+         m->memoryRequirements.alignment = 0;
+         m->memoryRequirements.memoryTypeBits = memory_type_bits;
+      }
    }
-   return VK_SUCCESS;
+   return vk_outarray_status(&out);
 }
 
 VkResult