libdrm_radeon: add tiling support
parent
322cf6cf73
commit
4507863058
|
@ -69,6 +69,10 @@ struct radeon_bo_funcs {
|
|||
int (*bo_unmap)(struct radeon_bo *bo);
|
||||
int (*bo_wait)(struct radeon_bo *bo);
|
||||
int (*bo_is_static)(struct radeon_bo *bo);
|
||||
int (*bo_set_tiling)(struct radeon_bo *bo, uint32_t tiling_flags,
|
||||
uint32_t pitch);
|
||||
int (*bo_get_tiling)(struct radeon_bo *bo, uint32_t *tiling_flags,
|
||||
uint32_t *pitch);
|
||||
};
|
||||
|
||||
struct radeon_bo_manager {
|
||||
|
@ -162,6 +166,18 @@ static inline int _radeon_bo_wait(struct radeon_bo *bo,
|
|||
return bo->bom->funcs->bo_wait(bo);
|
||||
}
|
||||
|
||||
static inline int radeon_bo_set_tiling(struct radeon_bo *bo,
|
||||
uint32_t tiling_flags, uint32_t pitch)
|
||||
{
|
||||
return bo->bom->funcs->bo_set_tiling(bo, tiling_flags, pitch);
|
||||
}
|
||||
|
||||
static inline int radeon_bo_get_tiling(struct radeon_bo *bo,
|
||||
uint32_t *tiling_flags, uint32_t *pitch)
|
||||
{
|
||||
return bo->bom->funcs->bo_get_tiling(bo, tiling_flags, pitch);
|
||||
}
|
||||
|
||||
static inline int radeon_bo_is_static(struct radeon_bo *bo)
|
||||
{
|
||||
if (bo->bom->funcs->bo_is_static)
|
||||
|
|
|
@ -56,6 +56,8 @@ struct bo_manager_gem {
|
|||
struct radeon_bo_manager base;
|
||||
};
|
||||
|
||||
static int bo_wait(struct radeon_bo *bo);
|
||||
|
||||
static struct radeon_bo *bo_open(struct radeon_bo_manager *bom,
|
||||
uint32_t handle,
|
||||
uint32_t size,
|
||||
|
@ -207,6 +209,44 @@ static int bo_wait(struct radeon_bo *bo)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int bo_set_tiling(struct radeon_bo *bo, uint32_t tiling_flags,
|
||||
uint32_t pitch)
|
||||
{
|
||||
struct drm_radeon_gem_set_tiling args;
|
||||
int r;
|
||||
|
||||
args.handle = bo->handle;
|
||||
args.tiling_flags = tiling_flags;
|
||||
args.pitch = pitch;
|
||||
|
||||
r = drmCommandWriteRead(bo->bom->fd,
|
||||
DRM_RADEON_GEM_SET_TILING,
|
||||
&args,
|
||||
sizeof(args));
|
||||
return r;
|
||||
}
|
||||
|
||||
static int bo_get_tiling(struct radeon_bo *bo, uint32_t *tiling_flags,
|
||||
uint32_t *pitch)
|
||||
{
|
||||
struct drm_radeon_gem_set_tiling args;
|
||||
int r;
|
||||
|
||||
args.handle = bo->handle;
|
||||
|
||||
r = drmCommandWriteRead(bo->bom->fd,
|
||||
DRM_RADEON_GEM_GET_TILING,
|
||||
&args,
|
||||
sizeof(args));
|
||||
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
*tiling_flags = args.tiling_flags;
|
||||
*pitch = args.pitch;
|
||||
return r;
|
||||
}
|
||||
|
||||
static struct radeon_bo_funcs bo_gem_funcs = {
|
||||
bo_open,
|
||||
bo_ref,
|
||||
|
@ -215,6 +255,8 @@ static struct radeon_bo_funcs bo_gem_funcs = {
|
|||
bo_unmap,
|
||||
bo_wait,
|
||||
NULL,
|
||||
bo_set_tiling,
|
||||
bo_get_tiling,
|
||||
};
|
||||
|
||||
struct radeon_bo_manager *radeon_bo_manager_gem_ctor(int fd)
|
||||
|
@ -248,7 +290,6 @@ uint32_t radeon_gem_name_bo(struct radeon_bo *bo)
|
|||
|
||||
int radeon_gem_get_kernel_name(struct radeon_bo *bo, uint32_t *name)
|
||||
{
|
||||
struct radeon_bo_gem *bo_gem = (struct radeon_bo_gem*)bo;
|
||||
struct drm_gem_flink flink;
|
||||
int r;
|
||||
|
||||
|
@ -263,7 +304,6 @@ int radeon_gem_get_kernel_name(struct radeon_bo *bo, uint32_t *name)
|
|||
|
||||
int radeon_gem_set_domain(struct radeon_bo *bo, uint32_t read_domains, uint32_t write_domain)
|
||||
{
|
||||
struct radeon_bo_gem *bo_gem = (struct radeon_bo_gem*)bo;
|
||||
struct drm_radeon_gem_set_domain args;
|
||||
int r;
|
||||
|
||||
|
|
|
@ -503,6 +503,8 @@ typedef struct {
|
|||
#define DRM_RADEON_GEM_WAIT_IDLE 0x24
|
||||
#define DRM_RADEON_CS 0x26
|
||||
#define DRM_RADEON_INFO 0x27
|
||||
#define DRM_RADEON_GEM_SET_TILING 0x28
|
||||
#define DRM_RADEON_GEM_GET_TILING 0x29
|
||||
|
||||
#define DRM_IOCTL_RADEON_CP_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_INIT, drm_radeon_init_t)
|
||||
#define DRM_IOCTL_RADEON_CP_START DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_START)
|
||||
|
@ -531,17 +533,18 @@ typedef struct {
|
|||
#define DRM_IOCTL_RADEON_SETPARAM DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SETPARAM, drm_radeon_setparam_t)
|
||||
#define DRM_IOCTL_RADEON_SURF_ALLOC DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SURF_ALLOC, drm_radeon_surface_alloc_t)
|
||||
#define DRM_IOCTL_RADEON_SURF_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SURF_FREE, drm_radeon_surface_free_t)
|
||||
|
||||
#define DRM_IOCTL_RADEON_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_INFO, struct drm_radeon_gem_info)
|
||||
#define DRM_IOCTL_RADEON_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_CREATE, struct drm_radeon_gem_create)
|
||||
#define DRM_IOCTL_RADEON_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_MMAP, struct drm_radeon_gem_mmap)
|
||||
#define DRM_IOCTL_RADEON_GEM_PIN DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PIN, struct drm_radeon_gem_pin)
|
||||
#define DRM_IOCTL_RADEON_GEM_UNPIN DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_UNPIN, struct drm_radeon_gem_unpin)
|
||||
#define DRM_IOCTL_RADEON_GEM_PREAD DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PREAD, struct drm_radeon_gem_pread)
|
||||
#define DRM_IOCTL_RADEON_GEM_PWRITE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PWRITE, struct drm_radeon_gem_pwrite)
|
||||
#define DRM_IOCTL_RADEON_GEM_SET_DOMAIN DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_SET_DOMAIN, struct drm_radeon_gem_set_domain)
|
||||
#define DRM_IOCTL_RADEON_GEM_WAIT_RENDERING DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_GEM_WAIT_RENDERING, struct drm_radeon_gem_wait_rendering)
|
||||
#define DRM_IOCTL_RADEON_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_CS, struct drm_radeon_cs)
|
||||
/* KMS */
|
||||
#define DRM_IOCTL_RADEON_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_INFO, struct drm_radeon_gem_info)
|
||||
#define DRM_IOCTL_RADEON_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_CREATE, struct drm_radeon_gem_create)
|
||||
#define DRM_IOCTL_RADEON_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_MMAP, struct drm_radeon_gem_mmap)
|
||||
#define DRM_IOCTL_RADEON_GEM_PREAD DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PREAD, struct drm_radeon_gem_pread)
|
||||
#define DRM_IOCTL_RADEON_GEM_PWRITE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PWRITE, struct drm_radeon_gem_pwrite)
|
||||
#define DRM_IOCTL_RADEON_GEM_SET_DOMAIN DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_SET_DOMAIN, struct drm_radeon_gem_set_domain)
|
||||
#define DRM_IOCTL_RADEON_GEM_WAIT_IDLE DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_GEM_WAIT_IDLE, struct drm_radeon_gem_wait_idle)
|
||||
#define DRM_IOCTL_RADEON_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_CS, struct drm_radeon_cs)
|
||||
#define DRM_IOCTL_RADEON_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_INFO, struct drm_radeon_info)
|
||||
#define DRM_IOCTL_RADEON_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_SET_TILING, struct drm_radeon_gem_set_tiling)
|
||||
#define DRM_IOCTL_RADEON_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_GET_TILING, struct drm_radeon_gem_get_tiling)
|
||||
|
||||
typedef struct drm_radeon_init {
|
||||
enum {
|
||||
|
@ -793,6 +796,24 @@ struct drm_radeon_gem_create {
|
|||
uint32_t flags;
|
||||
};
|
||||
|
||||
#define RADEON_TILING_MACRO 0x1
|
||||
#define RADEON_TILING_MICRO 0x2
|
||||
#define RADEON_TILING_SWAP 0x4
|
||||
#define RADEON_TILING_SURFACE 0x8 /* this object requires a surface
|
||||
* when mapped - i.e. front buffer */
|
||||
|
||||
struct drm_radeon_gem_set_tiling {
|
||||
uint32_t handle;
|
||||
uint32_t tiling_flags;
|
||||
uint32_t pitch;
|
||||
};
|
||||
|
||||
struct drm_radeon_gem_get_tiling {
|
||||
uint32_t handle;
|
||||
uint32_t tiling_flags;
|
||||
uint32_t pitch;
|
||||
};
|
||||
|
||||
struct drm_radeon_gem_mmap {
|
||||
uint32_t handle;
|
||||
uint32_t pad;
|
||||
|
@ -803,8 +824,8 @@ struct drm_radeon_gem_mmap {
|
|||
|
||||
struct drm_radeon_gem_set_domain {
|
||||
uint32_t handle;
|
||||
uint32_t read_domains;
|
||||
uint32_t write_domain;
|
||||
uint32_t read_domains;
|
||||
uint32_t write_domain;
|
||||
};
|
||||
|
||||
struct drm_radeon_gem_wait_idle {
|
||||
|
|
Loading…
Reference in New Issue