aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amdfalconx86/recipes-graphics/mesa/mesa/0018-radeon-vce-adapt-new-firmware-interface-changes.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amdfalconx86/recipes-graphics/mesa/mesa/0018-radeon-vce-adapt-new-firmware-interface-changes.patch')
-rw-r--r--meta-amdfalconx86/recipes-graphics/mesa/mesa/0018-radeon-vce-adapt-new-firmware-interface-changes.patch89
1 files changed, 89 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-graphics/mesa/mesa/0018-radeon-vce-adapt-new-firmware-interface-changes.patch b/meta-amdfalconx86/recipes-graphics/mesa/mesa/0018-radeon-vce-adapt-new-firmware-interface-changes.patch
new file mode 100644
index 00000000..915d6cab
--- /dev/null
+++ b/meta-amdfalconx86/recipes-graphics/mesa/mesa/0018-radeon-vce-adapt-new-firmware-interface-changes.patch
@@ -0,0 +1,89 @@
+From b0624db0423f37e45038aa163f9699a4453b8945 Mon Sep 17 00:00:00 2001
+From: Leo Liu <leo.liu@amd.com>
+Date: Wed, 11 Feb 2015 15:22:21 -0500
+Subject: [PATCH 18/29] radeon/vce: adapt new firmware interface changes
+
+v2: make this also compatible with original released firmware
+v3: rebase by Marek
+
+Signed-off-by: Leo Liu <leo.liu@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Arindam Nath <arindam.nath@amd.com>
+---
+ src/gallium/drivers/radeon/radeon_vce.c | 1 +
+ src/gallium/drivers/radeon/radeon_vce.h | 1 +
+ src/gallium/drivers/radeon/radeon_vce_40_2_2.c | 13 +++++++++++--
+ 3 files changed, 13 insertions(+), 2 deletions(-)
+
+diff --git a/src/gallium/drivers/radeon/radeon_vce.c b/src/gallium/drivers/radeon/radeon_vce.c
+index b8b35b3..d5ae26d 100644
+--- a/src/gallium/drivers/radeon/radeon_vce.c
++++ b/src/gallium/drivers/radeon/radeon_vce.c
+@@ -353,6 +353,7 @@ struct pipe_video_codec *rvce_create_encoder(struct pipe_context *context,
+ if (!enc)
+ return NULL;
+
++ enc->fw_ver = rscreen->info.vce_fw_version;
+ if (rscreen->info.drm_major == 3)
+ enc->use_vm = true;
+ if ((rscreen->info.drm_major > 2) || (rscreen->info.drm_minor >= 42))
+diff --git a/src/gallium/drivers/radeon/radeon_vce.h b/src/gallium/drivers/radeon/radeon_vce.h
+index 67ba333..7d37320 100644
+--- a/src/gallium/drivers/radeon/radeon_vce.h
++++ b/src/gallium/drivers/radeon/radeon_vce.h
+@@ -100,6 +100,7 @@ struct rvce_encoder {
+ struct rvid_buffer cpb;
+ struct pipe_h264_enc_picture_desc pic;
+ bool use_vm;
++ unsigned fw_ver;
+ bool use_vui;
+ };
+
+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 1e7f278..f1f4cce 100644
+--- a/src/gallium/drivers/radeon/radeon_vce_40_2_2.c
++++ b/src/gallium/drivers/radeon/radeon_vce_40_2_2.c
+@@ -44,6 +44,8 @@
+ #include "radeon_video.h"
+ #include "radeon_vce.h"
+
++#define FW_40_2_2 ((40 << 24) | (2 << 16) | (2 << 8))
++
+ static const unsigned profiles[7] = { 66, 77, 88, 100, 110, 122, 244 };
+
+ static struct rvce_cpb_slot *current_slot(struct rvce_encoder *enc)
+@@ -145,6 +147,10 @@ static void rate_control(struct rvce_encoder *enc)
+ RVCE_CS(0x00000000); // encBPicsDeltaQP
+ RVCE_CS(0x00000000); // encReferenceBPicsDeltaQP
+ RVCE_CS(0x00000000); // encRateControlReInitDisable
++ if (enc->fw_ver > FW_40_2_2) {
++ RVCE_CS(0x00000000); // encLCVBRInitQPFlag
++ RVCE_CS(0x00000000); // encLCVBRSATDBasedNonlinearBitBudgetFlag
++ }
+ RVCE_END();
+ }
+
+@@ -314,7 +320,10 @@ static void encode(struct rvce_encoder *enc)
+ RVCE_END();
+
+ RVCE_BEGIN(0x03000001); // encode
+- RVCE_CS(0x00000000); // insertHeaders
++ if ((enc->fw_ver > FW_40_2_2) && (!enc->pic.frame_num))
++ RVCE_CS(0x00000011); // insertHeaders
++ else
++ RVCE_CS(0x00000000); // insertHeaders
+ RVCE_CS(0x00000000); // pictureStructure
+ RVCE_CS(enc->bs_size); // allowedMaxBitstreamSize
+ RVCE_CS(0x00000000); // forceRefreshMap
+@@ -328,7 +337,7 @@ static void encode(struct rvce_encoder *enc)
+ RVCE_CS(align(enc->luma->npix_y, 16)); // encInputFrameYPitch
+ RVCE_CS(enc->luma->level[0].pitch_bytes); // encInputPicLumaPitch
+ RVCE_CS(enc->chroma->level[0].pitch_bytes); // encInputPicChromaPitch
+- RVCE_CS(0x00000000); // encInputPic(Addr|Array)Mode
++ RVCE_CS(0x00000000); // encInputPic(Addr|Array)Mode,encDisable(TwoPipeMode|MBOffloading)
+ RVCE_CS(0x00000000); // encInputPicTileConfig
+ RVCE_CS(enc->pic.picture_type); // encPicType
+ RVCE_CS(enc->pic.picture_type == PIPE_H264_ENC_PICTURE_TYPE_IDR); // encIdrFlag
+--
+1.9.1
+