vulkan-3.1.0.0: Bindings to the Vulkan graphics API.

Safe HaskellNone
LanguageHaskell2010

Graphics.Vulkan.Core10.Shader

Synopsis

Documentation

createShaderModule :: forall a io. (PokeChain a, MonadIO io) => Device -> ShaderModuleCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io ShaderModule Source #

vkCreateShaderModule - Creates a new shader module object

Parameters

  • device is the logical device that creates the shader module.
  • pCreateInfo is a pointer to a ShaderModuleCreateInfo structure.
  • pAllocator controls host memory allocation as described in the Memory Allocation chapter.
  • pShaderModule is a pointer to a ShaderModule handle in which the resulting shader module object is returned.

Description

Once a shader module has been created, any entry points it contains can be used in pipeline shader stages as described in Compute Pipelines and Graphics Pipelines.

If the shader stage fails to compile ERROR_INVALID_SHADER_NV will be generated and the compile log will be reported back to the application by https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_report if enabled.

Valid Usage (Implicit)

  • device must be a valid Device handle

Return Codes

Success
Failure

See Also

AllocationCallbacks, Device, ShaderModule, ShaderModuleCreateInfo

withShaderModule :: forall a r. PokeChain a => Device -> ShaderModuleCreateInfo a -> Maybe AllocationCallbacks -> (ShaderModule -> IO r) -> IO r Source #

A safe wrapper for createShaderModule and destroyShaderModule using bracket

The allocated value must not be returned from the provided computation

destroyShaderModule :: forall io. MonadIO io => Device -> ShaderModule -> ("allocator" ::: Maybe AllocationCallbacks) -> io () Source #

vkDestroyShaderModule - Destroy a shader module

Parameters

  • device is the logical device that destroys the shader module.
  • shaderModule is the handle of the shader module to destroy.
  • pAllocator controls host memory allocation as described in the Memory Allocation chapter.

Description

A shader module can be destroyed while pipelines created using its shaders are still in use.

Valid Usage

  • If AllocationCallbacks were provided when shaderModule was created, a compatible set of callbacks must be provided here

Valid Usage (Implicit)

  • device must be a valid Device handle
  • If shaderModule is not NULL_HANDLE, shaderModule must be a valid ShaderModule handle
  • If pAllocator is not NULL, pAllocator must be a valid pointer to a valid AllocationCallbacks structure
  • If shaderModule is a valid handle, it must have been created, allocated, or retrieved from device

Host Synchronization

  • Host access to shaderModule must be externally synchronized

See Also

AllocationCallbacks, Device, ShaderModule

data ShaderModuleCreateInfo (es :: [Type]) Source #

VkShaderModuleCreateInfo - Structure specifying parameters of a newly created shader module

Valid Usage

  • codeSize must be greater than 0
  • If pCode is a pointer to SPIR-V code, codeSize must be a multiple of 4
  • pCode must point to either valid SPIR-V code, formatted and packed as described by the Khronos SPIR-V Specification or valid GLSL code which must be written to the GL_KHR_vulkan_glsl extension specification
  • If pCode is a pointer to SPIR-V code, that code must adhere to the validation rules described by the Validation Rules within a Module section of the SPIR-V Environment appendix
  • If pCode is a pointer to GLSL code, it must be valid GLSL code written to the GL_KHR_vulkan_glsl GLSL extension specification
  • pCode must declare the Shader capability for SPIR-V code
  • pCode must not declare any capability that is not supported by the API, as described by the Capabilities section of the SPIR-V Environment appendix
  • If pCode declares any of the capabilities listed as optional in the SPIR-V Environment appendix, the corresponding feature(s) must be enabled.

Valid Usage (Implicit)

  • pNext must be NULL or a pointer to a valid instance of ShaderModuleValidationCacheCreateInfoEXT
  • The sType value of each struct in the pNext chain must be unique
  • flags must be 0
  • pCode must be a valid pointer to an array of \(\textrm{codeSize} \over 4\) uint32_t values

See Also

ShaderModuleCreateFlags, StructureType, createShaderModule

Constructors

ShaderModuleCreateInfo 

Fields

  • next :: Chain es

    pNext is NULL or a pointer to an extension-specific structure.

  • flags :: ShaderModuleCreateFlags

    flags is reserved for future use.

  • code :: ByteString

    pCode is a pointer to code that is used to create the shader module. The type and format of the code is determined from the content of the memory addressed by pCode.

Instances
Extensible ShaderModuleCreateInfo Source # 
Instance details

Defined in Graphics.Vulkan.Core10.Shader

Show (Chain es) => Show (ShaderModuleCreateInfo es) Source # 
Instance details

Defined in Graphics.Vulkan.Core10.Shader

PeekChain es => FromCStruct (ShaderModuleCreateInfo es) Source # 
Instance details

Defined in Graphics.Vulkan.Core10.Shader

PokeChain es => ToCStruct (ShaderModuleCreateInfo es) Source # 
Instance details

Defined in Graphics.Vulkan.Core10.Shader

es ~ ([] :: [Type]) => Zero (ShaderModuleCreateInfo es) Source # 
Instance details

Defined in Graphics.Vulkan.Core10.Shader