diff --git a/.pick_status.json b/.pick_status.json index d4c1c57db25..89f5ab5e9ae 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -744,7 +744,7 @@ "description": "radv: don't submit 0 length on UVD either.", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/amd/vulkan/radv_queue.c b/src/amd/vulkan/radv_queue.c index 6279dad369b..965cb80c76a 100644 --- a/src/amd/vulkan/radv_queue.c +++ b/src/amd/vulkan/radv_queue.c @@ -1643,7 +1643,8 @@ radv_queue_submit_normal(struct radv_queue *queue, struct vk_queue_submit *submi queue->device->ws->cs_unchain(cmd_buffer->cs); if (!chainable || !queue->device->ws->cs_chain(chainable, cmd_buffer->cs, queue->state.uses_shadow_regs)) { /* don't submit empty command buffers to the kernel. */ - if (radv_queue_ring(queue) != AMD_IP_VCN_ENC || cmd_buffer->cs->cdw != 0) + if ((radv_queue_ring(queue) != AMD_IP_VCN_ENC && radv_queue_ring(queue) != AMD_IP_UVD) || + cmd_buffer->cs->cdw != 0) cs_array[num_submitted_cs++] = cmd_buffer->cs; } diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c index 1d116de2ad1..95e48d4526b 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c @@ -447,7 +447,17 @@ radv_amdgpu_cs_finalize(struct radeon_cmdbuf *_cs) *cs->ib_size_ptr |= cs->base.cdw; } else { /* Pad the CS with NOP packets. */ - if (ip_type != AMDGPU_HW_IP_VCN_ENC) { + bool pad = true; + + /* Don't pad on VCN encode/unified as no NOPs */ + if (ip_type == AMDGPU_HW_IP_VCN_ENC) + pad = false; + + /* Don't add padding to 0 length UVD due to kernel */ + if (ip_type == AMDGPU_HW_IP_UVD && cs->base.cdw == 0) + pad = false; + + if (pad) { while (!cs->base.cdw || (cs->base.cdw & ib_pad_dw_mask)) radeon_emit_unchecked(&cs->base, nop_packet); }