summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/radeon
diff options
context:
space:
mode:
authorChristian König <[email protected]>2014-01-21 11:49:06 -0700
committerChristian König <[email protected]>2014-02-06 15:54:14 +0100
commit9b218dcdd7877b81d8b6c55799b6ec33e1cc8079 (patch)
tree69e78fbae0e9125564a72193ce9f1ab1cbc04b48 /src/gallium/drivers/radeon
parent7bcfb0bc8ffed0db244cf0b3d4e200add590a02a (diff)
radeon/video: directly create buffers in the right domain
Avoid moving things around on start of stream. Signed-off-by: Christian König <[email protected]>
Diffstat (limited to 'src/gallium/drivers/radeon')
-rw-r--r--src/gallium/drivers/radeon/radeon_uvd.c6
-rw-r--r--src/gallium/drivers/radeon/radeon_video.c9
-rw-r--r--src/gallium/drivers/radeon/radeon_video.h4
3 files changed, 12 insertions, 7 deletions
diff --git a/src/gallium/drivers/radeon/radeon_uvd.c b/src/gallium/drivers/radeon/radeon_uvd.c
index e12b6fbaad5..3075905c213 100644
--- a/src/gallium/drivers/radeon/radeon_uvd.c
+++ b/src/gallium/drivers/radeon/radeon_uvd.c
@@ -815,12 +815,12 @@ struct pipe_video_codec *ruvd_create_decoder(struct pipe_context *context,
for (i = 0; i < NUM_BUFFERS; ++i) {
unsigned msg_fb_size = FB_BUFFER_OFFSET + FB_BUFFER_SIZE;
STATIC_ASSERT(sizeof(struct ruvd_msg) <= FB_BUFFER_OFFSET);
- if (!rvid_create_buffer(dec->ws, &dec->msg_fb_buffers[i], msg_fb_size)) {
+ if (!rvid_create_buffer(dec->ws, &dec->msg_fb_buffers[i], msg_fb_size, RADEON_DOMAIN_VRAM)) {
RVID_ERR("Can't allocated message buffers.\n");
goto error;
}
- if (!rvid_create_buffer(dec->ws, &dec->bs_buffers[i], bs_buf_size)) {
+ if (!rvid_create_buffer(dec->ws, &dec->bs_buffers[i], bs_buf_size, RADEON_DOMAIN_GTT)) {
RVID_ERR("Can't allocated bitstream buffers.\n");
goto error;
}
@@ -829,7 +829,7 @@ struct pipe_video_codec *ruvd_create_decoder(struct pipe_context *context,
rvid_clear_buffer(dec->ws, dec->cs, &dec->bs_buffers[i]);
}
- if (!rvid_create_buffer(dec->ws, &dec->dpb, dpb_size)) {
+ if (!rvid_create_buffer(dec->ws, &dec->dpb, dpb_size, RADEON_DOMAIN_VRAM)) {
RVID_ERR("Can't allocated dpb.\n");
goto error;
}
diff --git a/src/gallium/drivers/radeon/radeon_video.c b/src/gallium/drivers/radeon/radeon_video.c
index 3471202f94b..455b147144e 100644
--- a/src/gallium/drivers/radeon/radeon_video.c
+++ b/src/gallium/drivers/radeon/radeon_video.c
@@ -59,9 +59,12 @@ unsigned rvid_alloc_stream_handle()
}
/* create a buffer in the winsys */
-bool rvid_create_buffer(struct radeon_winsys *ws, struct rvid_buffer *buffer, unsigned size)
+bool rvid_create_buffer(struct radeon_winsys *ws, struct rvid_buffer *buffer,
+ unsigned size, enum radeon_bo_domain domain)
{
- buffer->buf = ws->buffer_create(ws, size, 4096, false, RADEON_DOMAIN_GTT | RADEON_DOMAIN_VRAM);
+ buffer->domain = domain;
+
+ buffer->buf = ws->buffer_create(ws, size, 4096, false, domain);
if (!buffer->buf)
return false;
@@ -87,7 +90,7 @@ bool rvid_resize_buffer(struct radeon_winsys *ws, struct radeon_winsys_cs *cs,
struct rvid_buffer old_buf = *new_buf;
void *src = NULL, *dst = NULL;
- if (!rvid_create_buffer(ws, new_buf, new_size))
+ if (!rvid_create_buffer(ws, new_buf, new_size, new_buf->domain))
goto error;
src = ws->buffer_map(old_buf.cs_handle, cs, PIPE_TRANSFER_READ);
diff --git a/src/gallium/drivers/radeon/radeon_video.h b/src/gallium/drivers/radeon/radeon_video.h
index 7833ddc6d0b..55d2ca466de 100644
--- a/src/gallium/drivers/radeon/radeon_video.h
+++ b/src/gallium/drivers/radeon/radeon_video.h
@@ -43,6 +43,7 @@
/* video buffer representation */
struct rvid_buffer
{
+ enum radeon_bo_domain domain;
struct pb_buffer* buf;
struct radeon_winsys_cs_handle* cs_handle;
};
@@ -51,7 +52,8 @@ struct rvid_buffer
unsigned rvid_alloc_stream_handle(void);
/* create a buffer in the winsys */
-bool rvid_create_buffer(struct radeon_winsys *ws, struct rvid_buffer *buffer, unsigned size);
+bool rvid_create_buffer(struct radeon_winsys *ws, struct rvid_buffer *buffer,
+ unsigned size, enum radeon_bo_domain domain);
/* destroy a buffer */
void rvid_destroy_buffer(struct rvid_buffer *buffer);