diff --git a/src/gallium/drivers/radeonsi/si_texture.c b/src/gallium/drivers/radeonsi/si_texture.c index dd4055aace8..a00e46c8521 100644 --- a/src/gallium/drivers/radeonsi/si_texture.c +++ b/src/gallium/drivers/radeonsi/si_texture.c @@ -386,6 +386,9 @@ static int si_init_surface(struct si_screen *sscreen, struct radeon_surf *surfac if (ptex->flags & PIPE_RESOURCE_FLAG_SPARSE) flags |= RADEON_SURF_PRT; + if (ptex->bind & (PIPE_BIND_VIDEO_DECODE_DPB | PIPE_BIND_VIDEO_ENCODE_DPB)) + flags |= RADEON_SURF_VIDEO_REFERENCE; + surface->modifier = modifier; r = sscreen->ws->surface_init(sscreen->ws, &sscreen->info, ptex, flags, bpe, array_mode, diff --git a/src/gallium/drivers/radeonsi/si_uvd.c b/src/gallium/drivers/radeonsi/si_uvd.c index 52491151d4b..b2eb323403d 100644 --- a/src/gallium/drivers/radeonsi/si_uvd.c +++ b/src/gallium/drivers/radeonsi/si_uvd.c @@ -28,6 +28,9 @@ struct pipe_video_buffer *si_video_buffer_create(struct pipe_context *pipe, int modifiers_count = 0; uint64_t mod = DRM_FORMAT_MOD_LINEAR; + if (tmpl->bind & (PIPE_BIND_VIDEO_DECODE_DPB | PIPE_BIND_VIDEO_ENCODE_DPB)) + return vl_video_buffer_create_as_resource(pipe, &vidbuf, NULL, 0); + /* To get tiled buffers, users need to explicitly provide a list of * modifiers. */ vidbuf.bind |= PIPE_BIND_LINEAR;