winsys/radeon: test the userptr ioctl to see if it's present
There is no other way to check for support. Reviewed-by: Christian König <christian.koenig@amd.com>
This commit is contained in:
@@ -42,24 +42,6 @@
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#ifndef DRM_RADEON_GEM_USERPTR
|
||||
|
||||
#define DRM_RADEON_GEM_USERPTR 0x2d
|
||||
|
||||
#define RADEON_GEM_USERPTR_READONLY (1 << 0)
|
||||
#define RADEON_GEM_USERPTR_ANONONLY (1 << 1)
|
||||
#define RADEON_GEM_USERPTR_VALIDATE (1 << 2)
|
||||
#define RADEON_GEM_USERPTR_REGISTER (1 << 3)
|
||||
|
||||
struct drm_radeon_gem_userptr {
|
||||
uint64_t addr;
|
||||
uint64_t size;
|
||||
uint32_t flags;
|
||||
uint32_t handle;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
extern const struct pb_vtbl radeon_bo_vtbl;
|
||||
|
||||
static INLINE struct radeon_bo *radeon_bo(struct pb_buffer *bo)
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
#define RADEON_DRM_CS_H
|
||||
|
||||
#include "radeon_drm_bo.h"
|
||||
#include <radeon_drm.h>
|
||||
|
||||
struct radeon_cs_context {
|
||||
uint32_t buf[RADEON_MAX_CMDBUF_DWORDS];
|
||||
|
||||
@@ -309,6 +309,21 @@ static boolean do_winsys_init(struct radeon_drm_winsys *ws)
|
||||
}
|
||||
}
|
||||
|
||||
/* Check for userptr support. */
|
||||
{
|
||||
struct drm_radeon_gem_userptr args = {0};
|
||||
|
||||
/* If the ioctl doesn't exist, -EINVAL is returned.
|
||||
*
|
||||
* If the ioctl exists, it should return -EACCES
|
||||
* if RADEON_GEM_USERPTR_READONLY or RADEON_GEM_USERPTR_REGISTER
|
||||
* aren't set.
|
||||
*/
|
||||
ws->info.has_userptr =
|
||||
drmCommandWriteRead(ws->fd, DRM_RADEON_GEM_USERPTR,
|
||||
&args, sizeof(args)) == -EACCES;
|
||||
}
|
||||
|
||||
/* Get GEM info. */
|
||||
retval = drmCommandWriteRead(ws->fd, DRM_RADEON_GEM_INFO,
|
||||
&gem_info, sizeof(gem_info));
|
||||
|
||||
@@ -32,6 +32,25 @@
|
||||
|
||||
#include "radeon_winsys.h"
|
||||
#include "os/os_thread.h"
|
||||
#include <radeon_drm.h>
|
||||
|
||||
#ifndef DRM_RADEON_GEM_USERPTR
|
||||
|
||||
#define DRM_RADEON_GEM_USERPTR 0x2d
|
||||
|
||||
#define RADEON_GEM_USERPTR_READONLY (1 << 0)
|
||||
#define RADEON_GEM_USERPTR_ANONONLY (1 << 1)
|
||||
#define RADEON_GEM_USERPTR_VALIDATE (1 << 2)
|
||||
#define RADEON_GEM_USERPTR_REGISTER (1 << 3)
|
||||
|
||||
struct drm_radeon_gem_userptr {
|
||||
uint64_t addr;
|
||||
uint64_t size;
|
||||
uint32_t flags;
|
||||
uint32_t handle;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
struct radeon_drm_cs;
|
||||
|
||||
|
||||
@@ -214,6 +214,7 @@ struct radeon_info {
|
||||
|
||||
boolean has_uvd;
|
||||
uint32_t vce_fw_version;
|
||||
boolean has_userptr;
|
||||
|
||||
uint32_t r300_num_gb_pipes;
|
||||
uint32_t r300_num_z_pipes;
|
||||
|
||||
Reference in New Issue
Block a user