aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeo Liu <[email protected]>2018-03-19 11:16:46 -0400
committerLeo Liu <[email protected]>2018-03-21 11:24:35 -0400
commitc4de2f0880cfa49bd6fd3138564ee64ef4e637a1 (patch)
tree0991ac44584221f9db4185b225b841cee9bdba3f
parent1346a36162a87c66a92f77306d251abb2a260fa2 (diff)
radeon/vce: move feedback command inside of destroy function
On the CI family, firmware requires the destory command have to be the last command in the IB, moving feedback command after destroy is causing issues on CI cards, so we have to keep the previous logic that moves destroy back to the last command. But as the original issue fixed previously, with the newer family like Vega10, feedback command have to be included inside of the task info command along with destroy command. Fixes: 6d74cb25("radeon/vce: move destroy command before feedback command") Signed-off-by: Leo Liu <[email protected]> Acked-by: Christian König <[email protected]> Cc: [email protected]
-rw-r--r--src/gallium/drivers/radeon/radeon_vce.c1
-rw-r--r--src/gallium/drivers/radeon/radeon_vce_40_2_2.c2
-rw-r--r--src/gallium/drivers/radeon/radeon_vce_52.c18
3 files changed, 12 insertions, 9 deletions
diff --git a/src/gallium/drivers/radeon/radeon_vce.c b/src/gallium/drivers/radeon/radeon_vce.c
index 427bf01ed8a..c84103e0acc 100644
--- a/src/gallium/drivers/radeon/radeon_vce.c
+++ b/src/gallium/drivers/radeon/radeon_vce.c
@@ -247,7 +247,6 @@ static void rvce_destroy(struct pipe_video_codec *encoder)
enc->fb = &fb;
enc->session(enc);
enc->destroy(enc);
- enc->feedback(enc);
flush(enc);
si_vid_destroy_buffer(&fb);
}
diff --git a/src/gallium/drivers/radeon/radeon_vce_40_2_2.c b/src/gallium/drivers/radeon/radeon_vce_40_2_2.c
index f1db47d4bd1..04e9d7f5e19 100644
--- a/src/gallium/drivers/radeon/radeon_vce_40_2_2.c
+++ b/src/gallium/drivers/radeon/radeon_vce_40_2_2.c
@@ -421,6 +421,8 @@ static void destroy(struct rvce_encoder *enc)
{
enc->task_info(enc, 0x00000001, 0, 0, 0);
+ feedback(enc);
+
RVCE_BEGIN(0x02000001); // destroy
RVCE_END();
}
diff --git a/src/gallium/drivers/radeon/radeon_vce_52.c b/src/gallium/drivers/radeon/radeon_vce_52.c
index a941c476f65..421539c4bdc 100644
--- a/src/gallium/drivers/radeon/radeon_vce_52.c
+++ b/src/gallium/drivers/radeon/radeon_vce_52.c
@@ -458,14 +458,6 @@ static void config_extension(struct rvce_encoder *enc)
RVCE_END();
}
-static void destroy(struct rvce_encoder *enc)
-{
- enc->task_info(enc, 0x00000001, 0, 0, 0);
-
- RVCE_BEGIN(0x02000001); // destroy
- RVCE_END();
-}
-
static void feedback(struct rvce_encoder *enc)
{
RVCE_BEGIN(0x05000005); // feedback buffer
@@ -474,6 +466,16 @@ static void feedback(struct rvce_encoder *enc)
RVCE_END();
}
+static void destroy(struct rvce_encoder *enc)
+{
+ enc->task_info(enc, 0x00000001, 0, 0, 0);
+
+ feedback(enc);
+
+ RVCE_BEGIN(0x02000001); // destroy
+ RVCE_END();
+}
+
static void motion_estimation(struct rvce_encoder *enc)
{
RVCE_BEGIN(0x04000007); // motion estimation