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

Author: Dave Airlie <[email protected]>
Date:   Thu May 25 14:04:40 2023 +1000

radv/video: add debug flag to enable dpb image array on newer GPUs.

This is useful to test the paths on newer GPUs that work on older GPUs.

Reviewed-by: Lynne <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23227>

---

 src/amd/vulkan/radv_debug.h    |  1 +
 src/amd/vulkan/radv_instance.c |  1 +
 src/amd/vulkan/radv_video.c    | 18 ++++++++++++++----
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/amd/vulkan/radv_debug.h b/src/amd/vulkan/radv_debug.h
index 070e0cbeedd..8598b0a6ae8 100644
--- a/src/amd/vulkan/radv_debug.h
+++ b/src/amd/vulkan/radv_debug.h
@@ -70,6 +70,7 @@ enum {
    RADV_DEBUG_SHADOW_REGS = 1ull << 39,
    RADV_DEBUG_EXTRA_MD = 1ull << 40,
    RADV_DEBUG_NO_GPL = 1ull << 41,
+   RADV_DEBUG_VIDEO_ARRAY_PATH = 1ull << 42,
 };
 
 enum {
diff --git a/src/amd/vulkan/radv_instance.c b/src/amd/vulkan/radv_instance.c
index f1e23ee1a6a..1204a80151d 100644
--- a/src/amd/vulkan/radv_instance.c
+++ b/src/amd/vulkan/radv_instance.c
@@ -76,6 +76,7 @@ static const struct debug_control radv_debug_options[] = {
    {"shadowregs", RADV_DEBUG_SHADOW_REGS},
    {"extra_md", RADV_DEBUG_EXTRA_MD},
    {"nogpl", RADV_DEBUG_NO_GPL},
+   {"videoarraypath", RADV_DEBUG_VIDEO_ARRAY_PATH},
    {NULL, 0}};
 
 const char *
diff --git a/src/amd/vulkan/radv_video.c b/src/amd/vulkan/radv_video.c
index df8d8c2056d..393d7f7eca1 100644
--- a/src/amd/vulkan/radv_video.c
+++ b/src/amd/vulkan/radv_video.c
@@ -32,6 +32,7 @@
 #include "ac_uvd_dec.h"
 
 #include "radv_cs.h"
+#include "radv_debug.h"
 
 #define NUM_H264_REFS 17
 #define NUM_H265_REFS 8
@@ -44,6 +45,15 @@
 /* Not 100% sure this isn't too much but works */
 #define VID_DEFAULT_ALIGNMENT 256
 
+static bool
+radv_enable_tier2(struct radv_physical_device *pdevice)
+{
+   if (pdevice->rad_info.family >= CHIP_NAVI21 &&
+       !(pdevice->instance->debug_flags & RADV_DEBUG_VIDEO_ARRAY_PATH))
+      return true;
+   return false;
+}
+
 static bool
 radv_vid_buffer_upload_alloc(struct radv_cmd_buffer *cmd_buffer, unsigned size,
                              unsigned *out_offset, void **ptr)
@@ -285,12 +295,12 @@ radv_CreateVideoSessionKHR(VkDevice _device,
    switch (vid->vk.op) {
    case VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR:
       vid->stream_type = RDECODE_CODEC_H264_PERF;
-      if (device->physical_device->rad_info.family >= CHIP_NAVI21)
+      if (radv_enable_tier2(device->physical_device))
          vid->dpb_type = DPB_DYNAMIC_TIER_2;
       break;
    case VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR:
       vid->stream_type = RDECODE_CODEC_H265;
-      if (device->physical_device->rad_info.family >= CHIP_NAVI21)
+      if (radv_enable_tier2(device->physical_device))
          vid->dpb_type = DPB_DYNAMIC_TIER_2;
       break;
    default:
@@ -406,7 +416,7 @@ radv_GetPhysicalDeviceVideoCapabilitiesKHR(VkPhysicalDevice 
physicalDevice,
       pCapabilities->maxActiveReferencePictures = NUM_H264_REFS;
 
       /* for h264 on navi21+ separate dpb images should work */
-      if (pdevice->rad_info.family >= CHIP_NAVI21)
+      if (radv_enable_tier2(pdevice))
          pCapabilities->flags |= 
VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR;
       ext->fieldOffsetGranularity.x = 0;
       ext->fieldOffsetGranularity.y = 0;
@@ -421,7 +431,7 @@ radv_GetPhysicalDeviceVideoCapabilitiesKHR(VkPhysicalDevice 
physicalDevice,
       pCapabilities->maxDpbSlots = NUM_H264_REFS;
       pCapabilities->maxActiveReferencePictures = NUM_H265_REFS;
       /* for h265 on navi21+ separate dpb images should work */
-      if (pdevice->rad_info.family >= CHIP_NAVI21)
+      if (radv_enable_tier2(pdevice))
          pCapabilities->flags |= 
VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR;
       ext->maxLevelIdc = 51;
       strcpy(pCapabilities->stdHeaderVersion.extensionName, 
VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_EXTENSION_NAME);

Reply via email to