vulkan/video: Switch vk_video_session_parameters to create/destroy
These are never created on the stack or deep inside other objects so it makes sense to use create/destroy instead of init/finish. Reviewed-by: Dave Airlie <airlied@redhat.com> Reviewed-by: Hyunjun Ko <zzoon@igalia.com> Reviewed-by: David Rosca <david.rosca@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36646>
This commit is contained in:
committed by
Marge Bot
parent
d93156c2a2
commit
f8086c6472
@@ -647,18 +647,13 @@ radv_CreateVideoSessionParametersKHR(VkDevice _device, const VkVideoSessionParam
|
||||
VK_FROM_HANDLE(radv_video_session_params, templ, pCreateInfo->videoSessionParametersTemplate);
|
||||
const struct radv_physical_device *pdev = radv_device_physical(device);
|
||||
const struct radv_instance *instance = radv_physical_device_instance(pdev);
|
||||
|
||||
struct radv_video_session_params *params =
|
||||
vk_alloc2(&device->vk.alloc, pAllocator, sizeof(*params), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
vk_video_session_parameters_create(&device->vk, &vid->vk, templ ? &templ->vk : NULL,
|
||||
pCreateInfo, pAllocator, sizeof(*params));
|
||||
if (!params)
|
||||
return vk_error(instance, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
VkResult result =
|
||||
vk_video_session_parameters_init(&device->vk, ¶ms->vk, &vid->vk, templ ? &templ->vk : NULL, pCreateInfo);
|
||||
if (result != VK_SUCCESS) {
|
||||
vk_free2(&device->vk.alloc, pAllocator, params);
|
||||
return result;
|
||||
}
|
||||
|
||||
radv_video_patch_session_parameters(device, ¶ms->vk);
|
||||
|
||||
*pVideoSessionParameters = radv_video_session_params_to_handle(params);
|
||||
@@ -672,8 +667,7 @@ radv_DestroyVideoSessionParametersKHR(VkDevice _device, VkVideoSessionParameters
|
||||
VK_FROM_HANDLE(radv_device, device, _device);
|
||||
VK_FROM_HANDLE(radv_video_session_params, params, _params);
|
||||
|
||||
vk_video_session_parameters_finish(&device->vk, ¶ms->vk);
|
||||
vk_free2(&device->vk.alloc, pAllocator, params);
|
||||
vk_video_session_parameters_destroy(&device->vk, pAllocator, ¶ms->vk);
|
||||
}
|
||||
|
||||
static VkResult
|
||||
|
||||
@@ -77,21 +77,15 @@ anv_CreateVideoSessionParametersKHR(VkDevice _device,
|
||||
ANV_FROM_HANDLE(anv_device, device, _device);
|
||||
ANV_FROM_HANDLE(anv_video_session, vid, pCreateInfo->videoSession);
|
||||
ANV_FROM_HANDLE(anv_video_session_params, templ, pCreateInfo->videoSessionParametersTemplate);
|
||||
|
||||
struct anv_video_session_params *params =
|
||||
vk_alloc2(&device->vk.alloc, pAllocator, sizeof(*params), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
vk_video_session_parameters_create(&device->vk, &vid->vk,
|
||||
templ ? &templ->vk : NULL,
|
||||
pCreateInfo, pAllocator,
|
||||
sizeof(*params));
|
||||
if (!params)
|
||||
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
VkResult result = vk_video_session_parameters_init(&device->vk,
|
||||
¶ms->vk,
|
||||
&vid->vk,
|
||||
templ ? &templ->vk : NULL,
|
||||
pCreateInfo);
|
||||
if (result != VK_SUCCESS) {
|
||||
vk_free2(&device->vk.alloc, pAllocator, params);
|
||||
return result;
|
||||
}
|
||||
|
||||
*pVideoSessionParameters = anv_video_session_params_to_handle(params);
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
@@ -105,8 +99,7 @@ anv_DestroyVideoSessionParametersKHR(VkDevice _device,
|
||||
ANV_FROM_HANDLE(anv_video_session_params, params, _params);
|
||||
if (!_params)
|
||||
return;
|
||||
vk_video_session_parameters_finish(&device->vk, ¶ms->vk);
|
||||
vk_free2(&device->vk.alloc, pAllocator, params);
|
||||
vk_video_session_parameters_destroy(&device->vk, pAllocator, ¶ms->vk);
|
||||
}
|
||||
|
||||
VkResult
|
||||
|
||||
@@ -451,15 +451,19 @@ vk_video_deep_copy_av1_seq_hdr(struct vk_video_av1_seq_hdr *dst,
|
||||
}
|
||||
}
|
||||
|
||||
VkResult
|
||||
vk_video_session_parameters_init(struct vk_device *device,
|
||||
struct vk_video_session_parameters *params,
|
||||
const struct vk_video_session *vid,
|
||||
const struct vk_video_session_parameters *templ,
|
||||
const VkVideoSessionParametersCreateInfoKHR *create_info)
|
||||
void *
|
||||
vk_video_session_parameters_create(struct vk_device *device,
|
||||
const struct vk_video_session *vid,
|
||||
const struct vk_video_session_parameters *templ,
|
||||
const VkVideoSessionParametersCreateInfoKHR *create_info,
|
||||
const VkAllocationCallbacks *alloc,
|
||||
size_t size)
|
||||
{
|
||||
memset(params, 0, sizeof(*params));
|
||||
vk_object_base_init(device, ¶ms->base, VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR);
|
||||
struct vk_video_session_parameters *params =
|
||||
vk_object_zalloc(device, alloc, size,
|
||||
VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR);
|
||||
if (params == NULL)
|
||||
return NULL;
|
||||
|
||||
params->op = vid->op;
|
||||
params->luma_bit_depth = vid->luma_bit_depth;
|
||||
@@ -479,9 +483,8 @@ vk_video_session_parameters_init(struct vk_device *device,
|
||||
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);
|
||||
if (!params->h264_dec.h264_sps || !params->h264_dec.h264_pps) {
|
||||
vk_free(&device->alloc, params->h264_dec.h264_sps);
|
||||
vk_free(&device->alloc, params->h264_dec.h264_pps);
|
||||
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
vk_video_session_parameters_destroy(device, alloc, params);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
init_add_h264_dec_session_parameters(params, h264_create->pParametersAddInfo, templ);
|
||||
@@ -503,10 +506,8 @@ vk_video_session_parameters_init(struct vk_device *device,
|
||||
params->h265_dec.h265_sps = vk_alloc(&device->alloc, sps_size, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
params->h265_dec.h265_pps = vk_alloc(&device->alloc, pps_size, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
if (!params->h265_dec.h265_sps || !params->h265_dec.h265_pps || !params->h265_dec.h265_vps) {
|
||||
vk_free(&device->alloc, params->h265_dec.h265_vps);
|
||||
vk_free(&device->alloc, params->h265_dec.h265_sps);
|
||||
vk_free(&device->alloc, params->h265_dec.h265_pps);
|
||||
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
vk_video_session_parameters_destroy(device, alloc, params);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
init_add_h265_dec_session_parameters(params, h265_create->pParametersAddInfo, templ);
|
||||
@@ -537,9 +538,8 @@ vk_video_session_parameters_init(struct vk_device *device,
|
||||
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);
|
||||
if (!params->h264_enc.h264_sps || !params->h264_enc.h264_pps) {
|
||||
vk_free(&device->alloc, params->h264_enc.h264_sps);
|
||||
vk_free(&device->alloc, params->h264_enc.h264_pps);
|
||||
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
vk_video_session_parameters_destroy(device, alloc, params);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
params->h264_enc.profile_idc = vid->h264.profile_idc;
|
||||
@@ -562,10 +562,8 @@ vk_video_session_parameters_init(struct vk_device *device,
|
||||
params->h265_enc.h265_sps = vk_alloc(&device->alloc, sps_size, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
params->h265_enc.h265_pps = vk_alloc(&device->alloc, pps_size, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
if (!params->h265_enc.h265_sps || !params->h265_enc.h265_pps || !params->h265_enc.h265_vps) {
|
||||
vk_free(&device->alloc, params->h265_enc.h265_vps);
|
||||
vk_free(&device->alloc, params->h265_enc.h265_sps);
|
||||
vk_free(&device->alloc, params->h265_enc.h265_pps);
|
||||
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
vk_video_session_parameters_destroy(device, alloc, params);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
init_add_h265_enc_session_parameters(params, h265_create->pParametersAddInfo, templ);
|
||||
@@ -584,36 +582,38 @@ vk_video_session_parameters_init(struct vk_device *device,
|
||||
UNREACHABLE("Unsupported video codec operation");
|
||||
break;
|
||||
}
|
||||
return VK_SUCCESS;
|
||||
|
||||
return params;
|
||||
}
|
||||
|
||||
void
|
||||
vk_video_session_parameters_finish(struct vk_device *device,
|
||||
struct vk_video_session_parameters *params)
|
||||
vk_video_session_parameters_destroy(struct vk_device *device,
|
||||
const VkAllocationCallbacks *alloc,
|
||||
struct vk_video_session_parameters *params)
|
||||
{
|
||||
switch (params->op) {
|
||||
case VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR:
|
||||
vk_free(&device->alloc, params->h264_dec.h264_sps);
|
||||
vk_free(&device->alloc, params->h264_dec.h264_pps);
|
||||
vk_free2(&device->alloc, alloc, params->h264_dec.h264_sps);
|
||||
vk_free2(&device->alloc, alloc, params->h264_dec.h264_pps);
|
||||
break;
|
||||
case VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR:
|
||||
vk_free(&device->alloc, params->h265_dec.h265_vps);
|
||||
vk_free(&device->alloc, params->h265_dec.h265_sps);
|
||||
vk_free(&device->alloc, params->h265_dec.h265_pps);
|
||||
vk_free2(&device->alloc, alloc, params->h265_dec.h265_vps);
|
||||
vk_free2(&device->alloc, alloc, params->h265_dec.h265_sps);
|
||||
vk_free2(&device->alloc, alloc, params->h265_dec.h265_pps);
|
||||
break;
|
||||
case VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR:
|
||||
vk_free(&device->alloc, params->h264_enc.h264_sps);
|
||||
vk_free(&device->alloc, params->h264_enc.h264_pps);
|
||||
vk_free2(&device->alloc, alloc, params->h264_enc.h264_sps);
|
||||
vk_free2(&device->alloc, alloc, params->h264_enc.h264_pps);
|
||||
break;
|
||||
case VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR:
|
||||
vk_free(&device->alloc, params->h265_enc.h265_vps);
|
||||
vk_free(&device->alloc, params->h265_enc.h265_sps);
|
||||
vk_free(&device->alloc, params->h265_enc.h265_pps);
|
||||
vk_free2(&device->alloc, alloc, params->h265_enc.h265_vps);
|
||||
vk_free2(&device->alloc, alloc, params->h265_enc.h265_sps);
|
||||
vk_free2(&device->alloc, alloc, params->h265_enc.h265_pps);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
vk_object_base_finish(¶ms->base);
|
||||
vk_object_free(device, alloc, params);
|
||||
}
|
||||
|
||||
static VkResult
|
||||
|
||||
@@ -181,17 +181,19 @@ VkResult vk_video_session_init(struct vk_device *device,
|
||||
struct vk_video_session *vid,
|
||||
const VkVideoSessionCreateInfoKHR *create_info);
|
||||
|
||||
VkResult vk_video_session_parameters_init(struct vk_device *device,
|
||||
struct vk_video_session_parameters *params,
|
||||
const struct vk_video_session *vid,
|
||||
const struct vk_video_session_parameters *templ,
|
||||
const VkVideoSessionParametersCreateInfoKHR *create_info);
|
||||
void *vk_video_session_parameters_create(struct vk_device *device,
|
||||
const struct vk_video_session *vid,
|
||||
const struct vk_video_session_parameters *templ,
|
||||
const VkVideoSessionParametersCreateInfoKHR *create_info,
|
||||
const VkAllocationCallbacks *alloc,
|
||||
size_t size);
|
||||
|
||||
VkResult vk_video_session_parameters_update(struct vk_video_session_parameters *params,
|
||||
const VkVideoSessionParametersUpdateInfoKHR *update);
|
||||
|
||||
void vk_video_session_parameters_finish(struct vk_device *device,
|
||||
struct vk_video_session_parameters *params);
|
||||
void vk_video_session_parameters_destroy(struct vk_device *device,
|
||||
const VkAllocationCallbacks *alloc,
|
||||
struct vk_video_session_parameters *params);
|
||||
|
||||
void vk_video_derive_h264_scaling_list(const StdVideoH264SequenceParameterSet *sps,
|
||||
const StdVideoH264PictureParameterSet *pps,
|
||||
|
||||
Reference in New Issue
Block a user