// Copyright 2017-2021 The Khronos Group Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

include::{generated}/meta/{refprefix}VK_EXT_global_priority.txt[]

=== Other Extension Metadata

*Last Modified Date*::
     2017-10-06
*IP Status*::
    No known IP claims.
*Contributors*::
  - Andres Rodriguez, Valve
  - Pierre-Loup Griffais, Valve
  - Dan Ginsburg, Valve
  - Mitch Singer, AMD

=== Description

In Vulkan, users can specify device-scope queue priorities.
In some cases it may be useful to extend this concept to a system-wide
scope.
This extension provides a mechanism for callers to set their system-wide
priority.
The default queue priority is ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT.

The driver implementation will attempt to skew hardware resource allocation
in favour of the higher-priority task.
Therefore, higher-priority work may retain similar latency and throughput
characteristics even if the system is congested with lower priority work.

The global priority level of a queue shall take precedence over the
per-process queue priority
(sname:VkDeviceQueueCreateInfo::pname:pQueuePriorities).

Abuse of this feature may result in starving the rest of the system from
hardware resources.
Therefore, the driver implementation may deny requests to acquire a priority
above the default priority (ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT) if
the caller does not have sufficient privileges.
In this scenario ename:VK_ERROR_NOT_PERMITTED_EXT is returned.

The driver implementation may fail the queue allocation request if resources
required to complete the operation have been exhausted (either by the same
process or a different process).
In this scenario ename:VK_ERROR_INITIALIZATION_FAILED is returned.

include::{generated}/interfaces/VK_EXT_global_priority.txt[]

=== Version History

 * Revision 2, 2017-11-03 (Andres Rodriguez)
   - Fixed VkQueueGlobalPriorityEXT missing _EXT suffix

 * Revision 1, 2017-10-06 (Andres Rodriguez)
   - First version.
