{-# language CPP #-} -- | = Name -- -- VK_QCOM_render_pass_transform - device extension -- -- == VK_QCOM_render_pass_transform -- -- [__Name String__] -- @VK_QCOM_render_pass_transform@ -- -- [__Extension Type__] -- Device extension -- -- [__Registered Extension Number__] -- 283 -- -- [__Revision__] -- 3 -- -- [__Ratification Status__] -- Not ratified -- -- [__Extension and Version Dependencies__] -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_swapchain VK_KHR_swapchain> -- and -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_surface VK_KHR_surface> -- -- [__Contact__] -- -- - Jeff Leger -- <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_QCOM_render_pass_transform] @jackohound%0A*Here describe the issue or question you have about the VK_QCOM_render_pass_transform extension* > -- -- == Other Extension Metadata -- -- [__Last Modified Date__] -- 2022-07-21 -- -- [__Interactions and External Dependencies__] -- -- - This extension requires @VK_KHR_swapchain@ -- -- - This extension interacts with @VK_EXT_fragment_density_map@ -- -- - This extension interacts with @VK_KHR_fragment_shading_rate@ -- -- - This extension interacts with @VK_QCOM_tile_properties@ -- -- [__Contributors__] -- -- - Jeff Leger, Qualcomm Technologies, Inc. -- -- - Brandon Light, Qualcomm Technologies, Inc. -- -- - Matthew Netsch, Qualcomm Technologies, Inc. -- -- == Description -- -- This extension provides a mechanism for applications to enable driver -- support for -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#vertexpostproc-renderpass-transform render pass transform>. -- -- Mobile devices can be rotated and mobile applications need to render -- properly when a device is held in a landscape or portrait orientation. -- When the current orientation differs from the device’s native -- orientation, a rotation is required so that the “up” direction of the -- rendered scene matches the current orientation. -- -- If the Display Processing Unit (DPU) does not natively support rotation, -- the Vulkan presentation engine can handle this rotation in a separate -- composition pass. Alternatively, the application can render frames -- “pre-rotated” to avoid this extra pass. The latter is preferred to -- reduce power consumption and achieve the best performance because it -- avoids tasking the GPU with extra work to perform the copy\/rotate -- operation. -- -- Unlike OpenGL ES, the burden of pre-rotation in Vulkan falls on the -- application. To implement pre-rotation, applications render into -- swapchain images matching the device native aspect ratio of the display -- and “pre-rotate” the rendering content to match the device’s current -- orientation. The burden is more than adjusting the Model View Projection -- (MVP) matrix in the vertex shader to account for rotation and aspect -- ratio. The coordinate systems of scissors, viewports, derivatives and -- several shader built-ins may need to be adapted to produce the correct -- result. -- -- It is difficult for some game engines to manage this burden; many chose -- to simply accept the performance\/power overhead of performing rotation -- in the presentation engine. -- -- This extension allows applications to achieve the performance benefits -- of pre-rotated rendering by moving much of the above-mentioned burden to -- the graphics driver. The following is unchanged with this extension: -- -- - Applications create a swapchain matching the native orientation of -- the display. Applications must also set the -- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'::@preTransform@ -- equal to the @currentTransform@ as returned by -- 'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR'. -- -- The following is changed with this extension: -- -- - At 'Vulkan.Core10.CommandBufferBuilding.cmdBeginRenderPass', the -- application provides extension struct -- 'RenderPassTransformBeginInfoQCOM' specifying the render pass -- transform parameters. -- -- - At 'Vulkan.Core10.CommandBuffer.beginCommandBuffer' for secondary -- command buffers, the application provides extension struct -- 'CommandBufferInheritanceRenderPassTransformInfoQCOM' specifying the -- render pass transform parameters. -- -- - The @renderArea@, viewports, scissors, and @fragmentSize@ are all -- provided in the current (non-rotated) coordinate system. The -- implementation will transform those into the native (rotated) -- coordinate system. -- -- - The implementation is responsible for transforming shader built-ins -- (@FragCoord@, @PointCoord@, @SamplePosition@, -- @PrimitiveShadingRateKHR@, interpolateAt(), dFdx, dFdy, fWidth) into -- the rotated coordinate system. -- -- - The implementation is responsible for transforming @position@ to the -- rotated coordinate system. -- -- - If this extension is used with @VK_QCOM_tile_properties@, then -- 'Vulkan.Extensions.VK_QCOM_tile_properties.getFramebufferTilePropertiesQCOM' -- and -- 'Vulkan.Extensions.VK_QCOM_tile_properties.getDynamicRenderingTilePropertiesQCOM' -- return tile properties in the rotated coordinate space. -- -- == New Structures -- -- - Extending -- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo': -- -- - 'CommandBufferInheritanceRenderPassTransformInfoQCOM' -- -- - Extending 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo': -- -- - 'RenderPassTransformBeginInfoQCOM' -- -- == New Enum Constants -- -- - 'QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME' -- -- - 'QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION' -- -- - Extending -- 'Vulkan.Core10.Enums.RenderPassCreateFlagBits.RenderPassCreateFlagBits': -- -- - 'Vulkan.Core10.Enums.RenderPassCreateFlagBits.RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM' -- -- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType': -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM' -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM' -- -- == Issues -- -- 1) Some early Adreno drivers (October 2019 through March 2020) -- advertised support for this extension but expected VK_STRUCTURE_TYPE -- values different from those in the vukan headers. To cover all Adreno -- devices on the market, applications need to detect the driver version -- and use the appropriate VK_STRUCTURE_TYPE values from the table below. -- -- The driver version reported in VkPhysicalDeviceProperties.driverVersion -- is a @uint32_t@ type. You can decode the @uint32_t@ value into a -- major.minor.patch version as shown below: -- -- > uint32_t major = ((driverVersion) >> 22); -- > uint32_t minor = ((driverVersion) >> 12) & 0x3ff); -- > uint32_t patch = ((driverVersion) & 0xfff); -- -- If the Adreno major.minor.patch version is greater than or equal to to -- 512.469.0, then simply use the VK_STRUCTURE_TYPE values as defined in -- vulkan_core.h. If the version is less than or equal to to 512.468.0, -- then use the alternate values for the two VK_STRUCTURE_TYPEs in the -- table below. -- -- +------------------------------------------------------------+------------------+------------------+ -- | | Adreno Driver | | -- | | Version | | -- +============================================================+==================+==================+ -- | | 512.468.0 and | 512.469.0 and | -- | | earlier | later | -- +------------------------------------------------------------+------------------+------------------+ -- | VK_STRUCTURE_TYPE_ RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM | 1000282000 | 1000282001 | -- +------------------------------------------------------------+------------------+------------------+ -- | VK_STRUCTURE_TYPE_ | 1000282001 | 1000282000 | -- | COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM | | | -- +------------------------------------------------------------+------------------+------------------+ -- -- @Adreno@ Driver Requirements -- -- 2) Should the extension support only rotations (e.g. 90, 180, -- 270-degrees), or also mirror transforms (e.g. vertical flips)? Mobile -- use cases only require rotation. Other display systems such as -- projectors might require a flipped transform. -- -- __RESOLVED__: In this version of the extension, the functionality is -- restricted to 90, 180, and 270-degree rotations to address mobile use -- cases. -- -- 3) How does this extension interact with VK_EXT_fragment_density_map? -- -- __RESOLVED__ Some implementations may not be able to support a render -- pass that enables both render pass transform and fragment density maps. -- For simplicity, this extension disallows enabling both features within a -- single render pass. -- -- 4) What should this extension be named? -- -- We considered names such as “rotated_rendering”, “pre_rotation” and -- others. Since the functionality is limited to a render pass, it seemed -- the name should include “render_pass”. While the current extension is -- limited to rotations, it could be extended to other transforms (like -- mirror) in the future. -- -- __RESOLVED__ The name “render_pass_transform” seems like the most -- accurate description of the introduced functionality. -- -- 5) How does this extension interact with VK_KHR_fragment_shading_rate? -- -- __RESOLVED__: For the same reasons as issue 3, this extension disallows -- enabling both @pFragmentShadingRateAttachment@ and render pass transform -- within a single render pass. -- -- However, pipeline shading rate and primitive shading rate are supported, -- and their respective @fragmentSize@ and @PrimitiveShadingRateKHR@ are -- provided in the current (non-rotated) coordinate system. The -- implementation is responsible for transforming them to the rotated -- coordinate system. -- -- The -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#primsrast-fragment-shading-rate set of supported shading rates> -- /may/ be different per transform. Supported rates queried from -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.getPhysicalDeviceFragmentShadingRatesKHR' -- are in the native (rotated) coordinate system. This means that the -- application /must/ swap the x\/y of the reported rates to get the set of -- rates supported for 90 and 270 degree rotation. -- -- == Version History -- -- - Revision 1, 2020-02-05 (Jeff Leger) -- -- - Revision 2, 2021-03-09 (Matthew Netsch) -- -- - Adds interactions with VK_KHR_fragment_shading_rate -- -- - Revision 3, 2022-07-11 (Arpit Agarwal) -- -- - Adds interactions with VK_QCOM_tile_properties -- -- == See Also -- -- 'CommandBufferInheritanceRenderPassTransformInfoQCOM', -- 'RenderPassTransformBeginInfoQCOM' -- -- == Document Notes -- -- For more information, see the -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VK_QCOM_render_pass_transform Vulkan Specification> -- -- This page is a generated document. Fixes and changes should be made to -- the generator scripts, not directly. module Vulkan.Extensions.VK_QCOM_render_pass_transform ( RenderPassTransformBeginInfoQCOM(..) , CommandBufferInheritanceRenderPassTransformInfoQCOM(..) , QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION , pattern QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION , QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME , pattern QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME , SurfaceTransformFlagBitsKHR(..) , SurfaceTransformFlagsKHR ) where import Foreign.Marshal.Alloc (allocaBytes) import Foreign.Ptr (nullPtr) import Foreign.Ptr (plusPtr) import Vulkan.CStruct (FromCStruct) import Vulkan.CStruct (FromCStruct(..)) import Vulkan.CStruct (ToCStruct) import Vulkan.CStruct (ToCStruct(..)) import Vulkan.Zero (Zero(..)) import Data.String (IsString) import Data.Typeable (Typeable) import Foreign.Storable (Storable) import Foreign.Storable (Storable(peek)) import Foreign.Storable (Storable(poke)) import qualified Foreign.Storable (Storable(..)) import GHC.Generics (Generic) import Foreign.Ptr (Ptr) import Data.Kind (Type) import Vulkan.Core10.FundamentalTypes (Rect2D) import Vulkan.Core10.Enums.StructureType (StructureType) import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagBitsKHR) import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM)) import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM)) import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagBitsKHR(..)) import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagsKHR) -- | VkRenderPassTransformBeginInfoQCOM - Structure describing transform -- parameters of a render pass instance -- -- == Valid Usage -- -- - #VUID-VkRenderPassTransformBeginInfoQCOM-transform-02871# -- @transform@ /must/ be -- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_IDENTITY_BIT_KHR', -- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_ROTATE_90_BIT_KHR', -- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_ROTATE_180_BIT_KHR', -- or -- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_ROTATE_270_BIT_KHR' -- -- - #VUID-VkRenderPassTransformBeginInfoQCOM-flags-02872# The -- @renderpass@ /must/ have been created with -- 'Vulkan.Core10.Pass.RenderPassCreateInfo'::@flags@ containing -- 'Vulkan.Core10.Enums.RenderPassCreateFlagBits.RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM' -- -- == Valid Usage (Implicit) -- -- - #VUID-VkRenderPassTransformBeginInfoQCOM-sType-sType# @sType@ /must/ -- be -- 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM' -- -- = See Also -- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_QCOM_render_pass_transform VK_QCOM_render_pass_transform>, -- 'Vulkan.Core10.Enums.StructureType.StructureType', -- 'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR' data RenderPassTransformBeginInfoQCOM = RenderPassTransformBeginInfoQCOM { -- | @transform@ is a -- 'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR' value -- describing the transform to be applied to rasterization. RenderPassTransformBeginInfoQCOM -> SurfaceTransformFlagBitsKHR transform :: SurfaceTransformFlagBitsKHR } deriving (Typeable, RenderPassTransformBeginInfoQCOM -> RenderPassTransformBeginInfoQCOM -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: RenderPassTransformBeginInfoQCOM -> RenderPassTransformBeginInfoQCOM -> Bool $c/= :: RenderPassTransformBeginInfoQCOM -> RenderPassTransformBeginInfoQCOM -> Bool == :: RenderPassTransformBeginInfoQCOM -> RenderPassTransformBeginInfoQCOM -> Bool $c== :: RenderPassTransformBeginInfoQCOM -> RenderPassTransformBeginInfoQCOM -> Bool Eq) #if defined(GENERIC_INSTANCES) deriving instance Generic (RenderPassTransformBeginInfoQCOM) #endif deriving instance Show RenderPassTransformBeginInfoQCOM instance ToCStruct RenderPassTransformBeginInfoQCOM where withCStruct :: forall b. RenderPassTransformBeginInfoQCOM -> (Ptr RenderPassTransformBeginInfoQCOM -> IO b) -> IO b withCStruct RenderPassTransformBeginInfoQCOM x Ptr RenderPassTransformBeginInfoQCOM -> IO b f = forall a b. Int -> (Ptr a -> IO b) -> IO b allocaBytes Int 24 forall a b. (a -> b) -> a -> b $ \Ptr RenderPassTransformBeginInfoQCOM p -> forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr RenderPassTransformBeginInfoQCOM p RenderPassTransformBeginInfoQCOM x (Ptr RenderPassTransformBeginInfoQCOM -> IO b f Ptr RenderPassTransformBeginInfoQCOM p) pokeCStruct :: forall b. Ptr RenderPassTransformBeginInfoQCOM -> RenderPassTransformBeginInfoQCOM -> IO b -> IO b pokeCStruct Ptr RenderPassTransformBeginInfoQCOM p RenderPassTransformBeginInfoQCOM{SurfaceTransformFlagBitsKHR transform :: SurfaceTransformFlagBitsKHR $sel:transform:RenderPassTransformBeginInfoQCOM :: RenderPassTransformBeginInfoQCOM -> SurfaceTransformFlagBitsKHR ..} IO b f = do forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RenderPassTransformBeginInfoQCOM p forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr StructureType)) (StructureType STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM) forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RenderPassTransformBeginInfoQCOM p forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr (Ptr ()))) (forall a. Ptr a nullPtr) forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RenderPassTransformBeginInfoQCOM p forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr SurfaceTransformFlagBitsKHR)) (SurfaceTransformFlagBitsKHR transform) IO b f cStructSize :: Int cStructSize = Int 24 cStructAlignment :: Int cStructAlignment = Int 8 pokeZeroCStruct :: forall b. Ptr RenderPassTransformBeginInfoQCOM -> IO b -> IO b pokeZeroCStruct Ptr RenderPassTransformBeginInfoQCOM p IO b f = do forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RenderPassTransformBeginInfoQCOM p forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr StructureType)) (StructureType STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM) forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RenderPassTransformBeginInfoQCOM p forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr (Ptr ()))) (forall a. Ptr a nullPtr) forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RenderPassTransformBeginInfoQCOM p forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr SurfaceTransformFlagBitsKHR)) (forall a. Zero a => a zero) IO b f instance FromCStruct RenderPassTransformBeginInfoQCOM where peekCStruct :: Ptr RenderPassTransformBeginInfoQCOM -> IO RenderPassTransformBeginInfoQCOM peekCStruct Ptr RenderPassTransformBeginInfoQCOM p = do SurfaceTransformFlagBitsKHR transform <- forall a. Storable a => Ptr a -> IO a peek @SurfaceTransformFlagBitsKHR ((Ptr RenderPassTransformBeginInfoQCOM p forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr SurfaceTransformFlagBitsKHR)) forall (f :: * -> *) a. Applicative f => a -> f a pure forall a b. (a -> b) -> a -> b $ SurfaceTransformFlagBitsKHR -> RenderPassTransformBeginInfoQCOM RenderPassTransformBeginInfoQCOM SurfaceTransformFlagBitsKHR transform instance Storable RenderPassTransformBeginInfoQCOM where sizeOf :: RenderPassTransformBeginInfoQCOM -> Int sizeOf ~RenderPassTransformBeginInfoQCOM _ = Int 24 alignment :: RenderPassTransformBeginInfoQCOM -> Int alignment ~RenderPassTransformBeginInfoQCOM _ = Int 8 peek :: Ptr RenderPassTransformBeginInfoQCOM -> IO RenderPassTransformBeginInfoQCOM peek = forall a. FromCStruct a => Ptr a -> IO a peekCStruct poke :: Ptr RenderPassTransformBeginInfoQCOM -> RenderPassTransformBeginInfoQCOM -> IO () poke Ptr RenderPassTransformBeginInfoQCOM ptr RenderPassTransformBeginInfoQCOM poked = forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr RenderPassTransformBeginInfoQCOM ptr RenderPassTransformBeginInfoQCOM poked (forall (f :: * -> *) a. Applicative f => a -> f a pure ()) instance Zero RenderPassTransformBeginInfoQCOM where zero :: RenderPassTransformBeginInfoQCOM zero = SurfaceTransformFlagBitsKHR -> RenderPassTransformBeginInfoQCOM RenderPassTransformBeginInfoQCOM forall a. Zero a => a zero -- | VkCommandBufferInheritanceRenderPassTransformInfoQCOM - Structure -- describing transformed render pass parameters command buffer -- -- = Description -- -- When the secondary is recorded to execute within a render pass instance -- using 'Vulkan.Core10.CommandBufferBuilding.cmdExecuteCommands', the -- render pass transform parameters of the secondary command buffer /must/ -- be consistent with the render pass transform parameters specified for -- the render pass instance. In particular, the @transform@ and -- @renderArea@ for command buffer /must/ be identical to the @transform@ -- and @renderArea@ of the render pass instance. -- -- == Valid Usage (Implicit) -- -- = See Also -- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_QCOM_render_pass_transform VK_QCOM_render_pass_transform>, -- 'Vulkan.Core10.FundamentalTypes.Rect2D', -- 'Vulkan.Core10.Enums.StructureType.StructureType', -- 'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR' data CommandBufferInheritanceRenderPassTransformInfoQCOM = CommandBufferInheritanceRenderPassTransformInfoQCOM { -- | @transform@ is a -- 'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR' value -- describing the transform to be applied to the render pass. -- -- #VUID-VkCommandBufferInheritanceRenderPassTransformInfoQCOM-transform-02864# -- @transform@ /must/ be -- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_IDENTITY_BIT_KHR', -- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_ROTATE_90_BIT_KHR', -- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_ROTATE_180_BIT_KHR', -- or -- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_ROTATE_270_BIT_KHR' CommandBufferInheritanceRenderPassTransformInfoQCOM -> SurfaceTransformFlagBitsKHR transform :: SurfaceTransformFlagBitsKHR , -- | @renderArea@ is the render area that is affected by the command buffer. CommandBufferInheritanceRenderPassTransformInfoQCOM -> Rect2D renderArea :: Rect2D } deriving (Typeable) #if defined(GENERIC_INSTANCES) deriving instance Generic (CommandBufferInheritanceRenderPassTransformInfoQCOM) #endif deriving instance Show CommandBufferInheritanceRenderPassTransformInfoQCOM instance ToCStruct CommandBufferInheritanceRenderPassTransformInfoQCOM where withCStruct :: forall b. CommandBufferInheritanceRenderPassTransformInfoQCOM -> (Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM -> IO b) -> IO b withCStruct CommandBufferInheritanceRenderPassTransformInfoQCOM x Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM -> IO b f = forall a b. Int -> (Ptr a -> IO b) -> IO b allocaBytes Int 40 forall a b. (a -> b) -> a -> b $ \Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM p -> forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM p CommandBufferInheritanceRenderPassTransformInfoQCOM x (Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM -> IO b f Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM p) pokeCStruct :: forall b. Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM -> CommandBufferInheritanceRenderPassTransformInfoQCOM -> IO b -> IO b pokeCStruct Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM p CommandBufferInheritanceRenderPassTransformInfoQCOM{Rect2D SurfaceTransformFlagBitsKHR renderArea :: Rect2D transform :: SurfaceTransformFlagBitsKHR $sel:renderArea:CommandBufferInheritanceRenderPassTransformInfoQCOM :: CommandBufferInheritanceRenderPassTransformInfoQCOM -> Rect2D $sel:transform:CommandBufferInheritanceRenderPassTransformInfoQCOM :: CommandBufferInheritanceRenderPassTransformInfoQCOM -> SurfaceTransformFlagBitsKHR ..} IO b f = do forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM p forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr StructureType)) (StructureType STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM) forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM p forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr (Ptr ()))) (forall a. Ptr a nullPtr) forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM p forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr SurfaceTransformFlagBitsKHR)) (SurfaceTransformFlagBitsKHR transform) forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM p forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 20 :: Ptr Rect2D)) (Rect2D renderArea) IO b f cStructSize :: Int cStructSize = Int 40 cStructAlignment :: Int cStructAlignment = Int 8 pokeZeroCStruct :: forall b. Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM -> IO b -> IO b pokeZeroCStruct Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM p IO b f = do forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM p forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr StructureType)) (StructureType STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM) forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM p forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr (Ptr ()))) (forall a. Ptr a nullPtr) forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM p forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr SurfaceTransformFlagBitsKHR)) (forall a. Zero a => a zero) forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM p forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 20 :: Ptr Rect2D)) (forall a. Zero a => a zero) IO b f instance FromCStruct CommandBufferInheritanceRenderPassTransformInfoQCOM where peekCStruct :: Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM -> IO CommandBufferInheritanceRenderPassTransformInfoQCOM peekCStruct Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM p = do SurfaceTransformFlagBitsKHR transform <- forall a. Storable a => Ptr a -> IO a peek @SurfaceTransformFlagBitsKHR ((Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM p forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr SurfaceTransformFlagBitsKHR)) Rect2D renderArea <- forall a. FromCStruct a => Ptr a -> IO a peekCStruct @Rect2D ((Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM p forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 20 :: Ptr Rect2D)) forall (f :: * -> *) a. Applicative f => a -> f a pure forall a b. (a -> b) -> a -> b $ SurfaceTransformFlagBitsKHR -> Rect2D -> CommandBufferInheritanceRenderPassTransformInfoQCOM CommandBufferInheritanceRenderPassTransformInfoQCOM SurfaceTransformFlagBitsKHR transform Rect2D renderArea instance Storable CommandBufferInheritanceRenderPassTransformInfoQCOM where sizeOf :: CommandBufferInheritanceRenderPassTransformInfoQCOM -> Int sizeOf ~CommandBufferInheritanceRenderPassTransformInfoQCOM _ = Int 40 alignment :: CommandBufferInheritanceRenderPassTransformInfoQCOM -> Int alignment ~CommandBufferInheritanceRenderPassTransformInfoQCOM _ = Int 8 peek :: Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM -> IO CommandBufferInheritanceRenderPassTransformInfoQCOM peek = forall a. FromCStruct a => Ptr a -> IO a peekCStruct poke :: Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM -> CommandBufferInheritanceRenderPassTransformInfoQCOM -> IO () poke Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM ptr CommandBufferInheritanceRenderPassTransformInfoQCOM poked = forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr CommandBufferInheritanceRenderPassTransformInfoQCOM ptr CommandBufferInheritanceRenderPassTransformInfoQCOM poked (forall (f :: * -> *) a. Applicative f => a -> f a pure ()) instance Zero CommandBufferInheritanceRenderPassTransformInfoQCOM where zero :: CommandBufferInheritanceRenderPassTransformInfoQCOM zero = SurfaceTransformFlagBitsKHR -> Rect2D -> CommandBufferInheritanceRenderPassTransformInfoQCOM CommandBufferInheritanceRenderPassTransformInfoQCOM forall a. Zero a => a zero forall a. Zero a => a zero type QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION = 3 -- No documentation found for TopLevel "VK_QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION" pattern QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION :: forall a . Integral a => a pattern $bQCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION :: forall a. Integral a => a $mQCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION :: forall {r} {a}. Integral a => a -> ((# #) -> r) -> ((# #) -> r) -> r QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION = 3 type QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME = "VK_QCOM_render_pass_transform" -- No documentation found for TopLevel "VK_QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME" pattern QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a pattern $bQCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a $mQCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME :: forall {r} {a}. (Eq a, IsString a) => a -> ((# #) -> r) -> ((# #) -> r) -> r QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME = "VK_QCOM_render_pass_transform"