diff options
| -rw-r--r-- | src/gallium/drivers/r300/r300_texture.c | 1 | ||||
| -rw-r--r-- | src/gallium/drivers/r300/r300_winsys.h | 5 | ||||
| -rw-r--r-- | src/gallium/winsys/radeon/drm/radeon_buffer.h | 4 | ||||
| -rw-r--r-- | src/gallium/winsys/radeon/drm/radeon_drm_buffer.c | 19 | ||||
| -rw-r--r-- | src/gallium/winsys/radeon/drm/radeon_r300.c | 10 | 
5 files changed, 38 insertions, 1 deletions
diff --git a/src/gallium/drivers/r300/r300_texture.c b/src/gallium/drivers/r300/r300_texture.c index e7bac615df..a9c9e14ba7 100644 --- a/src/gallium/drivers/r300/r300_texture.c +++ b/src/gallium/drivers/r300/r300_texture.c @@ -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;  } diff --git a/src/gallium/drivers/r300/r300_winsys.h b/src/gallium/drivers/r300/r300_winsys.h index acfa5dbeb9..d8d0c609d2 100644 --- a/src/gallium/drivers/r300/r300_winsys.h +++ b/src/gallium/drivers/r300/r300_winsys.h @@ -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, diff --git a/src/gallium/winsys/radeon/drm/radeon_buffer.h b/src/gallium/winsys/radeon/drm/radeon_buffer.h index 218a376301..8782d675df 100644 --- a/src/gallium/winsys/radeon/drm/radeon_buffer.h +++ b/src/gallium/winsys/radeon/drm/radeon_buffer.h @@ -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, diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_buffer.c b/src/gallium/winsys/radeon/drm/radeon_drm_buffer.c index 66f6132245..5fd20cc775 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_buffer.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_buffer.c @@ -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, diff --git a/src/gallium/winsys/radeon/drm/radeon_r300.c b/src/gallium/winsys/radeon/drm/radeon_r300.c index 38fcf889c8..935c1d84d0 100644 --- a/src/gallium/winsys/radeon/drm/radeon_r300.c +++ b/src/gallium/winsys/radeon/drm/radeon_r300.c @@ -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;  | 
