-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Use easytensor with vulkan-api. -- -- Use easytensor DataFrame types with vulkan-api. This package provides -- an orphan instance of PrimBytes for Vulkan structures, so they can be -- used as elements of DataFrames. In addition, it provides a few helper -- functions for working with array-like structures. @package easytensor-vulkan @version 2.0.2.0 -- | This module provides an orphan instance of PrimBytes for -- VulkanMarshalPrim structures. This enables them to be stored -- in DataFrames from easytensor package. Thanks to -- internal structure of Vulkan structures, they can be manipulated -- inside DataFrames in a very efficient way (just by copying byte -- arrays). However, original DataFrames are based on unpinned -- arrays; functions here check this and copy data to new pinned arrays -- if needed. -- -- In addition to the orphan instance, this module provides a few handy -- helper functions. module Graphics.Vulkan.Marshal.Create.DataFrame -- | Write an array of values in one go. setVec :: forall fname x t. (FieldType fname x ~ t, PrimBytes t, KnownDim (FieldArrayLength fname x), CanWriteFieldArray fname x) => Vector t (FieldArrayLength fname x) -> CreateVkStruct x '[fname] () -- | Get an array of values, possibly without copying (if vector -- implementation allows). getVec :: forall fname x t. (FieldType fname x ~ t, PrimBytes t, KnownDim (FieldArrayLength fname x), CanReadFieldArray fname x) => x -> Vector t (FieldArrayLength fname x) -- | Given the number of elements, create a new pinned DataFrame and -- initialize it using the provided function. -- -- The argument function is called one time with a Ptr pointing to -- the beginning of a contiguous array. This array is converted into a -- dataframe, possibly without copying. -- -- It is safe to pass result of this function to withDFPtr. fillDataFrame :: forall a. PrimBytes a => Word -> (Ptr a -> IO ()) -> IO (Vector a (XN 0)) -- | Run some operation with a pointer to the first item in the frame. All -- items of the frame are kept in a contiguous memory area accessed by -- that pointer. -- -- The function attempts to get an underlying ByteArray# without -- data copy; otherwise, it creates a new pinned ByteArray# and -- passes a pointer to it. Therefore: -- -- withDFPtr :: forall (a :: Type) (ds :: [Nat]) (b :: Type). (PrimBytes a, Dimensions ds) => DataFrame a ds -> (Ptr a -> IO b) -> IO b -- | A variant of setVkRef that writes a pointer to a contiguous -- array of structures. -- -- Write a pointer to a vulkan structure - member of current structure -- and make sure the member exists as long as this structure exists. -- -- Prefer this function to using unsafePtr a, because the latter -- does not keep the dependency information in GC, which results in -- member structure being garbage-collected and the reference being -- invalid. setDFRef :: forall fname x a (ds :: [Nat]). (CanWriteField fname x, FieldType fname x ~ Ptr a, PrimBytes a, Dimensions ds) => DataFrame a ds -> CreateVkStruct x '[fname] () instance Graphics.Vulkan.Marshal.Internal.VulkanMarshal (Graphics.Vulkan.Marshal.Internal.VkStruct a) => Numeric.PrimBytes.PrimBytes (Graphics.Vulkan.Marshal.Internal.VkStruct a)