// Copyright (c) 2018-2020 NVIDIA Corporation
//
// SPDX-License-Identifier: CC-BY-4.0

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

=== Other Extension Metadata

*Last Modified Date*::
    2018-07-31
*IP Status*::
    No known IP claims.
*Interactions and External Dependencies*::
    None
*Contributors*::
  - Pat Brown, NVIDIA
  - Jeff Bolz, NVIDIA
  - Piers Daniell, NVIDIA
  - Daniel Koch, NVIDIA

=== Description

This extension adds support for an exclusive scissor test to Vulkan.
The exclusive scissor test behaves like the scissor test, except that the
exclusive scissor test fails for pixels inside the corresponding rectangle
and passes for pixels outside the rectangle.
If the same rectangle is used for both the scissor and exclusive scissor
tests, the exclusive scissor test will pass if and only if the scissor test
fails.

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

=== Issues

1) For the scissor test, the viewport state must be created with a matching
   number of scissor and viewport rectangles.
   Should we have the same requirement for exclusive scissors?

*RESOLVED*: For exclusive scissors, we relax this requirement and allow an
exclusive scissor rectangle count that is either zero or equal to the number
of viewport rectangles.
If you pass in an exclusive scissor count of zero, the exclusive scissor
test is treated as disabled.

=== Version History

  * Revision 1, 2018-07-31 (Pat Brown)
    - Internal revisions
