vulkan-3.13.3: Bindings to the Vulkan graphics API.
Safe HaskellNone
LanguageHaskell2010

Vulkan.Core10.OtherTypes

Synopsis

Documentation

data MemoryBarrier Source #

VkMemoryBarrier - Structure specifying a global memory barrier

Description

The first access scope is limited to access types in the source access mask specified by srcAccessMask.

The second access scope is limited to access types in the destination access mask specified by dstAccessMask.

Valid Usage (Implicit)

See Also

VK_VERSION_1_0, AccessFlags, StructureType, cmdPipelineBarrier, cmdWaitEvents

Constructors

MemoryBarrier 

Fields

Instances

Instances details
Eq MemoryBarrier Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

Show MemoryBarrier Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

Storable MemoryBarrier Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

FromCStruct MemoryBarrier Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

ToCStruct MemoryBarrier Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

Zero MemoryBarrier Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

data BufferMemoryBarrier Source #

VkBufferMemoryBarrier - Structure specifying a buffer memory barrier

Description

The first access scope is limited to access to memory through the specified buffer range, via access types in the source access mask specified by srcAccessMask. If srcAccessMask includes ACCESS_HOST_WRITE_BIT, memory writes performed by that access type are also made visible, as that access type is not performed through a resource.

The second access scope is limited to access to memory through the specified buffer range, via access types in the destination access mask specified by dstAccessMask. If dstAccessMask includes ACCESS_HOST_WRITE_BIT or ACCESS_HOST_READ_BIT, available memory writes are also made visible to accesses of those types, as those access types are not performed through a resource.

If srcQueueFamilyIndex is not equal to dstQueueFamilyIndex, and srcQueueFamilyIndex is equal to the current queue family, then the memory barrier defines a queue family release operation for the specified buffer range, and the second access scope includes no access, as if dstAccessMask was 0.

If dstQueueFamilyIndex is not equal to srcQueueFamilyIndex, and dstQueueFamilyIndex is equal to the current queue family, then the memory barrier defines a queue family acquire operation for the specified buffer range, and the first access scope includes no access, as if srcAccessMask was 0.

Valid Usage

  • offset must be less than the size of buffer
  • If size is not equal to WHOLE_SIZE, size must be greater than 0
  • If size is not equal to WHOLE_SIZE, size must be less than or equal to than the size of buffer minus offset
  • If buffer is non-sparse then it must be bound completely and contiguously to a single DeviceMemory object
  • If srcQueueFamilyIndex is not equal to dstQueueFamilyIndex, at least one must not be a special queue family reserved for external memory ownership transfers, as described in ???
  • If buffer was created with a sharing mode of SHARING_MODE_CONCURRENT, srcQueueFamilyIndex and dstQueueFamilyIndex are not equal, and one of srcQueueFamilyIndex and dstQueueFamilyIndex is one of the special queue family values reserved for external memory transfers, the other must be QUEUE_FAMILY_IGNORED
  • If buffer was created with a sharing mode of SHARING_MODE_EXCLUSIVE, and srcQueueFamilyIndex and dstQueueFamilyIndex are not equal, srcQueueFamilyIndex and dstQueueFamilyIndex must both be valid queue families, or one of the special queue family values reserved for external memory transfers, as described in ???
  • If the synchronization2 feature is not enabled, and buffer was created with a sharing mode of SHARING_MODE_CONCURRENT, at least one of srcQueueFamilyIndex and dstQueueFamilyIndex must be QUEUE_FAMILY_IGNORED

Valid Usage (Implicit)

  • pNext must be NULL
  • buffer must be a valid Buffer handle

See Also

VK_VERSION_1_0, AccessFlags, Buffer, DeviceSize, StructureType, cmdPipelineBarrier, cmdWaitEvents

Constructors

BufferMemoryBarrier 

Fields

Instances

Instances details
Eq BufferMemoryBarrier Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

Show BufferMemoryBarrier Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

Storable BufferMemoryBarrier Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

FromCStruct BufferMemoryBarrier Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

ToCStruct BufferMemoryBarrier Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

Zero BufferMemoryBarrier Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

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

VkImageMemoryBarrier - Structure specifying the parameters of an image memory barrier

Description

The first access scope is limited to access to memory through the specified image subresource range, via access types in the source access mask specified by srcAccessMask. If srcAccessMask includes ACCESS_HOST_WRITE_BIT, memory writes performed by that access type are also made visible, as that access type is not performed through a resource.

