intel: implement all queue functions except intelQueueSubmit
intelQueueSubmit depends on XGL_CMD_BUFFER support which is still missing.
diff --git a/icd/intel/dev.c b/icd/intel/dev.c
index 759c2cf..ed79469 100644
--- a/icd/intel/dev.c
+++ b/icd/intel/dev.c
@@ -59,6 +59,14 @@
icd_free(queue);
}
+static XGL_RESULT queue_wait(struct intel_queue *queue, int64_t timeout)
+{
+ struct intel_bo *bo = queue->last_submitted_bo;
+
+ return (!bo || intel_bo_wait(bo, timeout) == 0) ?
+ XGL_SUCCESS : XGL_ERROR_UNKNOWN;
+}
+
static struct intel_dev_dbg *dev_dbg_create(const XGL_DEVICE_CREATE_INFO *info)
{
struct intel_dev_dbg *dbg;
@@ -339,3 +347,62 @@
return XGL_SUCCESS;
}
+
+XGL_RESULT XGLAPI intelGetDeviceQueue(
+ XGL_DEVICE device,
+ XGL_QUEUE_TYPE queueType,
+ XGL_UINT queueIndex,
+ XGL_QUEUE* pQueue)
+{
+ struct intel_dev *dev = intel_dev(device);
+
+ switch (queueType) {
+ case XGL_QUEUE_TYPE_GRAPHICS:
+ case XGL_QUEUE_TYPE_COMPUTE:
+ if (queueIndex > 0)
+ return XGL_ERROR_UNAVAILABLE;
+ *pQueue = dev->queues[INTEL_GPU_ENGINE_3D];
+ return XGL_SUCCESS;
+ case XGL_QUEUE_TYPE_DMA:
+ default:
+ return XGL_ERROR_UNAVAILABLE;
+ }
+}
+
+XGL_RESULT XGLAPI intelQueueSetGlobalMemReferences(
+ XGL_QUEUE queue,
+ XGL_UINT memRefCount,
+ const XGL_MEMORY_REF* pMemRefs)
+{
+ /*
+ * The winwys maintains the list of memory references. These are ignored
+ * until we move away from the winsys.
+ */
+ return XGL_SUCCESS;
+}
+
+XGL_RESULT XGLAPI intelQueueWaitIdle(
+ XGL_QUEUE queue_)
+{
+ struct intel_queue *queue = intel_queue(queue_);
+
+ return queue_wait(queue, -1);
+}
+
+XGL_RESULT XGLAPI intelDeviceWaitIdle(
+ XGL_DEVICE device)
+{
+ struct intel_dev *dev = intel_dev(device);
+ XGL_RESULT ret = XGL_SUCCESS;
+ XGL_UINT i;
+
+ for (i = 0; i < ARRAY_SIZE(dev->queues); i++) {
+ if (dev->queues[i]) {
+ const XGL_RESULT r = queue_wait(dev->queues[i], -1);
+ if (r != XGL_SUCCESS)
+ ret = r;
+ }
+ }
+
+ return ret;
+}