diff --git a/demos/cube.c b/demos/cube.c
index a435c01..1abf525 100644
--- a/demos/cube.c
+++ b/demos/cube.c
@@ -2304,11 +2304,13 @@
     VkPhysicalDeviceFeatures physDevFeatures;
     vkGetPhysicalDeviceFeatures(demo->gpu, &physDevFeatures);
 
+    float queue_priorities[1] = { 0.0 };
     const VkDeviceQueueCreateInfo queue = {
         .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
         .pNext = NULL,
         .queueFamilyIndex = gfx_queue_idx,
         .queueCount = 1,
+        .pQueuePriorities = queue_priorities
     };
 
     VkDeviceCreateInfo device = {
diff --git a/demos/tri.c b/demos/tri.c
index d03bf16..66dccf6 100644
--- a/demos/tri.c
+++ b/demos/tri.c
@@ -1814,11 +1814,13 @@
         .extensionCount = enabled_extension_count,
         .ppEnabledExtensionNames = (const char *const*) extension_names,
     };
+    float queue_priorities[1] = { 0.0 };
     const VkDeviceQueueCreateInfo queue = {
         .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
         .pNext = NULL,
         .queueFamilyIndex = 0,
         .queueCount = 1,
+        .pQueuePriorities = queue_priorities
     };
     uint32_t gpu_count;
 
diff --git a/demos/vulkaninfo.c b/demos/vulkaninfo.c
index 482f27a..8becb4c 100644
--- a/demos/vulkaninfo.c
+++ b/demos/vulkaninfo.c
@@ -655,10 +655,13 @@
     if (!gpu->queue_reqs)
         ERR_EXIT(VK_ERROR_OUT_OF_HOST_MEMORY);
     for (i = 0; i < gpu->queue_count; i++) {
+        float *queue_priorities = malloc(gpu->queue_props[i].queueCount * sizeof(float));
+        memset(queue_priorities, 0, gpu->queue_props[i].queueCount * sizeof(float));
         gpu->queue_reqs[i].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
         gpu->queue_reqs[i].pNext = NULL;
         gpu->queue_reqs[i].queueFamilyIndex = i;
         gpu->queue_reqs[i].queueCount = gpu->queue_props[i].queueCount;
+        gpu->queue_reqs[i].pQueuePriorities = queue_priorities;
     }
 
     vkGetPhysicalDeviceMemoryProperties(gpu->obj, &gpu->memory_props);
@@ -674,6 +677,9 @@
     app_dev_destroy(&gpu->dev);
     free(gpu->device_extensions);
     free(gpu->queue_reqs);
+    for (uint32_t i = 0; i < gpu->queue_count; i++) {
+        free((void *) gpu->queue_reqs[i].pQueuePriorities);
+    }
     free(gpu->queue_props);
 }
 
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;
diff --git a/include/vulkan.h b/include/vulkan.h
index ceac03a..e938a5b 100644
--- a/include/vulkan.h
+++ b/include/vulkan.h
@@ -1276,6 +1276,7 @@
     uint32_t                                    maxClipDistances;
     uint32_t                                    maxCullDistances;
     uint32_t                                    maxCombinedClipAndCullDistances;
+    uint32_t                                    discreteQueuePriorities;
     float                                       pointSizeRange[2];
     float                                       lineWidthRange[2];
     float                                       pointSizeGranularity;
@@ -1331,6 +1332,7 @@
     const void*                                 pNext;
     uint32_t                                    queueFamilyIndex;
     uint32_t                                    queueCount;
