1 /* 2 * SPDX-License-Identifier: GPL-2.0-or-later 3 * 4 * QemuDmaBuf struct and helpers used for accessing its data 5 * 6 * This work is licensed under the terms of the GNU GPL, version 2 or later. 7 * See the COPYING file in the top-level directory. 8 */ 9 10 #include "qemu/osdep.h" 11 #include "ui/dmabuf.h" 12 13 QemuDmaBuf *qemu_dmabuf_new(uint32_t width, uint32_t height, 14 uint32_t stride, uint32_t x, 15 uint32_t y, uint32_t backing_width, 16 uint32_t backing_height, uint32_t fourcc, 17 uint64_t modifier, int32_t dmabuf_fd, 18 bool allow_fences, bool y0_top) { 19 QemuDmaBuf *dmabuf; 20 21 dmabuf = g_new0(QemuDmaBuf, 1); 22 23 dmabuf->width = width; 24 dmabuf->height = height; 25 dmabuf->stride = stride; 26 dmabuf->x = x; 27 dmabuf->y = y; 28 dmabuf->backing_width = backing_width; 29 dmabuf->backing_height = backing_height; 30 dmabuf->fourcc = fourcc; 31 dmabuf->modifier = modifier; 32 dmabuf->fd = dmabuf_fd; 33 dmabuf->allow_fences = allow_fences; 34 dmabuf->y0_top = y0_top; 35 dmabuf->fence_fd = -1; 36 37 return dmabuf; 38 } 39 40 void qemu_dmabuf_free(QemuDmaBuf *dmabuf) 41 { 42 if (dmabuf == NULL) { 43 return; 44 } 45 46 g_free(dmabuf); 47 } 48 49 int qemu_dmabuf_get_fd(QemuDmaBuf *dmabuf) 50 { 51 assert(dmabuf != NULL); 52 53 return dmabuf->fd; 54 } 55 56 int qemu_dmabuf_dup_fd(QemuDmaBuf *dmabuf) 57 { 58 assert(dmabuf != NULL); 59 60 if (dmabuf->fd >= 0) { 61 return dup(dmabuf->fd); 62 } else { 63 return -1; 64 } 65 } 66 67 void qemu_dmabuf_close(QemuDmaBuf *dmabuf) 68 { 69 assert(dmabuf != NULL); 70 71 if (dmabuf->fd >= 0) { 72 close(dmabuf->fd); 73 dmabuf->fd = -1; 74 } 75 } 76 77 uint32_t qemu_dmabuf_get_width(QemuDmaBuf *dmabuf) 78 { 79 assert(dmabuf != NULL); 80 81 return dmabuf->width; 82 } 83 84 uint32_t qemu_dmabuf_get_height(QemuDmaBuf *dmabuf) 85 { 86 assert(dmabuf != NULL); 87 88 return dmabuf->height; 89 } 90 91 uint32_t qemu_dmabuf_get_stride(QemuDmaBuf *dmabuf) 92 { 93 assert(dmabuf != NULL); 94 95 return dmabuf->stride; 96 } 97 98 uint32_t qemu_dmabuf_get_fourcc(QemuDmaBuf *dmabuf) 99 { 100 assert(dmabuf != NULL); 101 102 return dmabuf->fourcc; 103 } 104 105 uint64_t qemu_dmabuf_get_modifier(QemuDmaBuf *dmabuf) 106 { 107 assert(dmabuf != NULL); 108 109 return dmabuf->modifier; 110 } 111 112 uint32_t qemu_dmabuf_get_texture(QemuDmaBuf *dmabuf) 113 { 114 assert(dmabuf != NULL); 115 116 return dmabuf->texture; 117 } 118 119 uint32_t qemu_dmabuf_get_x(QemuDmaBuf *dmabuf) 120 { 121 assert(dmabuf != NULL); 122 123 return dmabuf->x; 124 } 125 126 uint32_t qemu_dmabuf_get_y(QemuDmaBuf *dmabuf) 127 { 128 assert(dmabuf != NULL); 129 130 return dmabuf->y; 131 } 132 133 uint32_t qemu_dmabuf_get_backing_width(QemuDmaBuf *dmabuf) 134 { 135 assert(dmabuf != NULL); 136 137 return dmabuf->backing_width; 138 } 139 140 uint32_t qemu_dmabuf_get_backing_height(QemuDmaBuf *dmabuf) 141 { 142 assert(dmabuf != NULL); 143 144 return dmabuf->backing_height; 145 } 146 147 bool qemu_dmabuf_get_y0_top(QemuDmaBuf *dmabuf) 148 { 149 assert(dmabuf != NULL); 150 151 return dmabuf->y0_top; 152 } 153 154 void *qemu_dmabuf_get_sync(QemuDmaBuf *dmabuf) 155 { 156 assert(dmabuf != NULL); 157 158 return dmabuf->sync; 159 } 160 161 int32_t qemu_dmabuf_get_fence_fd(QemuDmaBuf *dmabuf) 162 { 163 assert(dmabuf != NULL); 164 165 return dmabuf->fence_fd; 166 } 167 168 bool qemu_dmabuf_get_allow_fences(QemuDmaBuf *dmabuf) 169 { 170 assert(dmabuf != NULL); 171 172 return dmabuf->allow_fences; 173 } 174 175 bool qemu_dmabuf_get_draw_submitted(QemuDmaBuf *dmabuf) 176 { 177 assert(dmabuf != NULL); 178 179 return dmabuf->draw_submitted; 180 } 181 182 void qemu_dmabuf_set_texture(QemuDmaBuf *dmabuf, uint32_t texture) 183 { 184 assert(dmabuf != NULL); 185 dmabuf->texture = texture; 186 } 187 188 void qemu_dmabuf_set_fence_fd(QemuDmaBuf *dmabuf, int32_t fence_fd) 189 { 190 assert(dmabuf != NULL); 191 dmabuf->fence_fd = fence_fd; 192 } 193 194 void qemu_dmabuf_set_sync(QemuDmaBuf *dmabuf, void *sync) 195 { 196 assert(dmabuf != NULL); 197 dmabuf->sync = sync; 198 } 199 200 void qemu_dmabuf_set_draw_submitted(QemuDmaBuf *dmabuf, bool draw_submitted) 201 { 202 assert(dmabuf != NULL); 203 dmabuf->draw_submitted = draw_submitted; 204 } 205 206 void qemu_dmabuf_set_fd(QemuDmaBuf *dmabuf, int32_t fd) 207 { 208 assert(dmabuf != NULL); 209 dmabuf->fd = fd; 210 } 211