mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-08 22:45:43 +00:00
extra/mesa to 17.3.3-2
This commit is contained in:
parent
b513566439
commit
a7423083fc
5 changed files with 220 additions and 4 deletions
|
@ -0,0 +1,95 @@
|
|||
From: Boyuan Zhang <boyuan.zhang at amd.com>
|
||||
|
||||
Create a list in decoder to store all render picture buffer pointers that
|
||||
currently being used in reference picture lists.
|
||||
|
||||
During get message buffer call, check each pointer in render_pic_list[]
|
||||
within given pic->ref[] list, remove pointer that no longer being used by
|
||||
pic->ref[]. Then add current render surface pointer to the render_pic_list[]
|
||||
and assign the associated index to result.curr_idx.
|
||||
|
||||
As a result, result.curr_idx will have the correct index to represent the
|
||||
current render picture, instead of the previous increamenting values.
|
||||
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104745
|
||||
|
||||
Signed-off-by: Boyuan Zhang <boyuan.zhang at amd.com>
|
||||
Reviewed-by: Christian König <christian.koenig at amd.com>
|
||||
Cc: mesa-stable at lists.freedesktop.org
|
||||
(cherry picked from commit f2bfd1cbb7e72945ca192845a1ad28426c7aea89)
|
||||
---
|
||||
src/gallium/drivers/radeon/radeon_vcn_dec.c | 28 ++++++++++++++++++++++++----
|
||||
1 file changed, 24 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/gallium/drivers/radeon/radeon_vcn_dec.c b/src/gallium/drivers/radeon/radeon_vcn_dec.c
|
||||
index 2ece4a3..8010010 100644
|
||||
--- a/src/gallium/drivers/radeon/radeon_vcn_dec.c
|
||||
+++ b/src/gallium/drivers/radeon/radeon_vcn_dec.c
|
||||
@@ -78,6 +78,7 @@ struct radeon_decoder {
|
||||
|
||||
unsigned bs_size;
|
||||
unsigned cur_buffer;
|
||||
+ void *render_pic_list[16];
|
||||
};
|
||||
|
||||
static rvcn_dec_message_avc_t get_h264_msg(struct radeon_decoder *dec,
|
||||
@@ -186,7 +187,7 @@ static rvcn_dec_message_hevc_t get_h265_msg(struct radeon_decoder *dec,
|
||||
struct pipe_h265_picture_desc *pic)
|
||||
{
|
||||
rvcn_dec_message_hevc_t result;
|
||||
- unsigned i;
|
||||
+ unsigned i, j;
|
||||
|
||||
memset(&result, 0, sizeof(result));
|
||||
result.sps_info_flags = 0;
|
||||
@@ -273,11 +274,28 @@ static rvcn_dec_message_hevc_t get_h265_msg(struct radeon_decoder *dec,
|
||||
result.row_height_minus1[i] = pic->pps->row_height_minus1[i];
|
||||
|
||||
result.num_delta_pocs_ref_rps_idx = pic->NumDeltaPocsOfRefRpsIdx;
|
||||
- result.curr_idx = pic->CurrPicOrderCntVal;
|
||||
result.curr_poc = pic->CurrPicOrderCntVal;
|
||||
|
||||
+ for (i = 0 ; i < 16 ; i++) {
|
||||
+ for (j = 0; (pic->ref[j] != NULL) && (j < 16) ; j++) {
|
||||
+ if (dec->render_pic_list[i] == pic->ref[j])
|
||||
+ break;
|
||||
+ if (j == 15)
|
||||
+ dec->render_pic_list[i] = NULL;
|
||||
+ else if (pic->ref[j+1] == NULL)
|
||||
+ dec->render_pic_list[i] = NULL;
|
||||
+ }
|
||||
+ }
|
||||
+ for (i = 0 ; i < 16 ; i++) {
|
||||
+ if (dec->render_pic_list[i] == NULL) {
|
||||
+ dec->render_pic_list[i] = target;
|
||||
+ result.curr_idx = i;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
vl_video_buffer_set_associated_data(target, &dec->base,
|
||||
- (void *)(uintptr_t)pic->CurrPicOrderCntVal,
|
||||
+ (void *)(uintptr_t)result.curr_idx,
|
||||
&radeon_dec_destroy_associated_data);
|
||||
|
||||
for (i = 0; i < 16; ++i) {
|
||||
@@ -320,7 +338,7 @@ static rvcn_dec_message_hevc_t get_h265_msg(struct radeon_decoder *dec,
|
||||
memcpy(dec->it + 864, pic->pps->sps->ScalingList32x32, 2 * 64);
|
||||
|
||||
for (i = 0 ; i < 2 ; i++) {
|
||||
- for (int j = 0 ; j < 15 ; j++)
|
||||
+ for (j = 0 ; j < 15 ; j++)
|
||||
result.direct_reflist[i][j] = pic->RefPicList[i][j];
|
||||
}
|
||||
|
||||
@@ -1236,6 +1254,8 @@ struct pipe_video_codec *radeon_create_decoder(struct pipe_context *context,
|
||||
goto error;
|
||||
}
|
||||
|
||||
+ for (i = 0; i < 16; i++)
|
||||
+ dec->render_pic_list[i] = NULL;
|
||||
bs_buf_size = width * height * (512 / (16 * 16));
|
||||
for (i = 0; i < NUM_BUFFERS; ++i) {
|
||||
unsigned msg_fb_it_size = FB_BUFFER_OFFSET + FB_BUFFER_SIZE;
|
||||
--
|
||||
2.7.4
|
|
@ -0,0 +1,96 @@
|
|||
From: Boyuan Zhang <boyuan.zhang at amd.com>
|
||||
|
||||
Create a list in decoder to store all render picture buffer pointers that
|
||||
currently being used in reference picture lists.
|
||||
|
||||
During get message buffer call, check each pointer in render_pic_list[]
|
||||
within given pic->ref[] list, remove pointer that no longer being used by
|
||||
pic->ref[]. Then add current render surface pointer to the render_pic_list[]
|
||||
and assign the associated index to result.curr_idx.
|
||||
|
||||
As a result, result.curr_idx will have the correct index to represent the
|
||||
current render picture, instead of the previous increamenting values.
|
||||
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104745
|
||||
|
||||
Signed-off-by: Boyuan Zhang <boyuan.zhang at amd.com>
|
||||
Reviewed-by: Christian König <christian.koenig at amd.com>
|
||||
Cc: mesa-stable at lists.freedesktop.org
|
||||
(cherry picked from commit 2ec48039b8aa1f6a5e16f3f12483b88981d0f5d3)
|
||||
---
|
||||
src/gallium/drivers/radeon/radeon_uvd.c | 29 +++++++++++++++++++++++++----
|
||||
1 file changed, 25 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/gallium/drivers/radeon/radeon_uvd.c b/src/gallium/drivers/radeon/radeon_uvd.c
|
||||
index 032ed7c..87e7858 100644
|
||||
--- a/src/gallium/drivers/radeon/radeon_uvd.c
|
||||
+++ b/src/gallium/drivers/radeon/radeon_uvd.c
|
||||
@@ -97,6 +97,8 @@ struct ruvd_decoder {
|
||||
unsigned cmd;
|
||||
unsigned cntl;
|
||||
} reg;
|
||||
+
|
||||
+ void *render_pic_list[16];
|
||||
};
|
||||
|
||||
/* flush IB to the hardware */
|
||||
@@ -596,7 +598,7 @@ static struct ruvd_h265 get_h265_msg(struct ruvd_decoder *dec, struct pipe_video
|
||||
struct pipe_h265_picture_desc *pic)
|
||||
{
|
||||
struct ruvd_h265 result;
|
||||
- unsigned i;
|
||||
+ unsigned i, j;
|
||||
|
||||
memset(&result, 0, sizeof(result));
|
||||
|
||||
@@ -676,11 +678,28 @@ static struct ruvd_h265 get_h265_msg(struct ruvd_decoder *dec, struct pipe_video
|
||||
result.row_height_minus1[i] = pic->pps->row_height_minus1[i];
|
||||
|
||||
result.num_delta_pocs_ref_rps_idx = pic->NumDeltaPocsOfRefRpsIdx;
|
||||
- result.curr_idx = pic->CurrPicOrderCntVal;
|
||||
result.curr_poc = pic->CurrPicOrderCntVal;
|
||||
|
||||
+ for (i = 0 ; i < 16 ; i++) {
|
||||
+ for (j = 0; (pic->ref[j] != NULL) && (j < 16) ; j++) {
|
||||
+ if (dec->render_pic_list[i] == pic->ref[j])
|
||||
+ break;
|
||||
+ if (j == 15)
|
||||
+ dec->render_pic_list[i] = NULL;
|
||||
+ else if (pic->ref[j+1] == NULL)
|
||||
+ dec->render_pic_list[i] = NULL;
|
||||
+ }
|
||||
+ }
|
||||
+ for (i = 0 ; i < 16 ; i++) {
|
||||
+ if (dec->render_pic_list[i] == NULL) {
|
||||
+ dec->render_pic_list[i] = target;
|
||||
+ result.curr_idx = i;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
vl_video_buffer_set_associated_data(target, &dec->base,
|
||||
- (void *)(uintptr_t)pic->CurrPicOrderCntVal,
|
||||
+ (void *)(uintptr_t)result.curr_idx,
|
||||
&ruvd_destroy_associated_data);
|
||||
|
||||
for (i = 0; i < 16; ++i) {
|
||||
@@ -723,7 +742,7 @@ static struct ruvd_h265 get_h265_msg(struct ruvd_decoder *dec, struct pipe_video
|
||||
memcpy(dec->it + 864, pic->pps->sps->ScalingList32x32, 2 * 64);
|
||||
|
||||
for (i = 0 ; i < 2 ; i++) {
|
||||
- for (int j = 0 ; j < 15 ; j++)
|
||||
+ for (j = 0 ; j < 15 ; j++)
|
||||
result.direct_reflist[i][j] = pic->RefPicList[i][j];
|
||||
}
|
||||
|
||||
@@ -1407,6 +1426,8 @@ struct pipe_video_codec *si_common_uvd_create_decoder(struct pipe_context *conte
|
||||
goto error;
|
||||
}
|
||||
|
||||
+ for (i = 0; i < 16; i++)
|
||||
+ dec->render_pic_list[i] = NULL;
|
||||
dec->fb_size = (info.family == CHIP_TONGA) ? FB_BUFFER_SIZE_TONGA :
|
||||
FB_BUFFER_SIZE;
|
||||
bs_buf_size = width * height * (512 / (16 * 16));
|
||||
--
|
||||
2.7.4
|
|
@ -8,7 +8,7 @@
|
|||
pkgbase=mesa
|
||||
pkgname=('mesa' 'libva-mesa-driver')
|
||||
pkgver=17.3.3
|
||||
pkgrel=1
|
||||
pkgrel=2
|
||||
arch=('x86_64')
|
||||
makedepends=('python2-mako' 'libxml2' 'libx11' 'glproto' 'libdrm' 'dri2proto' 'dri3proto' 'presentproto'
|
||||
'libxshmfence' 'libxxf86vm' 'libxdamage' 'libvdpau' 'libva' 'wayland' 'wayland-protocols'
|
||||
|
@ -17,11 +17,17 @@ url="https://www.mesa3d.org/"
|
|||
license=('custom')
|
||||
source=(https://mesa.freedesktop.org/archive/mesa-${pkgver}.tar.xz{,.sig}
|
||||
LICENSE
|
||||
0002-glvnd-fix-gl-dot-pc.patch)
|
||||
0001-glvnd-fix-gl-dot-pc.patch
|
||||
0001-radeon-vcn-add-and-manage-render-picture-list.patch
|
||||
0002-radeon-uvd-add-and-manage-render-picture-list.patch
|
||||
winsys-radeon-Compute-is_displayable-in-surf_drm_to_winsys.patch)
|
||||
sha256sums=('41bac5de0ef6adc1f41a1ec0f80c19e361298ce02fa81b5f9ba4fdca33a9379b'
|
||||
'SKIP'
|
||||
'7fdc119cf53c8ca65396ea73f6d10af641ba41ea1dd2bd44a824726e01c8b3f2'
|
||||
'64a77944a28026b066c1682c7258d02289d257b24b6f173a9f7580c48beed966')
|
||||
'64a77944a28026b066c1682c7258d02289d257b24b6f173a9f7580c48beed966'
|
||||
'96ed41a77b397577c27bee4ecb1faad82aa3eeeb09252ce2256ff9fff6545bd4'
|
||||
'9bd66588f8f0d21ea3207b7c75c491a273db16d12f9fde0c66f69bdf6f66dff1'
|
||||
'a4f56b8812c35bb36600255dab0de8030402860165cadc4f3118a4c12333120f')
|
||||
validpgpkeys=('8703B6700E7EE06D7A39B8D6EDAE37B02CEB490D') # Emil Velikov <emil.l.velikov@gmail.com>
|
||||
validpgpkeys+=('946D09B5E4C9845E63075FF1D961C596A7203456') # Andres Gomez <tanty@igalia.com>
|
||||
validpgpkeys+=('E3E8F480C52ADD73B278EE78E1ECBE07D7D70895') # Juan Antonio Suárez Romero (Igalia, S.L.) <jasuarez@igalia.com>"
|
||||
|
@ -31,8 +37,13 @@ prepare() {
|
|||
|
||||
# glvnd support patches - from Fedora
|
||||
# non-upstreamed ones
|
||||
patch -Np1 -i ../0002-glvnd-fix-gl-dot-pc.patch
|
||||
patch -Np1 -i ../0001-glvnd-fix-gl-dot-pc.patch
|
||||
|
||||
# fix FS#57199 - [mesa-vdpau] [linux-firmware] AMD polaris firmware update breaks VDPAU without Mesa patch
|
||||
patch -Np1 -i ../0001-radeon-vcn-add-and-manage-render-picture-list.patch
|
||||
patch -Np1 -i ../0002-radeon-uvd-add-and-manage-render-picture-list.patch
|
||||
# fix FS#56881 - [xorg-server-xwayland] cannot run firefox/chromium ?
|
||||
patch -Np1 -i ../winsys-radeon-Compute-is_displayable-in-surf_drm_to_winsys.patch
|
||||
autoreconf -fiv
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_surface.c b/src/gallium/winsys/radeon/drm/radeon_drm_surface.c
|
||||
index 5ee01ff90f9..77fb7757c20 100644
|
||||
--- a/src/gallium/winsys/radeon/drm/radeon_drm_surface.c
|
||||
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_surface.c
|
||||
@@ -215,6 +215,9 @@ static void surf_drm_to_winsys(struct radeon_drm_winsys *ws,
|
||||
}
|
||||
|
||||
set_micro_tile_mode(surf_ws, &ws->info);
|
||||
+ surf_ws->is_displayable = surf_ws->is_linear ||
|
||||
+ surf_ws->micro_tile_mode == RADEON_MICRO_MODE_DISPLAY ||
|
||||
+ surf_ws->micro_tile_mode == RADEON_MICRO_MODE_ROTATED;
|
||||
}
|
||||
|
||||
static int radeon_winsys_surface_init(struct radeon_winsys *rws,
|
Loading…
Reference in a new issue