The second access scope is limited to access to memory through the specified image subresource range, via access types in the destination access mask specified by dstAccessMask. If dstAccessMask includes ACCESS_HOST_WRITE_BIT or ACCESS_HOST_READ_BIT, available memory writes are also made visible to accesses of those types, as those access types are not performed through a resource.

If srcQueueFamilyIndex is not equal to dstQueueFamilyIndex, and srcQueueFamilyIndex is equal to the current queue family, then the memory barrier defines a queue family release operation for the specified image subresource range, and the second access scope includes no access, as if dstAccessMask was 0.

If dstQueueFamilyIndex is not equal to srcQueueFamilyIndex, and dstQueueFamilyIndex is equal to the current queue family, then the memory barrier defines a queue family acquire operation for the specified image subresource range, and the first access scope includes no access, as if srcAccessMask was 0.

If the synchronization2 feature is not enabled or oldLayout is not equal to newLayout, oldLayout and newLayout define an image layout transition for the specified image subresource range.

Note

If the synchronization2 feature is enabled, when the old and new layout are equal, the layout values are ignored - data is preserved no matter what values are specified, or what layout the image is currently in.

If image has a multi-planar format and the image is disjoint, then including IMAGE_ASPECT_COLOR_BIT in the aspectMask member of subresourceRange is equivalent to including IMAGE_ASPECT_PLANE_0_BIT, IMAGE_ASPECT_PLANE_1_BIT, and (for three-plane formats only) IMAGE_ASPECT_PLANE_2_BIT.

Valid Usage

  • subresourceRange.baseMipLevel must be less than the mipLevels specified in ImageCreateInfo when image was created

Valid Usage (Implicit)

See Also

VK_VERSION_1_0, AccessFlags, Image, ImageLayout, ImageSubresourceRange, StructureType, cmdPipelineBarrier, cmdWaitEvents

Constructors

ImageMemoryBarrier 

Fields

Instances

Instances details
Extensible ImageMemoryBarrier Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

Methods

extensibleTypeName :: String Source #

getNext :: forall (es :: [Type]). ImageMemoryBarrier es -> Chain es Source #

setNext :: forall (ds :: [Type]) (es :: [Type]). ImageMemoryBarrier ds -> Chain es -> ImageMemoryBarrier es Source #

extends :: forall e b proxy. Typeable e => proxy e -> (Extends ImageMemoryBarrier e => b) -> Maybe b Source #

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

Defined in Vulkan.Core10.OtherTypes

(Extendss ImageMemoryBarrier es, PeekChain es) => FromCStruct (ImageMemoryBarrier es) Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

(Extendss ImageMemoryBarrier es, PokeChain es) => ToCStruct (ImageMemoryBarrier es) Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

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

Defined in Vulkan.Core10.OtherTypes

data PipelineCacheHeaderVersionOne Source #

VkPipelineCacheHeaderVersionOne - Structure describing the layout of the pipeline cache header

Description

Unlike most structures declared by the Vulkan API, all fields of this structure are written with the least significant byte first, regardless of host byte-order.

The C language specification does not define the packing of structure members. This layout assumes tight structure member packing, with members laid out in the order listed in the structure, and the intended size of the structure is 32 bytes. If a compiler produces code that diverges from that pattern, applications must employ another method to set values at the correct offsets.

Valid Usage (Implicit)

See Also

VK_VERSION_1_0, PipelineCacheHeaderVersion

Constructors

PipelineCacheHeaderVersionOne 

Fields

Instances

Instances details
Show PipelineCacheHeaderVersionOne Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

Storable PipelineCacheHeaderVersionOne Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

FromCStruct PipelineCacheHeaderVersionOne Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

ToCStruct PipelineCacheHeaderVersionOne Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

Zero PipelineCacheHeaderVersionOne Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

data DrawIndirectCommand Source #

VkDrawIndirectCommand - Structure specifying a indirect drawing command

Description

The members of DrawIndirectCommand have the same meaning as the similarly named parameters of cmdDraw.

Valid Usage

See Also

VK_VERSION_1_0, cmdDrawIndirect

Constructors

DrawIndirectCommand 

Fields

Instances

Instances details
Eq DrawIndirectCommand Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

Show DrawIndirectCommand Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

Storable DrawIndirectCommand Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

FromCStruct DrawIndirectCommand Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

