mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-03 09:58:05 +02:00
radv/video: Move IB header from begin/end to encode_video
For decode this is also done in decode_video. This breaks if app doesn't call vkCmdEncodeVideoKHR before end, eg: vkCmdBeginVideoCodingKHR vkCmdControlVideoCodingKHR vkCmdEndVideoCodingKHR Cc: mesa-stable Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33582>
This commit is contained in:
parent
77ff18aa3b
commit
ebd8893710
3 changed files with 8 additions and 31 deletions
|
|
@ -2540,9 +2540,6 @@ radv_CmdBeginVideoCodingKHR(VkCommandBuffer commandBuffer, const VkVideoBeginCod
|
|||
|
||||
cmd_buffer->video.vid = vid;
|
||||
cmd_buffer->video.params = params;
|
||||
|
||||
if (vid->encode)
|
||||
radv_video_enc_begin_coding(cmd_buffer);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -2628,12 +2625,6 @@ radv_CmdControlVideoCodingKHR(VkCommandBuffer commandBuffer, const VkVideoCoding
|
|||
VKAPI_ATTR void VKAPI_CALL
|
||||
radv_CmdEndVideoCodingKHR(VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR *pEndCodingInfo)
|
||||
{
|
||||
VK_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
if (cmd_buffer->video.vid->encode) {
|
||||
radv_video_enc_end_coding(cmd_buffer);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -78,8 +78,6 @@ void radv_vcn_write_event(struct radv_cmd_buffer *cmd_buffer, struct radv_event
|
|||
void radv_init_physical_device_encoder(struct radv_physical_device *pdevice);
|
||||
void radv_probe_video_decode(struct radv_physical_device *pdev);
|
||||
void radv_probe_video_encode(struct radv_physical_device *pdev);
|
||||
void radv_video_enc_begin_coding(struct radv_cmd_buffer *cmd_buffer);
|
||||
void radv_video_enc_end_coding(struct radv_cmd_buffer *cmd_buffer);
|
||||
void radv_video_enc_control_video_coding(struct radv_cmd_buffer *cmd_buffer,
|
||||
const VkVideoCodingControlInfoKHR *pCodingControlInfo);
|
||||
VkResult radv_video_get_encode_session_memory_requirements(struct radv_device *device, struct radv_video_session *vid,
|
||||
|
|
|
|||
|
|
@ -1762,6 +1762,11 @@ radv_vcn_encode_video(struct radv_cmd_buffer *cmd_buffer, const VkVideoEncodeInf
|
|||
return;
|
||||
}
|
||||
|
||||
radeon_check_space(device->ws, cmd_buffer->cs, 1024);
|
||||
|
||||
if (pdev->enc_hw_ver >= RADV_VIDEO_ENC_HW_4)
|
||||
radv_vcn_sq_header(cmd_buffer->cs, &cmd_buffer->video.sq, RADEON_VCN_ENGINE_TYPE_ENCODE, false);
|
||||
|
||||
const struct VkVideoInlineQueryInfoKHR *inline_queries = NULL;
|
||||
if (vid->vk.flags & VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR) {
|
||||
inline_queries = vk_find_struct_const(enc_info->pNext, VIDEO_INLINE_QUERY_INFO_KHR);
|
||||
|
|
@ -1835,6 +1840,9 @@ radv_vcn_encode_video(struct radv_cmd_buffer *cmd_buffer, const VkVideoEncodeInf
|
|||
radv_enc_op_enc(cmd_buffer);
|
||||
|
||||
radeon_emit_direct(cmd_buffer->cs, enc->task_size_offset, enc->total_task_size);
|
||||
|
||||
if (pdev->enc_hw_ver >= RADV_VIDEO_ENC_HW_4)
|
||||
radv_vcn_sq_tail(cmd_buffer->cs, &cmd_buffer->video.sq);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -2117,26 +2125,6 @@ radv_GetEncodedVideoSessionParametersKHR(VkDevice device,
|
|||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
void
|
||||
radv_video_enc_begin_coding(struct radv_cmd_buffer *cmd_buffer)
|
||||
{
|
||||
struct radv_device *device = radv_cmd_buffer_device(cmd_buffer);
|
||||
const struct radv_physical_device *pdev = radv_device_physical(device);
|
||||
radeon_check_space(device->ws, cmd_buffer->cs, 1024);
|
||||
|
||||
if (pdev->enc_hw_ver >= RADV_VIDEO_ENC_HW_4)
|
||||
radv_vcn_sq_header(cmd_buffer->cs, &cmd_buffer->video.sq, RADEON_VCN_ENGINE_TYPE_ENCODE, false);
|
||||
}
|
||||
|
||||
void
|
||||
radv_video_enc_end_coding(struct radv_cmd_buffer *cmd_buffer)
|
||||
{
|
||||
struct radv_device *device = radv_cmd_buffer_device(cmd_buffer);
|
||||
const struct radv_physical_device *pdev = radv_device_physical(device);
|
||||
if (pdev->enc_hw_ver >= RADV_VIDEO_ENC_HW_4)
|
||||
radv_vcn_sq_tail(cmd_buffer->cs, &cmd_buffer->video.sq);
|
||||
}
|
||||
|
||||
#define VCN_ENC_SESSION_SIZE 128 * 1024
|
||||
|
||||
VkResult
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue