Multi gpu use case broken when the function was global
Reviewed-by: Leo Liu <leo.liu@amd.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3731>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3731>
#define FW_52_8_3 ((52 << 24) | (8 << 16) | (3 << 8))
#define FW_53 (53 << 24)
#define FW_52_8_3 ((52 << 24) | (8 << 16) | (3 << 8))
#define FW_53 (53 << 24)
-/* version specific function for getting parameters */
-static void (*si_get_pic_param)(struct rvce_encoder *enc,
- struct pipe_h264_enc_picture_desc *pic) = NULL;
-
/**
* flush commands to the hardware
*/
/**
* flush commands to the hardware
*/
enc->pic.rate_ctrl.target_bitrate != pic->rate_ctrl.target_bitrate;
enc->pic = *pic;
enc->pic.rate_ctrl.target_bitrate != pic->rate_ctrl.target_bitrate;
enc->pic = *pic;
- si_get_pic_param(enc, pic);
+ enc->si_get_pic_param(enc, pic);
enc->get_buffer(vid_buf->resources[0], &enc->handle, &enc->luma);
enc->get_buffer(vid_buf->resources[1], NULL, &enc->chroma);
enc->get_buffer(vid_buf->resources[0], &enc->handle, &enc->luma);
enc->get_buffer(vid_buf->resources[1], NULL, &enc->chroma);
switch (sscreen->info.vce_fw_version) {
case FW_40_2_2:
si_vce_40_2_2_init(enc);
switch (sscreen->info.vce_fw_version) {
case FW_40_2_2:
si_vce_40_2_2_init(enc);
- si_get_pic_param = si_vce_40_2_2_get_param;
case FW_50_10_2:
case FW_50_17_3:
si_vce_50_init(enc);
case FW_50_10_2:
case FW_50_17_3:
si_vce_50_init(enc);
- si_get_pic_param = si_vce_50_get_param;
break;
case FW_52_0_3:
case FW_52_4_3:
case FW_52_8_3:
si_vce_52_init(enc);
break;
case FW_52_0_3:
case FW_52_4_3:
case FW_52_8_3:
si_vce_52_init(enc);
- si_get_pic_param = si_vce_52_get_param;
break;
default:
if ((sscreen->info.vce_fw_version & (0xff << 24)) >= FW_53) {
si_vce_52_init(enc);
break;
default:
if ((sscreen->info.vce_fw_version & (0xff << 24)) >= FW_53) {
si_vce_52_init(enc);
- si_get_pic_param = si_vce_52_get_param;
void (*task_info)(struct rvce_encoder *enc, uint32_t op,
uint32_t dep, uint32_t fb_idx,
uint32_t ring_idx);
void (*task_info)(struct rvce_encoder *enc, uint32_t op,
uint32_t dep, uint32_t fb_idx,
uint32_t ring_idx);
+ void (*si_get_pic_param)(struct rvce_encoder *enc,
+ struct pipe_h264_enc_picture_desc *pic);
enc->config = config;
enc->encode = encode;
enc->destroy = destroy;
enc->config = config;
enc->encode = encode;
enc->destroy = destroy;
+ enc->si_get_pic_param = si_vce_40_2_2_get_param;
/* only the two below are different */
enc->rate_control = rate_control;
enc->encode = encode;
/* only the two below are different */
enc->rate_control = rate_control;
enc->encode = encode;
+ enc->si_get_pic_param = si_vce_50_get_param;
enc->config = config;
enc->encode = encode;
enc->destroy = destroy;
enc->config = config;
enc->encode = encode;
enc->destroy = destroy;
+ enc->si_get_pic_param = si_vce_52_get_param;