mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-30 06:06:43 +00:00
Mesa: update to Mesa-ckoenig-8d56907
Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
parent
762ce9da13
commit
96133da62c
@ -24,7 +24,7 @@ case "$MESA" in
|
||||
PKG_URL="ftp://freedesktop.org/pub/mesa/9.2/MesaLib-$PKG_VERSION.tar.bz2"
|
||||
;;
|
||||
master)
|
||||
PKG_VERSION="8bbcc43"
|
||||
PKG_VERSION="ckoenig-8d56907"
|
||||
PKG_URL="$DISTRO_SRC/Mesa-$PKG_VERSION.tar.xz"
|
||||
;;
|
||||
esac
|
||||
|
@ -1,53 +0,0 @@
|
||||
From a1e9f01ef29e803b2eb10e53c342db702a2cdccf Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
|
||||
Date: Sun, 22 Sep 2013 10:41:27 +0200
|
||||
Subject: [PATCH 5/9] radeon/uvd: move alignment to winsys
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Similar to GFX and DMA.
|
||||
|
||||
Signed-off-by: Christian König <christian.koenig@amd.com>
|
||||
---
|
||||
src/gallium/drivers/radeon/radeon_uvd.c | 6 ------
|
||||
src/gallium/winsys/radeon/drm/radeon_drm_cs.c | 6 ++++++
|
||||
2 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/gallium/drivers/radeon/radeon_uvd.c b/src/gallium/drivers/radeon/radeon_uvd.c
|
||||
index fa81105..a8b17e6 100644
|
||||
--- a/src/gallium/drivers/radeon/radeon_uvd.c
|
||||
+++ b/src/gallium/drivers/radeon/radeon_uvd.c
|
||||
@@ -104,12 +104,6 @@ static unsigned alloc_stream_handle()
|
||||
/* flush IB to the hardware */
|
||||
static void flush(struct ruvd_decoder *dec)
|
||||
{
|
||||
- uint32_t *pm4 = dec->cs->buf;
|
||||
-
|
||||
- // align IB
|
||||
- while(dec->cs->cdw % 16)
|
||||
- pm4[dec->cs->cdw++] = RUVD_PKT2();
|
||||
-
|
||||
dec->ws->cs_flush(dec->cs, RADEON_FLUSH_ASYNC, 0);
|
||||
}
|
||||
|
||||
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_cs.c b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c
|
||||
index d530011..62f7704 100644
|
||||
--- a/src/gallium/winsys/radeon/drm/radeon_drm_cs.c
|
||||
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c
|
||||
@@ -494,6 +494,12 @@ static void radeon_drm_cs_flush(struct radeon_winsys_cs *rcs, unsigned flags, ui
|
||||
OUT_CS(&cs->base, 0x80000000); /* type2 nop packet */
|
||||
}
|
||||
break;
|
||||
+ case RING_UVD:
|
||||
+ while (rcs->cdw & 15)
|
||||
+ OUT_CS(&cs->base, 0x80000000); /* type2 nop packet */
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
}
|
||||
|
||||
if (rcs->cdw > RADEON_MAX_CMDBUF_DWORDS) {
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,103 +0,0 @@
|
||||
From 760a3a7e464d1506ffbeaf8719abaa26d6bd0c03 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
|
||||
Date: Sun, 22 Sep 2013 12:16:20 +0200
|
||||
Subject: [PATCH 6/9] st/vdpau: use a separate lock per decoder
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Christian König <christian.koenig@amd.com>
|
||||
---
|
||||
src/gallium/state_trackers/vdpau/decode.c | 20 +++++++++++---------
|
||||
src/gallium/state_trackers/vdpau/vdpau_private.h | 1 +
|
||||
2 files changed, 12 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/gallium/state_trackers/vdpau/decode.c b/src/gallium/state_trackers/vdpau/decode.c
|
||||
index b144b83..9a96a33 100644
|
||||
--- a/src/gallium/state_trackers/vdpau/decode.c
|
||||
+++ b/src/gallium/state_trackers/vdpau/decode.c
|
||||
@@ -130,6 +130,8 @@ vlVdpDecoderCreate(VdpDevice device,
|
||||
ret = VDP_STATUS_ERROR;
|
||||
goto error_handle;
|
||||
}
|
||||
+
|
||||
+ pipe_mutex_init(vldecoder->mutex);
|
||||
pipe_mutex_unlock(dev->mutex);
|
||||
|
||||
return VDP_STATUS_OK;
|
||||
@@ -155,9 +157,10 @@ vlVdpDecoderDestroy(VdpDecoder decoder)
|
||||
if (!vldecoder)
|
||||
return VDP_STATUS_INVALID_HANDLE;
|
||||
|
||||
- pipe_mutex_lock(vldecoder->device->mutex);
|
||||
+ pipe_mutex_lock(vldecoder->mutex);
|
||||
vldecoder->decoder->destroy(vldecoder->decoder);
|
||||
- pipe_mutex_unlock(vldecoder->device->mutex);
|
||||
+ pipe_mutex_unlock(vldecoder->mutex);
|
||||
+ pipe_mutex_destroy(vldecoder->mutex);
|
||||
|
||||
vlRemoveDataHTAB(decoder);
|
||||
FREE(vldecoder);
|
||||
@@ -478,8 +481,6 @@ vlVdpDecoderRender(VdpDecoder decoder,
|
||||
// TODO: Recreate decoder with correct chroma
|
||||
return VDP_STATUS_INVALID_CHROMA_TYPE;
|
||||
|
||||
- pipe_mutex_lock(vlsurf->device->mutex);
|
||||
-
|
||||
buffer_support[0] = screen->get_video_param(screen, dec->profile, PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
|
||||
PIPE_VIDEO_CAP_SUPPORTS_PROGRESSIVE);
|
||||
buffer_support[1] = screen->get_video_param(screen, dec->profile, PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
|
||||
@@ -490,6 +491,8 @@ vlVdpDecoderRender(VdpDecoder decoder,
|
||||
dec->profile, PIPE_VIDEO_ENTRYPOINT_BITSTREAM) ||
|
||||
!buffer_support[vlsurf->video_buffer->interlaced]) {
|
||||
|
||||
+ pipe_mutex_lock(vlsurf->device->mutex);
|
||||
+
|
||||
/* destroy the old one */
|
||||
if (vlsurf->video_buffer)
|
||||
vlsurf->video_buffer->destroy(vlsurf->video_buffer);
|
||||
@@ -511,6 +514,7 @@ vlVdpDecoderRender(VdpDecoder decoder,
|
||||
return VDP_STATUS_NO_IMPLEMENTATION;
|
||||
}
|
||||
vlVdpVideoSurfaceClear(vlsurf);
|
||||
+ pipe_mutex_unlock(vlsurf->device->mutex);
|
||||
}
|
||||
|
||||
for (i = 0; i < bitstream_buffer_count; ++i) {
|
||||
@@ -536,18 +540,16 @@ vlVdpDecoderRender(VdpDecoder decoder,
|
||||
ret = vlVdpDecoderRenderH264(&desc.h264, (VdpPictureInfoH264 *)picture_info);
|
||||
break;
|
||||
default:
|
||||
- pipe_mutex_unlock(vlsurf->device->mutex);
|
||||
return VDP_STATUS_INVALID_DECODER_PROFILE;
|
||||
}
|
||||
|
||||
- if (ret != VDP_STATUS_OK) {
|
||||
- pipe_mutex_unlock(vlsurf->device->mutex);
|
||||
+ if (ret != VDP_STATUS_OK)
|
||||
return ret;
|
||||
- }
|
||||
|
||||
+ pipe_mutex_lock(vldecoder->mutex);
|
||||
dec->begin_frame(dec, vlsurf->video_buffer, &desc.base);
|
||||
dec->decode_bitstream(dec, vlsurf->video_buffer, &desc.base, bitstream_buffer_count, buffers, sizes);
|
||||
dec->end_frame(dec, vlsurf->video_buffer, &desc.base);
|
||||
- pipe_mutex_unlock(vlsurf->device->mutex);
|
||||
+ pipe_mutex_unlock(vldecoder->mutex);
|
||||
return ret;
|
||||
}
|
||||
diff --git a/src/gallium/state_trackers/vdpau/vdpau_private.h b/src/gallium/state_trackers/vdpau/vdpau_private.h
|
||||
index 54545fe..0812767 100644
|
||||
--- a/src/gallium/state_trackers/vdpau/vdpau_private.h
|
||||
+++ b/src/gallium/state_trackers/vdpau/vdpau_private.h
|
||||
@@ -387,6 +387,7 @@ typedef struct
|
||||
typedef struct
|
||||
{
|
||||
vlVdpDevice *device;
|
||||
+ pipe_mutex mutex;
|
||||
struct pipe_video_codec *decoder;
|
||||
} vlVdpDecoder;
|
||||
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,479 +0,0 @@
|
||||
From 43fc7abc4ec27aa99fbfb0e72fa4ff6bb4663b0f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
|
||||
Date: Sun, 22 Sep 2013 13:18:30 +0200
|
||||
Subject: [PATCH 7/9] radeon/winsys: keep screen pointer in winsys
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Only create one screen for each winsys instance.
|
||||
This helps with buffer sharing and interop handling.
|
||||
|
||||
Signed-off-by: Christian König <christian.koenig@amd.com>
|
||||
---
|
||||
src/gallium/drivers/r300/r300_screen.c | 3 +++
|
||||
src/gallium/drivers/r600/r600_pipe.c | 3 +++
|
||||
src/gallium/drivers/radeonsi/radeonsi_pipe.c | 3 +++
|
||||
src/gallium/targets/dri-r300/target.c | 13 ++++++++-----
|
||||
src/gallium/targets/dri-r600/target.c | 13 ++++++++-----
|
||||
src/gallium/targets/dri-radeonsi/target.c | 13 ++++++++-----
|
||||
src/gallium/targets/vdpau-r300/target.c | 13 ++++++++-----
|
||||
src/gallium/targets/vdpau-r600/target.c | 13 ++++++++-----
|
||||
src/gallium/targets/vdpau-radeonsi/target.c | 13 ++++++++-----
|
||||
src/gallium/targets/xorg-r600/target.c | 13 ++++++++-----
|
||||
src/gallium/targets/xorg-radeonsi/target.c | 13 ++++++++-----
|
||||
src/gallium/targets/xvmc-r300/target.c | 13 ++++++++-----
|
||||
src/gallium/targets/xvmc-r600/target.c | 13 ++++++++-----
|
||||
src/gallium/winsys/radeon/drm/radeon_drm_winsys.c | 4 ----
|
||||
src/gallium/winsys/radeon/drm/radeon_winsys.h | 5 +++++
|
||||
15 files changed, 94 insertions(+), 54 deletions(-)
|
||||
|
||||
diff --git a/src/gallium/drivers/r300/r300_screen.c b/src/gallium/drivers/r300/r300_screen.c
|
||||
index 063bc09..45a815a 100644
|
||||
--- a/src/gallium/drivers/r300/r300_screen.c
|
||||
+++ b/src/gallium/drivers/r300/r300_screen.c
|
||||
@@ -540,6 +540,9 @@ static void r300_destroy_screen(struct pipe_screen* pscreen)
|
||||
struct r300_screen* r300screen = r300_screen(pscreen);
|
||||
struct radeon_winsys *rws = radeon_winsys(pscreen);
|
||||
|
||||
+ if (rws && !pipe_reference(&rws->reference, NULL))
|
||||
+ return;
|
||||
+
|
||||
pipe_mutex_destroy(r300screen->cmask_mutex);
|
||||
|
||||
if (rws)
|
||||
diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c
|
||||
index 50ff06c..4dee37b 100644
|
||||
--- a/src/gallium/drivers/r600/r600_pipe.c
|
||||
+++ b/src/gallium/drivers/r600/r600_pipe.c
|
||||
@@ -958,6 +958,9 @@ static void r600_destroy_screen(struct pipe_screen* pscreen)
|
||||
if (rscreen == NULL)
|
||||
return;
|
||||
|
||||
+ if (!pipe_reference(&rscreen->b.ws->reference, NULL))
|
||||
+ return;
|
||||
+
|
||||
pipe_mutex_destroy(rscreen->aux_context_lock);
|
||||
rscreen->aux_context->destroy(rscreen->aux_context);
|
||||
|
||||
diff --git a/src/gallium/drivers/radeonsi/radeonsi_pipe.c b/src/gallium/drivers/radeonsi/radeonsi_pipe.c
|
||||
index 138268c..8529380 100644
|
||||
--- a/src/gallium/drivers/radeonsi/radeonsi_pipe.c
|
||||
+++ b/src/gallium/drivers/radeonsi/radeonsi_pipe.c
|
||||
@@ -648,6 +648,9 @@ static void r600_destroy_screen(struct pipe_screen* pscreen)
|
||||
if (rscreen == NULL)
|
||||
return;
|
||||
|
||||
+ if (!pipe_reference(&rscreen->b.ws->reference, NULL))
|
||||
+ return;
|
||||
+
|
||||
if (rscreen->fences.bo) {
|
||||
struct r600_fence_block *entry, *tmp;
|
||||
|
||||
diff --git a/src/gallium/targets/dri-r300/target.c b/src/gallium/targets/dri-r300/target.c
|
||||
index 07b0705..d363885 100644
|
||||
--- a/src/gallium/targets/dri-r300/target.c
|
||||
+++ b/src/gallium/targets/dri-r300/target.c
|
||||
@@ -1,25 +1,28 @@
|
||||
#include "target-helpers/inline_debug_helper.h"
|
||||
#include "state_tracker/drm_driver.h"
|
||||
#include "radeon/drm/radeon_drm_public.h"
|
||||
+#include "radeon/drm/radeon_winsys.h"
|
||||
#include "r300/r300_public.h"
|
||||
|
||||
static struct pipe_screen *
|
||||
create_screen(int fd)
|
||||
{
|
||||
struct radeon_winsys *sws;
|
||||
- struct pipe_screen *screen;
|
||||
|
||||
sws = radeon_drm_winsys_create(fd);
|
||||
if (!sws)
|
||||
return NULL;
|
||||
|
||||
- screen = r300_screen_create(sws);
|
||||
- if (!screen)
|
||||
+ if (sws->screen)
|
||||
+ return sws->screen;
|
||||
+
|
||||
+ sws->screen = r300_screen_create(sws);
|
||||
+ if (!sws->screen)
|
||||
return NULL;
|
||||
|
||||
- screen = debug_screen_wrap(screen);
|
||||
+ sws->screen = debug_screen_wrap(sws->screen);
|
||||
|
||||
- return screen;
|
||||
+ return sws->screen;
|
||||
}
|
||||
|
||||
DRM_DRIVER_DESCRIPTOR("r300", "radeon", create_screen, NULL)
|
||||
diff --git a/src/gallium/targets/dri-r600/target.c b/src/gallium/targets/dri-r600/target.c
|
||||
index 9bff6f2..3fc4422 100644
|
||||
--- a/src/gallium/targets/dri-r600/target.c
|
||||
+++ b/src/gallium/targets/dri-r600/target.c
|
||||
@@ -1,24 +1,27 @@
|
||||
#include "state_tracker/drm_driver.h"
|
||||
#include "target-helpers/inline_debug_helper.h"
|
||||
#include "radeon/drm/radeon_drm_public.h"
|
||||
+#include "radeon/drm/radeon_winsys.h"
|
||||
#include "r600/r600_public.h"
|
||||
|
||||
static struct pipe_screen *create_screen(int fd)
|
||||
{
|
||||
struct radeon_winsys *radeon;
|
||||
- struct pipe_screen *screen;
|
||||
|
||||
radeon = radeon_drm_winsys_create(fd);
|
||||
if (!radeon)
|
||||
return NULL;
|
||||
|
||||
- screen = r600_screen_create(radeon);
|
||||
- if (!screen)
|
||||
+ if (radeon->screen)
|
||||
+ return radeon->screen;
|
||||
+
|
||||
+ radeon->screen = r600_screen_create(radeon);
|
||||
+ if (!radeon->screen)
|
||||
return NULL;
|
||||
|
||||
- screen = debug_screen_wrap(screen);
|
||||
+ radeon->screen = debug_screen_wrap(radeon->screen);
|
||||
|
||||
- return screen;
|
||||
+ return radeon->screen;
|
||||
}
|
||||
|
||||
static const struct drm_conf_ret throttle_ret = {
|
||||
diff --git a/src/gallium/targets/dri-radeonsi/target.c b/src/gallium/targets/dri-radeonsi/target.c
|
||||
index 1350ba2..a294633 100644
|
||||
--- a/src/gallium/targets/dri-radeonsi/target.c
|
||||
+++ b/src/gallium/targets/dri-radeonsi/target.c
|
||||
@@ -1,24 +1,27 @@
|
||||
#include "state_tracker/drm_driver.h"
|
||||
#include "target-helpers/inline_debug_helper.h"
|
||||
#include "radeon/drm/radeon_drm_public.h"
|
||||
+#include "radeon/drm/radeon_winsys.h"
|
||||
#include "radeonsi/radeonsi_public.h"
|
||||
|
||||
static struct pipe_screen *create_screen(int fd)
|
||||
{
|
||||
struct radeon_winsys *radeon;
|
||||
- struct pipe_screen *screen;
|
||||
|
||||
radeon = radeon_drm_winsys_create(fd);
|
||||
if (!radeon)
|
||||
return NULL;
|
||||
|
||||
- screen = radeonsi_screen_create(radeon);
|
||||
- if (!screen)
|
||||
+ if (radeon->screen)
|
||||
+ return radeon->screen;
|
||||
+
|
||||
+ radeon->screen = radeonsi_screen_create(radeon);
|
||||
+ if (!radeon->screen)
|
||||
return NULL;
|
||||
|
||||
- screen = debug_screen_wrap(screen);
|
||||
+ radeon->screen = debug_screen_wrap(radeon->screen);
|
||||
|
||||
- return screen;
|
||||
+ return radeon->screen;
|
||||
}
|
||||
|
||||
static const struct drm_conf_ret throttle_ret = {
|
||||
diff --git a/src/gallium/targets/vdpau-r300/target.c b/src/gallium/targets/vdpau-r300/target.c
|
||||
index 2fd7c2f..042e080 100644
|
||||
--- a/src/gallium/targets/vdpau-r300/target.c
|
||||
+++ b/src/gallium/targets/vdpau-r300/target.c
|
||||
@@ -1,24 +1,27 @@
|
||||
#include "state_tracker/drm_driver.h"
|
||||
#include "target-helpers/inline_debug_helper.h"
|
||||
#include "radeon/drm/radeon_drm_public.h"
|
||||
+#include "radeon/drm/radeon_winsys.h"
|
||||
#include "r300/r300_public.h"
|
||||
|
||||
static struct pipe_screen *create_screen(int fd)
|
||||
{
|
||||
struct radeon_winsys *radeon;
|
||||
- struct pipe_screen *screen;
|
||||
|
||||
radeon = radeon_drm_winsys_create(fd);
|
||||
if (!radeon)
|
||||
return NULL;
|
||||
|
||||
- screen = r300_screen_create(radeon);
|
||||
- if (!screen)
|
||||
+ if (radeon->screen)
|
||||
+ return radeon->screen;
|
||||
+
|
||||
+ radeon->screen = r300_screen_create(radeon);
|
||||
+ if (!radeon->screen)
|
||||
return NULL;
|
||||
|
||||
- screen = debug_screen_wrap(screen);
|
||||
+ radeon->screen = debug_screen_wrap(radeon->screen);
|
||||
|
||||
- return screen;
|
||||
+ return radeon->screen;
|
||||
}
|
||||
|
||||
DRM_DRIVER_DESCRIPTOR("r300", "radeon", create_screen, NULL)
|
||||
diff --git a/src/gallium/targets/vdpau-r600/target.c b/src/gallium/targets/vdpau-r600/target.c
|
||||
index 3b7795b..b51c6af 100644
|
||||
--- a/src/gallium/targets/vdpau-r600/target.c
|
||||
+++ b/src/gallium/targets/vdpau-r600/target.c
|
||||
@@ -1,24 +1,27 @@
|
||||
#include "state_tracker/drm_driver.h"
|
||||
#include "target-helpers/inline_debug_helper.h"
|
||||
#include "radeon/drm/radeon_drm_public.h"
|
||||
+#include "radeon/drm/radeon_winsys.h"
|
||||
#include "r600/r600_public.h"
|
||||
|
||||
static struct pipe_screen *create_screen(int fd)
|
||||
{
|
||||
struct radeon_winsys *radeon;
|
||||
- struct pipe_screen *screen;
|
||||
|
||||
radeon = radeon_drm_winsys_create(fd);
|
||||
if (!radeon)
|
||||
return NULL;
|
||||
|
||||
- screen = r600_screen_create(radeon);
|
||||
- if (!screen)
|
||||
+ if (radeon->screen)
|
||||
+ return radeon->screen;
|
||||
+
|
||||
+ radeon->screen = r600_screen_create(radeon);
|
||||
+ if (!radeon->screen)
|
||||
return NULL;
|
||||
|
||||
- screen = debug_screen_wrap(screen);
|
||||
+ radeon->screen = debug_screen_wrap(radeon->screen);
|
||||
|
||||
- return screen;
|
||||
+ return radeon->screen;
|
||||
}
|
||||
|
||||
DRM_DRIVER_DESCRIPTOR("r600", "radeon", create_screen, NULL)
|
||||
diff --git a/src/gallium/targets/vdpau-radeonsi/target.c b/src/gallium/targets/vdpau-radeonsi/target.c
|
||||
index ffb6662..4d0b9e9 100644
|
||||
--- a/src/gallium/targets/vdpau-radeonsi/target.c
|
||||
+++ b/src/gallium/targets/vdpau-radeonsi/target.c
|
||||
@@ -1,24 +1,27 @@
|
||||
#include "state_tracker/drm_driver.h"
|
||||
#include "target-helpers/inline_debug_helper.h"
|
||||
#include "radeon/drm/radeon_drm_public.h"
|
||||
+#include "radeon/drm/radeon_winsys.h"
|
||||
#include "radeonsi/radeonsi_public.h"
|
||||
|
||||
static struct pipe_screen *create_screen(int fd)
|
||||
{
|
||||
struct radeon_winsys *radeon;
|
||||
- struct pipe_screen *screen;
|
||||
|
||||
radeon = radeon_drm_winsys_create(fd);
|
||||
if (!radeon)
|
||||
return NULL;
|
||||
|
||||
- screen = radeonsi_screen_create(radeon);
|
||||
- if (!screen)
|
||||
+ if (radeon->screen)
|
||||
+ return radeon->screen;
|
||||
+
|
||||
+ radeon->screen = radeonsi_screen_create(radeon);
|
||||
+ if (!radeon->screen)
|
||||
return NULL;
|
||||
|
||||
- screen = debug_screen_wrap(screen);
|
||||
+ radeon->screen = debug_screen_wrap(radeon->screen);
|
||||
|
||||
- return screen;
|
||||
+ return radeon->screen;
|
||||
}
|
||||
|
||||
DRM_DRIVER_DESCRIPTOR("radeonsi", "radeon", create_screen, NULL)
|
||||
diff --git a/src/gallium/targets/xorg-r600/target.c b/src/gallium/targets/xorg-r600/target.c
|
||||
index 75785da..81b5488 100644
|
||||
--- a/src/gallium/targets/xorg-r600/target.c
|
||||
+++ b/src/gallium/targets/xorg-r600/target.c
|
||||
@@ -2,25 +2,28 @@
|
||||
#include "target-helpers/inline_debug_helper.h"
|
||||
#include "state_tracker/drm_driver.h"
|
||||
#include "radeon/drm/radeon_drm_public.h"
|
||||
+#include "radeon/drm/radeon_winsys.h"
|
||||
#include "r600/r600_public.h"
|
||||
|
||||
static struct pipe_screen *
|
||||
create_screen(int fd)
|
||||
{
|
||||
struct radeon_winsys *sws;
|
||||
- struct pipe_screen *screen;
|
||||
|
||||
sws = radeon_drm_winsys_create(fd);
|
||||
if (!sws)
|
||||
return NULL;
|
||||
|
||||
- screen = r600_screen_create(sws);
|
||||
- if (!screen)
|
||||
+ if (sws->screen)
|
||||
+ return sws->screen;
|
||||
+
|
||||
+ sws->screen = r600_screen_create(sws);
|
||||
+ if (!sws->screen)
|
||||
return NULL;
|
||||
|
||||
- screen = debug_screen_wrap(screen);
|
||||
+ sws->screen = debug_screen_wrap(sws->screen);
|
||||
|
||||
- return screen;
|
||||
+ return sws->screen;
|
||||
}
|
||||
|
||||
DRM_DRIVER_DESCRIPTOR("r600", "radeon", create_screen, NULL)
|
||||
diff --git a/src/gallium/targets/xorg-radeonsi/target.c b/src/gallium/targets/xorg-radeonsi/target.c
|
||||
index c023c68..6e618ad 100644
|
||||
--- a/src/gallium/targets/xorg-radeonsi/target.c
|
||||
+++ b/src/gallium/targets/xorg-radeonsi/target.c
|
||||
@@ -2,25 +2,28 @@
|
||||
#include "target-helpers/inline_debug_helper.h"
|
||||
#include "state_tracker/drm_driver.h"
|
||||
#include "radeon/drm/radeon_drm_public.h"
|
||||
+#include "radeon/drm/radeon_winsys.h"
|
||||
#include "radeonsi/radeonsi_public.h"
|
||||
|
||||
static struct pipe_screen *
|
||||
create_screen(int fd)
|
||||
{
|
||||
struct radeon_winsys *sws;
|
||||
- struct pipe_screen *screen;
|
||||
|
||||
sws = radeon_drm_winsys_create(fd);
|
||||
if (!sws)
|
||||
return NULL;
|
||||
|
||||
- screen = radeonsi_screen_create(sws);
|
||||
- if (!screen)
|
||||
+ if (sws->screen)
|
||||
+ return sws->screen;
|
||||
+
|
||||
+ sws->screen = radeonsi_screen_create(sws);
|
||||
+ if (!sws->screen)
|
||||
return NULL;
|
||||
|
||||
- screen = debug_screen_wrap(screen);
|
||||
+ sws->screen = debug_screen_wrap(sws->screen);
|
||||
|
||||
- return screen;
|
||||
+ return sws->screen;
|
||||
}
|
||||
|
||||
DRM_DRIVER_DESCRIPTOR("radeonsi", "radeon", create_screen, NULL)
|
||||
diff --git a/src/gallium/targets/xvmc-r300/target.c b/src/gallium/targets/xvmc-r300/target.c
|
||||
index 2fd7c2f..042e080 100644
|
||||
--- a/src/gallium/targets/xvmc-r300/target.c
|
||||
+++ b/src/gallium/targets/xvmc-r300/target.c
|
||||
@@ -1,24 +1,27 @@
|
||||
#include "state_tracker/drm_driver.h"
|
||||
#include "target-helpers/inline_debug_helper.h"
|
||||
#include "radeon/drm/radeon_drm_public.h"
|
||||
+#include "radeon/drm/radeon_winsys.h"
|
||||
#include "r300/r300_public.h"
|
||||
|
||||
static struct pipe_screen *create_screen(int fd)
|
||||
{
|
||||
struct radeon_winsys *radeon;
|
||||
- struct pipe_screen *screen;
|
||||
|
||||
radeon = radeon_drm_winsys_create(fd);
|
||||
if (!radeon)
|
||||
return NULL;
|
||||
|
||||
- screen = r300_screen_create(radeon);
|
||||
- if (!screen)
|
||||
+ if (radeon->screen)
|
||||
+ return radeon->screen;
|
||||
+
|
||||
+ radeon->screen = r300_screen_create(radeon);
|
||||
+ if (!radeon->screen)
|
||||
return NULL;
|
||||
|
||||
- screen = debug_screen_wrap(screen);
|
||||
+ radeon->screen = debug_screen_wrap(radeon->screen);
|
||||
|
||||
- return screen;
|
||||
+ return radeon->screen;
|
||||
}
|
||||
|
||||
DRM_DRIVER_DESCRIPTOR("r300", "radeon", create_screen, NULL)
|
||||
diff --git a/src/gallium/targets/xvmc-r600/target.c b/src/gallium/targets/xvmc-r600/target.c
|
||||
index 3b7795b..b51c6af 100644
|
||||
--- a/src/gallium/targets/xvmc-r600/target.c
|
||||
+++ b/src/gallium/targets/xvmc-r600/target.c
|
||||
@@ -1,24 +1,27 @@
|
||||
#include "state_tracker/drm_driver.h"
|
||||
#include "target-helpers/inline_debug_helper.h"
|
||||
#include "radeon/drm/radeon_drm_public.h"
|
||||
+#include "radeon/drm/radeon_winsys.h"
|
||||
#include "r600/r600_public.h"
|
||||
|
||||
static struct pipe_screen *create_screen(int fd)
|
||||
{
|
||||
struct radeon_winsys *radeon;
|
||||
- struct pipe_screen *screen;
|
||||
|
||||
radeon = radeon_drm_winsys_create(fd);
|
||||
if (!radeon)
|
||||
return NULL;
|
||||
|
||||
- screen = r600_screen_create(radeon);
|
||||
- if (!screen)
|
||||
+ if (radeon->screen)
|
||||
+ return radeon->screen;
|
||||
+
|
||||
+ radeon->screen = r600_screen_create(radeon);
|
||||
+ if (!radeon->screen)
|
||||
return NULL;
|
||||
|
||||
- screen = debug_screen_wrap(screen);
|
||||
+ radeon->screen = debug_screen_wrap(radeon->screen);
|
||||
|
||||
- return screen;
|
||||
+ return radeon->screen;
|
||||
}
|
||||
|
||||
DRM_DRIVER_DESCRIPTOR("r600", "radeon", create_screen, NULL)
|
||||
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
|
||||
index 61f0913..4f43093 100644
|
||||
--- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
|
||||
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
|
||||
@@ -424,10 +424,6 @@ static void radeon_winsys_destroy(struct radeon_winsys *rws)
|
||||
{
|
||||
struct radeon_drm_winsys *ws = (struct radeon_drm_winsys*)rws;
|
||||
|
||||
- if (!pipe_reference(&ws->base.reference, NULL)) {
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
if (ws->thread) {
|
||||
ws->kill_thread = 1;
|
||||
pipe_semaphore_signal(&ws->cs_queued);
|
||||
diff --git a/src/gallium/winsys/radeon/drm/radeon_winsys.h b/src/gallium/winsys/radeon/drm/radeon_winsys.h
|
||||
index 1367982..7ed2437 100644
|
||||
--- a/src/gallium/winsys/radeon/drm/radeon_winsys.h
|
||||
+++ b/src/gallium/winsys/radeon/drm/radeon_winsys.h
|
||||
@@ -208,6 +208,11 @@ struct radeon_winsys {
|
||||
struct pipe_reference reference;
|
||||
|
||||
/**
|
||||
+ * The screen object this winsys was created for
|
||||
+ */
|
||||
+ struct pipe_screen *screen;
|
||||
+
|
||||
+ /**
|
||||
* Destroy this winsys.
|
||||
*
|
||||
* \param ws The winsys this function is called from.
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,40 +0,0 @@
|
||||
From e5e2ed6a6f05200cfa8652cd9dff046d1c2c485d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
|
||||
Date: Sun, 22 Sep 2013 15:59:17 +0200
|
||||
Subject: [PATCH 8/9] radeon/uvd: try to place msg/fb buffer into GART
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This is only supported on NI+, but the kernel takes care of those limitations.
|
||||
|
||||
Signed-off-by: Christian König <christian.koenig@amd.com>
|
||||
---
|
||||
src/gallium/drivers/radeon/radeon_uvd.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/gallium/drivers/radeon/radeon_uvd.c b/src/gallium/drivers/radeon/radeon_uvd.c
|
||||
index a8b17e6..382b410 100644
|
||||
--- a/src/gallium/drivers/radeon/radeon_uvd.c
|
||||
+++ b/src/gallium/drivers/radeon/radeon_uvd.c
|
||||
@@ -148,7 +148,7 @@ static void send_msg(struct ruvd_decoder *dec, struct ruvd_msg *msg)
|
||||
|
||||
/* and send it to the hardware */
|
||||
send_cmd(dec, RUVD_CMD_MSG_BUFFER, buf->cs_handle, 0,
|
||||
- RADEON_USAGE_READ, RADEON_DOMAIN_VRAM);
|
||||
+ RADEON_USAGE_READ, RADEON_DOMAIN_GTT);
|
||||
}
|
||||
|
||||
/* create a buffer in the winsys */
|
||||
@@ -794,7 +794,7 @@ static void ruvd_end_frame(struct pipe_video_codec *decoder,
|
||||
send_cmd(dec, RUVD_CMD_DECODING_TARGET_BUFFER, dt, 0,
|
||||
RADEON_USAGE_WRITE, RADEON_DOMAIN_VRAM);
|
||||
send_cmd(dec, RUVD_CMD_FEEDBACK_BUFFER, msg_fb_buf->cs_handle,
|
||||
- 0x1000, RADEON_USAGE_WRITE, RADEON_DOMAIN_VRAM);
|
||||
+ 0x1000, RADEON_USAGE_WRITE, RADEON_DOMAIN_GTT);
|
||||
set_reg(dec, RUVD_ENGINE_CNTL, 1);
|
||||
|
||||
flush(dec);
|
||||
--
|
||||
1.8.3.1
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user