There is no other way to check for support.
Reviewed-by: Christian König <christian.koenig@amd.com>
#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)
#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];
}
}
+ /* 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));
#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;
boolean has_uvd;
uint32_t vce_fw_version;
+ boolean has_userptr;
uint32_t r300_num_gb_pipes;
uint32_t r300_num_z_pipes;