egl: add helper to combine two u32 into one u64
Use a helper to avoid the common issues of upcasting after the right shift (losing the upper bits) and shifting signed values (sign gets shifted too). Signed-off-by: Eric Engestrom <eric.engestrom@intel.com> Reviewed-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
This commit is contained in:
parent
1ca23420c1
commit
2de9e841e7
|
@ -2424,8 +2424,8 @@ dri2_create_image_dma_buf(_EGLDisplay *disp, _EGLContext *ctx,
|
|||
* will be present in attrs.DMABufPlaneModifiersLo[0] and
|
||||
* attrs.DMABufPlaneModifiersHi[0] */
|
||||
if (attrs.DMABufPlaneModifiersLo[0].IsPresent) {
|
||||
modifier = (uint64_t) attrs.DMABufPlaneModifiersHi[0].Value << 32;
|
||||
modifier |= (uint64_t) (attrs.DMABufPlaneModifiersLo[0].Value & 0xffffffff);
|
||||
modifier = combine_u32_into_u64(attrs.DMABufPlaneModifiersHi[0].Value,
|
||||
attrs.DMABufPlaneModifiersLo[0].Value);
|
||||
has_modifier = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -528,4 +528,10 @@ dri2_init_surface(_EGLSurface *surf, _EGLDisplay *dpy, EGLint type,
|
|||
void
|
||||
dri2_fini_surface(_EGLSurface *surf);
|
||||
|
||||
static inline uint64_t
|
||||
combine_u32_into_u64(uint32_t hi, uint32_t lo)
|
||||
{
|
||||
return (((uint64_t) hi) << 32) | (((uint64_t) lo) & 0xffffffff);
|
||||
}
|
||||
|
||||
#endif /* EGL_DRI2_INCLUDED */
|
||||
|
|
|
@ -818,8 +818,7 @@ create_wl_buffer(struct dri2_egl_display *dri2_dpy,
|
|||
__DRI_IMAGE_ATTRIB_MODIFIER_LOWER,
|
||||
&mod_lo);
|
||||
if (query) {
|
||||
modifier = (uint64_t) mod_hi << 32;
|
||||
modifier |= (uint64_t) (mod_lo & 0xffffffff);
|
||||
modifier = combine_u32_into_u64(mod_hi, mod_lo);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1192,8 +1191,7 @@ dmabuf_handle_modifier(void *data, struct zwp_linux_dmabuf_v1 *dmabuf,
|
|||
dri2_dpy->formats |= (1u << visual_idx);
|
||||
|
||||
mod = u_vector_add(&dri2_dpy->wl_modifiers[visual_idx]);
|
||||
*mod = (uint64_t) modifier_hi << 32;
|
||||
*mod |= (uint64_t) (modifier_lo & 0xffffffff);
|
||||
*mod = combine_u32_into_u64(modifier_hi, modifier_lo);
|
||||
}
|
||||
|
||||
static const struct zwp_linux_dmabuf_v1_listener dmabuf_listener = {
|
||||
|
|
|
@ -915,7 +915,7 @@ dri2_x11_swap_buffers_msc(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw,
|
|||
reply = xcb_dri2_swap_buffers_reply(dri2_dpy->conn, cookie, NULL);
|
||||
|
||||
if (reply) {
|
||||
swap_count = (((int64_t)reply->swap_hi) << 32) | reply->swap_lo;
|
||||
swap_count = combine_u32_into_u64(reply->swap_hi, reply->swap_lo);
|
||||
free(reply);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue