bug-14575: normalized queue priorities
diff --git a/icd/intel/dev.c b/icd/intel/dev.c
index 3fe20d5..4f02058 100644
--- a/icd/intel/dev.c
+++ b/icd/intel/dev.c
@@ -77,6 +77,8 @@
assert((q->queueFamilyIndex < INTEL_GPU_ENGINE_COUNT &&
q->queueCount == 1 && !dev->queues[q->queueFamilyIndex]) && "Invalid Queue request");
+ /* Help catch places where we forgot to initialize pQueuePriorities */
+ assert(q->pQueuePriorities);
ret = intel_queue_create(dev, q->queueFamilyIndex,
&dev->queues[q->queueFamilyIndex]);
diff --git a/icd/intel/gpu.c b/icd/intel/gpu.c
index c96b435..81f1430 100644
--- a/icd/intel/gpu.c
+++ b/icd/intel/gpu.c
@@ -259,6 +259,9 @@
pLimits->maxDescriptorSetSampledImages = 128;
// storage images and buffers not implemented; left at zero
+
+ // required to support at least two queue priorities
+ pLimits->discreteQueuePriorities = 2;
}
void intel_gpu_get_props(const struct intel_gpu *gpu,
diff --git a/icd/intel/obj.c b/icd/intel/obj.c
index ba4f254..c447716 100644
--- a/icd/intel/obj.c
+++ b/icd/intel/obj.c
@@ -172,6 +172,9 @@
dbg->create_info_size = size;
size += sizeof(src->pRequestedQueues[0]) * src->requestedQueueCount;
+ for (uint32_t i = 0; i < src->requestedQueueCount; i++) {
+ size += src->pRequestedQueues[i].queueCount * sizeof(float);
+ }
size += sizeof(src->ppEnabledExtensionNames[0]) * src->extensionCount;
for (uint32_t i = 0; i < src->extensionCount; i++) {
size += strlen(src->ppEnabledExtensionNames[i]) + 1;
@@ -190,6 +193,12 @@
memcpy(d, src->pRequestedQueues, size);
dst->pRequestedQueues = (const VkDeviceQueueCreateInfo *) d;
d += size;
+ for (uint32_t i = 0; i < src->requestedQueueCount; i++) {
+ size = sizeof(float) * dst->pRequestedQueues[i].queueCount;
+ memcpy(d, src->pRequestedQueues[i].pQueuePriorities, size);
+ *((float **) &dst->pRequestedQueues[i].pQueuePriorities) = (float *) d;
+ d += size;
+ }
size = sizeof(src->ppEnabledExtensionNames[0]) * src->extensionCount;
dst->ppEnabledExtensionNames = (const char **) d;