ToCStruct DrawIndirectCommand Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

Zero DrawIndirectCommand Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

data DrawIndexedIndirectCommand Source #

VkDrawIndexedIndirectCommand - Structure specifying a indexed indirect drawing command

Description

The members of DrawIndexedIndirectCommand have the same meaning as the similarly named parameters of cmdDrawIndexed.

Valid Usage

  • (indexSize × (firstIndex + indexCount) + offset) must be less than or equal to the size of the bound index buffer, with indexSize being based on the type specified by indexType, where the index buffer, indexType, and offset are specified via cmdBindIndexBuffer
  • If the drawIndirectFirstInstance feature is not enabled, firstInstance must be 0

See Also

VK_VERSION_1_0, cmdDrawIndexedIndirect

Constructors

DrawIndexedIndirectCommand 

Fields

Instances

Instances details
Eq DrawIndexedIndirectCommand Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

Show DrawIndexedIndirectCommand Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

Storable DrawIndexedIndirectCommand Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

FromCStruct DrawIndexedIndirectCommand Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

ToCStruct DrawIndexedIndirectCommand Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

Zero DrawIndexedIndirectCommand Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

data DispatchIndirectCommand Source #

VkDispatchIndirectCommand - Structure specifying a indirect dispatching command

Description

The members of DispatchIndirectCommand have the same meaning as the corresponding parameters of cmdDispatch.

Valid Usage

See Also

VK_VERSION_1_0, cmdDispatchIndirect

Constructors

DispatchIndirectCommand 

Fields

  • x :: Word32

    x is the number of local workgroups to dispatch in the X dimension.

    x must be less than or equal to PhysicalDeviceLimits::maxComputeWorkGroupCount[0]

  • y :: Word32

    y is the number of local workgroups to dispatch in the Y dimension.

    y must be less than or equal to PhysicalDeviceLimits::maxComputeWorkGroupCount[1]

  • z :: Word32

    z is the number of local workgroups to dispatch in the Z dimension.

    z must be less than or equal to PhysicalDeviceLimits::maxComputeWorkGroupCount[2]

Instances

Instances details
Eq DispatchIndirectCommand Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

Show DispatchIndirectCommand Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

Storable DispatchIndirectCommand Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

FromCStruct DispatchIndirectCommand Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

ToCStruct DispatchIndirectCommand Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

Zero DispatchIndirectCommand Source # 
Instance details

Defined in Vulkan.Core10.OtherTypes

data BaseOutStructure Source #

VkBaseOutStructure - Base structure for a read-only pointer chain

Description

BaseOutStructure can be used to facilitate iterating through a structure pointer chain that returns data back to the application.

See Also

VK_VERSION_1_0, BaseOutStructure, StructureType

Constructors

BaseOutStructure 

Fields

Instances

Instances details
Eq BaseOutStructure Source # 
Instance details

Defined in Vulkan.CStruct.Extends

Show BaseOutStructure Source # 
Instance details

Defined in Vulkan.CStruct.Extends

Storable BaseOutStructure Source # 
Instance details

Defined in Vulkan.CStruct.Extends

FromCStruct BaseOutStructure Source # 
Instance details

Defined in Vulkan.CStruct.Extends

ToCStruct BaseOutStructure Source # 
Instance details

Defined in Vulkan.CStruct.Extends

Zero BaseOutStructure Source # 
Instance details

Defined in Vulkan.CStruct.Extends

data BaseInStructure Source #

VkBaseInStructure - Base structure for a read-only pointer chain

Description

BaseInStructure can be used to facilitate iterating through a read-only structure pointer chain.

See Also

VK_VERSION_1_0, BaseInStructure, StructureType

Constructors

BaseInStructure 

Fields

Instances

Instances details
Eq BaseInStructure Source # 
Instance details

Defined in Vulkan.CStruct.Extends

Show BaseInStructure Source # 
Instance details

Defined in Vulkan.CStruct.Extends

Storable BaseInStructure Source # 
Instance details

Defined in Vulkan.CStruct.Extends

FromCStruct BaseInStructure Source # 
Instance details

Defined in Vulkan.CStruct.Extends

ToCStruct BaseInStructure Source # 
Instance details

Defined in Vulkan.CStruct.Extends

Zero BaseInStructure Source # 
Instance details

Defined in Vulkan.CStruct.Extends

newtype ObjectType Source #

