{-# language CPP #-}
-- | = Name
--
-- VK_KHR_spirv_1_4 - device extension
--
-- == VK_KHR_spirv_1_4
--
-- [__Name String__]
--     @VK_KHR_spirv_1_4@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     237
--
-- [__Revision__]
--     1
--
-- [__Extension and Version Dependencies__]
--
--     -   Requires Vulkan 1.1
--
--     -   Requires @VK_KHR_shader_float_controls@
--
-- [__Deprecation state__]
--
--     -   /Promoted/ to
--         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#versions-1.2-promotions Vulkan 1.2>
--
-- [__Contact__]
--
--     -   Jesse Hall
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_KHR_spirv_1_4:%20&body=@critsec%20 >
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2019-04-01
--
-- [__IP Status__]
--     No known IP claims.
--
-- [__Interactions and External Dependencies__]
--
--     -   Requires SPIR-V 1.4.
--
--     -   Promoted to Vulkan 1.2 Core
--
-- [__Contributors__]
--
--     -   Alexander Galazin, Arm
--
--     -   David Neto, Google
--
--     -   Jesse Hall, Google
--
--     -   John Kessenich, Google
--
--     -   Neil Henning, AMD
--
--     -   Tom Olson, Arm
--
-- == Description
--
-- This extension allows the use of SPIR-V 1.4 shader modules. SPIR-V 1.4’s
-- new features primarily make it an easier target for compilers from
-- high-level languages, rather than exposing new hardware functionality.
--
-- SPIR-V 1.4 incorporates features that are also available separately as
-- extensions. SPIR-V 1.4 shader modules do not need to enable those
-- extensions with the @OpExtension@ opcode, since they are integral parts
-- of SPIR-V 1.4.
--
-- SPIR-V 1.4 introduces new floating point execution mode capabilities,
-- also available via @SPV_KHR_float_controls@. Implementations are not
-- required to support all of these new capabilities; support can be
-- queried using
-- 'Vulkan.Extensions.VK_KHR_shader_float_controls.PhysicalDeviceFloatControlsPropertiesKHR'
-- from the @VK_KHR_shader_float_controls@ extension.
--
-- == Promotion to Vulkan 1.2
--
-- All functionality in this extension is included in core Vulkan 1.2, with
-- the KHR suffix omitted. The original type, enum and command names are
-- still available as aliases of the core functionality.
--
-- == New Enum Constants
--
-- -   'KHR_SPIRV_1_4_EXTENSION_NAME'
--
-- -   'KHR_SPIRV_1_4_SPEC_VERSION'
--
-- == Issues
--
-- 1. Should we have an extension specific to this SPIR-V version, or add a
-- version-generic query for SPIR-V version? SPIR-V 1.4 doesn’t need any
-- other API changes.
--
-- RESOLVED: Just expose SPIR-V 1.4.
--
-- Most new SPIR-V versions introduce optionally-required capabilities or
-- have implementation-defined limits, and would need more API and
-- specification changes specific to that version to make them available in
-- Vulkan. For example, to support the subgroup capabilities added in
-- SPIR-V 1.3 required introducing
-- 'Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup.PhysicalDeviceSubgroupProperties'
-- to allow querying the supported group operation categories, maximum
-- supported subgroup size, etc. While we could expose the parts of a new
-- SPIR-V version that don’t need accompanying changes generically, we’ll
-- still end up writing extensions specific to each version for the
-- remaining parts. Thus the generic mechanism won’t reduce future
-- spec-writing effort. In addition, making it clear which parts of a
-- future version are supported by the generic mechanism and which can’t be
-- used without specific support would be difficult to get right ahead of
-- time.
--
-- 2. Can different stages of the same pipeline use shaders with different
-- SPIR-V versions?
--
-- RESOLVED: Yes.
--
-- Mixing SPIR-V versions 1.0-1.3 in the same pipeline has not been
-- disallowed, so it would be inconsistent to disallow mixing 1.4 with
-- previous versions.. SPIR-V 1.4 does not introduce anything that should
-- cause new difficulties here.
--
-- 3. Must Vulkan extensions corresponding to SPIR-V extensions that were
-- promoted to core in 1.4 be enabled in order to use that functionality in
-- a SPIR-V 1.4 module?
--
-- RESOLVED: No, with caveats.
--
-- The SPIR-V 1.4 module does not need to declare the SPIR-V extensions,
-- since the functionality is now part of core, so there is no need to
-- enable the Vulkan extension that allows SPIR-V modules to declare the
-- SPIR-V extension. However, when the functionality that is now core in
-- SPIR-V 1.4 is optionally supported, the query for support is provided by
-- a Vulkan extension, and that query can only be used if the extension is
-- enabled.
--
-- This applies to any SPIR-V version; specifically for SPIR-V 1.4 this
-- only applies to the functionality from @SPV_KHR_float_controls@, which
-- was made available in Vulkan by @VK_KHR_shader_float_controls@. Even
-- though the extension was promoted in SPIR-V 1.4, the capabilities are
-- still optional in implementations that support @VK_KHR_spirv_1_4@.
--
-- A SPIR-V 1.4 module doesn’t need to enable @SPV_KHR_float_controls@ in
-- order to use the capabilities, so if the application has /a priori/
-- knowledge that the implementation supports the capabilities, it doesn’t
-- need to enable @VK_KHR_shader_float_controls@. However, if it doesn’t
-- have this knowledge and has to query for support at runtime, it must
-- enable @VK_KHR_shader_float_controls@ in order to use
-- 'Vulkan.Extensions.VK_KHR_shader_float_controls.PhysicalDeviceFloatControlsPropertiesKHR'.
--
-- == Version History
--
-- -   Revision 1, 2019-04-01 (Jesse Hall)
--
--     -   Internal draft versions
--
-- = See Also
--
-- No cross-references are available
--
-- = Document Notes
--
-- For more information, see the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_spirv_1_4 Vulkan Specification>
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module Vulkan.Extensions.VK_KHR_spirv_1_4  ( KHR_SPIRV_1_4_SPEC_VERSION
                                           , pattern KHR_SPIRV_1_4_SPEC_VERSION
                                           , KHR_SPIRV_1_4_EXTENSION_NAME
                                           , pattern KHR_SPIRV_1_4_EXTENSION_NAME
                                           ) where

import Data.String (IsString)

type KHR_SPIRV_1_4_SPEC_VERSION = 1

-- No documentation found for TopLevel "VK_KHR_SPIRV_1_4_SPEC_VERSION"
pattern KHR_SPIRV_1_4_SPEC_VERSION :: forall a . Integral a => a
pattern $bKHR_SPIRV_1_4_SPEC_VERSION :: a
$mKHR_SPIRV_1_4_SPEC_VERSION :: forall r a. Integral a => a -> (Void# -> r) -> (Void# -> r) -> r
KHR_SPIRV_1_4_SPEC_VERSION = 1


type KHR_SPIRV_1_4_EXTENSION_NAME = "VK_KHR_spirv_1_4"

-- No documentation found for TopLevel "VK_KHR_SPIRV_1_4_EXTENSION_NAME"
pattern KHR_SPIRV_1_4_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bKHR_SPIRV_1_4_EXTENSION_NAME :: a
$mKHR_SPIRV_1_4_EXTENSION_NAME :: forall r a.
(Eq a, IsString a) =>
a -> (Void# -> r) -> (Void# -> r) -> r
KHR_SPIRV_1_4_EXTENSION_NAME = "VK_KHR_spirv_1_4"