The scissor test determines if a fragment’s framebuffer coordinates
(xf,yf) lie within the scissor rectangle corresponding to the
viewport index (see Controlling the Viewport)
used by the primitive that generated the fragment.
If the pipeline state object is created without
VK_DYNAMIC_STATE_SCISSOR
enabled then the scissor rectangles are set
by the VkPipelineViewportStateCreateInfo
state of the pipeline state
object.
Otherwise, to dynamically set the scissor rectangles call:
void vkCmdSetScissor( VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors);
commandBuffer
is the command buffer into which the command will be
recorded.
firstScissor
is the index of the first scissor whose state is
updated by the command.
scissorCount
is the number of scissors whose rectangles are
updated by the command.
pScissors
is a pointer to an array of VkRect2D
structures
defining scissor rectangles.
The scissor rectangles taken from element i of pScissors
replace
the current state for the scissor index firstScissor
+ i, for
i in [0, scissorCount
).
Each scissor rectangle is described by a VkRect2D
structure, with the
offset.x
and offset.y
values determining the upper left corner
of the scissor rectangle, and the extent.width
and extent.height
values determining the size in pixels.
If offset.x
≤ xf < offset.x
+
extent.width
and offset.y
≤ yf < offset.y
+ extent.height
for the selected scissor rectangle, then the
scissor test passes.
Otherwise, the test fails and the fragment is discarded.
For points, lines, and polygons, the scissor rectangle for a primitive is
selected in the same manner as the viewport (see
Controlling the Viewport).
The scissor rectangles only apply to drawing commands, not to other commands
like clears or copies.
It is legal for offset.x
+ extent.width
or
offset.y
+ extent.height
to exceed the dimensions of the
framebuffer - the scissor test still applies as defined above.
Rasterization does not produce fragments outside of the framebuffer, so such
fragments never have the scissor test performed on them.
The scissor test is always performed. Applications can effectively disable the scissor test by specifying a scissor rectangle that encompasses the entire framebuffer.