Add tu_drm_submitqueue_new and tu_drm_submitqueue_close.
queue->queue_idx = idx;
queue->flags = flags;
- struct drm_msm_submitqueue req = {
- .flags = 0,
- .prio = 0,
- };
-
- int ret = drmCommandWriteRead(device->physical_device->local_fd,
- DRM_MSM_SUBMITQUEUE_NEW,
- &req, sizeof(req));
+ int ret = tu_drm_submitqueue_new(device, 0, &queue->msm_queue_id);
if (ret)
return VK_ERROR_INITIALIZATION_FAILED;
- queue->msm_queue_id = req.id;
return VK_SUCCESS;
}
static void
tu_queue_finish(struct tu_queue *queue)
{
- drmCommandWrite(queue->device->physical_device->local_fd,
- DRM_MSM_SUBMITQUEUE_CLOSE,
- &queue->msm_queue_id, sizeof(uint32_t));
+ tu_drm_submitqueue_close(queue->device, queue->msm_queue_id);
}
static int
return 0;
}
+int
+tu_drm_submitqueue_new(const struct tu_device *dev,
+ int priority,
+ uint32_t *queue_id)
+{
+ struct drm_msm_submitqueue req = {
+ .flags = 0,
+ .prio = priority,
+ };
+
+ int ret = drmCommandWriteRead(dev->physical_device->local_fd,
+ DRM_MSM_SUBMITQUEUE_NEW, &req, sizeof(req));
+ if (ret)
+ return ret;
+
+ *queue_id = req.id;
+ return 0;
+}
+
+void
+tu_drm_submitqueue_close(const struct tu_device *dev, uint32_t queue_id)
+{
+ drmCommandWrite(dev->physical_device->local_fd, DRM_MSM_SUBMITQUEUE_CLOSE,
+ &queue_id, sizeof(uint32_t));
+}
+
/**
* Return gem handle on success. Return 0 on failure.
*/
int
tu_drm_get_gmem_size(const struct tu_physical_device *dev, uint32_t *size);
+int
+tu_drm_submitqueue_new(const struct tu_device *dev,
+ int priority,
+ uint32_t *queue_id);
+
+void
+tu_drm_submitqueue_close(const struct tu_device *dev, uint32_t queue_id);
+
uint32_t
tu_gem_new(struct tu_device *dev, uint64_t size, uint32_t flags);
void