heph-aligned-storable-0.1.0.0: Generically derive Storable instances suitable for CPU-GPU transfer
Copyright(c) Jeremy Nuttall 2025
LicenseBSD-3-Clause
Maintainerjeremy@jeremy-nuttall.com
Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

Foreign.GPU.Storable.Aligned

Description

Derive Storable instances that respect GPU memory layout rules (std140, std430, scalar). Works with any product type that has a Generic instance.

data Uniforms = Uniforms
  { viewProj  :: M44 Float
  , cameraPos :: V3 Float
  } deriving Generic

instance AlignedStorable Std140 Uniforms

Then use Foreign.GPU.Marshal.Aligned to get properly-padded pointers:

withPacked @Std140 uniforms $ \ptr -> uploadToGPU ptr

NB: vec3 and mat3 types have historically had driver bugs around alignment. Prefer vec4/mat4 when possible.

Synopsis

The AlignedStorable class

class MemoryLayoutRules layout => AlignedStorable (layout :: MemoryLayout) a where Source #

A class for types that have calculable layouts according to GPU requirements.

NB: alignedPoke only writes member data. Only poke into zeroed buffers unless you really enjoy parsing through garbage in RenderDoc.

Minimal complete definition

Nothing

Methods

packedAlignedSizeOf :: Proxy layout -> Proxy a -> Int Source #

The size of the type a after its contents are laid out, but *before* any final padding is applied to the container struct itself. This is the offset after the last member.

default packedAlignedSizeOf :: GAlignedStorable layout (Rep a) => Proxy layout -> Proxy a -> Int Source #

alignedSizeOf :: Proxy layout -> Proxy a -> Int Source #

The size of the type a including final padding/rounding according to the layout rules for a struct. For Std140, this means the size is rounded up to a multiple of 16.

default alignedSizeOf :: GAlignedStorable layout (Rep a) => Proxy layout -> Proxy a -> Int Source #

alignedAlignment :: Proxy layout -> Proxy a -> Int Source #

The base alignment requirement for the type a.

default alignedAlignment :: GAlignedStorable layout (Rep a) => Proxy layout -> Proxy a -> Int Source #

alignedPeek :: AlignedPtr layout a -> IO a Source #

Read a value from the given pointer, respecting the layout rules.

default alignedPeek :: (Generic a, GAlignedStorable layout (Rep a)) => AlignedPtr layout a -> IO a Source #

alignedPoke :: AlignedPtr layout a -> a -> IO () Source #

Write a value to the given pointer, respecting the layout rules.

default alignedPoke :: (Generic a, GAlignedStorable layout (Rep a)) => AlignedPtr layout a -> a -> IO () Source #

Instances

