aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorDaniel Rakos <daniel.rakos@rastergrid.com>2024-02-01 15:50:22 +0100
committerSpencer Fricke <115671160+spencer-lunarg@users.noreply.github.com>2024-02-03 09:25:28 +0900
commitf24bab1ea1c521cd77991260cad1b11384eec5f0 (patch)
treef983f9e9aa5e40a1461dbcaf863673683c022f96 /scripts
parent3af5fdabdd9fed697b01f18b1fad0ee00f86268e (diff)
downloadusermoji-f24bab1ea1c521cd77991260cad1b11384eec5f0.tar.xz
icd: Add AV1 decode support
Diffstat (limited to 'scripts')
-rw-r--r--scripts/mock_icd_generator.py45
1 files changed, 44 insertions, 1 deletions
diff --git a/scripts/mock_icd_generator.py b/scripts/mock_icd_generator.py
index a8c3dbc8..bb04edb7 100644
--- a/scripts/mock_icd_generator.py
+++ b/scripts/mock_icd_generator.py
@@ -395,7 +395,8 @@ CUSTOM_C_INTERCEPTS = {
auto video_props = lvl_find_mod_in_chain<VkQueueFamilyVideoPropertiesKHR>(pQueueFamilyProperties[1].pNext);
if (video_props) {
video_props->videoCodecOperations = VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR
- | VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR;
+ | VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR
+ | VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR;
}
}
if (*pQueueFamilyPropertyCount >= 3) {
@@ -1098,6 +1099,7 @@ CUSTOM_C_INTERCEPTS = {
auto caps_decode = lvl_find_mod_in_chain<VkVideoDecodeCapabilitiesKHR>(pCapabilities->pNext);
auto caps_decode_h264 = lvl_find_mod_in_chain<VkVideoDecodeH264CapabilitiesKHR>(pCapabilities->pNext);
auto caps_decode_h265 = lvl_find_mod_in_chain<VkVideoDecodeH265CapabilitiesKHR>(pCapabilities->pNext);
+ auto caps_decode_av1 = lvl_find_mod_in_chain<VkVideoDecodeAV1CapabilitiesKHR>(pCapabilities->pNext);
auto caps_encode = lvl_find_mod_in_chain<VkVideoEncodeCapabilitiesKHR>(pCapabilities->pNext);
auto caps_encode_h264 = lvl_find_mod_in_chain<VkVideoEncodeH264CapabilitiesKHR>(pCapabilities->pNext);
auto caps_encode_h265 = lvl_find_mod_in_chain<VkVideoEncodeH265CapabilitiesKHR>(pCapabilities->pNext);
@@ -1192,6 +1194,46 @@ CUSTOM_C_INTERCEPTS = {
}
break;
}
+ case VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR: {
+ auto profile = lvl_find_in_chain<VkVideoDecodeAV1ProfileInfoKHR>(pVideoProfile->pNext);
+ if (profile->stdProfile != STD_VIDEO_AV1_PROFILE_MAIN) {
+ return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
+ }
+
+ caps->flags = VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR;
+ caps->minBitstreamBufferOffsetAlignment = 256;
+ caps->minBitstreamBufferSizeAlignment = 256;
+ caps->pictureAccessGranularity = {16,16};
+ caps->minCodedExtent = {16,16};
+ caps->maxCodedExtent = {1920,1080};
+ caps->maxDpbSlots = 8;
+ caps->maxActiveReferencePictures = 7;
+ std::strncpy(caps->stdHeaderVersion.extensionName, VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_EXTENSION_NAME,
+ sizeof(caps->stdHeaderVersion.extensionName));
+ caps->stdHeaderVersion.specVersion = VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_SPEC_VERSION;
+
+ switch (pVideoProfile->chromaSubsampling) {
+ case VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR:
+ caps_decode->flags = VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR;
+ caps_decode_av1->maxLevel = STD_VIDEO_AV1_LEVEL_6_2;
+ break;
+ case VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR:
+ if (profile->filmGrainSupport) {
+ return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
+ }
+ caps_decode->flags = VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR;
+ caps_decode_av1->maxLevel = STD_VIDEO_AV1_LEVEL_5_0;
+ break;
+ case VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR:
+ caps_decode->flags = VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR
+ | VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR;
+ caps_decode_av1->maxLevel = STD_VIDEO_AV1_LEVEL_3_2;
+ break;
+ default:
+ return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
+ }
+ break;
+ }
case VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR: {
auto profile = lvl_find_in_chain<VkVideoEncodeH264ProfileInfoKHR>(pVideoProfile->pNext);
if (profile->stdProfileIdc != STD_VIDEO_H264_PROFILE_IDC_BASELINE) {
@@ -1437,6 +1479,7 @@ CUSTOM_C_INTERCEPTS = {
switch (profile_list->pProfiles[0].videoCodecOperation) {
case VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR:
case VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR:
+ case VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR:
switch (profile_list->pProfiles[0].chromaSubsampling) {
case VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR:
props.format = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM;