diff options
author | Leo Liu <[email protected]> | 2015-06-15 14:11:57 -0400 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2015-08-14 15:02:30 +0200 |
commit | fa80c1fe20f1fc33864f04fd9cf49f8bddfa4448 (patch) | |
tree | 7e76ada53c684f1708593e450e8755782ec1b8c6 /src/gallium/drivers/radeon/radeon_vce_50.c | |
parent | 468fcdcb4fafeba466bb1006ece1f16cc38805c7 (diff) |
radeon/vce: add dual pipe support for VI
Signed-off-by: Leo Liu <[email protected]>
Reviewed-by: Christian König <[email protected]>
Diffstat (limited to 'src/gallium/drivers/radeon/radeon_vce_50.c')
-rw-r--r-- | src/gallium/drivers/radeon/radeon_vce_50.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/gallium/drivers/radeon/radeon_vce_50.c b/src/gallium/drivers/radeon/radeon_vce_50.c index 2cdddf2e5b7..80a69b5442b 100644 --- a/src/gallium/drivers/radeon/radeon_vce_50.c +++ b/src/gallium/drivers/radeon/radeon_vce_50.c @@ -106,6 +106,19 @@ static void encode(struct rvce_encoder *enc) RVCE_CS(enc->bs_size); // videoBitstreamRingSize RVCE_END(); + if (enc->dual_pipe) { + unsigned aux_offset = enc->cpb.res->buf->size - + RVCE_MAX_AUX_BUFFER_NUM * RVCE_MAX_BITSTREAM_OUTPUT_ROW_SIZE * 2; + RVCE_BEGIN(0x05000002); // auxiliary buffer + for (i = 0; i < 8; ++i) { + RVCE_CS(aux_offset); + aux_offset += RVCE_MAX_BITSTREAM_OUTPUT_ROW_SIZE; + } + for (i = 0; i < 8; ++i) + RVCE_CS(RVCE_MAX_BITSTREAM_OUTPUT_ROW_SIZE); + RVCE_END(); + } + RVCE_BEGIN(0x03000001); // encode RVCE_CS(enc->pic.frame_num ? 0x0 : 0x11); // insertHeaders RVCE_CS(0x00000000); // pictureStructure @@ -121,7 +134,10 @@ 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(0x00010000); // encInputPic(Addr|Array)Mode,encDisable(TwoPipeMode|MBOffloading) + if (enc->dual_pipe) + RVCE_CS(0x00000000); // encInputPic(Addr|Array)Mode,encDisable(TwoPipeMode|MBOffloading) + else + RVCE_CS(0x00010000); // 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 |