Instances details
AlignedStorable 'Scalar Int16 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar Int32 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar Int64 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar Int8 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar Word16 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar Word32 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar Word64 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar Word8 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar Half Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar Bool Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar Double Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar Float Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 Int16 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 Int32 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 Int64 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 Int8 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 Word16 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 Word32 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 Word64 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 Word8 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 Half Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 Bool Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 Double Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 Float Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 Int16 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 Int32 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 Int64 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 Int8 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 Word16 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 Word32 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 Word64 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 Word8 Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 Half Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 Bool Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 Double Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 Float Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 Int16) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 Int32) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 Int64) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 Int8) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 Word16) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 Word32) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 Word64) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 Word8) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 (V2 Half)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 (V2 Double)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 (V2 Float)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 (V3 Half)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 (V3 Double)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 (V3 Float)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 (V4 Half)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 (V4 Double)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 (V4 Float)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 Bool) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V2 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 Int16) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 Int32) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 Int64) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 Int8) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 Word16) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 Word32) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 Word64) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 Word8) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 (V2 Half)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 (V2 Double)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 (V2 Float)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 (V3 Half)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 (V3 Double)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 (V3 Float)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 (V4 Half)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 (V4 Double)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 (V4 Float)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 Bool) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V3 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 Int16) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 Int32) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 Int64) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 Int8) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 Word16) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 Word32) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 Word64) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 Word8) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 (V2 Half)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 (V2 Double)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 (V2 Float)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 (V3 Half)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 (V3 Double)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 (V3 Float)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 (V4 Half)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 (V4 Double)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 (V4 Float)) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 Bool) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Scalar (V4 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M22 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M22 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M22 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M23 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M23 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M23 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M24 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M24 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M24 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M32 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M32 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M32 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M33 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M33 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M33 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M34 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M34 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M34 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M42 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M42 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M42 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M43 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M43 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M43 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M44 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M44 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (M44 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V2 Int16) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V2 Int32) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V2 Int64) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V2 Int8) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V2 Word16) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V2 Word32) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V2 Word64) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V2 Word8) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V2 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V2 Bool) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V2 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V2 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V3 Int16) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V3 Int32) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V3 Int64) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V3 Int8) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V3 Word16) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V3 Word32) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V3 Word64) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V3 Word8) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V3 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V3 Bool) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V3 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V3 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V4 Int16) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V4 Int32) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V4 Int64) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V4 Int8) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V4 Word16) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V4 Word32) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V4 Word64) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V4 Word8) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V4 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V4 Bool) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V4 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std140 (V4 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M22 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M22 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M22 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M23 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M23 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M23 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M24 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M24 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M24 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M32 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M32 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M32 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M33 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M33 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M33 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M34 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M34 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M34 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M42 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M42 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M42 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M43 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M43 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M43 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M44 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M44 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (M44 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V2 Int16) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V2 Int32) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V2 Int64) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V2 Int8) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V2 Word16) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V2 Word32) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V2 Word64) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V2 Word8) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V2 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V2 Bool) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V2 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V2 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V3 Int16) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V3 Int32) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V3 Int64) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V3 Int8) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V3 Word16) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V3 Word32) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V3 Word64) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V3 Word8) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V3 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V3 Bool) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V3 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V3 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V4 Int16) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V4 Int32) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V4 Int64) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V4 Int8) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V4 Word16) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V4 Word32) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V4 Word64) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V4 Word8) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V4 Half) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V4 Bool) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V4 Double) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

AlignedStorable 'Std430 (V4 Float) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

