r300g: fix color tiling for buffer from X server.

The tiling setup needs a bit of work, but this should be good enough for now,
when we get buffers from the kernel we need to store their tiling properties.

Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Dave Airlie 2010-04-03 21:52:09 +10:00
parent f618867645
commit 4c26cdbe01
5 changed files with 38 additions and 1 deletions

View file

@ -909,6 +909,7 @@ static struct pipe_texture*
/* one ref already taken */
tex->buffer = buffer;
rws->buffer_get_tiling(rws, buffer, &tex->microtile, &tex->macrotile);
return (struct pipe_texture*)tex;
}

View file

@ -146,6 +146,11 @@ struct r300_winsys_screen {
void (*reset_bos)(struct r300_winsys_screen *winsys);
void (*buffer_get_tiling)(struct r300_winsys_screen *winsys,
struct r300_winsys_buffer *buffer,
enum r300_buffer_tiling *microtiled,
enum r300_buffer_tiling *macrotiled);
void (*buffer_set_tiling)(struct r300_winsys_screen *winsys,
struct r300_winsys_buffer *buffer,
uint32_t pitch,

View file

@ -72,6 +72,10 @@ void radeon_drm_bufmgr_write_reloc(struct pb_buffer *_buf,
struct pb_buffer *radeon_drm_bufmgr_create_buffer_from_handle(struct pb_manager *_mgr,
uint32_t handle);
void radeon_drm_bufmgr_get_tiling(struct pb_buffer *_buf,
enum r300_buffer_tiling *microtiled,
enum r300_buffer_tiling *macrotiled);
void radeon_drm_bufmgr_set_tiling(struct pb_buffer *_buf,
enum r300_buffer_tiling microtiled,
enum r300_buffer_tiling macrotiled,

View file

@ -304,7 +304,24 @@ boolean radeon_drm_bufmgr_get_handle(struct pb_buffer *_buf,
}
return TRUE;
}
void radeon_drm_bufmgr_get_tiling(struct pb_buffer *_buf,
enum r300_buffer_tiling *microtiled,
enum r300_buffer_tiling *macrotiled)
{
struct radeon_drm_buffer *buf = get_drm_buffer(_buf);
uint32_t flags = 0, pitch;
radeon_bo_get_tiling(buf->bo, &flags, &pitch);
*microtiled = R300_BUFFER_LINEAR;
*macrotiled = R300_BUFFER_LINEAR;
if (flags & RADEON_BO_FLAGS_MICRO_TILE)
*microtiled = R300_BUFFER_TILED;
if (flags & RADEON_BO_FLAGS_MACRO_TILE)
*macrotiled = R300_BUFFER_TILED;
}
void radeon_drm_bufmgr_set_tiling(struct pb_buffer *_buf,
enum r300_buffer_tiling microtiled,

View file

@ -72,6 +72,15 @@ static void radeon_r300_winsys_buffer_set_tiling(struct r300_winsys_screen *rws,
radeon_drm_bufmgr_set_tiling(_buf, microtiled, macrotiled, pitch);
}
static void radeon_r300_winsys_buffer_get_tiling(struct r300_winsys_screen *rws,
struct r300_winsys_buffer *buf,
enum r300_buffer_tiling *microtiled,
enum r300_buffer_tiling *macrotiled)
{
struct pb_buffer *_buf = radeon_pb_buffer(buf);
radeon_drm_bufmgr_get_tiling(_buf, microtiled, macrotiled);
}
static void *radeon_r300_winsys_buffer_map(struct r300_winsys_screen *ws,
struct r300_winsys_buffer *buf,
unsigned usage)
@ -320,6 +329,7 @@ radeon_setup_winsys(int fd, struct radeon_libdrm_winsys* ws)
ws->base.buffer_create = radeon_r300_winsys_buffer_create;
ws->base.buffer_destroy = radeon_r300_winsys_buffer_destroy;
ws->base.buffer_set_tiling = radeon_r300_winsys_buffer_set_tiling;
ws->base.buffer_get_tiling = radeon_r300_winsys_buffer_get_tiling;
ws->base.buffer_map = radeon_r300_winsys_buffer_map;
ws->base.buffer_unmap = radeon_r300_winsys_buffer_unmap;
ws->base.buffer_reference = radeon_r300_winsys_buffer_reference;