VkObjectType - Specify an enumeration to track object handle types

Description

'

ObjectTypeVulkan Handle Type
OBJECT_TYPE_UNKNOWNUnknown/Undefined Handle
OBJECT_TYPE_INSTANCEInstance
OBJECT_TYPE_PHYSICAL_DEVICEPhysicalDevice
OBJECT_TYPE_DEVICEDevice
OBJECT_TYPE_QUEUEQueue
OBJECT_TYPE_SEMAPHORESemaphore
OBJECT_TYPE_COMMAND_BUFFERCommandBuffer
OBJECT_TYPE_FENCEFence
OBJECT_TYPE_DEVICE_MEMORYDeviceMemory
OBJECT_TYPE_BUFFERBuffer
OBJECT_TYPE_IMAGEImage
OBJECT_TYPE_EVENTEvent
OBJECT_TYPE_QUERY_POOLQueryPool
OBJECT_TYPE_BUFFER_VIEWBufferView
OBJECT_TYPE_IMAGE_VIEWImageView
OBJECT_TYPE_SHADER_MODULEShaderModule
OBJECT_TYPE_PIPELINE_CACHEPipelineCache
OBJECT_TYPE_PIPELINE_LAYOUTPipelineLayout
OBJECT_TYPE_RENDER_PASSRenderPass
OBJECT_TYPE_PIPELINEPipeline
OBJECT_TYPE_DESCRIPTOR_SET_LAYOUTDescriptorSetLayout
OBJECT_TYPE_SAMPLERSampler
OBJECT_TYPE_DESCRIPTOR_POOLDescriptorPool
OBJECT_TYPE_DESCRIPTOR_SETDescriptorSet
OBJECT_TYPE_FRAMEBUFFERFramebuffer
OBJECT_TYPE_COMMAND_POOLCommandPool
OBJECT_TYPE_SAMPLER_YCBCR_CONVERSIONSamplerYcbcrConversion
OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATEDescriptorUpdateTemplate
OBJECT_TYPE_SURFACE_KHRSurfaceKHR
OBJECT_TYPE_SWAPCHAIN_KHRSwapchainKHR
OBJECT_TYPE_DISPLAY_KHRDisplayKHR
OBJECT_TYPE_DISPLAY_MODE_KHRDisplayModeKHR
OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXTDebugReportCallbackEXT
OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVIndirectCommandsLayoutNV
OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXTDebugUtilsMessengerEXT
OBJECT_TYPE_VALIDATION_CACHE_EXTValidationCacheEXT
OBJECT_TYPE_ACCELERATION_STRUCTURE_NVAccelerationStructureNV
OBJECT_TYPE_ACCELERATION_STRUCTURE_KHRAccelerationStructureKHR
OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTELPerformanceConfigurationINTEL
OBJECT_TYPE_DEFERRED_OPERATION_KHRDeferredOperationKHR
OBJECT_TYPE_PRIVATE_DATA_SLOT_EXTPrivateDataSlotEXT

ObjectType and Vulkan Handle Relationship

See Also

VK_VERSION_1_0, DebugUtilsObjectNameInfoEXT, DebugUtilsObjectTagInfoEXT, DeviceMemoryReportCallbackDataEXT, getPrivateDataEXT, setPrivateDataEXT

Constructors

ObjectType Int32 

Bundled Patterns