(KnownNat n, AlignedStorable 'Scalar a) => AlignedStorable 'Scalar (AlignedArray 'Scalar n a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

(KnownNat n, AlignedStorable 'Scalar a, Vector v a) => AlignedStorable 'Scalar (Vector v n a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

(KnownNat n, AlignedStorable layout a) => AlignedStorable layout (AlignedArray layout n a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

packedAlignedSizeOf :: Proxy layout -> Proxy (AlignedArray layout n a) -> Int Source #

alignedSizeOf :: Proxy layout -> Proxy (AlignedArray layout n a) -> Int Source #

alignedAlignment :: Proxy layout -> Proxy (AlignedArray layout n a) -> Int Source #

alignedPeek :: AlignedPtr layout (AlignedArray layout n a) -> IO (AlignedArray layout n a) Source #

alignedPoke :: AlignedPtr layout (AlignedArray layout n a) -> AlignedArray layout n a -> IO () Source #

(KnownNat n, AlignedStorable layout a, Vector v a) => AlignedStorable layout (Vector v n a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

packedAlignedSizeOf :: Proxy layout -> Proxy (Vector v n a) -> Int Source #

alignedSizeOf :: Proxy layout -> Proxy (Vector v n a) -> Int Source #

alignedAlignment :: Proxy layout -> Proxy (Vector v n a) -> Int Source #

alignedPeek :: AlignedPtr layout (Vector v n a) -> IO (Vector v n a) Source #

alignedPoke :: AlignedPtr layout (Vector v n a) -> Vector v n a -> IO () Source #

Memory layout

data MemoryLayout Source #

A type-level tag representing a memory layout standard.

Constructors

Std140

std140 is a standardized memory layout for SPIR-V interface blocks. It has strict padding and alignment rules, ensuring layout consistency across platforms.

For details, refer to 7.6.2.2 "Standard Uniform Block Layout" of the OpenGL 4.6 Specification.

Std430

std430 is a standardized memory layout, typically used for Shader Storage Buffer Objects (SSBOs). It has more relaxed alignment rules for arrays and structs than std140, which can result in more compact memory usage.

For details, please refer to the section 7.6.2.2 "Standard Uniform Block Layout" of the OpenGL 4.6 Specification.

Scalar

scalar block layout is a memory layout with the most relaxed alignment rules, closely matching the alignment of scalar and vector types in C.

For details, please refer to the extension specification

Instances

Instances details
Bounded MemoryLayout Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Enum MemoryLayout Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Generic MemoryLayout Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Associated Types

type Rep MemoryLayout 
Instance details

Defined in Foreign.GPU.Storable.Aligned

type Rep MemoryLayout = D1 ('MetaData "MemoryLayout" "Foreign.GPU.Storable.Aligned" "heph-aligned-storable-0.1.0.0-6b8LzptWJ8QFQX2EbHBGXb" 'False) (C1 ('MetaCons "Std140" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Std430" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Scalar" 'PrefixI 'False) (U1 :: Type -> Type)))
Show MemoryLayout Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Eq MemoryLayout Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Ord MemoryLayout Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Hashable MemoryLayout Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

type Rep MemoryLayout Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

type Rep MemoryLayout = D1 ('MetaData "MemoryLayout" "Foreign.GPU.Storable.Aligned" "heph-aligned-storable-0.1.0.0-6b8LzptWJ8QFQX2EbHBGXb" 'False) (C1 ('MetaCons "Std140" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Std430" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Scalar" 'PrefixI 'False) (U1 :: Type -> Type)))

data SMemoryLayout (layout :: MemoryLayout) where Source #

Singled MemoryLayout, primarily useful for authors of higher-level libraries (e.g., shader eDSLs, descriptor set builders).

class KnownMemoryLayout (layout :: MemoryLayout) where Source #

This class gives the SMemoryLayout associated with a MemoryLayout.

A very rough sketch of this use case:

emitLayoutQualifier :: forall layout. KnownMemoryLayout layout => String
emitLayoutQualifier = case memoryLayoutVal (Proxy @layout) of
  Std140 -> "layout(std140)"
  Std430 -> "layout(std430)"
  Scalar -> "layout(scalar)"

memoryLayoutVal :: forall (layout :: MemoryLayout). KnownMemoryLayout layout => Proxy layout -> MemoryLayout Source #

Storable Wrappers

newtype Strided (layout :: MemoryLayout) a Source #

Wrapper whose sizeOf includes stride padding, for use in arrays. SV.Vector (Strided Std140 MyType) can be copyBytesd to the GPU in one shot.

Constructors

Strided 

Fields

Instances

Instances details
(MemoryLayoutRules layout, AlignedStorable layout a) => Storable (Strided layout a) Source #

sizeOf (Strided layout a)@ calculates the full stride of the type, including final padding, making it suitable for array allocations.

Use zeroed buffers when using this newtype.

Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

sizeOf :: Strided layout a -> Int #

alignment :: Strided layout a -> Int #

peekElemOff :: Ptr (Strided layout a) -> Int -> IO (Strided layout a) #

pokeElemOff :: Ptr (Strided layout a) -> Int -> Strided layout a -> IO () #

peekByteOff :: Ptr b -> Int -> IO (Strided layout a) #

pokeByteOff :: Ptr b -> Int -> Strided layout a -> IO () #

peek :: Ptr (Strided layout a) -> IO (Strided layout a) #

poke :: Ptr (Strided layout a) -> Strided layout a -> IO () #

Generic (Strided layout a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Associated Types

type Rep (Strided layout a) 
Instance details

Defined in Foreign.GPU.Storable.Aligned

type Rep (Strided layout a) = D1 ('MetaData "Strided" "Foreign.GPU.Storable.Aligned" "heph-aligned-storable-0.1.0.0-6b8LzptWJ8QFQX2EbHBGXb" 'True) (C1 ('MetaCons "Strided" 'PrefixI 'True) (S1 ('MetaSel ('Just "unStrided") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

Methods

from :: Strided layout a -> Rep (Strided layout a) x #

to :: Rep (Strided layout a) x -> Strided layout a #

Show a => Show (Strided layout a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

showsPrec :: Int -> Strided layout a -> ShowS #

show :: Strided layout a -> String #

showList :: [Strided layout a] -> ShowS #

Eq a => Eq (Strided layout a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

(==) :: Strided layout a -> Strided layout a -> Bool #

(/=) :: Strided layout a -> Strided layout a -> Bool #

Ord a => Ord (Strided layout a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

compare :: Strided layout a -> Strided layout a -> Ordering #

(<) :: Strided layout a -> Strided layout a -> Bool #

(<=) :: Strided layout a -> Strided layout a -> Bool #

(>) :: Strided layout a -> Strided layout a -> Bool #

(>=) :: Strided layout a -> Strided layout a -> Bool #

max :: Strided layout a -> Strided layout a -> Strided layout a #

min :: Strided layout a -> Strided layout a -> Strided layout a #

type Rep (Strided layout a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

type Rep (Strided layout a) = D1 ('MetaData "Strided" "Foreign.GPU.Storable.Aligned" "heph-aligned-storable-0.1.0.0-6b8LzptWJ8QFQX2EbHBGXb" 'True) (C1 ('MetaCons "Strided" 'PrefixI 'True) (S1 ('MetaSel ('Just "unStrided") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

type StridedVector (layout :: MemoryLayout) a = Vector (Strided layout a) Source #

A convenience type for Data.Vector.Storable.Vector (Strided layout a)

newtype Packed (layout :: MemoryLayout) a Source #

Wrapper without stride padding. Use for single values (push constants, lone UBOs).

Constructors

Packed 

Fields

Instances

Instances details
AlignedStorable layout a => Storable (Packed layout a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

sizeOf :: Packed layout a -> Int #

alignment :: Packed layout a -> Int #

peekElemOff :: Ptr (Packed layout a) -> Int -> IO (Packed layout a) #

pokeElemOff :: Ptr (Packed layout a) -> Int -> Packed layout a -> IO () #

peekByteOff :: Ptr b -> Int -> IO (Packed layout a) #

pokeByteOff :: Ptr b -> Int -> Packed layout a -> IO () #

peek :: Ptr (Packed layout a) -> IO (Packed layout a) #

poke :: Ptr (Packed layout a) -> Packed layout a -> IO () #

Generic (Packed layout a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Associated Types

type Rep (Packed layout a) 
Instance details

Defined in Foreign.GPU.Storable.Aligned

type Rep (Packed layout a) = D1 ('MetaData "Packed" "Foreign.GPU.Storable.Aligned" "heph-aligned-storable-0.1.0.0-6b8LzptWJ8QFQX2EbHBGXb" 'True) (C1 ('MetaCons "Packed" 'PrefixI 'True) (S1 ('MetaSel ('Just "unPacked") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

Methods

from :: Packed layout a -> Rep (Packed layout a) x #

to :: Rep (Packed layout a) x -> Packed layout a #

Show a => Show (Packed layout a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

showsPrec :: Int -> Packed layout a -> ShowS #

show :: Packed layout a -> String #

showList :: [Packed layout a] -> ShowS #

Eq a => Eq (Packed layout a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

(==) :: Packed layout a -> Packed layout a -> Bool #

(/=) :: Packed layout a -> Packed layout a -> Bool #

Ord a => Ord (Packed layout a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

compare :: Packed layout a -> Packed layout a -> Ordering #

(<) :: Packed layout a -> Packed layout a -> Bool #

(<=) :: Packed layout a -> Packed layout a -> Bool #

(>) :: Packed layout a -> Packed layout a -> Bool #

(>=) :: Packed layout a -> Packed layout a -> Bool #

max :: Packed layout a -> Packed layout a -> Packed layout a #

min :: Packed layout a -> Packed layout a -> Packed layout a #

type Rep (Packed layout a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

type Rep (Packed layout a) = D1 ('MetaData "Packed" "Foreign.GPU.Storable.Aligned" "heph-aligned-storable-0.1.0.0-6b8LzptWJ8QFQX2EbHBGXb" 'True) (C1 ('MetaCons "Packed" 'PrefixI 'True) (S1 ('MetaSel ('Just "unPacked") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

newtype AlignedArray (layout :: MemoryLayout) (n :: Nat) a Source #

Opt-in copyBytes for fixed-size arrays. Parameterize your struct by layout:

data MyStruct layout = MyStruct { pixels :: AlignedArray layout 64 (V4 Float) }

Constructors

AlignedArray 

Fields

Instances

Instances details
(KnownNat n, AlignedStorable 'Scalar a) => AlignedStorable 'Scalar (AlignedArray 'Scalar n a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

(KnownNat n, AlignedStorable layout a) => AlignedStorable layout (AlignedArray layout n a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

packedAlignedSizeOf :: Proxy layout -> Proxy (AlignedArray layout n a) -> Int Source #

alignedSizeOf :: Proxy layout -> Proxy (AlignedArray layout n a) -> Int Source #

alignedAlignment :: Proxy layout -> Proxy (AlignedArray layout n a) -> Int Source #

alignedPeek :: AlignedPtr layout (AlignedArray layout n a) -> IO (AlignedArray layout n a) Source #

alignedPoke :: AlignedPtr layout (AlignedArray layout n a) -> AlignedArray layout n a -> IO () Source #

Generic (AlignedArray layout n a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Associated Types

type Rep (AlignedArray layout n a) 
Instance details

Defined in Foreign.GPU.Storable.Aligned

type Rep (AlignedArray layout n a) = D1 ('MetaData "AlignedArray" "Foreign.GPU.Storable.Aligned" "heph-aligned-storable-0.1.0.0-6b8LzptWJ8QFQX2EbHBGXb" 'True) (C1 ('MetaCons "AlignedArray" 'PrefixI 'True) (S1 ('MetaSel ('Just "unAlignedArray") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Vector n (Strided layout a)))))

Methods

from :: AlignedArray layout n a -> Rep (AlignedArray layout n a) x #

to :: Rep (AlignedArray layout n a) x -> AlignedArray layout n a #

(Show a, AlignedStorable layout a) => Show (AlignedArray layout n a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

showsPrec :: Int -> AlignedArray layout n a -> ShowS #

show :: AlignedArray layout n a -> String #

showList :: [AlignedArray layout n a] -> ShowS #

(AlignedStorable layout a, Eq a) => Eq (AlignedArray layout n a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

(==) :: AlignedArray layout n a -> AlignedArray layout n a -> Bool #

(/=) :: AlignedArray layout n a -> AlignedArray layout n a -> Bool #

(AlignedStorable layout a, Ord a) => Ord (AlignedArray layout n a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

compare :: AlignedArray layout n a -> AlignedArray layout n a -> Ordering #

(<) :: AlignedArray layout n a -> AlignedArray layout n a -> Bool #

(<=) :: AlignedArray layout n a -> AlignedArray layout n a -> Bool #

(>) :: AlignedArray layout n a -> AlignedArray layout n a -> Bool #

(>=) :: AlignedArray layout n a -> AlignedArray layout n a -> Bool #

max :: AlignedArray layout n a -> AlignedArray layout n a -> AlignedArray layout n a #

min :: AlignedArray layout n a -> AlignedArray layout n a -> AlignedArray layout n a #

type Rep (AlignedArray layout n a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

type Rep (AlignedArray layout n a) = D1 ('MetaData "AlignedArray" "Foreign.GPU.Storable.Aligned" "heph-aligned-storable-0.1.0.0-6b8LzptWJ8QFQX2EbHBGXb" 'True) (C1 ('MetaCons "AlignedArray" 'PrefixI 'True) (S1 ('MetaSel ('Just "unAlignedArray") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Vector n (Strided layout a)))))

mkAlignedArray :: forall (layout :: MemoryLayout) a (n :: Nat). (AlignedStorable layout a, Storable a) => Vector n a -> AlignedArray layout n a Source #

Construct an AlignedArray from a sized vector.

withAlignedArray :: forall (layout :: MemoryLayout) (n :: Nat) a. AlignedArray layout n a -> (Vector n (Strided layout a) -> Vector n (Strided layout a)) -> AlignedArray layout n a Source #

Helper function to unwrap an AlignedArray and manipulate its contents. Don't do unsafe pointer tricks in the closure.

newtype AlignedPtr (layout :: MemoryLayout) a Source #

A Ptr that is tagged with its MemoryLayout.

Constructors

AlignedPtr 

Fields

Instances

Instances details
Generic (AlignedPtr layout a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Associated Types

type Rep (AlignedPtr layout a) 
Instance details

Defined in Foreign.GPU.Storable.Aligned

type Rep (AlignedPtr layout a) = D1 ('MetaData "AlignedPtr" "Foreign.GPU.Storable.Aligned" "heph-aligned-storable-0.1.0.0-6b8LzptWJ8QFQX2EbHBGXb" 'True) (C1 ('MetaCons "AlignedPtr" 'PrefixI 'True) (S1 ('MetaSel ('Just "unAlignedPtr") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Ptr a))))

Methods

from :: AlignedPtr layout a -> Rep (AlignedPtr layout a) x #

to :: Rep (AlignedPtr layout a) x -> AlignedPtr layout a #

Show (AlignedPtr layout a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

showsPrec :: Int -> AlignedPtr layout a -> ShowS #

show :: AlignedPtr layout a -> String #

showList :: [AlignedPtr layout a] -> ShowS #

type Rep (AlignedPtr layout a) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

type Rep (AlignedPtr layout a) = D1 ('MetaData "AlignedPtr" "Foreign.GPU.Storable.Aligned" "heph-aligned-storable-0.1.0.0-6b8LzptWJ8QFQX2EbHBGXb" 'True) (C1 ('MetaCons "AlignedPtr" 'PrefixI 'True) (S1 ('MetaSel ('Just "unAlignedPtr") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Ptr a))))

Memory layout rules

class MemoryLayoutRules (layout :: MemoryLayout) where Source #

Defines the precise calculation rules for a given MemoryLayout.

These rules correspond to the memory layout requirements found in the OpenGL and Vulkan specifications.

Methods

alignBlock :: Proxy layout -> Int -> Int Source #

The alignment rule for top-level structs, matrix rows, and array members.

roundStructSize :: Proxy layout -> Int -> Int -> Int Source #

The final size rule for a top-level struct.

layoutStride :: Proxy layout -> Int -> Int -> Int Source #

The stride rule for an element within an array.

Generics

class GAlignedStorable (layout :: MemoryLayout) (rep :: Type -> Type) where Source #

Generically derive AlignedStorable.

data MyType = MyType { field1 :: Float, field2 :: V3 Float }
  deriving (Generic)

instance AlignedStorable Std140 MyType

Methods

galignedSize :: Proxy layout -> Proxy rep -> Int -> (Int, Int) Source #

galignedPoke :: AlignedPtr layout a -> rep a -> Int -> IO Int Source #

galignedPeek :: AlignedPtr layout a -> Int -> IO (rep a, Int) Source #

Instances

Instances details
(TypeError ('Text "Cannot derive AlignedStorable for nullary constructors as there is no shader equivalent.") :: Constraint) => GAlignedStorable layout (U1 :: Type -> Type) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

galignedSize :: Proxy layout -> Proxy (U1 :: Type -> Type) -> Int -> (Int, Int) Source #

galignedPoke :: AlignedPtr layout a -> U1 a -> Int -> IO Int Source #

galignedPeek :: AlignedPtr layout a -> Int -> IO (U1 a, Int) Source #

(TypeError ('Text "Cannot derive AlignedStorable for empty data types as there is no shader equivalent.") :: Constraint) => GAlignedStorable layout (V1 :: Type -> Type) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

galignedSize :: Proxy layout -> Proxy (V1 :: Type -> Type) -> Int -> (Int, Int) Source #

galignedPoke :: AlignedPtr layout a -> V1 a -> Int -> IO Int Source #

galignedPeek :: AlignedPtr layout a -> Int -> IO (V1 a, Int) Source #

(GAlignedStorable layout a, GAlignedStorable layout b) => GAlignedStorable layout (a :*: b) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

galignedSize :: Proxy layout -> Proxy (a :*: b) -> Int -> (Int, Int) Source #

galignedPoke :: AlignedPtr layout a0 -> (a :*: b) a0 -> Int -> IO Int Source #

galignedPeek :: AlignedPtr layout a0 -> Int -> IO ((a :*: b) a0, Int) Source #

(TypeError ('Text "Cannot derive AlignedStorable for sum types as there is no unambiguous shader equivalent.") :: Constraint) => GAlignedStorable layout (a :+: b) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

galignedSize :: Proxy layout -> Proxy (a :+: b) -> Int -> (Int, Int) Source #

galignedPoke :: AlignedPtr layout a0 -> (a :+: b) a0 -> Int -> IO Int Source #

galignedPeek :: AlignedPtr layout a0 -> Int -> IO ((a :+: b) a0, Int) Source #

AlignedStorable layout c => GAlignedStorable layout (K1 i c :: Type -> Type) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

galignedSize :: Proxy layout -> Proxy (K1 i c :: Type -> Type) -> Int -> (Int, Int) Source #

galignedPoke :: AlignedPtr layout a -> K1 i c a -> Int -> IO Int Source #

galignedPeek :: AlignedPtr layout a -> Int -> IO (K1 i c a, Int) Source #

GAlignedStorable layout f => GAlignedStorable layout (M1 i c f) Source # 
Instance details

Defined in Foreign.GPU.Storable.Aligned

Methods

galignedSize :: Proxy layout -> Proxy (M1 i c f) -> Int -> (Int, Int) Source #

galignedPoke :: AlignedPtr layout a -> M1 i c f a -> Int -> IO Int Source #

galignedPeek :: AlignedPtr layout a -> Int -> IO (M1 i c f a, Int) Source #