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;