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

include::{generated}/meta/{refprefix}VK_EXT_primitives_generated_query.adoc[]

=== Other Extension Metadata

*Last Modified Date*::
    2022-01-24
*Contributors*::
  - Shahbaz Youssefi, Google
  - Piers Daniell, NVIDIA
  - Faith Ekstrand, Collabora
  - Jan-Harald Fredriksen, Arm

=== Description

This extension adds support for a new query type to match OpenGL's
`GL_PRIMITIVES_GENERATED` to support layering.

include::{generated}/interfaces/VK_EXT_primitives_generated_query.adoc[]

=== Issues

1) Can the query from `VK_EXT_transform_feedback` be used instead?

*RESOLVED*: No.
While the query from VK_EXT_transform_feedback can produce the same results
as in this extension, it is only available while transform feedback is
active.
The OpenGL `GL_PRIMITIVES_GENERATED` query is independent from transform
feedback.
Emulation through artificial transform feedback is unnecessarily
inefficient.

2) Can `VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT` be used
instead?

*RESOLVED*: It could, but we prefer the extension for simplicity.
Vulkan requires that only one query be active at a time.
If both the `GL_PRIMITIVES_GENERATED` and the
`GL_CLIPPING_INPUT_PRIMITIVES_ARB` queries need to be simultaneously
enabled, emulation of both through
`VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT` is inconvenient.

3) On some hardware, this query cannot be implemented if
sname:VkPipelineRasterizationStateCreateInfo::pname:rasterizerDiscardEnable
is enabled.
How will this be handled?

*RESOLVED*: A feature flag is exposed by this extension for this.
On said hardware, the GL implementation disables rasterizer-discard and
achieves the same effect through other means.
It will not be able to do the same in Vulkan due to lack of state
information.
A feature flag is exposed by this extension so the OpenGL implementation on
top of Vulkan would be able to implement a similar workaround.

4) On some hardware, this query cannot be implemented for non-zero query
indices.
How will this be handled?

*RESOLVED*: A feature flag is exposed by this extension for this.
If this feature is not present, the query from `VK_EXT_transform_feedback`
can be used to the same effect.

5) How is the interaction of this extension with
`transformFeedbackRasterizationStreamSelect` handled?

*RESOLVED*: Disallowed for non-zero streams.
In OpenGL, the rasterization stream is always stream zero.

=== Version History

  * Revision 1, 2021-06-23 (Shahbaz Youssefi)
  ** Internal revisions

