merge libdrm 2.4.91diff -r1.9 -r1.10 xsrc/external/mit/libdrm/dist/xf86atomic.h
(mrg)
--- xsrc/external/mit/libdrm/dist/xf86atomic.h 2016/02/25 05:01:21 1.9
+++ xsrc/external/mit/libdrm/dist/xf86atomic.h 2018/03/14 07:19:26 1.10
@@ -91,27 +91,27 @@ typedef struct { | @@ -91,27 +91,27 @@ typedef struct { | |||
91 | typedef struct { volatile LIBDRM_ATOMIC_TYPE atomic; } atomic_t; | 91 | typedef struct { volatile LIBDRM_ATOMIC_TYPE atomic; } atomic_t; | |
92 | 92 | |||
93 | # define atomic_read(x) (int) ((x)->atomic) | 93 | # define atomic_read(x) (int) ((x)->atomic) | |
94 | # define atomic_set(x, val) ((x)->atomic = (LIBDRM_ATOMIC_TYPE)(val)) | 94 | # define atomic_set(x, val) ((x)->atomic = (LIBDRM_ATOMIC_TYPE)(val)) | |
95 | # define atomic_inc(x) (atomic_inc_uint (&(x)->atomic)) | 95 | # define atomic_inc(x) (atomic_inc_uint (&(x)->atomic)) | |
96 | # define atomic_inc_return(x) (atomic_inc_uint_nv(&(x)->atomic)) | 96 | # define atomic_inc_return(x) (atomic_inc_uint_nv(&(x)->atomic)) | |
97 | # define atomic_dec_and_test(x) (atomic_dec_uint_nv(&(x)->atomic) == 0) | 97 | # define atomic_dec_and_test(x) (atomic_dec_uint_nv(&(x)->atomic) == 0) | |
98 | # define atomic_add(x, v) (atomic_add_int(&(x)->atomic, (v))) | 98 | # define atomic_add(x, v) (atomic_add_int(&(x)->atomic, (v))) | |
99 | # define atomic_dec(x, v) (atomic_add_int(&(x)->atomic, -(v))) | 99 | # define atomic_dec(x, v) (atomic_add_int(&(x)->atomic, -(v))) | |
100 | # define atomic_cmpxchg(x, oldv, newv) atomic_cas_uint (&(x)->atomic, oldv, newv) | 100 | # define atomic_cmpxchg(x, oldv, newv) atomic_cas_uint (&(x)->atomic, oldv, newv) | |
101 | 101 | |||
102 | #endif | 102 | #endif | |
103 | 103 | |||
104 | #if ! HAS_ATOMIC_OPS | 104 | #if !defined(HAS_ATOMIC_OPS) | |
105 | #error libdrm requires atomic operations, please define them for your CPU/compiler. | 105 | #error libdrm requires atomic operations, please define them for your CPU/compiler. | |
106 | #endif | 106 | #endif | |
107 | 107 | |||
108 | static inline int atomic_add_unless(atomic_t *v, int add, int unless) | 108 | static inline int atomic_add_unless(atomic_t *v, int add, int unless) | |
109 | { | 109 | { | |
110 | int c, old; | 110 | int c, old; | |
111 | c = atomic_read(v); | 111 | c = atomic_read(v); | |
112 | while (c != unless && (old = atomic_cmpxchg(v, c, c + add)) != c) | 112 | while (c != unless && (old = atomic_cmpxchg(v, c, c + add)) != c) | |
113 | c = old; | 113 | c = old; | |
114 | return c == unless; | 114 | return c == unless; | |
115 | } | 115 | } | |
116 | 116 | |||
117 | #endif | 117 | #endif |
--- xsrc/external/mit/libdrm/dist/xf86drm.c 2017/08/29 06:31:24 1.15
+++ xsrc/external/mit/libdrm/dist/xf86drm.c 2018/03/14 07:19:26 1.16
@@ -1686,26 +1686,63 @@ int drmUpdateDrawableInfo(int fd, drm_dr | @@ -1686,26 +1686,63 @@ int drmUpdateDrawableInfo(int fd, drm_dr | |||
1686 | 1686 | |||
1687 | memclear(update); | 1687 | memclear(update); | |
1688 | update.handle = handle; | 1688 | update.handle = handle; | |
1689 | update.type = type; | 1689 | update.type = type; | |
1690 | update.num = num; | 1690 | update.num = num; | |
1691 | update.data = (unsigned long long)(unsigned long)data; | 1691 | update.data = (unsigned long long)(unsigned long)data; | |
1692 | 1692 | |||
1693 | if (drmIoctl(fd, DRM_IOCTL_UPDATE_DRAW, &update)) | 1693 | if (drmIoctl(fd, DRM_IOCTL_UPDATE_DRAW, &update)) | |
1694 | return -errno; | 1694 | return -errno; | |
1695 | 1695 | |||
1696 | return 0; | 1696 | return 0; | |
1697 | } | 1697 | } | |
1698 | 1698 | |||
1699 | int drmCrtcGetSequence(int fd, uint32_t crtcId, uint64_t *sequence, uint64_t *ns) | |||
1700 | { | |||
1701 | struct drm_crtc_get_sequence get_seq; | |||
1702 | int ret; | |||
1703 | ||||
1704 | memclear(get_seq); | |||
1705 | get_seq.crtc_id = crtcId; | |||
1706 | ret = drmIoctl(fd, DRM_IOCTL_CRTC_GET_SEQUENCE, &get_seq); | |||
1707 | if (ret) | |||
1708 | return ret; | |||
1709 | ||||
1710 | if (sequence) | |||
1711 | *sequence = get_seq.sequence; | |||
1712 | if (ns) | |||
1713 | *ns = get_seq.sequence_ns; | |||
1714 | return 0; | |||
1715 | } | |||
1716 | ||||
1717 | int drmCrtcQueueSequence(int fd, uint32_t crtcId, uint32_t flags, uint64_t sequence, | |||
1718 | uint64_t *sequence_queued, uint64_t user_data) | |||
1719 | { | |||
1720 | struct drm_crtc_queue_sequence queue_seq; | |||
1721 | int ret; | |||
1722 | ||||
1723 | memclear(queue_seq); | |||
1724 | queue_seq.crtc_id = crtcId; | |||
1725 | queue_seq.flags = flags; | |||
1726 | queue_seq.sequence = sequence; | |||
1727 | queue_seq.user_data = user_data; | |||
1728 | ||||
1729 | ret = drmIoctl(fd, DRM_IOCTL_CRTC_QUEUE_SEQUENCE, &queue_seq); | |||
1730 | if (ret == 0 && sequence_queued) | |||
1731 | *sequence_queued = queue_seq.sequence; | |||
1732 | ||||
1733 | return ret; | |||
1734 | } | |||
1735 | ||||
1699 | /** | 1736 | /** | |
1700 | * Acquire the AGP device. | 1737 | * Acquire the AGP device. | |
1701 | * | 1738 | * | |
1702 | * Must be called before any of the other AGP related calls. | 1739 | * Must be called before any of the other AGP related calls. | |
1703 | * | 1740 | * | |
1704 | * \param fd file descriptor. | 1741 | * \param fd file descriptor. | |
1705 | * | 1742 | * | |
1706 | * \return zero on success, or a negative value on failure. | 1743 | * \return zero on success, or a negative value on failure. | |
1707 | * | 1744 | * | |
1708 | * \internal | 1745 | * \internal | |
1709 | * This function is a wrapper around the DRM_IOCTL_AGP_ACQUIRE ioctl. | 1746 | * This function is a wrapper around the DRM_IOCTL_AGP_ACQUIRE ioctl. | |
1710 | */ | 1747 | */ | |
1711 | int drmAgpAcquire(int fd) | 1748 | int drmAgpAcquire(int fd) | |
@@ -4146,83 +4183,131 @@ char *drmGetDeviceNameFromFd2(int fd) | @@ -4146,83 +4183,131 @@ char *drmGetDeviceNameFromFd2(int fd) | |||
4146 | #endif | 4183 | #endif | |
4147 | } | 4184 | } | |
4148 | 4185 | |||
4149 | int drmSyncobjCreate(int fd, uint32_t flags, uint32_t *handle) | 4186 | int drmSyncobjCreate(int fd, uint32_t flags, uint32_t *handle) | |
4150 | { | 4187 | { | |
4151 | struct drm_syncobj_create args; | 4188 | struct drm_syncobj_create args; | |
4152 | int ret; | 4189 | int ret; | |
4153 | 4190 | |||
4154 | memclear(args); | 4191 | memclear(args); | |
4155 | args.flags = flags; | 4192 | args.flags = flags; | |
4156 | args.handle = 0; | 4193 | args.handle = 0; | |
4157 | ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_CREATE, &args); | 4194 | ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_CREATE, &args); | |
4158 | if (ret) | 4195 | if (ret) | |
4159 | return ret; | 4196 | return ret; | |
4160 | *handle = args.handle; | 4197 | *handle = args.handle; | |
4161 | return 0; | 4198 | return 0; | |
4162 | } | 4199 | } | |
4163 | 4200 | |||
4164 | int drmSyncobjDestroy(int fd, uint32_t handle) | 4201 | int drmSyncobjDestroy(int fd, uint32_t handle) | |
4165 | { | 4202 | { | |
4166 | struct drm_syncobj_destroy args; | 4203 | struct drm_syncobj_destroy args; | |
4167 | 4204 | |||
4168 | memclear(args); | 4205 | memclear(args); | |
4169 | args.handle = handle; | 4206 | args.handle = handle; | |
4170 | return drmIoctl(fd, DRM_IOCTL_SYNCOBJ_DESTROY, &args); | 4207 | return drmIoctl(fd, DRM_IOCTL_SYNCOBJ_DESTROY, &args); | |
4171 | } | 4208 | } | |
4172 | 4209 | |||
4173 | int drmSyncobjHandleToFD(int fd, uint32_t handle, int *obj_fd) | 4210 | int drmSyncobjHandleToFD(int fd, uint32_t handle, int *obj_fd) | |
4174 | { | 4211 | { | |
4175 | struct drm_syncobj_handle args; | 4212 | struct drm_syncobj_handle args; | |
4176 | int ret; | 4213 | int ret; | |
4177 | 4214 | |||
4178 | memclear(args); | 4215 | memclear(args); | |
4179 | args.fd = -1; | 4216 | args.fd = -1; | |
4180 | args.handle = handle; | 4217 | args.handle = handle; | |
4181 | ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD, &args); | 4218 | ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD, &args); | |
4182 | if (ret) | 4219 | if (ret) | |
4183 | return ret; | 4220 | return ret; | |
4184 | *obj_fd = args.fd; | 4221 | *obj_fd = args.fd; | |
4185 | return 0; | 4222 | return 0; | |
4186 | } | 4223 | } | |
4187 | 4224 | |||
4188 | int drmSyncobjFDToHandle(int fd, int obj_fd, uint32_t *handle) | 4225 | int drmSyncobjFDToHandle(int fd, int obj_fd, uint32_t *handle) | |
4189 | { | 4226 | { | |
4190 | struct drm_syncobj_handle args; | 4227 | struct drm_syncobj_handle args; | |
4191 | int ret; | 4228 | int ret; | |
4192 | 4229 | |||
4193 | memclear(args); | 4230 | memclear(args); | |
4194 | args.fd = obj_fd; | 4231 | args.fd = obj_fd; | |
4195 | args.handle = 0; | 4232 | args.handle = 0; | |
4196 | ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, &args); | 4233 | ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, &args); | |
4197 | if (ret) | 4234 | if (ret) | |
4198 | return ret; | 4235 | return ret; | |
4199 | *handle = args.handle; | 4236 | *handle = args.handle; | |
4200 | return 0; | 4237 | return 0; | |
4201 | } | 4238 | } | |
4202 | 4239 | |||
4203 | int drmSyncobjImportSyncFile(int fd, uint32_t handle, int sync_file_fd) | 4240 | int drmSyncobjImportSyncFile(int fd, uint32_t handle, int sync_file_fd) | |
4204 | { | 4241 | { | |
4205 | struct drm_syncobj_handle args; | 4242 | struct drm_syncobj_handle args; | |
4206 | 4243 | |||
4207 | memclear(args); | 4244 | memclear(args); | |
4208 | args.fd = sync_file_fd; | 4245 | args.fd = sync_file_fd; | |
4209 | args.handle = handle; | 4246 | args.handle = handle; | |
4210 | args.flags = DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE; | 4247 | args.flags = DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE; | |
4211 | return drmIoctl(fd, DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, &args); | 4248 | return drmIoctl(fd, DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, &args); | |
4212 | } | 4249 | } | |
4213 | 4250 | |||
4214 | int drmSyncobjExportSyncFile(int fd, uint32_t handle, int *sync_file_fd) | 4251 | int drmSyncobjExportSyncFile(int fd, uint32_t handle, int *sync_file_fd) | |
4215 | { | 4252 | { | |
4216 | struct drm_syncobj_handle args; | 4253 | struct drm_syncobj_handle args; | |
4217 | int ret; | 4254 | int ret; | |
4218 | 4255 | |||
4219 | memclear(args); | 4256 | memclear(args); | |
4220 | args.fd = -1; | 4257 | args.fd = -1; | |
4221 | args.handle = handle; | 4258 | args.handle = handle; | |
4222 | args.flags = DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE; | 4259 | args.flags = DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE; | |
4223 | ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD, &args); | 4260 | ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD, &args); | |
4224 | if (ret) | 4261 | if (ret) | |
4225 | return ret; | 4262 | return ret; | |
4226 | *sync_file_fd = args.fd; | 4263 | *sync_file_fd = args.fd; | |
4227 | return 0; | 4264 | return 0; | |
4228 | } | 4265 | } | |
4266 | ||||
4267 | int drmSyncobjWait(int fd, uint32_t *handles, unsigned num_handles, | |||
4268 | int64_t timeout_nsec, unsigned flags, | |||
4269 | uint32_t *first_signaled) | |||
4270 | { | |||
4271 | struct drm_syncobj_wait args; | |||
4272 | int ret; | |||
4273 | ||||
4274 | memclear(args); | |||
4275 | args.handles = (uintptr_t)handles; | |||
4276 | args.timeout_nsec = timeout_nsec; | |||
4277 | args.count_handles = num_handles; | |||
4278 | args.flags = flags; | |||
4279 | ||||
4280 | ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_WAIT, &args); | |||
4281 | if (ret < 0) | |||
4282 | return -errno; | |||
4283 | ||||
4284 | if (first_signaled) | |||
4285 | *first_signaled = args.first_signaled; | |||
4286 | return ret; | |||
4287 | } | |||
4288 | ||||
4289 | int drmSyncobjReset(int fd, const uint32_t *handles, uint32_t handle_count) | |||
4290 | { | |||
4291 | struct drm_syncobj_array args; | |||
4292 | int ret; | |||
4293 | ||||
4294 | memclear(args); | |||
4295 | args.handles = (uintptr_t)handles; | |||
4296 | args.count_handles = handle_count; | |||
4297 | ||||
4298 | ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_RESET, &args); | |||
4299 | return ret; | |||
4300 | } | |||
4301 | ||||
4302 | int drmSyncobjSignal(int fd, const uint32_t *handles, uint32_t handle_count) | |||
4303 | { | |||
4304 | struct drm_syncobj_array args; | |||
4305 | int ret; | |||
4306 | ||||
4307 | memclear(args); | |||
4308 | args.handles = (uintptr_t)handles; | |||
4309 | args.count_handles = handle_count; | |||
4310 | ||||
4311 | ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_SIGNAL, &args); | |||
4312 | return ret; | |||
4313 | } |
--- xsrc/external/mit/libdrm/dist/xf86drm.h 2017/08/29 06:31:24 1.8
+++ xsrc/external/mit/libdrm/dist/xf86drm.h 2018/03/14 07:19:26 1.9
@@ -635,26 +635,32 @@ extern drm_context_t * drmGetReservedCon | @@ -635,26 +635,32 @@ extern drm_context_t * drmGetReservedCon | |||
635 | extern void drmFreeReservedContextList(drm_context_t *); | 635 | extern void drmFreeReservedContextList(drm_context_t *); | |
636 | extern int drmSwitchToContext(int fd, drm_context_t context); | 636 | extern int drmSwitchToContext(int fd, drm_context_t context); | |
637 | extern int drmDestroyContext(int fd, drm_context_t handle); | 637 | extern int drmDestroyContext(int fd, drm_context_t handle); | |
638 | extern int drmCreateDrawable(int fd, drm_drawable_t * handle); | 638 | extern int drmCreateDrawable(int fd, drm_drawable_t * handle); | |
639 | extern int drmDestroyDrawable(int fd, drm_drawable_t handle); | 639 | extern int drmDestroyDrawable(int fd, drm_drawable_t handle); | |
640 | extern int drmUpdateDrawableInfo(int fd, drm_drawable_t handle, | 640 | extern int drmUpdateDrawableInfo(int fd, drm_drawable_t handle, | |
641 | drm_drawable_info_type_t type, | 641 | drm_drawable_info_type_t type, | |
642 | unsigned int num, void *data); | 642 | unsigned int num, void *data); | |
643 | extern int drmCtlInstHandler(int fd, int irq); | 643 | extern int drmCtlInstHandler(int fd, int irq); | |
644 | extern int drmCtlUninstHandler(int fd); | 644 | extern int drmCtlUninstHandler(int fd); | |
645 | extern int drmSetClientCap(int fd, uint64_t capability, | 645 | extern int drmSetClientCap(int fd, uint64_t capability, | |
646 | uint64_t value); | 646 | uint64_t value); | |
647 | 647 | |||
648 | extern int drmCrtcGetSequence(int fd, uint32_t crtcId, | |||
649 | uint64_t *sequence, uint64_t *ns); | |||
650 | extern int drmCrtcQueueSequence(int fd, uint32_t crtcId, | |||
651 | uint32_t flags, uint64_t sequence, | |||
652 | uint64_t *sequence_queued, | |||
653 | uint64_t user_data); | |||
648 | /* General user-level programmer's API: authenticated client and/or X */ | 654 | /* General user-level programmer's API: authenticated client and/or X */ | |
649 | extern int drmMap(int fd, | 655 | extern int drmMap(int fd, | |
650 | drm_handle_t handle, | 656 | drm_handle_t handle, | |
651 | drmSize size, | 657 | drmSize size, | |
652 | drmAddressPtr address); | 658 | drmAddressPtr address); | |
653 | extern int drmUnmap(drmAddress address, drmSize size); | 659 | extern int drmUnmap(drmAddress address, drmSize size); | |
654 | extern drmBufInfoPtr drmGetBufInfo(int fd); | 660 | extern drmBufInfoPtr drmGetBufInfo(int fd); | |
655 | extern drmBufMapPtr drmMapBufs(int fd); | 661 | extern drmBufMapPtr drmMapBufs(int fd); | |
656 | extern int drmUnmapBufs(drmBufMapPtr bufs); | 662 | extern int drmUnmapBufs(drmBufMapPtr bufs); | |
657 | extern int drmDMA(int fd, drmDMAReqPtr request); | 663 | extern int drmDMA(int fd, drmDMAReqPtr request); | |
658 | extern int drmFreeBufs(int fd, int count, int *list); | 664 | extern int drmFreeBufs(int fd, int count, int *list); | |
659 | extern int drmGetLock(int fd, | 665 | extern int drmGetLock(int fd, | |
660 | drm_context_t context, | 666 | drm_context_t context, | |
@@ -727,53 +733,57 @@ extern int drmSLFirst(void *l, unsigned | @@ -727,53 +733,57 @@ extern int drmSLFirst(void *l, unsigned | |||
727 | extern void drmSLDump(void *l); | 733 | extern void drmSLDump(void *l); | |
728 | extern int drmSLLookupNeighbors(void *l, unsigned long key, | 734 | extern int drmSLLookupNeighbors(void *l, unsigned long key, | |
729 | unsigned long *prev_key, void **prev_value, | 735 | unsigned long *prev_key, void **prev_value, | |
730 | unsigned long *next_key, void **next_value); | 736 | unsigned long *next_key, void **next_value); | |
731 | 737 | |||
732 | extern int drmOpenOnce(void *unused, const char *BusID, int *newlyopened); | 738 | extern int drmOpenOnce(void *unused, const char *BusID, int *newlyopened); | |
733 | extern int drmOpenOnceWithType(const char *BusID, int *newlyopened, int type); | 739 | extern int drmOpenOnceWithType(const char *BusID, int *newlyopened, int type); | |
734 | extern void drmCloseOnce(int fd); | 740 | extern void drmCloseOnce(int fd); | |
735 | extern void drmMsg(const char *format, ...) DRM_PRINTFLIKE(1, 2); | 741 | extern void drmMsg(const char *format, ...) DRM_PRINTFLIKE(1, 2); | |
736 | 742 | |||
737 | extern int drmSetMaster(int fd); | 743 | extern int drmSetMaster(int fd); | |
738 | extern int drmDropMaster(int fd); | 744 | extern int drmDropMaster(int fd); | |
739 | 745 | |||
740 | #define DRM_EVENT_CONTEXT_VERSION 3 | 746 | #define DRM_EVENT_CONTEXT_VERSION 4 | |
741 | 747 | |||
742 | typedef struct _drmEventContext { | 748 | typedef struct _drmEventContext { | |
743 | 749 | |||
744 | /* This struct is versioned so we can add more pointers if we | 750 | /* This struct is versioned so we can add more pointers if we | |
745 | * add more events. */ | 751 | * add more events. */ | |
746 | int version; | 752 | int version; | |
747 | 753 | |||
748 | void (*vblank_handler)(int fd, | 754 | void (*vblank_handler)(int fd, | |
749 | unsigned int sequence, | 755 | unsigned int sequence, | |
750 | unsigned int tv_sec, | 756 | unsigned int tv_sec, | |
751 | unsigned int tv_usec, | 757 | unsigned int tv_usec, | |
752 | void *user_data); | 758 | void *user_data); | |
753 | 759 | |||
754 | void (*page_flip_handler)(int fd, | 760 | void (*page_flip_handler)(int fd, | |
755 | unsigned int sequence, | 761 | unsigned int sequence, | |
756 | unsigned int tv_sec, | 762 | unsigned int tv_sec, | |
757 | unsigned int tv_usec, | 763 | unsigned int tv_usec, | |
758 | void *user_data); | 764 | void *user_data); | |
759 | 765 | |||
760 | void (*page_flip_handler2)(int fd, | 766 | void (*page_flip_handler2)(int fd, | |
761 | unsigned int sequence, | 767 | unsigned int sequence, | |
762 | unsigned int tv_sec, | 768 | unsigned int tv_sec, | |
763 | unsigned int tv_usec, | 769 | unsigned int tv_usec, | |
764 | unsigned int crtc_id, | 770 | unsigned int crtc_id, | |
765 | void *user_data); | 771 | void *user_data); | |
766 | 772 | |||
773 | void (*sequence_handler)(int fd, | |||
774 | uint64_t sequence, | |||
775 | uint64_t ns, | |||
776 | uint64_t user_data); | |||
767 | } drmEventContext, *drmEventContextPtr; | 777 | } drmEventContext, *drmEventContextPtr; | |
768 | 778 | |||
769 | extern int drmHandleEvent(int fd, drmEventContextPtr evctx); | 779 | extern int drmHandleEvent(int fd, drmEventContextPtr evctx); | |
770 | 780 | |||
771 | extern char *drmGetDeviceNameFromFd(int fd); | 781 | extern char *drmGetDeviceNameFromFd(int fd); | |
772 | 782 | |||
773 | /* Improved version of drmGetDeviceNameFromFd which attributes for any type of | 783 | /* Improved version of drmGetDeviceNameFromFd which attributes for any type of | |
774 | * device/node - card, control or renderD. | 784 | * device/node - card, control or renderD. | |
775 | */ | 785 | */ | |
776 | extern char *drmGetDeviceNameFromFd2(int fd); | 786 | extern char *drmGetDeviceNameFromFd2(int fd); | |
777 | extern int drmGetNodeTypeFromFd(int fd); | 787 | extern int drmGetNodeTypeFromFd(int fd); | |
778 | 788 | |||
779 | extern int drmPrimeHandleToFD(int fd, uint32_t handle, uint32_t flags, int *prime_fd); | 789 | extern int drmPrimeHandleToFD(int fd, uint32_t handle, uint32_t flags, int *prime_fd); | |
@@ -859,19 +869,24 @@ extern void drmFreeDevices(drmDevicePtr | @@ -859,19 +869,24 @@ extern void drmFreeDevices(drmDevicePtr | |||
859 | #define DRM_DEVICE_GET_PCI_REVISION (1 << 0) | 869 | #define DRM_DEVICE_GET_PCI_REVISION (1 << 0) | |
860 | extern int drmGetDevice2(int fd, uint32_t flags, drmDevicePtr *device); | 870 | extern int drmGetDevice2(int fd, uint32_t flags, drmDevicePtr *device); | |
861 | extern int drmGetDevices2(uint32_t flags, drmDevicePtr devices[], int max_devices); | 871 | extern int drmGetDevices2(uint32_t flags, drmDevicePtr devices[], int max_devices); | |
862 | 872 | |||
863 | extern int drmDevicesEqual(drmDevicePtr a, drmDevicePtr b); | 873 | extern int drmDevicesEqual(drmDevicePtr a, drmDevicePtr b); | |
864 | 874 | |||
865 | extern int drmSyncobjCreate(int fd, uint32_t flags, uint32_t *handle); | 875 | extern int drmSyncobjCreate(int fd, uint32_t flags, uint32_t *handle); | |
866 | extern int drmSyncobjDestroy(int fd, uint32_t handle); | 876 | extern int drmSyncobjDestroy(int fd, uint32_t handle); | |
867 | extern int drmSyncobjHandleToFD(int fd, uint32_t handle, int *obj_fd); | 877 | extern int drmSyncobjHandleToFD(int fd, uint32_t handle, int *obj_fd); | |
868 | extern int drmSyncobjFDToHandle(int fd, int obj_fd, uint32_t *handle); | 878 | extern int drmSyncobjFDToHandle(int fd, int obj_fd, uint32_t *handle); | |
869 | 879 | |||
870 | extern int drmSyncobjImportSyncFile(int fd, uint32_t handle, int sync_file_fd); | 880 | extern int drmSyncobjImportSyncFile(int fd, uint32_t handle, int sync_file_fd); | |
871 | extern int drmSyncobjExportSyncFile(int fd, uint32_t handle, int *sync_file_fd); | 881 | extern int drmSyncobjExportSyncFile(int fd, uint32_t handle, int *sync_file_fd); | |
882 | extern int drmSyncobjWait(int fd, uint32_t *handles, unsigned num_handles, | |||
883 | int64_t timeout_nsec, unsigned flags, | |||
884 | uint32_t *first_signaled); | |||
885 | extern int drmSyncobjReset(int fd, const uint32_t *handles, uint32_t handle_count); | |||
886 | extern int drmSyncobjSignal(int fd, const uint32_t *handles, uint32_t handle_count); | |||
872 | 887 | |||
873 | #if defined(__cplusplus) | 888 | #if defined(__cplusplus) | |
874 | } | 889 | } | |
875 | #endif | 890 | #endif | |
876 | 891 | |||
877 | #endif | 892 | #endif |
--- xsrc/external/mit/libdrm/dist/xf86drmMode.c 2017/08/29 06:31:24 1.12
+++ xsrc/external/mit/libdrm/dist/xf86drmMode.c 2018/03/14 07:19:26 1.13
@@ -261,54 +261,54 @@ int drmModeAddFB(int fd, uint32_t width, | @@ -261,54 +261,54 @@ int drmModeAddFB(int fd, uint32_t width, | |||
261 | f.pitch = pitch; | 261 | f.pitch = pitch; | |
262 | f.bpp = bpp; | 262 | f.bpp = bpp; | |
263 | f.depth = depth; | 263 | f.depth = depth; | |
264 | f.handle = bo_handle; | 264 | f.handle = bo_handle; | |
265 | 265 | |||
266 | if ((ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_ADDFB, &f))) | 266 | if ((ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_ADDFB, &f))) | |
267 | return ret; | 267 | return ret; | |
268 | 268 | |||
269 | *buf_id = f.fb_id; | 269 | *buf_id = f.fb_id; | |
270 | return 0; | 270 | return 0; | |
271 | } | 271 | } | |
272 | 272 | |||
273 | int drmModeAddFB2WithModifiers(int fd, uint32_t width, uint32_t height, | 273 | int drmModeAddFB2WithModifiers(int fd, uint32_t width, uint32_t height, | |
274 | uint32_t pixel_format, uint32_t bo_handles[4], | 274 | uint32_t pixel_format, const uint32_t bo_handles[4], | |
275 | uint32_t pitches[4], uint32_t offsets[4], | 275 | const uint32_t pitches[4], const uint32_t offsets[4], | |
276 | uint64_t modifier[4], uint32_t *buf_id, uint32_t flags) | 276 | const uint64_t modifier[4], uint32_t *buf_id, uint32_t flags) | |
277 | { | 277 | { | |
278 | struct drm_mode_fb_cmd2 f; | 278 | struct drm_mode_fb_cmd2 f; | |
279 | int ret; | 279 | int ret; | |
280 | 280 | |||
281 | memclear(f); | 281 | memclear(f); | |
282 | f.width = width; | 282 | f.width = width; | |
283 | f.height = height; | 283 | f.height = height; | |
284 | f.pixel_format = pixel_format; | 284 | f.pixel_format = pixel_format; | |
285 | f.flags = flags; | 285 | f.flags = flags; | |
286 | memcpy(f.handles, bo_handles, 4 * sizeof(bo_handles[0])); | 286 | memcpy(f.handles, bo_handles, 4 * sizeof(bo_handles[0])); | |
287 | memcpy(f.pitches, pitches, 4 * sizeof(pitches[0])); | 287 | memcpy(f.pitches, pitches, 4 * sizeof(pitches[0])); | |
288 | memcpy(f.offsets, offsets, 4 * sizeof(offsets[0])); | 288 | memcpy(f.offsets, offsets, 4 * sizeof(offsets[0])); | |
289 | if (modifier) | 289 | if (modifier) | |
290 | memcpy(f.modifier, modifier, 4 * sizeof(modifier[0])); | 290 | memcpy(f.modifier, modifier, 4 * sizeof(modifier[0])); | |
291 | 291 | |||
292 | if ((ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_ADDFB2, &f))) | 292 | if ((ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_ADDFB2, &f))) | |
293 | return ret; | 293 | return ret; | |
294 | 294 | |||
295 | *buf_id = f.fb_id; | 295 | *buf_id = f.fb_id; | |
296 | return 0; | 296 | return 0; | |
297 | } | 297 | } | |
298 | 298 | |||
299 | int drmModeAddFB2(int fd, uint32_t width, uint32_t height, | 299 | int drmModeAddFB2(int fd, uint32_t width, uint32_t height, | |
300 | uint32_t pixel_format, uint32_t bo_handles[4], | 300 | uint32_t pixel_format, const uint32_t bo_handles[4], | |
301 | uint32_t pitches[4], uint32_t offsets[4], | 301 | const uint32_t pitches[4], const uint32_t offsets[4], | |
302 | uint32_t *buf_id, uint32_t flags) | 302 | uint32_t *buf_id, uint32_t flags) | |
303 | { | 303 | { | |
304 | return drmModeAddFB2WithModifiers(fd, width, height, | 304 | return drmModeAddFB2WithModifiers(fd, width, height, | |
305 | pixel_format, bo_handles, | 305 | pixel_format, bo_handles, | |
306 | pitches, offsets, NULL, | 306 | pitches, offsets, NULL, | |
307 | buf_id, flags); | 307 | buf_id, flags); | |
308 | } | 308 | } | |
309 | 309 | |||
310 | int drmModeRmFB(int fd, uint32_t bufferId) | 310 | int drmModeRmFB(int fd, uint32_t bufferId) | |
311 | { | 311 | { | |
312 | return DRM_IOCTL(fd, DRM_IOCTL_MODE_RMFB, &bufferId); | 312 | return DRM_IOCTL(fd, DRM_IOCTL_MODE_RMFB, &bufferId); | |
313 | } | 313 | } | |
314 | 314 | |||
@@ -892,26 +892,27 @@ int drmModeCrtcSetGamma(int fd, uint32_t | @@ -892,26 +892,27 @@ int drmModeCrtcSetGamma(int fd, uint32_t | |||
892 | l.red = VOID2U64(red); | 892 | l.red = VOID2U64(red); | |
893 | l.green = VOID2U64(green); | 893 | l.green = VOID2U64(green); | |
894 | l.blue = VOID2U64(blue); | 894 | l.blue = VOID2U64(blue); | |
895 | 895 | |||
896 | return DRM_IOCTL(fd, DRM_IOCTL_MODE_SETGAMMA, &l); | 896 | return DRM_IOCTL(fd, DRM_IOCTL_MODE_SETGAMMA, &l); | |
897 | } | 897 | } | |
898 | 898 | |||
899 | int drmHandleEvent(int fd, drmEventContextPtr evctx) | 899 | int drmHandleEvent(int fd, drmEventContextPtr evctx) | |
900 | { | 900 | { | |
901 | char buffer[1024]; | 901 | char buffer[1024]; | |
902 | int len, i; | 902 | int len, i; | |
903 | struct drm_event *e; | 903 | struct drm_event *e; | |
904 | struct drm_event_vblank *vblank; | 904 | struct drm_event_vblank *vblank; | |
905 | struct drm_event_crtc_sequence *seq; | |||
905 | void *user_data; | 906 | void *user_data; | |
906 | 907 | |||
907 | /* The DRM read semantics guarantees that we always get only | 908 | /* The DRM read semantics guarantees that we always get only | |
908 | * complete events. */ | 909 | * complete events. */ | |
909 | 910 | |||
910 | len = read(fd, buffer, sizeof buffer); | 911 | len = read(fd, buffer, sizeof buffer); | |
911 | if (len == 0) | 912 | if (len == 0) | |
912 | return 0; | 913 | return 0; | |
913 | if (len < (int)sizeof *e) | 914 | if (len < (int)sizeof *e) | |
914 | return -1; | 915 | return -1; | |
915 | 916 | |||
916 | i = 0; | 917 | i = 0; | |
917 | while (i < len) { | 918 | while (i < len) { | |
@@ -936,26 +937,34 @@ int drmHandleEvent(int fd, drmEventConte | @@ -936,26 +937,34 @@ int drmHandleEvent(int fd, drmEventConte | |||
936 | evctx->page_flip_handler2(fd, | 937 | evctx->page_flip_handler2(fd, | |
937 | vblank->sequence, | 938 | vblank->sequence, | |
938 | vblank->tv_sec, | 939 | vblank->tv_sec, | |
939 | vblank->tv_usec, | 940 | vblank->tv_usec, | |
940 | vblank->crtc_id, | 941 | vblank->crtc_id, | |
941 | user_data); | 942 | user_data); | |
942 | else if (evctx->version >= 2 && evctx->page_flip_handler) | 943 | else if (evctx->version >= 2 && evctx->page_flip_handler) | |
943 | evctx->page_flip_handler(fd, | 944 | evctx->page_flip_handler(fd, | |
944 | vblank->sequence, | 945 | vblank->sequence, | |
945 | vblank->tv_sec, | 946 | vblank->tv_sec, | |
946 | vblank->tv_usec, | 947 | vblank->tv_usec, | |
947 | user_data); | 948 | user_data); | |
948 | break; | 949 | break; | |
950 | case DRM_EVENT_CRTC_SEQUENCE: | |||
951 | seq = (struct drm_event_crtc_sequence *) e; | |||
952 | if (evctx->version >= 4 && evctx->sequence_handler) | |||
953 | evctx->sequence_handler(fd, | |||
954 | seq->sequence, | |||
955 | seq->time_ns, | |||
956 | seq->user_data); | |||
957 | break; | |||
949 | default: | 958 | default: | |
950 | break; | 959 | break; | |
951 | } | 960 | } | |
952 | i += e->length; | 961 | i += e->length; | |
953 | } | 962 | } | |
954 | 963 | |||
955 | return 0; | 964 | return 0; | |
956 | } | 965 | } | |
957 | 966 | |||
958 | int drmModePageFlip(int fd, uint32_t crtc_id, uint32_t fb_id, | 967 | int drmModePageFlip(int fd, uint32_t crtc_id, uint32_t fb_id, | |
959 | uint32_t flags, void *user_data) | 968 | uint32_t flags, void *user_data) | |
960 | { | 969 | { | |
961 | struct drm_mode_crtc_page_flip flip; | 970 | struct drm_mode_crtc_page_flip flip; | |
@@ -1488,13 +1497,102 @@ drmModeCreatePropertyBlob(int fd, const | @@ -1488,13 +1497,102 @@ drmModeCreatePropertyBlob(int fd, const | |||
1488 | *id = create.blob_id; | 1497 | *id = create.blob_id; | |
1489 | return 0; | 1498 | return 0; | |
1490 | } | 1499 | } | |
1491 | 1500 | |||
1492 | int | 1501 | int | |
1493 | drmModeDestroyPropertyBlob(int fd, uint32_t id) | 1502 | drmModeDestroyPropertyBlob(int fd, uint32_t id) | |
1494 | { | 1503 | { | |
1495 | struct drm_mode_destroy_blob destroy; | 1504 | struct drm_mode_destroy_blob destroy; | |
1496 | 1505 | |||
1497 | memclear(destroy); | 1506 | memclear(destroy); | |
1498 | destroy.blob_id = id; | 1507 | destroy.blob_id = id; | |
1499 | return DRM_IOCTL(fd, DRM_IOCTL_MODE_DESTROYPROPBLOB, &destroy); | 1508 | return DRM_IOCTL(fd, DRM_IOCTL_MODE_DESTROYPROPBLOB, &destroy); | |
1500 | } | 1509 | } | |
1510 | ||||
1511 | int | |||
1512 | drmModeCreateLease(int fd, const uint32_t *objects, int num_objects, int flags, uint32_t *lessee_id) | |||
1513 | { | |||
1514 | struct drm_mode_create_lease create; | |||
1515 | int ret; | |||
1516 | ||||
1517 | memclear(create); | |||
1518 | create.object_ids = (uintptr_t) objects; | |||
1519 | create.object_count = num_objects; | |||
1520 | create.flags = flags; | |||
1521 | ||||
1522 | ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_CREATE_LEASE, &create); | |||
1523 | if (ret == 0) { | |||
1524 | *lessee_id = create.lessee_id; | |||
1525 | return create.fd; | |||
1526 | } | |||
1527 | return -errno; | |||
1528 | } | |||
1529 | ||||
1530 | drmModeLesseeListPtr | |||
1531 | drmModeListLessees(int fd) | |||
1532 | { | |||
1533 | struct drm_mode_list_lessees list; | |||
1534 | uint32_t count; | |||
1535 | drmModeLesseeListPtr ret; | |||
1536 | ||||
1537 | memclear(list); | |||
1538 | ||||
1539 | if (DRM_IOCTL(fd, DRM_IOCTL_MODE_LIST_LESSEES, &list)) | |||
1540 | return NULL; | |||
1541 | ||||
1542 | count = list.count_lessees; | |||
1543 | ret = drmMalloc(sizeof (drmModeLesseeListRes) + count * sizeof (ret->lessees[0])); | |||
1544 | if (!ret) | |||
1545 | return NULL; | |||
1546 | ||||
1547 | list.lessees_ptr = VOID2U64(&ret->lessees[0]); | |||
1548 | if (DRM_IOCTL(fd, DRM_IOCTL_MODE_LIST_LESSEES, &list)) { | |||
1549 | drmFree(ret); | |||
1550 | return NULL; | |||
1551 | } | |||
1552 | ||||
1553 | ret->count = count; | |||
1554 | return ret; | |||
1555 | } | |||
1556 | ||||
1557 | drmModeObjectListPtr | |||
1558 | drmModeGetLease(int fd) | |||
1559 | { | |||
1560 | struct drm_mode_get_lease get; | |||
1561 | uint32_t count; | |||
1562 | drmModeObjectListPtr ret; | |||
1563 | ||||
1564 | memclear(get); | |||
1565 | ||||
1566 | if (DRM_IOCTL(fd, DRM_IOCTL_MODE_GET_LEASE, &get)) | |||
1567 | return NULL; | |||
1568 | ||||
1569 | count = get.count_objects; | |||
1570 | ret = drmMalloc(sizeof (drmModeObjectListRes) + count * sizeof (ret->objects[0])); | |||
1571 | if (!ret) | |||
1572 | return NULL; | |||
1573 | ||||
1574 | get.objects_ptr = VOID2U64(&ret->objects[0]); | |||
1575 | if (DRM_IOCTL(fd, DRM_IOCTL_MODE_GET_LEASE, &get)) { | |||
1576 | drmFree(ret); | |||
1577 | return NULL; | |||
1578 | } | |||
1579 | ||||
1580 | ret->count = count; | |||
1581 | return ret; | |||
1582 | } | |||
1583 | ||||
1584 | int | |||
1585 | drmModeRevokeLease(int fd, uint32_t lessee_id) | |||
1586 | { | |||
1587 | struct drm_mode_revoke_lease revoke; | |||
1588 | int ret; | |||
1589 | ||||
1590 | memclear(revoke); | |||
1591 | ||||
1592 | revoke.lessee_id = lessee_id; | |||
1593 | ||||
1594 | ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_REVOKE_LEASE, &revoke); | |||
1595 | if (ret == 0) | |||
1596 | return 0; | |||
1597 | return -errno; | |||
1598 | } |
--- xsrc/external/mit/libdrm/dist/xf86drmMode.h 2017/03/04 23:22:48 1.7
+++ xsrc/external/mit/libdrm/dist/xf86drmMode.h 2018/03/14 07:19:26 1.8
@@ -359,35 +359,36 @@ extern drmModeResPtr drmModeGetResources | @@ -359,35 +359,36 @@ extern drmModeResPtr drmModeGetResources | |||
359 | /** | 359 | /** | |
360 | * Retrive information about framebuffer bufferId | 360 | * Retrive information about framebuffer bufferId | |
361 | */ | 361 | */ | |
362 | extern drmModeFBPtr drmModeGetFB(int fd, uint32_t bufferId); | 362 | extern drmModeFBPtr drmModeGetFB(int fd, uint32_t bufferId); | |
363 | 363 | |||
364 | /** | 364 | /** | |
365 | * Creates a new framebuffer with an buffer object as its scanout buffer. | 365 | * Creates a new framebuffer with an buffer object as its scanout buffer. | |
366 | */ | 366 | */ | |
367 | extern int drmModeAddFB(int fd, uint32_t width, uint32_t height, uint8_t depth, | 367 | extern int drmModeAddFB(int fd, uint32_t width, uint32_t height, uint8_t depth, | |
368 | uint8_t bpp, uint32_t pitch, uint32_t bo_handle, | 368 | uint8_t bpp, uint32_t pitch, uint32_t bo_handle, | |
369 | uint32_t *buf_id); | 369 | uint32_t *buf_id); | |
370 | /* ...with a specific pixel format */ | 370 | /* ...with a specific pixel format */ | |
371 | extern int drmModeAddFB2(int fd, uint32_t width, uint32_t height, | 371 | extern int drmModeAddFB2(int fd, uint32_t width, uint32_t height, | |
372 | uint32_t pixel_format, uint32_t bo_handles[4], | 372 | uint32_t pixel_format, const uint32_t bo_handles[4], | |
373 | uint32_t pitches[4], uint32_t offsets[4], | 373 | const uint32_t pitches[4], const uint32_t offsets[4], | |
374 | uint32_t *buf_id, uint32_t flags); | 374 | uint32_t *buf_id, uint32_t flags); | |
375 | 375 | |||
376 | /* ...with format modifiers */ | 376 | /* ...with format modifiers */ | |
377 | int drmModeAddFB2WithModifiers(int fd, uint32_t width, uint32_t height, | 377 | int drmModeAddFB2WithModifiers(int fd, uint32_t width, uint32_t height, | |
378 | uint32_t pixel_format, uint32_t bo_handles[4], | 378 | uint32_t pixel_format, const uint32_t bo_handles[4], | |
379 | uint32_t pitches[4], uint32_t offsets[4], | 379 | const uint32_t pitches[4], const uint32_t offsets[4], | |
380 | uint64_t modifier[4], uint32_t *buf_id, uint32_t flags); | 380 | const uint64_t modifier[4], uint32_t *buf_id, | |
381 | uint32_t flags); | |||
381 | 382 | |||
382 | /** | 383 | /** | |
383 | * Destroies the given framebuffer. | 384 | * Destroies the given framebuffer. | |
384 | */ | 385 | */ | |
385 | extern int drmModeRmFB(int fd, uint32_t bufferId); | 386 | extern int drmModeRmFB(int fd, uint32_t bufferId); | |
386 | 387 | |||
387 | /** | 388 | /** | |
388 | * Mark a region of a framebuffer as dirty. | 389 | * Mark a region of a framebuffer as dirty. | |
389 | */ | 390 | */ | |
390 | extern int drmModeDirtyFB(int fd, uint32_t bufferId, | 391 | extern int drmModeDirtyFB(int fd, uint32_t bufferId, | |
391 | drmModeClipPtr clips, uint32_t num_clips); | 392 | drmModeClipPtr clips, uint32_t num_clips); | |
392 | 393 | |||
393 | 394 | |||
@@ -510,19 +511,41 @@ extern void drmModeAtomicSetCursor(drmMo | @@ -510,19 +511,41 @@ extern void drmModeAtomicSetCursor(drmMo | |||
510 | extern int drmModeAtomicAddProperty(drmModeAtomicReqPtr req, | 511 | extern int drmModeAtomicAddProperty(drmModeAtomicReqPtr req, | |
511 | uint32_t object_id, | 512 | uint32_t object_id, | |
512 | uint32_t property_id, | 513 | uint32_t property_id, | |
513 | uint64_t value); | 514 | uint64_t value); | |
514 | extern int drmModeAtomicCommit(int fd, | 515 | extern int drmModeAtomicCommit(int fd, | |
515 | drmModeAtomicReqPtr req, | 516 | drmModeAtomicReqPtr req, | |
516 | uint32_t flags, | 517 | uint32_t flags, | |
517 | void *user_data); | 518 | void *user_data); | |
518 | 519 | |||
519 | extern int drmModeCreatePropertyBlob(int fd, const void *data, size_t size, | 520 | extern int drmModeCreatePropertyBlob(int fd, const void *data, size_t size, | |
520 | uint32_t *id); | 521 | uint32_t *id); | |
521 | extern int drmModeDestroyPropertyBlob(int fd, uint32_t id); | 522 | extern int drmModeDestroyPropertyBlob(int fd, uint32_t id); | |
522 | 523 | |||
524 | /* | |||
525 | * DRM mode lease APIs. These create and manage new drm_masters with | |||
526 | * access to a subset of the available DRM resources | |||
527 | */ | |||
528 | ||||
529 | extern int drmModeCreateLease(int fd, const uint32_t *objects, int num_objects, int flags, uint32_t *lessee_id); | |||
530 | ||||
531 | typedef struct drmModeLesseeList { | |||
532 | uint32_t count; | |||
533 | uint32_t lessees[0]; | |||
534 | } drmModeLesseeListRes, *drmModeLesseeListPtr; | |||
535 | ||||
536 | extern drmModeLesseeListPtr drmModeListLessees(int fd); | |||
537 | ||||
538 | typedef struct drmModeObjectList { | |||
539 | uint32_t count; | |||
540 | uint32_t objects[0]; | |||
541 | } drmModeObjectListRes, *drmModeObjectListPtr; | |||
542 | ||||
543 | extern drmModeObjectListPtr drmModeGetLease(int fd); | |||
544 | ||||
545 | extern int drmModeRevokeLease(int fd, uint32_t lessee_id); | |||
523 | 546 | |||
524 | #if defined(__cplusplus) | 547 | #if defined(__cplusplus) | |
525 | } | 548 | } | |
526 | #endif | 549 | #endif | |
527 | 550 | |||
528 | #endif | 551 | #endif |
--- xsrc/external/mit/libdrm/dist/include/drm/drm.h 2017/08/29 06:31:24 1.8
+++ xsrc/external/mit/libdrm/dist/include/drm/drm.h 2018/03/14 07:19:26 1.9
@@ -684,44 +684,85 @@ struct drm_set_client_cap { | @@ -684,44 +684,85 @@ struct drm_set_client_cap { | |||
684 | #define DRM_CLOEXEC O_CLOEXEC | 684 | #define DRM_CLOEXEC O_CLOEXEC | |
685 | struct drm_prime_handle { | 685 | struct drm_prime_handle { | |
686 | __u32 handle; | 686 | __u32 handle; | |
687 | 687 | |||
688 | /** Flags.. only applicable for handle->fd */ | 688 | /** Flags.. only applicable for handle->fd */ | |
689 | __u32 flags; | 689 | __u32 flags; | |
690 | 690 | |||
691 | /** Returned dmabuf file descriptor */ | 691 | /** Returned dmabuf file descriptor */ | |
692 | __s32 fd; | 692 | __s32 fd; | |
693 | }; | 693 | }; | |
694 | 694 | |||
695 | struct drm_syncobj_create { | 695 | struct drm_syncobj_create { | |
696 | __u32 handle; | 696 | __u32 handle; | |
697 | #define DRM_SYNCOBJ_CREATE_SIGNALED (1 << 0) | |||
697 | __u32 flags; | 698 | __u32 flags; | |
698 | }; | 699 | }; | |
699 | 700 | |||
700 | struct drm_syncobj_destroy { | 701 | struct drm_syncobj_destroy { | |
701 | __u32 handle; | 702 | __u32 handle; | |
702 | __u32 pad; | 703 | __u32 pad; | |
703 | }; | 704 | }; | |
704 | 705 | |||
705 | #define DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE (1 << 0) | 706 | #define DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE (1 << 0) | |
706 | #define DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE (1 << 0) | 707 | #define DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE (1 << 0) | |
707 | struct drm_syncobj_handle { | 708 | struct drm_syncobj_handle { | |
708 | __u32 handle; | 709 | __u32 handle; | |
709 | __u32 flags; | 710 | __u32 flags; | |
710 | 711 | |||
711 | __s32 fd; | 712 | __s32 fd; | |
712 | __u32 pad; | 713 | __u32 pad; | |
713 | }; | 714 | }; | |
714 | 715 | |||
716 | #define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL (1 << 0) | |||
717 | #define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT (1 << 1) | |||
718 | struct drm_syncobj_wait { | |||
719 | __u64 handles; | |||
720 | /* absolute timeout */ | |||
721 | __s64 timeout_nsec; | |||
722 | __u32 count_handles; | |||
723 | __u32 flags; | |||
724 | __u32 first_signaled; /* only valid when not waiting all */ | |||
725 | __u32 pad; | |||
726 | }; | |||
727 | ||||
728 | struct drm_syncobj_array { | |||
729 | __u64 handles; | |||
730 | __u32 count_handles; | |||
731 | __u32 pad; | |||
732 | }; | |||
733 | ||||
734 | /* Query current scanout sequence number */ | |||
735 | struct drm_crtc_get_sequence { | |||
736 | __u32 crtc_id; /* requested crtc_id */ | |||
737 | __u32 active; /* return: crtc output is active */ | |||
738 | __u64 sequence; /* return: most recent vblank sequence */ | |||
739 | __s64 sequence_ns; /* return: most recent time of first pixel out */ | |||
740 | }; | |||
741 | ||||
742 | /* Queue event to be delivered at specified sequence. Time stamp marks | |||
743 | * when the first pixel of the refresh cycle leaves the display engine | |||
744 | * for the display | |||
745 | */ | |||
746 | #define DRM_CRTC_SEQUENCE_RELATIVE 0x00000001 /* sequence is relative to current */ | |||
747 | #define DRM_CRTC_SEQUENCE_NEXT_ON_MISS 0x00000002 /* Use next sequence if we've missed */ | |||
748 | ||||
749 | struct drm_crtc_queue_sequence { | |||
750 | __u32 crtc_id; | |||
751 | __u32 flags; | |||
752 | __u64 sequence; /* on input, target sequence. on output, actual sequence */ | |||
753 | __u64 user_data; /* user data passed to event */ | |||
754 | }; | |||
755 | ||||
715 | #if defined(__cplusplus) | 756 | #if defined(__cplusplus) | |
716 | } | 757 | } | |
717 | #endif | 758 | #endif | |
718 | 759 | |||
719 | #include "drm_mode.h" | 760 | #include "drm_mode.h" | |
720 | 761 | |||
721 | #if defined(__cplusplus) | 762 | #if defined(__cplusplus) | |
722 | extern "C" { | 763 | extern "C" { | |
723 | #endif | 764 | #endif | |
724 | 765 | |||
725 | #define DRM_IOCTL_BASE 'd' | 766 | #define DRM_IOCTL_BASE 'd' | |
726 | #define DRM_IO(nr) _IO(DRM_IOCTL_BASE,nr) | 767 | #define DRM_IO(nr) _IO(DRM_IOCTL_BASE,nr) | |
727 | #define DRM_IOR(nr,type) _IOR(DRM_IOCTL_BASE,nr,type) | 768 | #define DRM_IOR(nr,type) _IOR(DRM_IOCTL_BASE,nr,type) | |
@@ -784,26 +825,29 @@ extern "C" { | @@ -784,26 +825,29 @@ extern "C" { | |||
784 | #define DRM_IOCTL_AGP_RELEASE DRM_IO( 0x31) | 825 | #define DRM_IOCTL_AGP_RELEASE DRM_IO( 0x31) | |
785 | #define DRM_IOCTL_AGP_ENABLE DRM_IOW( 0x32, struct drm_agp_mode) | 826 | #define DRM_IOCTL_AGP_ENABLE DRM_IOW( 0x32, struct drm_agp_mode) | |
786 | #define DRM_IOCTL_AGP_INFO DRM_IOR( 0x33, struct drm_agp_info) | 827 | #define DRM_IOCTL_AGP_INFO DRM_IOR( 0x33, struct drm_agp_info) | |
787 | #define DRM_IOCTL_AGP_ALLOC DRM_IOWR(0x34, struct drm_agp_buffer) | 828 | #define DRM_IOCTL_AGP_ALLOC DRM_IOWR(0x34, struct drm_agp_buffer) | |
788 | #define DRM_IOCTL_AGP_FREE DRM_IOW( 0x35, struct drm_agp_buffer) | 829 | #define DRM_IOCTL_AGP_FREE DRM_IOW( 0x35, struct drm_agp_buffer) | |
789 | #define DRM_IOCTL_AGP_BIND DRM_IOW( 0x36, struct drm_agp_binding) | 830 | #define DRM_IOCTL_AGP_BIND DRM_IOW( 0x36, struct drm_agp_binding) | |
790 | #define DRM_IOCTL_AGP_UNBIND DRM_IOW( 0x37, struct drm_agp_binding) | 831 | #define DRM_IOCTL_AGP_UNBIND DRM_IOW( 0x37, struct drm_agp_binding) | |
791 | 832 | |||
792 | #define DRM_IOCTL_SG_ALLOC DRM_IOWR(0x38, struct drm_scatter_gather) | 833 | #define DRM_IOCTL_SG_ALLOC DRM_IOWR(0x38, struct drm_scatter_gather) | |
793 | #define DRM_IOCTL_SG_FREE DRM_IOW( 0x39, struct drm_scatter_gather) | 834 | #define DRM_IOCTL_SG_FREE DRM_IOW( 0x39, struct drm_scatter_gather) | |
794 | 835 | |||
795 | #define DRM_IOCTL_WAIT_VBLANK DRM_IOWR(0x3a, union drm_wait_vblank) | 836 | #define DRM_IOCTL_WAIT_VBLANK DRM_IOWR(0x3a, union drm_wait_vblank) | |
796 | 837 | |||
838 | #define DRM_IOCTL_CRTC_GET_SEQUENCE DRM_IOWR(0x3b, struct drm_crtc_get_sequence) | |||
839 | #define DRM_IOCTL_CRTC_QUEUE_SEQUENCE DRM_IOWR(0x3c, struct drm_crtc_queue_sequence) | |||
840 | ||||
797 | #define DRM_IOCTL_UPDATE_DRAW DRM_IOW(0x3f, struct drm_update_draw) | 841 | #define DRM_IOCTL_UPDATE_DRAW DRM_IOW(0x3f, struct drm_update_draw) | |
798 | 842 | |||
799 | #define DRM_IOCTL_MODE_GETRESOURCES DRM_IOWR(0xA0, struct drm_mode_card_res) | 843 | #define DRM_IOCTL_MODE_GETRESOURCES DRM_IOWR(0xA0, struct drm_mode_card_res) | |
800 | #define DRM_IOCTL_MODE_GETCRTC DRM_IOWR(0xA1, struct drm_mode_crtc) | 844 | #define DRM_IOCTL_MODE_GETCRTC DRM_IOWR(0xA1, struct drm_mode_crtc) | |
801 | #define DRM_IOCTL_MODE_SETCRTC DRM_IOWR(0xA2, struct drm_mode_crtc) | 845 | #define DRM_IOCTL_MODE_SETCRTC DRM_IOWR(0xA2, struct drm_mode_crtc) | |
802 | #define DRM_IOCTL_MODE_CURSOR DRM_IOWR(0xA3, struct drm_mode_cursor) | 846 | #define DRM_IOCTL_MODE_CURSOR DRM_IOWR(0xA3, struct drm_mode_cursor) | |
803 | #define DRM_IOCTL_MODE_GETGAMMA DRM_IOWR(0xA4, struct drm_mode_crtc_lut) | 847 | #define DRM_IOCTL_MODE_GETGAMMA DRM_IOWR(0xA4, struct drm_mode_crtc_lut) | |
804 | #define DRM_IOCTL_MODE_SETGAMMA DRM_IOWR(0xA5, struct drm_mode_crtc_lut) | 848 | #define DRM_IOCTL_MODE_SETGAMMA DRM_IOWR(0xA5, struct drm_mode_crtc_lut) | |
805 | #define DRM_IOCTL_MODE_GETENCODER DRM_IOWR(0xA6, struct drm_mode_get_encoder) | 849 | #define DRM_IOCTL_MODE_GETENCODER DRM_IOWR(0xA6, struct drm_mode_get_encoder) | |
806 | #define DRM_IOCTL_MODE_GETCONNECTOR DRM_IOWR(0xA7, struct drm_mode_get_connector) | 850 | #define DRM_IOCTL_MODE_GETCONNECTOR DRM_IOWR(0xA7, struct drm_mode_get_connector) | |
807 | #define DRM_IOCTL_MODE_ATTACHMODE DRM_IOWR(0xA8, struct drm_mode_mode_cmd) /* deprecated (never worked) */ | 851 | #define DRM_IOCTL_MODE_ATTACHMODE DRM_IOWR(0xA8, struct drm_mode_mode_cmd) /* deprecated (never worked) */ | |
808 | #define DRM_IOCTL_MODE_DETACHMODE DRM_IOWR(0xA9, struct drm_mode_mode_cmd) /* deprecated (never worked) */ | 852 | #define DRM_IOCTL_MODE_DETACHMODE DRM_IOWR(0xA9, struct drm_mode_mode_cmd) /* deprecated (never worked) */ | |
809 | 853 | |||
@@ -824,26 +868,34 @@ extern "C" { | @@ -824,26 +868,34 @@ extern "C" { | |||
824 | #define DRM_IOCTL_MODE_SETPLANE DRM_IOWR(0xB7, struct drm_mode_set_plane) | 868 | #define DRM_IOCTL_MODE_SETPLANE DRM_IOWR(0xB7, struct drm_mode_set_plane) | |
825 | #define DRM_IOCTL_MODE_ADDFB2 DRM_IOWR(0xB8, struct drm_mode_fb_cmd2) | 869 | #define DRM_IOCTL_MODE_ADDFB2 DRM_IOWR(0xB8, struct drm_mode_fb_cmd2) | |
826 | #define DRM_IOCTL_MODE_OBJ_GETPROPERTIES DRM_IOWR(0xB9, struct drm_mode_obj_get_properties) | 870 | #define DRM_IOCTL_MODE_OBJ_GETPROPERTIES DRM_IOWR(0xB9, struct drm_mode_obj_get_properties) | |
827 | #define DRM_IOCTL_MODE_OBJ_SETPROPERTY DRM_IOWR(0xBA, struct drm_mode_obj_set_property) | 871 | #define DRM_IOCTL_MODE_OBJ_SETPROPERTY DRM_IOWR(0xBA, struct drm_mode_obj_set_property) | |
828 | #define DRM_IOCTL_MODE_CURSOR2 DRM_IOWR(0xBB, struct drm_mode_cursor2) | 872 | #define DRM_IOCTL_MODE_CURSOR2 DRM_IOWR(0xBB, struct drm_mode_cursor2) | |
829 | #define DRM_IOCTL_MODE_ATOMIC DRM_IOWR(0xBC, struct drm_mode_atomic) | 873 | #define DRM_IOCTL_MODE_ATOMIC DRM_IOWR(0xBC, struct drm_mode_atomic) | |
830 | #define DRM_IOCTL_MODE_CREATEPROPBLOB DRM_IOWR(0xBD, struct drm_mode_create_blob) | 874 | #define DRM_IOCTL_MODE_CREATEPROPBLOB DRM_IOWR(0xBD, struct drm_mode_create_blob) | |
831 | #define DRM_IOCTL_MODE_DESTROYPROPBLOB DRM_IOWR(0xBE, struct drm_mode_destroy_blob) | 875 | #define DRM_IOCTL_MODE_DESTROYPROPBLOB DRM_IOWR(0xBE, struct drm_mode_destroy_blob) | |
832 | 876 | |||
833 | #define DRM_IOCTL_SYNCOBJ_CREATE DRM_IOWR(0xBF, struct drm_syncobj_create) | 877 | #define DRM_IOCTL_SYNCOBJ_CREATE DRM_IOWR(0xBF, struct drm_syncobj_create) | |
834 | #define DRM_IOCTL_SYNCOBJ_DESTROY DRM_IOWR(0xC0, struct drm_syncobj_destroy) | 878 | #define DRM_IOCTL_SYNCOBJ_DESTROY DRM_IOWR(0xC0, struct drm_syncobj_destroy) | |
835 | #define DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD DRM_IOWR(0xC1, struct drm_syncobj_handle) | 879 | #define DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD DRM_IOWR(0xC1, struct drm_syncobj_handle) | |
836 | #define DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE DRM_IOWR(0xC2, struct drm_syncobj_handle) | 880 | #define DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE DRM_IOWR(0xC2, struct drm_syncobj_handle) | |
881 | #define DRM_IOCTL_SYNCOBJ_WAIT DRM_IOWR(0xC3, struct drm_syncobj_wait) | |||
882 | #define DRM_IOCTL_SYNCOBJ_RESET DRM_IOWR(0xC4, struct drm_syncobj_array) | |||
883 | #define DRM_IOCTL_SYNCOBJ_SIGNAL DRM_IOWR(0xC5, struct drm_syncobj_array) | |||
884 | ||||
885 | #define DRM_IOCTL_MODE_CREATE_LEASE DRM_IOWR(0xC6, struct drm_mode_create_lease) | |||
886 | #define DRM_IOCTL_MODE_LIST_LESSEES DRM_IOWR(0xC7, struct drm_mode_list_lessees) | |||
887 | #define DRM_IOCTL_MODE_GET_LEASE DRM_IOWR(0xC8, struct drm_mode_get_lease) | |||
888 | #define DRM_IOCTL_MODE_REVOKE_LEASE DRM_IOWR(0xC9, struct drm_mode_revoke_lease) | |||
837 | 889 | |||
838 | /** | 890 | /** | |
839 | * Device specific ioctls should only be in their respective headers | 891 | * Device specific ioctls should only be in their respective headers | |
840 | * The device specific ioctl range is from 0x40 to 0x9f. | 892 | * The device specific ioctl range is from 0x40 to 0x9f. | |
841 | * Generic IOCTLS restart at 0xA0. | 893 | * Generic IOCTLS restart at 0xA0. | |
842 | * | 894 | * | |
843 | * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and | 895 | * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and | |
844 | * drmCommandReadWrite(). | 896 | * drmCommandReadWrite(). | |
845 | */ | 897 | */ | |
846 | #define DRM_COMMAND_BASE 0x40 | 898 | #define DRM_COMMAND_BASE 0x40 | |
847 | #define DRM_COMMAND_END 0xA0 | 899 | #define DRM_COMMAND_END 0xA0 | |
848 | 900 | |||
849 | /** | 901 | /** | |
@@ -855,36 +907,47 @@ extern "C" { | @@ -855,36 +907,47 @@ extern "C" { | |||
855 | * events, that is, if for example the read buffer is 100 bytes, and | 907 | * events, that is, if for example the read buffer is 100 bytes, and | |
856 | * there are two 64 byte events pending, only one will be returned. | 908 | * there are two 64 byte events pending, only one will be returned. | |
857 | * | 909 | * | |
858 | * Event types 0 - 0x7fffffff are generic drm events, 0x80000000 and | 910 | * Event types 0 - 0x7fffffff are generic drm events, 0x80000000 and | |
859 | * up are chipset specific. | 911 | * up are chipset specific. | |
860 | */ | 912 | */ | |
861 | struct drm_event { | 913 | struct drm_event { | |
862 | __u32 type; | 914 | __u32 type; | |
863 | __u32 length; | 915 | __u32 length; | |
864 | }; | 916 | }; | |
865 | 917 | |||
866 | #define DRM_EVENT_VBLANK 0x01 | 918 | #define DRM_EVENT_VBLANK 0x01 | |
867 | #define DRM_EVENT_FLIP_COMPLETE 0x02 | 919 | #define DRM_EVENT_FLIP_COMPLETE 0x02 | |
920 | #define DRM_EVENT_CRTC_SEQUENCE 0x03 | |||
868 | 921 | |||
869 | struct drm_event_vblank { | 922 | struct drm_event_vblank { | |
870 | struct drm_event base; | 923 | struct drm_event base; | |
871 | __u64 user_data; | 924 | __u64 user_data; | |
872 | __u32 tv_sec; | 925 | __u32 tv_sec; | |
873 | __u32 tv_usec; | 926 | __u32 tv_usec; | |
874 | __u32 sequence; | 927 | __u32 sequence; | |
875 | __u32 crtc_id; /* 0 on older kernels that do not support this */ | 928 | __u32 crtc_id; /* 0 on older kernels that do not support this */ | |
876 | }; | 929 | }; | |
877 | 930 | |||
931 | /* Event delivered at sequence. Time stamp marks when the first pixel | |||
932 | * of the refresh cycle leaves the display engine for the display | |||
933 | */ | |||
934 | struct drm_event_crtc_sequence { | |||
935 | struct drm_event base; | |||
936 | __u64 user_data; | |||
937 | __s64 time_ns; | |||
938 | __u64 sequence; | |||
939 | }; | |||
940 | ||||
878 | /* typedef area */ | 941 | /* typedef area */ | |
879 | typedef struct drm_clip_rect drm_clip_rect_t; | 942 | typedef struct drm_clip_rect drm_clip_rect_t; | |
880 | typedef struct drm_drawable_info drm_drawable_info_t; | 943 | typedef struct drm_drawable_info drm_drawable_info_t; | |
881 | typedef struct drm_tex_region drm_tex_region_t; | 944 | typedef struct drm_tex_region drm_tex_region_t; | |
882 | typedef struct drm_hw_lock drm_hw_lock_t; | 945 | typedef struct drm_hw_lock drm_hw_lock_t; | |
883 | typedef struct drm_version drm_version_t; | 946 | typedef struct drm_version drm_version_t; | |
884 | typedef struct drm_unique drm_unique_t; | 947 | typedef struct drm_unique drm_unique_t; | |
885 | typedef struct drm_list drm_list_t; | 948 | typedef struct drm_list drm_list_t; | |
886 | typedef struct drm_block drm_block_t; | 949 | typedef struct drm_block drm_block_t; | |
887 | typedef struct drm_control drm_control_t; | 950 | typedef struct drm_control drm_control_t; | |
888 | typedef enum drm_map_type drm_map_type_t; | 951 | typedef enum drm_map_type drm_map_type_t; | |
889 | typedef enum drm_map_flags drm_map_flags_t; | 952 | typedef enum drm_map_flags drm_map_flags_t; | |
890 | typedef struct drm_ctx_priv_map drm_ctx_priv_map_t; | 953 | typedef struct drm_ctx_priv_map drm_ctx_priv_map_t; |
--- xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c 2017/08/29 06:31:24 1.14
+++ xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c 2018/03/14 07:19:26 1.15
@@ -57,27 +57,27 @@ | @@ -57,27 +57,27 @@ | |||
57 | #ifndef ETIME | 57 | #ifndef ETIME | |
58 | #define ETIME ETIMEDOUT | 58 | #define ETIME ETIMEDOUT | |
59 | #endif | 59 | #endif | |
60 | #include "libdrm_macros.h" | 60 | #include "libdrm_macros.h" | |
61 | #include "libdrm_lists.h" | 61 | #include "libdrm_lists.h" | |
62 | #include "intel_bufmgr.h" | 62 | #include "intel_bufmgr.h" | |
63 | #include "intel_bufmgr_priv.h" | 63 | #include "intel_bufmgr_priv.h" | |
64 | #include "intel_chipset.h" | 64 | #include "intel_chipset.h" | |
65 | #include "string.h" | 65 | #include "string.h" | |
66 | 66 | |||
67 | #include "i915_drm.h" | 67 | #include "i915_drm.h" | |
68 | #include "uthash.h" | 68 | #include "uthash.h" | |
69 | 69 | |||
70 | #ifdef HAVE_VALGRIND | 70 | #if HAVE_VALGRIND | |
71 | #include <valgrind.h> | 71 | #include <valgrind.h> | |
72 | #include <memcheck.h> | 72 | #include <memcheck.h> | |
73 | #define VG(x) x | 73 | #define VG(x) x | |
74 | #else | 74 | #else | |
75 | #define VG(x) | 75 | #define VG(x) | |
76 | #endif | 76 | #endif | |
77 | 77 | |||
78 | #define memclear(s) memset(&s, 0, sizeof(s)) | 78 | #define memclear(s) memset(&s, 0, sizeof(s)) | |
79 | 79 | |||
80 | #define DBG(...) do { \ | 80 | #define DBG(...) do { \ | |
81 | if (bufmgr_gem->bufmgr.debug) \ | 81 | if (bufmgr_gem->bufmgr.debug) \ | |
82 | fprintf(stderr, __VA_ARGS__); \ | 82 | fprintf(stderr, __VA_ARGS__); \ | |
83 | } while (0) | 83 | } while (0) | |
@@ -1618,27 +1618,27 @@ drm_intel_gem_bo_map_gtt(drm_intel_bo *b | @@ -1618,27 +1618,27 @@ drm_intel_gem_bo_map_gtt(drm_intel_bo *b | |||
1618 | * This is used in the implementation of GL_ARB_map_buffer_range: The | 1618 | * This is used in the implementation of GL_ARB_map_buffer_range: The | |
1619 | * user asks to create a buffer, then does a mapping, fills some | 1619 | * user asks to create a buffer, then does a mapping, fills some | |
1620 | * space, runs a drawing command, then asks to map it again without | 1620 | * space, runs a drawing command, then asks to map it again without | |
1621 | * synchronizing because it guarantees that it won't write over the | 1621 | * synchronizing because it guarantees that it won't write over the | |
1622 | * data that the GPU is busy using (or, more specifically, that if it | 1622 | * data that the GPU is busy using (or, more specifically, that if it | |
1623 | * does write over the data, it acknowledges that rendering is | 1623 | * does write over the data, it acknowledges that rendering is | |
1624 | * undefined). | 1624 | * undefined). | |
1625 | */ | 1625 | */ | |
1626 | 1626 | |||
1627 | int | 1627 | int | |
1628 | drm_intel_gem_bo_map_unsynchronized(drm_intel_bo *bo) | 1628 | drm_intel_gem_bo_map_unsynchronized(drm_intel_bo *bo) | |
1629 | { | 1629 | { | |
1630 | drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *) bo->bufmgr; | 1630 | drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *) bo->bufmgr; | |
1631 | #ifdef HAVE_VALGRIND | 1631 | #if HAVE_VALGRIND | |
1632 | drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo; | 1632 | drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo; | |
1633 | #endif | 1633 | #endif | |
1634 | int ret; | 1634 | int ret; | |
1635 | 1635 | |||
1636 | /* If the CPU cache isn't coherent with the GTT, then use a | 1636 | /* If the CPU cache isn't coherent with the GTT, then use a | |
1637 | * regular synchronized mapping. The problem is that we don't | 1637 | * regular synchronized mapping. The problem is that we don't | |
1638 | * track where the buffer was last used on the CPU side in | 1638 | * track where the buffer was last used on the CPU side in | |
1639 | * terms of drm_intel_bo_map vs drm_intel_gem_bo_map_gtt, so | 1639 | * terms of drm_intel_bo_map vs drm_intel_gem_bo_map_gtt, so | |
1640 | * we would potentially corrupt the buffer even when the user | 1640 | * we would potentially corrupt the buffer even when the user | |
1641 | * does reasonable things. | 1641 | * does reasonable things. | |
1642 | */ | 1642 | */ | |
1643 | if (!bufmgr_gem->has_llc) | 1643 | if (!bufmgr_gem->has_llc) | |
1644 | return drm_intel_gem_bo_map_gtt(bo); | 1644 | return drm_intel_gem_bo_map_gtt(bo); |
--- xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c 2017/08/29 06:31:24 1.10
+++ xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c 2018/03/14 07:19:26 1.11
@@ -241,26 +241,109 @@ static void dump_blob(struct device *dev | @@ -241,26 +241,109 @@ static void dump_blob(struct device *dev | |||
241 | 241 | |||
242 | blob_data = blob->data; | 242 | blob_data = blob->data; | |
243 | 243 | |||
244 | for (i = 0; i < blob->length; i++) { | 244 | for (i = 0; i < blob->length; i++) { | |
245 | if (i % 16 == 0) | 245 | if (i % 16 == 0) | |
246 | printf("\n\t\t\t"); | 246 | printf("\n\t\t\t"); | |
247 | printf("%.2hhx", blob_data[i]); | 247 | printf("%.2hhx", blob_data[i]); | |
248 | } | 248 | } | |
249 | printf("\n"); | 249 | printf("\n"); | |
250 | 250 | |||
251 | drmModeFreePropertyBlob(blob); | 251 | drmModeFreePropertyBlob(blob); | |
252 | } | 252 | } | |
253 | 253 | |||
254 | static const char *modifier_to_string(uint64_t modifier) | |||
255 | { | |||
256 | switch (modifier) { | |||
257 | case DRM_FORMAT_MOD_INVALID: | |||
258 | return "INVALID"; | |||
259 | case DRM_FORMAT_MOD_LINEAR: | |||
260 | return "LINEAR"; | |||
261 | case I915_FORMAT_MOD_X_TILED: | |||
262 | return "X_TILED"; | |||
263 | case I915_FORMAT_MOD_Y_TILED: | |||
264 | return "Y_TILED"; | |||
265 | case I915_FORMAT_MOD_Yf_TILED: | |||
266 | return "Yf_TILED"; | |||
267 | case I915_FORMAT_MOD_Y_TILED_CCS: | |||
268 | return "Y_TILED_CCS"; | |||
269 | case I915_FORMAT_MOD_Yf_TILED_CCS: | |||
270 | return "Yf_TILED_CCS"; | |||
271 | case DRM_FORMAT_MOD_SAMSUNG_64_32_TILE: | |||
272 | return "SAMSUNG_64_32_TILE"; | |||
273 | case DRM_FORMAT_MOD_VIVANTE_TILED: | |||
274 | return "VIVANTE_TILED"; | |||
275 | case DRM_FORMAT_MOD_VIVANTE_SUPER_TILED: | |||
276 | return "VIVANTE_SUPER_TILED"; | |||
277 | case DRM_FORMAT_MOD_VIVANTE_SPLIT_TILED: | |||
278 | return "VIVANTE_SPLIT_TILED"; | |||
279 | case DRM_FORMAT_MOD_VIVANTE_SPLIT_SUPER_TILED: | |||
280 | return "VIVANTE_SPLIT_SUPER_TILED"; | |||
281 | case DRM_FORMAT_MOD_NVIDIA_TEGRA_TILED: | |||
282 | return "NVIDIA_TEGRA_TILED"; | |||
283 | case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(0): | |||
284 | return "NVIDIA_16BX2_BLOCK(0)"; | |||
285 | case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(1): | |||
286 | return "NVIDIA_16BX2_BLOCK(1)"; | |||
287 | case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(2): | |||
288 | return "NVIDIA_16BX2_BLOCK(2)"; | |||
289 | case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(3): | |||
290 | return "NVIDIA_16BX2_BLOCK(3)"; | |||
291 | case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(4): | |||
292 | return "NVIDIA_16BX2_BLOCK(4)"; | |||
293 | case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(5): | |||
294 | return "NVIDIA_16BX2_BLOCK(5)"; | |||
295 | case DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED: | |||
296 | return "MOD_BROADCOM_VC4_T_TILED"; | |||
297 | default: | |||
298 | return "(UNKNOWN MODIFIER)"; | |||
299 | } | |||
300 | } | |||
301 | ||||
302 | static void dump_in_formats(struct device *dev, uint32_t blob_id) | |||
303 | { | |||
304 | uint32_t i, j; | |||
305 | drmModePropertyBlobPtr blob; | |||
306 | struct drm_format_modifier_blob *header; | |||
307 | uint32_t *formats; | |||
308 | struct drm_format_modifier *modifiers; | |||
309 | ||||
310 | printf("\t\tin_formats blob decoded:\n"); | |||
311 | blob = drmModeGetPropertyBlob(dev->fd, blob_id); | |||
312 | if (!blob) { | |||
313 | printf("\n"); | |||
314 | return; | |||
315 | } | |||
316 | ||||
317 | header = blob->data; | |||
318 | formats = (uint32_t *) ((char *) header + header->formats_offset); | |||
319 | modifiers = (struct drm_format_modifier *) | |||
320 | ((char *) header + header->modifiers_offset); | |||
321 | ||||
322 | for (i = 0; i < header->count_formats; i++) { | |||
323 | printf("\t\t\t"); | |||
324 | dump_fourcc(formats[i]); | |||
325 | printf(": "); | |||
326 | for (j = 0; j < header->count_modifiers; j++) { | |||
327 | uint64_t mask = 1ULL << i; | |||
328 | if (modifiers[j].formats & mask) | |||
329 | printf(" %s", modifier_to_string(modifiers[j].modifier)); | |||
330 | } | |||
331 | printf("\n"); | |||
332 | } | |||
333 | ||||
334 | drmModeFreePropertyBlob(blob); | |||
335 | } | |||
336 | ||||
254 | static void dump_prop(struct device *dev, drmModePropertyPtr prop, | 337 | static void dump_prop(struct device *dev, drmModePropertyPtr prop, | |
255 | uint32_t prop_id, uint64_t value) | 338 | uint32_t prop_id, uint64_t value) | |
256 | { | 339 | { | |
257 | int i; | 340 | int i; | |
258 | printf("\t%d", prop_id); | 341 | printf("\t%d", prop_id); | |
259 | if (!prop) { | 342 | if (!prop) { | |
260 | printf("\n"); | 343 | printf("\n"); | |
261 | return; | 344 | return; | |
262 | } | 345 | } | |
263 | 346 | |||
264 | printf(" %s:\n", prop->name); | 347 | printf(" %s:\n", prop->name); | |
265 | 348 | |||
266 | printf("\t\tflags:"); | 349 | printf("\t\tflags:"); | |
@@ -318,26 +401,29 @@ static void dump_prop(struct device *dev | @@ -318,26 +401,29 @@ static void dump_prop(struct device *dev | |||
318 | dump_blob(dev, prop->blob_ids[i]); | 401 | dump_blob(dev, prop->blob_ids[i]); | |
319 | printf("\n"); | 402 | printf("\n"); | |
320 | } else { | 403 | } else { | |
321 | assert(prop->count_blobs == 0); | 404 | assert(prop->count_blobs == 0); | |
322 | } | 405 | } | |
323 | 406 | |||
324 | printf("\t\tvalue:"); | 407 | printf("\t\tvalue:"); | |
325 | if (drm_property_type_is(prop, DRM_MODE_PROP_BLOB)) | 408 | if (drm_property_type_is(prop, DRM_MODE_PROP_BLOB)) | |
326 | dump_blob(dev, value); | 409 | dump_blob(dev, value); | |
327 | else if (drm_property_type_is(prop, DRM_MODE_PROP_SIGNED_RANGE)) | 410 | else if (drm_property_type_is(prop, DRM_MODE_PROP_SIGNED_RANGE)) | |
328 | printf(" %"PRId64"\n", value); | 411 | printf(" %"PRId64"\n", value); | |
329 | else | 412 | else | |
330 | printf(" %"PRIu64"\n", value); | 413 | printf(" %"PRIu64"\n", value); | |
414 | ||||
415 | if (strcmp(prop->name, "IN_FORMATS") == 0) | |||
416 | dump_in_formats(dev, value); | |||
331 | } | 417 | } | |
332 | 418 | |||
333 | static void dump_connectors(struct device *dev) | 419 | static void dump_connectors(struct device *dev) | |
334 | { | 420 | { | |
335 | int i, j; | 421 | int i, j; | |
336 | 422 | |||
337 | printf("Connectors:\n"); | 423 | printf("Connectors:\n"); | |
338 | printf("id\tencoder\tstatus\t\tname\t\tsize (mm)\tmodes\tencoders\n"); | 424 | printf("id\tencoder\tstatus\t\tname\t\tsize (mm)\tmodes\tencoders\n"); | |
339 | for (i = 0; i < dev->resources->res->count_connectors; i++) { | 425 | for (i = 0; i < dev->resources->res->count_connectors; i++) { | |
340 | struct connector *_connector = &dev->resources->connectors[i]; | 426 | struct connector *_connector = &dev->resources->connectors[i]; | |
341 | drmModeConnector *connector = _connector->connector; | 427 | drmModeConnector *connector = _connector->connector; | |
342 | if (!connector) | 428 | if (!connector) | |
343 | continue; | 429 | continue; | |
@@ -562,30 +648,33 @@ static struct resources *get_resources(s | @@ -562,30 +648,33 @@ static struct resources *get_resources(s | |||
562 | strerror(errno)); \ | 648 | strerror(errno)); \ | |
563 | } \ | 649 | } \ | |
564 | } while (0) | 650 | } while (0) | |
565 | 651 | |||
566 | get_resource(res, res, crtc, Crtc); | 652 | get_resource(res, res, crtc, Crtc); | |
567 | get_resource(res, res, encoder, Encoder); | 653 | get_resource(res, res, encoder, Encoder); | |
568 | get_resource(res, res, connector, Connector); | 654 | get_resource(res, res, connector, Connector); | |
569 | get_resource(res, res, fb, FB); | 655 | get_resource(res, res, fb, FB); | |
570 | 656 | |||
571 | /* Set the name of all connectors based on the type name and the per-type ID. */ | 657 | /* Set the name of all connectors based on the type name and the per-type ID. */ | |
572 | for (i = 0; i < res->res->count_connectors; i++) { | 658 | for (i = 0; i < res->res->count_connectors; i++) { | |
573 | struct connector *connector = &res->connectors[i]; | 659 | struct connector *connector = &res->connectors[i]; | |
574 | drmModeConnector *conn = connector->connector; | 660 | drmModeConnector *conn = connector->connector; | |
661 | int num; | |||
575 | 662 | |||
576 | asprintf(&connector->name, "%s-%u", | 663 | num = asprintf(&connector->name, "%s-%u", | |
577 | util_lookup_connector_type_name(conn->connector_type), | 664 | util_lookup_connector_type_name(conn->connector_type), | |
578 | conn->connector_type_id); | 665 | conn->connector_type_id); | |
666 | if (num < 0) | |||
667 | goto error; | |||
579 | } | 668 | } | |
580 | 669 | |||
581 | #define get_properties(_res, __res, type, Type) \ | 670 | #define get_properties(_res, __res, type, Type) \ | |
582 | do { \ | 671 | do { \ | |
583 | for (i = 0; i < (int)(_res)->__res->count_##type##s; ++i) { \ | 672 | for (i = 0; i < (int)(_res)->__res->count_##type##s; ++i) { \ | |
584 | struct type *obj = &res->type##s[i]; \ | 673 | struct type *obj = &res->type##s[i]; \ | |
585 | unsigned int j; \ | 674 | unsigned int j; \ | |
586 | obj->props = \ | 675 | obj->props = \ | |
587 | drmModeObjectGetProperties(dev->fd, obj->type->type##_id, \ | 676 | drmModeObjectGetProperties(dev->fd, obj->type->type##_id, \ | |
588 | DRM_MODE_OBJECT_##Type); \ | 677 | DRM_MODE_OBJECT_##Type); \ | |
589 | if (!obj->props) { \ | 678 | if (!obj->props) { \ | |
590 | fprintf(stderr, \ | 679 | fprintf(stderr, \ | |
591 | "could not get %s %i properties: %s\n", \ | 680 | "could not get %s %i properties: %s\n", \ | |
@@ -997,27 +1086,28 @@ static int set_plane(struct device *dev, | @@ -997,27 +1086,28 @@ static int set_plane(struct device *dev, | |||
997 | plane_id = p->plane_id; | 1086 | plane_id = p->plane_id; | |
998 | 1087 | |||
999 | for (i = 0; i < dev->resources->plane_res->count_planes; i++) { | 1088 | for (i = 0; i < dev->resources->plane_res->count_planes; i++) { | |
1000 | ovr = dev->resources->planes[i].plane; | 1089 | ovr = dev->resources->planes[i].plane; | |
1001 | if (!ovr) | 1090 | if (!ovr) | |
1002 | continue; | 1091 | continue; | |
1003 | 1092 | |||
1004 | if (plane_id && plane_id != ovr->plane_id) | 1093 | if (plane_id && plane_id != ovr->plane_id) | |
1005 | continue; | 1094 | continue; | |
1006 | 1095 | |||
1007 | if (!format_support(ovr, p->fourcc)) | 1096 | if (!format_support(ovr, p->fourcc)) | |
1008 | continue; | 1097 | continue; | |
1009 | 1098 | |||
1010 | if ((ovr->possible_crtcs & (1 << pipe)) && !ovr->crtc_id) { | 1099 | if ((ovr->possible_crtcs & (1 << pipe)) && | |
1100 | (ovr->crtc_id == 0 || ovr->crtc_id == p->crtc_id)) { | |||
1011 | plane_id = ovr->plane_id; | 1101 | plane_id = ovr->plane_id; | |
1012 | break; | 1102 | break; | |
1013 | } | 1103 | } | |
1014 | } | 1104 | } | |
1015 | 1105 | |||
1016 | if (i == dev->resources->plane_res->count_planes) { | 1106 | if (i == dev->resources->plane_res->count_planes) { | |
1017 | fprintf(stderr, "no unused plane available for CRTC %u\n", | 1107 | fprintf(stderr, "no unused plane available for CRTC %u\n", | |
1018 | crtc->crtc->crtc_id); | 1108 | crtc->crtc->crtc_id); | |
1019 | return -1; | 1109 | return -1; | |
1020 | } | 1110 | } | |
1021 | 1111 | |||
1022 | fprintf(stderr, "testing %dx%d@%s overlay plane %u\n", | 1112 | fprintf(stderr, "testing %dx%d@%s overlay plane %u\n", | |
1023 | p->w, p->h, p->format_str, plane_id); | 1113 | p->w, p->h, p->format_str, plane_id); |