Lines Matching refs:dec
97 static int flush(struct ruvd_decoder *dec, unsigned flags) in flush() argument
99 return dec->ws->cs_flush(dec->cs, flags, NULL); in flush()
103 static void set_reg(struct ruvd_decoder *dec, unsigned reg, uint32_t val) in set_reg() argument
105 radeon_emit(dec->cs, RUVD_PKT0(reg >> 2, 0)); in set_reg()
106 radeon_emit(dec->cs, val); in set_reg()
110 static void send_cmd(struct ruvd_decoder *dec, unsigned cmd, struct pb_buffer *buf, uint32_t off, in send_cmd() argument
115 reloc_idx = dec->ws->cs_add_buffer(dec->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain, 0); in send_cmd()
116 if (!dec->use_legacy) { in send_cmd()
118 addr = dec->ws->buffer_get_virtual_address(buf); in send_cmd()
120 set_reg(dec, dec->reg.data0, addr); in send_cmd()
121 set_reg(dec, dec->reg.data1, addr >> 32); in send_cmd()
123 off += dec->ws->buffer_get_reloc_offset(buf); in send_cmd()
124 set_reg(dec, RUVD_GPCOM_VCPU_DATA0, off); in send_cmd()
125 set_reg(dec, RUVD_GPCOM_VCPU_DATA1, reloc_idx * 4); in send_cmd()
127 set_reg(dec, dec->reg.cmd, cmd << 1); in send_cmd()
131 static bool have_it(struct ruvd_decoder *dec) in have_it() argument
133 return dec->stream_type == RUVD_CODEC_H264_PERF || dec->stream_type == RUVD_CODEC_H265; in have_it()
137 static void map_msg_fb_it_buf(struct ruvd_decoder *dec) in map_msg_fb_it_buf() argument
143 buf = &dec->msg_fb_it_buffers[dec->cur_buffer]; in map_msg_fb_it_buf()
147 dec->ws->buffer_map(buf->res->buf, dec->cs, PIPE_MAP_WRITE | RADEON_MAP_TEMPORARY); in map_msg_fb_it_buf()
150 dec->msg = (struct ruvd_msg *)ptr; in map_msg_fb_it_buf()
151 memset(dec->msg, 0, sizeof(*dec->msg)); in map_msg_fb_it_buf()
153 dec->fb = (uint32_t *)(ptr + FB_BUFFER_OFFSET); in map_msg_fb_it_buf()
154 if (have_it(dec)) in map_msg_fb_it_buf()
155 dec->it = (uint8_t *)(ptr + FB_BUFFER_OFFSET + dec->fb_size); in map_msg_fb_it_buf()
159 static void send_msg_buf(struct ruvd_decoder *dec) in send_msg_buf() argument
164 if (!dec->msg || !dec->fb) in send_msg_buf()
168 buf = &dec->msg_fb_it_buffers[dec->cur_buffer]; in send_msg_buf()
171 dec->ws->buffer_unmap(buf->res->buf); in send_msg_buf()
172 dec->msg = NULL; in send_msg_buf()
173 dec->fb = NULL; in send_msg_buf()
174 dec->it = NULL; in send_msg_buf()
176 if (dec->sessionctx.res) in send_msg_buf()
177 send_cmd(dec, RUVD_CMD_SESSION_CONTEXT_BUFFER, dec->sessionctx.res->buf, 0, in send_msg_buf()
181 send_cmd(dec, RUVD_CMD_MSG_BUFFER, buf->res->buf, 0, RADEON_USAGE_READ, RADEON_DOMAIN_GTT); in send_msg_buf()
185 static void next_buffer(struct ruvd_decoder *dec) in next_buffer() argument
187 ++dec->cur_buffer; in next_buffer()
188 dec->cur_buffer %= NUM_BUFFERS; in next_buffer()
192 static uint32_t profile2stream_type(struct ruvd_decoder *dec, unsigned family) in profile2stream_type() argument
194 switch (u_reduce_video_profile(dec->base.profile)) { in profile2stream_type()
219 static unsigned calc_ctx_size_h264_perf(struct ruvd_decoder *dec) in calc_ctx_size_h264_perf() argument
222 unsigned width = align(dec->base.width, VL_MACROBLOCK_WIDTH); in calc_ctx_size_h264_perf()
223 unsigned height = align(dec->base.height, VL_MACROBLOCK_HEIGHT); in calc_ctx_size_h264_perf()
225 unsigned max_references = dec->base.max_references + 1; in calc_ctx_size_h264_perf()
231 if (!dec->use_legacy) { in calc_ctx_size_h264_perf()
234 switch (dec->base.level) { in calc_ctx_size_h264_perf()
273 static unsigned calc_ctx_size_h265_main(struct ruvd_decoder *dec) in calc_ctx_size_h265_main() argument
275 unsigned width = align(dec->base.width, VL_MACROBLOCK_WIDTH); in calc_ctx_size_h265_main()
276 unsigned height = align(dec->base.height, VL_MACROBLOCK_HEIGHT); in calc_ctx_size_h265_main()
278 unsigned max_references = dec->base.max_references + 1; in calc_ctx_size_h265_main()
280 if (dec->base.width * dec->base.height >= 4096 * 2000) in calc_ctx_size_h265_main()
290 static unsigned calc_ctx_size_h265_main10(struct ruvd_decoder *dec, in calc_ctx_size_h265_main10() argument
297 unsigned width = align(dec->base.width, VL_MACROBLOCK_WIDTH); in calc_ctx_size_h265_main10()
298 unsigned height = align(dec->base.height, VL_MACROBLOCK_HEIGHT); in calc_ctx_size_h265_main10()
302 unsigned max_references = dec->base.max_references + 1; in calc_ctx_size_h265_main10()
304 if (dec->base.width * dec->base.height >= 4096 * 2000) in calc_ctx_size_h265_main10()
325 static unsigned get_db_pitch_alignment(struct ruvd_decoder *dec) in get_db_pitch_alignment() argument
327 if (((struct si_screen *)dec->screen)->info.family < CHIP_VEGA10) in get_db_pitch_alignment()
334 static unsigned calc_dpb_size(struct ruvd_decoder *dec) in calc_dpb_size() argument
339 unsigned width = align(dec->base.width, VL_MACROBLOCK_WIDTH); in calc_dpb_size()
340 unsigned height = align(dec->base.height, VL_MACROBLOCK_HEIGHT); in calc_dpb_size()
343 unsigned max_references = dec->base.max_references + 1; in calc_dpb_size()
346 image_size = align(width, get_db_pitch_alignment(dec)) * height; in calc_dpb_size()
354 switch (u_reduce_video_profile(dec->base.profile)) { in calc_dpb_size()
356 if (!dec->use_legacy) { in calc_dpb_size()
360 if (dec->stream_type == RUVD_CODEC_H264_PERF) in calc_dpb_size()
362 switch (dec->base.level) { in calc_dpb_size()
391 if ((dec->stream_type != RUVD_CODEC_H264_PERF) || in calc_dpb_size()
392 (((struct si_screen *)dec->screen)->info.family < CHIP_POLARIS10)) { in calc_dpb_size()
401 if ((dec->stream_type != RUVD_CODEC_H264_PERF) || in calc_dpb_size()
402 (((struct si_screen *)dec->screen)->info.family < CHIP_POLARIS10)) { in calc_dpb_size()
413 if (dec->base.width * dec->base.height >= 4096 * 2000) in calc_dpb_size()
420 if (dec->base.profile == PIPE_VIDEO_PROFILE_HEVC_MAIN_10) in calc_dpb_size()
421 dpb_size = align((align(width, get_db_pitch_alignment(dec)) * height * 9) / 4, 256) * in calc_dpb_size()
424 dpb_size = align((align(width, get_db_pitch_alignment(dec)) * height * 3) / 2, 256) * in calc_dpb_size()
488 static struct ruvd_h264 get_h264_msg(struct ruvd_decoder *dec, struct pipe_h264_picture_desc *pic) in get_h264_msg() argument
512 result.level = dec->base.level; in get_h264_msg()
526 switch (dec->base.chroma_format) { in get_h264_msg()
564 if (dec->stream_type == RUVD_CODEC_H264_PERF) { in get_h264_msg()
565 memcpy(dec->it, result.scaling_list_4x4, 6 * 16); in get_h264_msg()
566 memcpy((dec->it + 96), result.scaling_list_8x8, 2 * 64); in get_h264_msg()
586 static struct ruvd_h265 get_h265_msg(struct ruvd_decoder *dec, struct pipe_video_buffer *target, in get_h265_msg() argument
604 if (((struct si_screen *)dec->screen)->info.family == CHIP_CARRIZO) in get_h265_msg()
680 if (dec->render_pic_list[i] == pic->ref[j]) in get_h265_msg()
683 dec->render_pic_list[i] = NULL; in get_h265_msg()
685 dec->render_pic_list[i] = NULL; in get_h265_msg()
689 if (dec->render_pic_list[i] == NULL) { in get_h265_msg()
690 dec->render_pic_list[i] = target; in get_h265_msg()
696 vl_video_buffer_set_associated_data(target, &dec->base, (void *)(uintptr_t)result.curr_idx, in get_h265_msg()
706 ref_pic = (uintptr_t)vl_video_buffer_get_associated_data(ref, &dec->base); in get_h265_msg()
733 memcpy(dec->it, pic->pps->sps->ScalingList4x4, 6 * 16); in get_h265_msg()
734 memcpy(dec->it + 96, pic->pps->sps->ScalingList8x8, 6 * 64); in get_h265_msg()
735 memcpy(dec->it + 480, pic->pps->sps->ScalingList16x16, 6 * 64); in get_h265_msg()
736 memcpy(dec->it + 864, pic->pps->sps->ScalingList32x32, 2 * 64); in get_h265_msg()
844 static uint32_t get_ref_pic_idx(struct ruvd_decoder *dec, struct pipe_video_buffer *ref) in get_ref_pic_idx() argument
846 uint32_t min = MAX2(dec->frame_number, NUM_MPEG2_REFS) - NUM_MPEG2_REFS; in get_ref_pic_idx()
847 uint32_t max = MAX2(dec->frame_number, 1) - 1; in get_ref_pic_idx()
855 frame = (uintptr_t)vl_video_buffer_get_associated_data(ref, &dec->base); in get_ref_pic_idx()
862 static struct ruvd_mpeg2 get_mpeg2_msg(struct ruvd_decoder *dec, in get_mpeg2_msg() argument
870 result.decoded_pic_idx = dec->frame_number; in get_mpeg2_msg()
872 result.ref_pic_idx[i] = get_ref_pic_idx(dec, pic->ref[i]); in get_mpeg2_msg()
908 static struct ruvd_mpeg4 get_mpeg4_msg(struct ruvd_decoder *dec, in get_mpeg4_msg() argument
915 result.decoded_pic_idx = dec->frame_number; in get_mpeg4_msg()
917 result.ref_pic_idx[i] = get_ref_pic_idx(dec, pic->ref[i]); in get_mpeg4_msg()
925 result.video_object_layer_width = dec->base.width; in get_mpeg4_msg()
926 result.video_object_layer_height = dec->base.height; in get_mpeg4_msg()
973 struct ruvd_decoder *dec = (struct ruvd_decoder *)decoder; in ruvd_destroy() local
978 map_msg_fb_it_buf(dec); in ruvd_destroy()
979 dec->msg->size = sizeof(*dec->msg); in ruvd_destroy()
980 dec->msg->msg_type = RUVD_MSG_DESTROY; in ruvd_destroy()
981 dec->msg->stream_handle = dec->stream_handle; in ruvd_destroy()
982 send_msg_buf(dec); in ruvd_destroy()
984 flush(dec, 0); in ruvd_destroy()
986 dec->ws->cs_destroy(dec->cs); in ruvd_destroy()
989 si_vid_destroy_buffer(&dec->msg_fb_it_buffers[i]); in ruvd_destroy()
990 si_vid_destroy_buffer(&dec->bs_buffers[i]); in ruvd_destroy()
993 si_vid_destroy_buffer(&dec->dpb); in ruvd_destroy()
994 si_vid_destroy_buffer(&dec->ctx); in ruvd_destroy()
995 si_vid_destroy_buffer(&dec->sessionctx); in ruvd_destroy()
997 FREE(dec); in ruvd_destroy()
1006 struct ruvd_decoder *dec = (struct ruvd_decoder *)decoder; in ruvd_begin_frame() local
1011 frame = ++dec->frame_number; in ruvd_begin_frame()
1015 dec->bs_size = 0; in ruvd_begin_frame()
1016 dec->bs_ptr = dec->ws->buffer_map(dec->bs_buffers[dec->cur_buffer].res->buf, dec->cs, in ruvd_begin_frame()
1041 struct ruvd_decoder *dec = (struct ruvd_decoder *)decoder; in ruvd_decode_bitstream() local
1046 if (!dec->bs_ptr) in ruvd_decode_bitstream()
1050 struct rvid_buffer *buf = &dec->bs_buffers[dec->cur_buffer]; in ruvd_decode_bitstream()
1051 unsigned new_size = dec->bs_size + sizes[i]; in ruvd_decode_bitstream()
1054 dec->ws->buffer_unmap(buf->res->buf); in ruvd_decode_bitstream()
1055 if (!si_vid_resize_buffer(dec->screen, dec->cs, buf, new_size)) { in ruvd_decode_bitstream()
1060 dec->bs_ptr = dec->ws->buffer_map(buf->res->buf, dec->cs, in ruvd_decode_bitstream()
1062 if (!dec->bs_ptr) in ruvd_decode_bitstream()
1065 dec->bs_ptr += dec->bs_size; in ruvd_decode_bitstream()
1068 memcpy(dec->bs_ptr, buffers[i], sizes[i]); in ruvd_decode_bitstream()
1069 dec->bs_size += sizes[i]; in ruvd_decode_bitstream()
1070 dec->bs_ptr += sizes[i]; in ruvd_decode_bitstream()
1080 struct ruvd_decoder *dec = (struct ruvd_decoder *)decoder; in ruvd_end_frame() local
1087 if (!dec->bs_ptr) in ruvd_end_frame()
1090 msg_fb_it_buf = &dec->msg_fb_it_buffers[dec->cur_buffer]; in ruvd_end_frame()
1091 bs_buf = &dec->bs_buffers[dec->cur_buffer]; in ruvd_end_frame()
1093 bs_size = align(dec->bs_size, 128); in ruvd_end_frame()
1094 memset(dec->bs_ptr, 0, bs_size - dec->bs_size); in ruvd_end_frame()
1095 dec->ws->buffer_unmap(bs_buf->res->buf); in ruvd_end_frame()
1097 map_msg_fb_it_buf(dec); in ruvd_end_frame()
1098 dec->msg->size = sizeof(*dec->msg); in ruvd_end_frame()
1099 dec->msg->msg_type = RUVD_MSG_DECODE; in ruvd_end_frame()
1100 dec->msg->stream_handle = dec->stream_handle; in ruvd_end_frame()
1101 dec->msg->status_report_feedback_number = dec->frame_number; in ruvd_end_frame()
1103 dec->msg->body.decode.stream_type = dec->stream_type; in ruvd_end_frame()
1104 dec->msg->body.decode.decode_flags = 0x1; in ruvd_end_frame()
1105 dec->msg->body.decode.width_in_samples = dec->base.width; in ruvd_end_frame()
1106 dec->msg->body.decode.height_in_samples = dec->base.height; in ruvd_end_frame()
1110 dec->msg->body.decode.width_in_samples = in ruvd_end_frame()
1111 align(dec->msg->body.decode.width_in_samples, 16) / 16; in ruvd_end_frame()
1112 dec->msg->body.decode.height_in_samples = in ruvd_end_frame()
1113 align(dec->msg->body.decode.height_in_samples, 16) / 16; in ruvd_end_frame()
1116 if (dec->dpb.res) in ruvd_end_frame()
1117 dec->msg->body.decode.dpb_size = dec->dpb.res->buf->size; in ruvd_end_frame()
1118 dec->msg->body.decode.bsd_size = bs_size; in ruvd_end_frame()
1119 dec->msg->body.decode.db_pitch = align(dec->base.width, get_db_pitch_alignment(dec)); in ruvd_end_frame()
1121 if (dec->stream_type == RUVD_CODEC_H264_PERF && in ruvd_end_frame()
1122 ((struct si_screen *)dec->screen)->info.family >= CHIP_POLARIS10) in ruvd_end_frame()
1123 dec->msg->body.decode.dpb_reserved = dec->ctx.res->buf->size; in ruvd_end_frame()
1125 dt = dec->set_dtb(dec->msg, (struct vl_video_buffer *)target); in ruvd_end_frame()
1126 if (((struct si_screen *)dec->screen)->info.family >= CHIP_STONEY) in ruvd_end_frame()
1127 dec->msg->body.decode.dt_wa_chroma_top_offset = dec->msg->body.decode.dt_pitch / 2; in ruvd_end_frame()
1131 dec->msg->body.decode.codec.h264 = in ruvd_end_frame()
1132 get_h264_msg(dec, (struct pipe_h264_picture_desc *)picture); in ruvd_end_frame()
1136 dec->msg->body.decode.codec.h265 = in ruvd_end_frame()
1137 get_h265_msg(dec, target, (struct pipe_h265_picture_desc *)picture); in ruvd_end_frame()
1138 if (dec->ctx.res == NULL) { in ruvd_end_frame()
1140 if (dec->base.profile == PIPE_VIDEO_PROFILE_HEVC_MAIN_10) in ruvd_end_frame()
1141 ctx_size = calc_ctx_size_h265_main10(dec, (struct pipe_h265_picture_desc *)picture); in ruvd_end_frame()
1143 ctx_size = calc_ctx_size_h265_main(dec); in ruvd_end_frame()
1144 if (!si_vid_create_buffer(dec->screen, &dec->ctx, ctx_size, PIPE_USAGE_DEFAULT)) { in ruvd_end_frame()
1147 si_vid_clear_buffer(decoder->context, &dec->ctx); in ruvd_end_frame()
1150 if (dec->ctx.res) in ruvd_end_frame()
1151 dec->msg->body.decode.dpb_reserved = dec->ctx.res->buf->size; in ruvd_end_frame()
1155 dec->msg->body.decode.codec.vc1 = get_vc1_msg((struct pipe_vc1_picture_desc *)picture); in ruvd_end_frame()
1159 dec->msg->body.decode.codec.mpeg2 = in ruvd_end_frame()
1160 get_mpeg2_msg(dec, (struct pipe_mpeg12_picture_desc *)picture); in ruvd_end_frame()
1164 dec->msg->body.decode.codec.mpeg4 = in ruvd_end_frame()
1165 get_mpeg4_msg(dec, (struct pipe_mpeg4_picture_desc *)picture); in ruvd_end_frame()
1176 dec->msg->body.decode.db_surf_tile_config = dec->msg->body.decode.dt_surf_tile_config; in ruvd_end_frame()
1177 dec->msg->body.decode.extension_support = 0x1; in ruvd_end_frame()
1180 dec->fb[0] = dec->fb_size; in ruvd_end_frame()
1182 send_msg_buf(dec); in ruvd_end_frame()
1184 if (dec->dpb.res) in ruvd_end_frame()
1185 send_cmd(dec, RUVD_CMD_DPB_BUFFER, dec->dpb.res->buf, 0, RADEON_USAGE_READWRITE, in ruvd_end_frame()
1188 if (dec->ctx.res) in ruvd_end_frame()
1189 send_cmd(dec, RUVD_CMD_CONTEXT_BUFFER, dec->ctx.res->buf, 0, RADEON_USAGE_READWRITE, in ruvd_end_frame()
1191 send_cmd(dec, RUVD_CMD_BITSTREAM_BUFFER, bs_buf->res->buf, 0, RADEON_USAGE_READ, in ruvd_end_frame()
1193 send_cmd(dec, RUVD_CMD_DECODING_TARGET_BUFFER, dt, 0, RADEON_USAGE_WRITE, RADEON_DOMAIN_VRAM); in ruvd_end_frame()
1194 send_cmd(dec, RUVD_CMD_FEEDBACK_BUFFER, msg_fb_it_buf->res->buf, FB_BUFFER_OFFSET, in ruvd_end_frame()
1196 if (have_it(dec)) in ruvd_end_frame()
1197 send_cmd(dec, RUVD_CMD_ITSCALING_TABLE_BUFFER, msg_fb_it_buf->res->buf, in ruvd_end_frame()
1198 FB_BUFFER_OFFSET + dec->fb_size, RADEON_USAGE_READ, RADEON_DOMAIN_GTT); in ruvd_end_frame()
1199 set_reg(dec, dec->reg.cntl, 1); in ruvd_end_frame()
1201 flush(dec, PIPE_FLUSH_ASYNC); in ruvd_end_frame()
1202 next_buffer(dec); in ruvd_end_frame()
1224 struct ruvd_decoder *dec; in si_common_uvd_create_decoder() local
1246 dec = CALLOC_STRUCT(ruvd_decoder); in si_common_uvd_create_decoder()
1248 if (!dec) in si_common_uvd_create_decoder()
1252 dec->use_legacy = true; in si_common_uvd_create_decoder()
1254 dec->base = *templ; in si_common_uvd_create_decoder()
1255 dec->base.context = context; in si_common_uvd_create_decoder()
1256 dec->base.width = width; in si_common_uvd_create_decoder()
1257 dec->base.height = height; in si_common_uvd_create_decoder()
1259 dec->base.destroy = ruvd_destroy; in si_common_uvd_create_decoder()
1260 dec->base.begin_frame = ruvd_begin_frame; in si_common_uvd_create_decoder()
1261 dec->base.decode_macroblock = ruvd_decode_macroblock; in si_common_uvd_create_decoder()
1262 dec->base.decode_bitstream = ruvd_decode_bitstream; in si_common_uvd_create_decoder()
1263 dec->base.end_frame = ruvd_end_frame; in si_common_uvd_create_decoder()
1264 dec->base.flush = ruvd_flush; in si_common_uvd_create_decoder()
1266 dec->stream_type = profile2stream_type(dec, sctx->family); in si_common_uvd_create_decoder()
1267 dec->set_dtb = set_dtb; in si_common_uvd_create_decoder()
1268 dec->stream_handle = si_vid_alloc_stream_handle(); in si_common_uvd_create_decoder()
1269 dec->screen = context->screen; in si_common_uvd_create_decoder()
1270 dec->ws = ws; in si_common_uvd_create_decoder()
1271 dec->cs = ws->cs_create(sctx->ctx, RING_UVD, NULL, NULL, false); in si_common_uvd_create_decoder()
1272 if (!dec->cs) { in si_common_uvd_create_decoder()
1278 dec->render_pic_list[i] = NULL; in si_common_uvd_create_decoder()
1279 dec->fb_size = (sctx->family == CHIP_TONGA) ? FB_BUFFER_SIZE_TONGA : FB_BUFFER_SIZE; in si_common_uvd_create_decoder()
1282 unsigned msg_fb_it_size = FB_BUFFER_OFFSET + dec->fb_size; in si_common_uvd_create_decoder()
1284 if (have_it(dec)) in si_common_uvd_create_decoder()
1286 if (!si_vid_create_buffer(dec->screen, &dec->msg_fb_it_buffers[i], msg_fb_it_size, in si_common_uvd_create_decoder()
1292 if (!si_vid_create_buffer(dec->screen, &dec->bs_buffers[i], bs_buf_size, in si_common_uvd_create_decoder()
1298 si_vid_clear_buffer(context, &dec->msg_fb_it_buffers[i]); in si_common_uvd_create_decoder()
1299 si_vid_clear_buffer(context, &dec->bs_buffers[i]); in si_common_uvd_create_decoder()
1302 dpb_size = calc_dpb_size(dec); in si_common_uvd_create_decoder()
1304 if (!si_vid_create_buffer(dec->screen, &dec->dpb, dpb_size, PIPE_USAGE_DEFAULT)) { in si_common_uvd_create_decoder()
1308 si_vid_clear_buffer(context, &dec->dpb); in si_common_uvd_create_decoder()
1311 if (dec->stream_type == RUVD_CODEC_H264_PERF && sctx->family >= CHIP_POLARIS10) { in si_common_uvd_create_decoder()
1312 unsigned ctx_size = calc_ctx_size_h264_perf(dec); in si_common_uvd_create_decoder()
1313 if (!si_vid_create_buffer(dec->screen, &dec->ctx, ctx_size, PIPE_USAGE_DEFAULT)) { in si_common_uvd_create_decoder()
1317 si_vid_clear_buffer(context, &dec->ctx); in si_common_uvd_create_decoder()
1321 if (!si_vid_create_buffer(dec->screen, &dec->sessionctx, UVD_SESSION_CONTEXT_SIZE, in si_common_uvd_create_decoder()
1326 si_vid_clear_buffer(context, &dec->sessionctx); in si_common_uvd_create_decoder()
1330 dec->reg.data0 = RUVD_GPCOM_VCPU_DATA0_SOC15; in si_common_uvd_create_decoder()
1331 dec->reg.data1 = RUVD_GPCOM_VCPU_DATA1_SOC15; in si_common_uvd_create_decoder()
1332 dec->reg.cmd = RUVD_GPCOM_VCPU_CMD_SOC15; in si_common_uvd_create_decoder()
1333 dec->reg.cntl = RUVD_ENGINE_CNTL_SOC15; in si_common_uvd_create_decoder()
1335 dec->reg.data0 = RUVD_GPCOM_VCPU_DATA0; in si_common_uvd_create_decoder()
1336 dec->reg.data1 = RUVD_GPCOM_VCPU_DATA1; in si_common_uvd_create_decoder()
1337 dec->reg.cmd = RUVD_GPCOM_VCPU_CMD; in si_common_uvd_create_decoder()
1338 dec->reg.cntl = RUVD_ENGINE_CNTL; in si_common_uvd_create_decoder()
1341 map_msg_fb_it_buf(dec); in si_common_uvd_create_decoder()
1342 dec->msg->size = sizeof(*dec->msg); in si_common_uvd_create_decoder()
1343 dec->msg->msg_type = RUVD_MSG_CREATE; in si_common_uvd_create_decoder()
1344 dec->msg->stream_handle = dec->stream_handle; in si_common_uvd_create_decoder()
1345 dec->msg->body.create.stream_type = dec->stream_type; in si_common_uvd_create_decoder()
1346 dec->msg->body.create.width_in_samples = dec->base.width; in si_common_uvd_create_decoder()
1347 dec->msg->body.create.height_in_samples = dec->base.height; in si_common_uvd_create_decoder()
1348 dec->msg->body.create.dpb_size = dpb_size; in si_common_uvd_create_decoder()
1349 send_msg_buf(dec); in si_common_uvd_create_decoder()
1350 r = flush(dec, 0); in si_common_uvd_create_decoder()
1354 next_buffer(dec); in si_common_uvd_create_decoder()
1356 return &dec->base; in si_common_uvd_create_decoder()
1359 if (dec->cs) in si_common_uvd_create_decoder()
1360 dec->ws->cs_destroy(dec->cs); in si_common_uvd_create_decoder()
1363 si_vid_destroy_buffer(&dec->msg_fb_it_buffers[i]); in si_common_uvd_create_decoder()
1364 si_vid_destroy_buffer(&dec->bs_buffers[i]); in si_common_uvd_create_decoder()
1367 si_vid_destroy_buffer(&dec->dpb); in si_common_uvd_create_decoder()
1368 si_vid_destroy_buffer(&dec->ctx); in si_common_uvd_create_decoder()
1369 si_vid_destroy_buffer(&dec->sessionctx); in si_common_uvd_create_decoder()
1371 FREE(dec); in si_common_uvd_create_decoder()