+    const float*                                pQueuePriorities;
 } VkDeviceQueueCreateInfo;
 
 typedef struct {
diff --git a/tests/vktestbinding.cpp b/tests/vktestbinding.cpp
index f78cc72..01c7f45 100644
--- a/tests/vktestbinding.cpp
+++ b/tests/vktestbinding.cpp
@@ -275,6 +275,8 @@
         qi.pNext = NULL;
         qi.queueFamilyIndex = i;
         qi.queueCount = queue_props[i].queueCount;
+        std::vector<float> queue_priorities (qi.queueCount, 0.0);
+        qi.pQueuePriorities = queue_priorities.data();
         if (queue_props[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) {
             graphics_queue_node_index_ = i;
         }
diff --git a/vktrace/src/vktrace_extensions/vktracevulkan/layers/vktrace_snapshot.c b/vktrace/src/vktrace_extensions/vktracevulkan/layers/vktrace_snapshot.c
index b8a456b..c1738dd 100644
--- a/vktrace/src/vktrace_extensions/vktracevulkan/layers/vktrace_snapshot.c
+++ b/vktrace/src/vktrace_extensions/vktracevulkan/layers/vktrace_snapshot.c
@@ -71,6 +71,11 @@
         uint32_t i;
         vktrace_vk_malloc_and_copy((void**)&pDestCreateInfo, sizeof(VkDeviceCreateInfo), pSrcCreateInfo);
         vktrace_vk_malloc_and_copy((void**)&pDestCreateInfo->pRequestedQueues, pSrcCreateInfo->requestedQueueCount*sizeof(VkDeviceQueueCreateInfo), pSrcCreateInfo->pRequestedQueues);
+        for (i = 0; i < pSrcCreateInfo->requestedQueueCount; i++) {
+            vktrace_vk_malloc_and_copy((void**)&pDestCreateInfo->pRequestedQueues[i].pQueuePriorities,
+                                       pSrcCreateInfo->pRequestedQueues[i].queueCount*sizeof(float),
+                                       pSrcCreateInfo->pRequestedQueues[i].pQueuePriorities);
+        }
 
         if (pSrcCreateInfo->extensionCount > 0)
         {
diff --git a/vktrace/src/vktrace_extensions/vktracevulkan/vkreplay/vkreplay_vkdisplay.cpp b/vktrace/src/vktrace_extensions/vktracevulkan/vkreplay/vkreplay_vkdisplay.cpp
index a57816c..13ee51e 100644
--- a/vktrace/src/vktrace_extensions/vktracevulkan/vkreplay/vkreplay_vkdisplay.cpp
+++ b/vktrace/src/vktrace_extensions/vktracevulkan/vkreplay/vkreplay_vkdisplay.cpp
@@ -108,6 +108,8 @@
     VkDeviceQueueCreateInfo dqci = {};
     dqci.queueCount = 1;
     dqci.queueType = VK_QUEUE_UNIVERSAL;
+    std::vector<float> queue_priorities (dqci.queueCount, 0.0);
+    dqci.pQueuePriorities = queue_priorities.data();
     // create the device enabling validation level 4
     const char * const * extNames = &m_extensions[0];
     VkDeviceCreateInfo info = {};
diff --git a/vktrace/vktrace_generate.py b/vktrace/vktrace_generate.py
index 3eac580..907407c 100755
--- a/vktrace/vktrace_generate.py
+++ b/vktrace/vktrace_generate.py
@@ -583,6 +583,11 @@
         pid_enum.append('{')
         pid_enum.append('    vktrace_add_buffer_to_trace_packet(pHeader, (void**)ppStruct, sizeof(VkDeviceCreateInfo), pInStruct);')
         pid_enum.append('    vktrace_add_buffer_to_trace_packet(pHeader, (void**)&(*ppStruct)->pRequestedQueues, pInStruct->requestedQueueCount*sizeof(VkDeviceQueueCreateInfo), pInStruct->pRequestedQueues);')
+        pid_enum.append('    for (uint32_t i = 0; i < pInStruct->requestedQueueCount; i++) {')
+        pid_enum.append('        vktrace_add_buffer_to_trace_packet(pHeader, (void**)&(*ppStruct)->pRequestedQueues[i].pQueuePriorities,')
+        pid_enum.append('                                   pInStruct->pRequestedQueues[i].queueCount*sizeof(float),')
+        pid_enum.append('                                   pInStruct->pRequestedQueues[i].pQueuePriorities);')
+        pid_enum.append('    }')
         pid_enum.append('    vktrace_finalize_buffer_address(pHeader, (void**)&(*ppStruct)->pRequestedQueues);')
         # TODO138 : This is an initial pass at getting the extension/layer arrays correct, needs to be validated.
         pid_enum.append('    uint32_t i, siz = 0;')