pattern OBJECT_TYPE_UNKNOWN :: ObjectType 
pattern OBJECT_TYPE_INSTANCE :: ObjectType 
pattern OBJECT_TYPE_PHYSICAL_DEVICE :: ObjectType 
pattern OBJECT_TYPE_DEVICE :: ObjectType 
pattern OBJECT_TYPE_QUEUE :: ObjectType 
pattern OBJECT_TYPE_SEMAPHORE :: ObjectType 
pattern OBJECT_TYPE_COMMAND_BUFFER :: ObjectType 
pattern OBJECT_TYPE_FENCE :: ObjectType 
pattern OBJECT_TYPE_DEVICE_MEMORY :: ObjectType 
pattern OBJECT_TYPE_BUFFER :: ObjectType 
pattern OBJECT_TYPE_IMAGE :: ObjectType 
pattern OBJECT_TYPE_EVENT :: ObjectType 
pattern OBJECT_TYPE_QUERY_POOL :: ObjectType 
pattern OBJECT_TYPE_BUFFER_VIEW :: ObjectType 
pattern OBJECT_TYPE_IMAGE_VIEW :: ObjectType 
pattern OBJECT_TYPE_SHADER_MODULE :: ObjectType 
pattern OBJECT_TYPE_PIPELINE_CACHE :: ObjectType 
pattern OBJECT_TYPE_PIPELINE_LAYOUT :: ObjectType 
pattern OBJECT_TYPE_RENDER_PASS :: ObjectType 
pattern OBJECT_TYPE_PIPELINE :: ObjectType 
pattern OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT :: ObjectType 
pattern OBJECT_TYPE_SAMPLER :: ObjectType 
pattern OBJECT_TYPE_DESCRIPTOR_POOL :: ObjectType 
pattern OBJECT_TYPE_DESCRIPTOR_SET :: ObjectType 
pattern OBJECT_TYPE_FRAMEBUFFER :: ObjectType 
pattern OBJECT_TYPE_COMMAND_POOL :: ObjectType 
pattern OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA :: ObjectType 
pattern OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT :: ObjectType 
pattern OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV :: ObjectType 
pattern OBJECT_TYPE_DEFERRED_OPERATION_KHR :: ObjectType 
pattern OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL :: ObjectType 
pattern OBJECT_TYPE_ACCELERATION_STRUCTURE_NV :: ObjectType 
pattern OBJECT_TYPE_VALIDATION_CACHE_EXT :: ObjectType 
pattern OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR :: ObjectType 
pattern OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT :: ObjectType 
pattern OBJECT_TYPE_CU_FUNCTION_NVX :: ObjectType 
pattern OBJECT_TYPE_CU_MODULE_NVX :: ObjectType 
pattern OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT :: ObjectType 
pattern OBJECT_TYPE_DISPLAY_MODE_KHR :: ObjectType 
pattern OBJECT_TYPE_DISPLAY_KHR :: ObjectType 
pattern OBJECT_TYPE_SWAPCHAIN_KHR :: ObjectType 
pattern OBJECT_TYPE_SURFACE_KHR :: ObjectType 
pattern OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE :: ObjectType 
pattern OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION :: ObjectType 

Instances

Instances details
Eq ObjectType Source # 
Instance details

Defined in Vulkan.Core10.Enums.ObjectType

Ord ObjectType Source # 
Instance details

Defined in Vulkan.Core10.Enums.ObjectType

Read ObjectType Source # 
Instance details

Defined in Vulkan.Core10.Enums.ObjectType

Show ObjectType Source # 
Instance details

Defined in Vulkan.Core10.Enums.ObjectType

Storable ObjectType Source # 
Instance details

Defined in Vulkan.Core10.Enums.ObjectType

Zero ObjectType Source # 
Instance details

Defined in Vulkan.Core10.Enums.ObjectType

newtype VendorId Source #

VkVendorId - Khronos vendor IDs

Description

Note

Khronos vendor IDs may be allocated by vendors at any time. Only the latest canonical versions of this Specification, of the corresponding vk.xml API Registry, and of the corresponding vulkan_core.h header file must contain all reserved Khronos vendor IDs.

Only Khronos vendor IDs are given symbolic names at present. PCI vendor IDs returned by the implementation can be looked up in the PCI-SIG database.

See Also

VK_VERSION_1_0

Constructors

VendorId Int32 

Bundled Patterns

pattern VENDOR_ID_VIV :: VendorId 
pattern VENDOR_ID_VSI :: VendorId 
pattern VENDOR_ID_KAZAN :: VendorId 
pattern VENDOR_ID_CODEPLAY :: VendorId 
pattern VENDOR_ID_MESA :: VendorId 
pattern VENDOR_ID_POCL :: VendorId 

Instances

Instances details
Eq VendorId Source # 
Instance details

Defined in Vulkan.Core10.Enums.VendorId

Ord VendorId Source # 
Instance details

Defined in Vulkan.Core10.Enums.VendorId

Read VendorId Source # 
Instance details

Defined in Vulkan.Core10.Enums.VendorId

Show VendorId Source # 
Instance details

Defined in Vulkan.Core10.Enums.VendorId

Storable VendorId Source # 
Instance details

Defined in Vulkan.Core10.Enums.VendorId

Zero VendorId Source # 
Instance details

Defined in Vulkan.Core10.Enums.VendorId

Methods

zero :: VendorId Source #