* [utils] started to implement wrapper classes for vulkan api * [triangle] stared implementation of simple triangle examplemaster
@@ -81,6 +81,11 @@ interface | |||
{********************************* VK_VERSION_1_0 *********************************} | |||
const { constants } | |||
VK_API_VERSION = 4194307; | |||
VK_API_VERSION_MAJOR = 1; | |||
VK_API_VERSION_MINOR = 0; | |||
VK_API_VERSION_BUGFIX = 3; | |||
VK_MAX_PHYSICAL_DEVICE_NAME_SIZE = 256; | |||
VK_UUID_SIZE = 16; | |||
VK_MAX_EXTENSION_NAME_SIZE = 256; | |||
@@ -1011,10 +1016,10 @@ type { enums } | |||
type { funcptrs } | |||
TvkVoidFunction = procedure(); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkFreeFunction = procedure(pUserData: PVkVoid; pMemory: PVkVoid); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkAllocationFunction = procedure(pUserData: PVkVoid; size: VkSize; alignment: VkSize; allocationScope: TVkSystemAllocationScope); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkAllocationFunction = function (pUserData: PVkVoid; size: VkSize; alignment: VkSize; allocationScope: TVkSystemAllocationScope): PVkVoid; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkInternalAllocationNotification = procedure(pUserData: PVkVoid; size: VkSize; allocationType: TVkInternalAllocationType; allocationScope: TVkSystemAllocationScope); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkInternalFreeNotification = procedure(pUserData: PVkVoid; size: VkSize; allocationType: TVkInternalAllocationType; allocationScope: TVkSystemAllocationScope); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkReallocationFunction = procedure(pUserData: PVkVoid; pOriginal: PVkVoid; size: VkSize; alignment: VkSize; allocationScope: TVkSystemAllocationScope); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkReallocationFunction = function (pUserData: PVkVoid; pOriginal: PVkVoid; size: VkSize; alignment: VkSize; allocationScope: TVkSystemAllocationScope): PVkVoid; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
type { structs } | |||
TVkViewport = record | |||
@@ -1282,14 +1287,6 @@ type { structs } | |||
PVkSubpassDependency = ^TVkSubpassDependency; | |||
PPVkSubpassDependency = ^PVkSubpassDependency; | |||
TVkPushConstantRange = record | |||
stageFlags: VkShaderStageFlags; | |||
offset: VkUint32; | |||
size: VkUint32; | |||
end; | |||
PVkPushConstantRange = ^TVkPushConstantRange; | |||
PPVkPushConstantRange = ^PVkPushConstantRange; | |||
TVkPhysicalDeviceLimits = record | |||
maxImageDimension1D: VkUint32; | |||
maxImageDimension2D: VkUint32; | |||
@@ -1401,6 +1398,21 @@ type { structs } | |||
PVkPhysicalDeviceLimits = ^TVkPhysicalDeviceLimits; | |||
PPVkPhysicalDeviceLimits = ^PVkPhysicalDeviceLimits; | |||
TVkPushConstantRange = record | |||
stageFlags: VkShaderStageFlags; | |||
offset: VkUint32; | |||
size: VkUint32; | |||
end; | |||
PVkPushConstantRange = ^TVkPushConstantRange; | |||
PPVkPushConstantRange = ^PVkPushConstantRange; | |||
TVkRect2D = record | |||
offset: TVkOffset2D; | |||
extent: TVkExtent2D; | |||
end; | |||
PVkRect2D = ^TVkRect2D; | |||
PPVkRect2D = ^PVkRect2D; | |||
TVkDescriptorBufferInfo = record | |||
buffer: VkBuffer; | |||
offset: VkDeviceSize; | |||
@@ -1409,6 +1421,33 @@ type { structs } | |||
PVkDescriptorBufferInfo = ^TVkDescriptorBufferInfo; | |||
PPVkDescriptorBufferInfo = ^PVkDescriptorBufferInfo; | |||
TVkQueueFamilyProperties = record | |||
queueFlags: VkQueueFlags; | |||
queueCount: VkUint32; | |||
timestampValidBits: VkUint32; | |||
minImageTransferGranularity: TVkExtent3D; | |||
end; | |||
PVkQueueFamilyProperties = ^TVkQueueFamilyProperties; | |||
PPVkQueueFamilyProperties = ^PVkQueueFamilyProperties; | |||
TVkImageFormatProperties = record | |||
maxExtent: TVkExtent3D; | |||
maxMipLevels: VkUint32; | |||
maxArrayLayers: VkUint32; | |||
sampleCounts: VkSampleCountFlags; | |||
maxResourceSize: VkDeviceSize; | |||
end; | |||
PVkImageFormatProperties = ^TVkImageFormatProperties; | |||
PPVkImageFormatProperties = ^PVkImageFormatProperties; | |||
TVkSparseImageFormatProperties = record | |||
aspectMask: VkImageAspectFlags; | |||
imageGranularity: TVkExtent3D; | |||
flags: VkSparseImageFormatFlags; | |||
end; | |||
PVkSparseImageFormatProperties = ^TVkSparseImageFormatProperties; | |||
PPVkSparseImageFormatProperties = ^PVkSparseImageFormatProperties; | |||
TVkSparseMemoryBind = record | |||
resourceOffset: VkDeviceSize; | |||
size: VkDeviceSize; | |||
@@ -1533,13 +1572,6 @@ type { structs } | |||
PVkClearValue = ^TVkClearValue; | |||
PPVkClearValue = ^PVkClearValue; | |||
TVkRect2D = record | |||
offset: TVkOffset2D; | |||
extent: TVkExtent2D; | |||
end; | |||
PVkRect2D = ^TVkRect2D; | |||
PPVkRect2D = ^PVkRect2D; | |||
TVkSpecializationInfo = record | |||
mapEntryCount: VkUint32; | |||
pMapEntries: PVkSpecializationMapEntry; | |||
@@ -1634,25 +1666,6 @@ type { structs } | |||
PVkCommandBufferInheritanceInfo = ^TVkCommandBufferInheritanceInfo; | |||
PPVkCommandBufferInheritanceInfo = ^PVkCommandBufferInheritanceInfo; | |||
TVkQueueFamilyProperties = record | |||
queueFlags: VkQueueFlags; | |||
queueCount: VkUint32; | |||
timestampValidBits: VkUint32; | |||
minImageTransferGranularity: TVkExtent3D; | |||
end; | |||
PVkQueueFamilyProperties = ^TVkQueueFamilyProperties; | |||
PPVkQueueFamilyProperties = ^PVkQueueFamilyProperties; | |||
TVkImageFormatProperties = record | |||
maxExtent: TVkExtent3D; | |||
maxMipLevels: VkUint32; | |||
maxArrayLayers: VkUint32; | |||
sampleCounts: VkSampleCountFlags; | |||
maxResourceSize: VkDeviceSize; | |||
end; | |||
PVkImageFormatProperties = ^TVkImageFormatProperties; | |||
PPVkImageFormatProperties = ^PVkImageFormatProperties; | |||
TVkDescriptorSetLayoutBinding = record | |||
binding: VkUint32; | |||
descriptorType: TVkDescriptorType; | |||
@@ -1663,14 +1676,6 @@ type { structs } | |||
PVkDescriptorSetLayoutBinding = ^TVkDescriptorSetLayoutBinding; | |||
PPVkDescriptorSetLayoutBinding = ^PVkDescriptorSetLayoutBinding; | |||
TVkSparseImageFormatProperties = record | |||
aspectMask: VkImageAspectFlags; | |||
imageGranularity: TVkExtent3D; | |||
flags: VkSparseImageFormatFlags; | |||
end; | |||
PVkSparseImageFormatProperties = ^TVkSparseImageFormatProperties; | |||
PPVkSparseImageFormatProperties = ^PVkSparseImageFormatProperties; | |||
TVkSparseImageMemoryBind = record | |||
subresource: TVkImageSubresource; | |||
offset: TVkOffset3D; | |||
@@ -1745,6 +1750,24 @@ type { structs } | |||
PVkPhysicalDeviceProperties = ^TVkPhysicalDeviceProperties; | |||
PPVkPhysicalDeviceProperties = ^PVkPhysicalDeviceProperties; | |||
TVkClearRect = record | |||
rect: TVkRect2D; | |||
baseArrayLayer: VkUint32; | |||
layerCount: VkUint32; | |||
end; | |||
PVkClearRect = ^TVkClearRect; | |||
PPVkClearRect = ^PVkClearRect; | |||
TVkSparseImageMemoryRequirements = record | |||
formatProperties: TVkSparseImageFormatProperties; | |||
imageMipTailFirstLod: VkUint32; | |||
imageMipTailSize: VkDeviceSize; | |||
imageMipTailOffset: VkDeviceSize; | |||
imageMipTailStride: VkDeviceSize; | |||
end; | |||
PVkSparseImageMemoryRequirements = ^TVkSparseImageMemoryRequirements; | |||
PPVkSparseImageMemoryRequirements = ^PVkSparseImageMemoryRequirements; | |||
TVkSparseBufferMemoryBindInfo = record | |||
buffer: VkBuffer; | |||
bindCount: VkUint32; | |||
@@ -1806,14 +1829,6 @@ type { structs } | |||
PVkClearAttachment = ^TVkClearAttachment; | |||
PPVkClearAttachment = ^PVkClearAttachment; | |||
TVkClearRect = record | |||
rect: TVkRect2D; | |||
baseArrayLayer: VkUint32; | |||
layerCount: VkUint32; | |||
end; | |||
PVkClearRect = ^TVkClearRect; | |||
PPVkClearRect = ^PVkClearRect; | |||
TVkDeviceCreateInfo = record | |||
sType: TVkStructureType; | |||
pNext: PVkVoid; | |||
@@ -1848,16 +1863,6 @@ type { structs } | |||
PVkDescriptorSetLayoutCreateInfo = ^TVkDescriptorSetLayoutCreateInfo; | |||
PPVkDescriptorSetLayoutCreateInfo = ^PVkDescriptorSetLayoutCreateInfo; | |||
TVkSparseImageMemoryRequirements = record | |||
formatProperties: TVkSparseImageFormatProperties; | |||
imageMipTailFirstLod: VkUint32; | |||
imageMipTailSize: VkDeviceSize; | |||
imageMipTailOffset: VkDeviceSize; | |||
imageMipTailStride: VkDeviceSize; | |||
end; | |||
PVkSparseImageMemoryRequirements = ^TVkSparseImageMemoryRequirements; | |||
PPVkSparseImageMemoryRequirements = ^PVkSparseImageMemoryRequirements; | |||
TVkSparseImageMemoryBindInfo = record | |||
image: VkImage; | |||
bindCount: VkUint32; | |||
@@ -2139,6 +2144,18 @@ type { structs } | |||
PVkPipelineLayoutCreateInfo = ^TVkPipelineLayoutCreateInfo; | |||
PPVkPipelineLayoutCreateInfo = ^PVkPipelineLayoutCreateInfo; | |||
TVkPipelineViewportStateCreateInfo = record | |||
sType: TVkStructureType; | |||
pNext: PVkVoid; | |||
flags: VkPipelineViewportStateCreateFlags; | |||
viewportCount: VkUint32; | |||
pViewports: PVkViewport; | |||
scissorCount: VkUint32; | |||
pScissors: PVkRect2D; | |||
end; | |||
PVkPipelineViewportStateCreateInfo = ^TVkPipelineViewportStateCreateInfo; | |||
PPVkPipelineViewportStateCreateInfo = ^PVkPipelineViewportStateCreateInfo; | |||
TVkImageViewCreateInfo = record | |||
sType: TVkStructureType; | |||
pNext: PVkVoid; | |||
@@ -2209,18 +2226,6 @@ type { structs } | |||
PVkWriteDescriptorSet = ^TVkWriteDescriptorSet; | |||
PPVkWriteDescriptorSet = ^PVkWriteDescriptorSet; | |||
TVkPipelineViewportStateCreateInfo = record | |||
sType: TVkStructureType; | |||
pNext: PVkVoid; | |||
flags: VkPipelineViewportStateCreateFlags; | |||
viewportCount: VkUint32; | |||
pViewports: PVkViewport; | |||
scissorCount: VkUint32; | |||
pScissors: PVkRect2D; | |||
end; | |||
PVkPipelineViewportStateCreateInfo = ^TVkPipelineViewportStateCreateInfo; | |||
PPVkPipelineViewportStateCreateInfo = ^PVkPipelineViewportStateCreateInfo; | |||
TVkRenderPassBeginInfo = record | |||
sType: TVkStructureType; | |||
pNext: PVkVoid; | |||
@@ -2316,13 +2321,13 @@ type { commands } | |||
TvkCmdExecuteCommands = procedure(commandBuffer: VkCommandBuffer; commandBufferCount: VkUint32; const pCommandBuffers: PVkCommandBuffer); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdSetBlendConstants = procedure(commandBuffer: VkCommandBuffer; const blendConstants: VkFloat); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdSetDepthBias = procedure(commandBuffer: VkCommandBuffer; depthBiasConstantFactor: VkFloat; depthBiasClamp: VkFloat; depthBiasSlopeFactor: VkFloat); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdSetDepthBounds = procedure(commandBuffer: VkCommandBuffer; minDepthBounds: VkFloat; maxDepthBounds: VkFloat); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkDeviceWaitIdle = function (device: VkDevice): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkGetDeviceProcAddr = function (device: VkDevice; const pName: PVkChar): TvkVoidFunction; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkGetInstanceProcAddr = function (instance: VkInstance; const pName: PVkChar): TvkVoidFunction; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkEnumeratePhysicalDevices = function (instance: VkInstance; pPhysicalDeviceCount: PVkUint32; pPhysicalDevices: PVkPhysicalDevice): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkGetDeviceQueue = procedure(device: VkDevice; queueFamilyIndex: VkUint32; queueIndex: VkUint32; pQueue: PVkQueue); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkQueueWaitIdle = function (queue: VkQueue): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdSetDepthBounds = procedure(commandBuffer: VkCommandBuffer; minDepthBounds: VkFloat; maxDepthBounds: VkFloat); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdSetLineWidth = procedure(commandBuffer: VkCommandBuffer; lineWidth: VkFloat); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkEndCommandBuffer = function (commandBuffer: VkCommandBuffer): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkFreeCommandBuffers = procedure(device: VkDevice; commandPool: VkCommandPool; commandBufferCount: VkUint32; const pCommandBuffers: PVkCommandBuffer); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
@@ -2338,6 +2343,7 @@ type { commands } | |||
TvkCmdEndQuery = procedure(commandBuffer: VkCommandBuffer; queryPool: VkQueryPool; query: VkUint32); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdResetQueryPool = procedure(commandBuffer: VkCommandBuffer; queryPool: VkQueryPool; firstQuery: VkUint32; queryCount: VkUint32); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkWaitForFences = function (device: VkDevice; fenceCount: VkUint32; const pFences: PVkFence; waitAll: VkBool32; timeout: VkUint64): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkGetRenderAreaGranularity = procedure(device: VkDevice; renderPass: VkRenderPass; pGranularity: PVkExtent2D); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkBindBufferMemory = function (device: VkDevice; buffer: VkBuffer; memory: VkDeviceMemory; memoryOffset: VkDeviceSize): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkBindImageMemory = function (device: VkDevice; image: VkImage; memory: VkDeviceMemory; memoryOffset: VkDeviceSize): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdBindVertexBuffers = procedure(commandBuffer: VkCommandBuffer; firstBinding: VkUint32; bindingCount: VkUint32; const pBuffers: PVkBuffer; const pOffsets: PVkDeviceSize); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
@@ -2365,7 +2371,6 @@ type { commands } | |||
TvkCmdSetViewport = procedure(commandBuffer: VkCommandBuffer; firstViewport: VkUint32; viewportCount: VkUint32; const pViewports: PVkViewport); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkEnumerateDeviceExtensionProperties = function (physicalDevice: VkPhysicalDevice; const pLayerName: PVkChar; pPropertyCount: PVkUint32; pProperties: PVkExtensionProperties): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkEnumerateInstanceExtensionProperties = function (const pLayerName: PVkChar; pPropertyCount: PVkUint32; pProperties: PVkExtensionProperties): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkGetRenderAreaGranularity = procedure(device: VkDevice; renderPass: VkRenderPass; pGranularity: PVkExtent2D); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkEnumerateDeviceLayerProperties = function (physicalDevice: VkPhysicalDevice; pPropertyCount: PVkUint32; pProperties: PVkLayerProperties): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkEnumerateInstanceLayerProperties = function (pPropertyCount: PVkUint32; pProperties: PVkLayerProperties): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdBindIndexBuffer = procedure(commandBuffer: VkCommandBuffer; buffer: VkBuffer; offset: VkDeviceSize; indexType: TVkIndexType); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
@@ -2377,28 +2382,26 @@ type { commands } | |||
TvkGetImageSubresourceLayout = procedure(device: VkDevice; image: VkImage; const pSubresource: PVkImageSubresource; pLayout: PVkSubresourceLayout); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdClearColorImage = procedure(commandBuffer: VkCommandBuffer; image: VkImage; imageLayout: TVkImageLayout; const pColor: PVkClearColorValue; rangeCount: VkUint32; const pRanges: PVkImageSubresourceRange); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdClearDepthStencilImage = procedure(commandBuffer: VkCommandBuffer; image: VkImage; imageLayout: TVkImageLayout; const pDepthStencil: PVkClearDepthStencilValue; rangeCount: VkUint32; const pRanges: PVkImageSubresourceRange); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkAllocateCommandBuffers = function (device: VkDevice; const pAllocateInfo: PVkCommandBufferAllocateInfo; pCommandBuffers: PVkCommandBuffer): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkAllocateDescriptorSets = function (device: VkDevice; const pAllocateInfo: PVkDescriptorSetAllocateInfo; pDescriptorSets: PVkDescriptorSet): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdSetScissor = procedure(commandBuffer: VkCommandBuffer; firstScissor: VkUint32; scissorCount: VkUint32; const pScissors: PVkRect2D); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkGetPhysicalDeviceQueueFamilyProperties = procedure(physicalDevice: VkPhysicalDevice; pQueueFamilyPropertyCount: PVkUint32; pQueueFamilyProperties: PVkQueueFamilyProperties); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkGetPhysicalDeviceImageFormatProperties = function (physicalDevice: VkPhysicalDevice; format: TVkFormat; iType: TVkImageType; tiling: TVkImageTiling; usage: VkImageUsageFlags; flags: VkImageCreateFlags; pImageFormatProperties: PVkImageFormatProperties): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkAllocateCommandBuffers = function (device: VkDevice; const pAllocateInfo: PVkCommandBufferAllocateInfo; pCommandBuffers: PVkCommandBuffer): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkAllocateDescriptorSets = function (device: VkDevice; const pAllocateInfo: PVkDescriptorSetAllocateInfo; pDescriptorSets: PVkDescriptorSet): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdCopyBufferToImage = procedure(commandBuffer: VkCommandBuffer; srcBuffer: VkBuffer; dstImage: VkImage; dstImageLayout: TVkImageLayout; regionCount: VkUint32; const pRegions: PVkBufferImageCopy); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdCopyImageToBuffer = procedure(commandBuffer: VkCommandBuffer; srcImage: VkImage; srcImageLayout: TVkImageLayout; dstBuffer: VkBuffer; regionCount: VkUint32; const pRegions: PVkBufferImageCopy); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdBlitImage = procedure(commandBuffer: VkCommandBuffer; srcImage: VkImage; srcImageLayout: TVkImageLayout; dstImage: VkImage; dstImageLayout: TVkImageLayout; regionCount: VkUint32; const pRegions: PVkImageBlit; filter: TVkFilter); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdCopyImage = procedure(commandBuffer: VkCommandBuffer; srcImage: VkImage; srcImageLayout: TVkImageLayout; dstImage: VkImage; dstImageLayout: TVkImageLayout; regionCount: VkUint32; const pRegions: PVkImageCopy); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdResolveImage = procedure(commandBuffer: VkCommandBuffer; srcImage: VkImage; srcImageLayout: TVkImageLayout; dstImage: VkImage; dstImageLayout: TVkImageLayout; regionCount: VkUint32; const pRegions: PVkImageResolve); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkGetPhysicalDeviceMemoryProperties = procedure(physicalDevice: VkPhysicalDevice; pMemoryProperties: PVkPhysicalDeviceMemoryProperties); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkGetPhysicalDeviceProperties = procedure(physicalDevice: VkPhysicalDevice; pProperties: PVkPhysicalDeviceProperties); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkGetImageSparseMemoryRequirements = procedure(device: VkDevice; image: VkImage; pSparseMemoryRequirementCount: PVkUint32; pSparseMemoryRequirements: PVkSparseImageMemoryRequirements); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCreateBuffer = function (device: VkDevice; const pCreateInfo: PVkBufferCreateInfo; const pAllocator: PVkAllocationCallbacks; pBuffer: PVkBuffer): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCreateBufferView = function (device: VkDevice; const pCreateInfo: PVkBufferViewCreateInfo; const pAllocator: PVkAllocationCallbacks; pView: PVkBufferView): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCreateCommandPool = function (device: VkDevice; const pCreateInfo: PVkCommandPoolCreateInfo; const pAllocator: PVkAllocationCallbacks; pCommandPool: PVkCommandPool): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCreateDescriptorPool = function (device: VkDevice; const pCreateInfo: PVkDescriptorPoolCreateInfo; const pAllocator: PVkAllocationCallbacks; pDescriptorPool: PVkDescriptorPool): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkDestroyBuffer = procedure(device: VkDevice; buffer: VkBuffer; const pAllocator: PVkAllocationCallbacks); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkDestroyBufferView = procedure(device: VkDevice; bufferView: VkBufferView; const pAllocator: PVkAllocationCallbacks); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkDestroyCommandPool = procedure(device: VkDevice; commandPool: VkCommandPool; const pAllocator: PVkAllocationCallbacks); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdCopyBufferToImage = procedure(commandBuffer: VkCommandBuffer; srcBuffer: VkBuffer; dstImage: VkImage; dstImageLayout: TVkImageLayout; regionCount: VkUint32; const pRegions: PVkBufferImageCopy); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdBlitImage = procedure(commandBuffer: VkCommandBuffer; srcImage: VkImage; srcImageLayout: TVkImageLayout; dstImage: VkImage; dstImageLayout: TVkImageLayout; regionCount: VkUint32; const pRegions: PVkImageBlit; filter: TVkFilter); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkQueueBindSparse = function (queue: VkQueue; bindInfoCount: VkUint32; const pBindInfo: PVkBindSparseInfo; fence: VkFence): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdCopyImageToBuffer = procedure(commandBuffer: VkCommandBuffer; srcImage: VkImage; srcImageLayout: TVkImageLayout; dstBuffer: VkBuffer; regionCount: VkUint32; const pRegions: PVkBufferImageCopy); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdResolveImage = procedure(commandBuffer: VkCommandBuffer; srcImage: VkImage; srcImageLayout: TVkImageLayout; dstImage: VkImage; dstImageLayout: TVkImageLayout; regionCount: VkUint32; const pRegions: PVkImageResolve); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkGetPhysicalDeviceMemoryProperties = procedure(physicalDevice: VkPhysicalDevice; pMemoryProperties: PVkPhysicalDeviceMemoryProperties); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCreateDescriptorPool = function (device: VkDevice; const pCreateInfo: PVkDescriptorPoolCreateInfo; const pAllocator: PVkAllocationCallbacks; pDescriptorPool: PVkDescriptorPool): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCreateDevice = function (physicalDevice: VkPhysicalDevice; const pCreateInfo: PVkDeviceCreateInfo; const pAllocator: PVkAllocationCallbacks; pDevice: PVkDevice): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCreateDescriptorSetLayout = function (device: VkDevice; const pCreateInfo: PVkDescriptorSetLayoutCreateInfo; const pAllocator: PVkAllocationCallbacks; pSetLayout: PVkDescriptorSetLayout): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkGetImageSparseMemoryRequirements = procedure(device: VkDevice; image: VkImage; pSparseMemoryRequirementCount: PVkUint32; pSparseMemoryRequirements: PVkSparseImageMemoryRequirements); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkDestroyDescriptorPool = procedure(device: VkDevice; descriptorPool: VkDescriptorPool; const pAllocator: PVkAllocationCallbacks); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkDestroyDescriptorSetLayout = procedure(device: VkDevice; descriptorSetLayout: VkDescriptorSetLayout; const pAllocator: PVkAllocationCallbacks); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkDestroyDevice = procedure(device: VkDevice; const pAllocator: PVkAllocationCallbacks); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
@@ -2411,7 +2414,6 @@ type { commands } | |||
TvkDestroyPipeline = procedure(device: VkDevice; pipeline: VkPipeline; const pAllocator: PVkAllocationCallbacks); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkDestroyPipelineCache = procedure(device: VkDevice; pipelineCache: VkPipelineCache; const pAllocator: PVkAllocationCallbacks); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkDestroyPipelineLayout = procedure(device: VkDevice; pipelineLayout: VkPipelineLayout; const pAllocator: PVkAllocationCallbacks); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkGetPhysicalDeviceProperties = procedure(physicalDevice: VkPhysicalDevice; pProperties: PVkPhysicalDeviceProperties); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkDestroyQueryPool = procedure(device: VkDevice; queryPool: VkQueryPool; const pAllocator: PVkAllocationCallbacks); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkDestroyRenderPass = procedure(device: VkDevice; renderPass: VkRenderPass; const pAllocator: PVkAllocationCallbacks); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkDestroySampler = procedure(device: VkDevice; sampler: VkSampler; const pAllocator: PVkAllocationCallbacks); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
@@ -2419,7 +2421,10 @@ type { commands } | |||
TvkDestroyShaderModule = procedure(device: VkDevice; shaderModule: VkShaderModule; const pAllocator: PVkAllocationCallbacks); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkFreeMemory = procedure(device: VkDevice; memory: VkDeviceMemory; const pAllocator: PVkAllocationCallbacks); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdClearAttachments = procedure(commandBuffer: VkCommandBuffer; attachmentCount: VkUint32; const pAttachments: PVkClearAttachment; rectCount: VkUint32; const pRects: PVkClearRect); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCreateDevice = function (physicalDevice: VkPhysicalDevice; const pCreateInfo: PVkDeviceCreateInfo; const pAllocator: PVkAllocationCallbacks; pDevice: PVkDevice): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkBeginCommandBuffer = function (commandBuffer: VkCommandBuffer; const pBeginInfo: PVkCommandBufferBeginInfo): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCreateDescriptorSetLayout = function (device: VkDevice; const pCreateInfo: PVkDescriptorSetLayoutCreateInfo; const pAllocator: PVkAllocationCallbacks; pSetLayout: PVkDescriptorSetLayout): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkQueueBindSparse = function (queue: VkQueue; bindInfoCount: VkUint32; const pBindInfo: PVkBindSparseInfo; fence: VkFence): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdNextSubpass = procedure(commandBuffer: VkCommandBuffer; contents: TVkSubpassContents); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdWriteTimestamp = procedure(commandBuffer: VkCommandBuffer; pipelineStage: TVkPipelineStageFlagBits; queryPool: VkQueryPool; query: VkUint32); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkGetPhysicalDeviceSparseImageFormatProperties = procedure(physicalDevice: VkPhysicalDevice; format: TVkFormat; iType: TVkImageType; samples: TVkSampleCountFlagBits; usage: VkImageUsageFlags; tiling: TVkImageTiling; pPropertyCount: PVkUint32; pProperties: PVkSparseImageFormatProperties); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
@@ -2439,13 +2444,13 @@ type { commands } | |||
TvkCmdPipelineBarrier = procedure(commandBuffer: VkCommandBuffer; srcStageMask: VkPipelineStageFlags; dstStageMask: VkPipelineStageFlags; dependencyFlags: VkDependencyFlags; memoryBarrierCount: VkUint32; const pMemoryBarriers: PVkMemoryBarrier; bufferMemoryBarrierCount: VkUint32; const pBufferMemoryBarriers: PVkBufferMemoryBarrier; imageMemoryBarrierCount: VkUint32; const pImageMemoryBarriers: PVkImageMemoryBarrier); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdWaitEvents = procedure(commandBuffer: VkCommandBuffer; eventCount: VkUint32; const pEvents: PVkEvent; srcStageMask: VkPipelineStageFlags; dstStageMask: VkPipelineStageFlags; memoryBarrierCount: VkUint32; const pMemoryBarriers: PVkMemoryBarrier; bufferMemoryBarrierCount: VkUint32; const pBufferMemoryBarriers: PVkBufferMemoryBarrier; imageMemoryBarrierCount: VkUint32; const pImageMemoryBarriers: PVkImageMemoryBarrier); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCreatePipelineLayout = function (device: VkDevice; const pCreateInfo: PVkPipelineLayoutCreateInfo; const pAllocator: PVkAllocationCallbacks; pPipelineLayout: PVkPipelineLayout): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCreateImageView = function (device: VkDevice; const pCreateInfo: PVkImageViewCreateInfo; const pAllocator: PVkAllocationCallbacks; pView: PVkImageView): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCreateInstance = function (const pCreateInfo: PVkInstanceCreateInfo; const pAllocator: PVkAllocationCallbacks; pInstance: PVkInstance): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkUpdateDescriptorSets = procedure(device: VkDevice; descriptorWriteCount: VkUint32; const pDescriptorWrites: PVkWriteDescriptorSet; descriptorCopyCount: VkUint32; const pDescriptorCopies: PVkCopyDescriptorSet); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCmdBeginRenderPass = procedure(commandBuffer: VkCommandBuffer; const pRenderPassBegin: PVkRenderPassBeginInfo; contents: TVkSubpassContents); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCreateRenderPass = function (device: VkDevice; const pCreateInfo: PVkRenderPassCreateInfo; const pAllocator: PVkAllocationCallbacks; pRenderPass: PVkRenderPass): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCreateGraphicsPipelines = function (device: VkDevice; pipelineCache: VkPipelineCache; createInfoCount: VkUint32; const pCreateInfos: PVkGraphicsPipelineCreateInfo; const pAllocator: PVkAllocationCallbacks; pPipelines: PVkPipeline): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCreateComputePipelines = function (device: VkDevice; pipelineCache: VkPipelineCache; createInfoCount: VkUint32; const pCreateInfos: PVkComputePipelineCreateInfo; const pAllocator: PVkAllocationCallbacks; pPipelines: PVkPipeline): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCreateGraphicsPipelines = function (device: VkDevice; pipelineCache: VkPipelineCache; createInfoCount: VkUint32; const pCreateInfos: PVkGraphicsPipelineCreateInfo; const pAllocator: PVkAllocationCallbacks; pPipelines: PVkPipeline): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCreateImageView = function (device: VkDevice; const pCreateInfo: PVkImageViewCreateInfo; const pAllocator: PVkAllocationCallbacks; pView: PVkImageView): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkCreateInstance = function (const pCreateInfo: PVkInstanceCreateInfo; const pAllocator: PVkAllocationCallbacks; pInstance: PVkInstance): TVkResult; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
TvkUpdateDescriptorSets = procedure(device: VkDevice; descriptorWriteCount: VkUint32; const pDescriptorWrites: PVkWriteDescriptorSet; descriptorCopyCount: VkUint32; const pDescriptorCopies: PVkCopyDescriptorSet); {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF}; | |||
var { command variables } | |||
vkCmdDispatch: TvkCmdDispatch = nil; | |||
@@ -2455,13 +2460,13 @@ var { command variables } | |||
vkCmdExecuteCommands: TvkCmdExecuteCommands = nil; | |||
vkCmdSetBlendConstants: TvkCmdSetBlendConstants = nil; | |||
vkCmdSetDepthBias: TvkCmdSetDepthBias = nil; | |||
vkCmdSetDepthBounds: TvkCmdSetDepthBounds = nil; | |||
vkDeviceWaitIdle: TvkDeviceWaitIdle = nil; | |||
vkGetDeviceProcAddr: TvkGetDeviceProcAddr = nil; | |||
vkGetInstanceProcAddr: TvkGetInstanceProcAddr = nil; | |||
vkEnumeratePhysicalDevices: TvkEnumeratePhysicalDevices = nil; | |||
vkGetDeviceQueue: TvkGetDeviceQueue = nil; | |||
vkQueueWaitIdle: TvkQueueWaitIdle = nil; | |||
vkCmdSetDepthBounds: TvkCmdSetDepthBounds = nil; | |||
vkCmdSetLineWidth: TvkCmdSetLineWidth = nil; | |||
vkEndCommandBuffer: TvkEndCommandBuffer = nil; | |||
vkFreeCommandBuffers: TvkFreeCommandBuffers = nil; | |||
@@ -2477,6 +2482,7 @@ var { command variables } | |||
vkCmdEndQuery: TvkCmdEndQuery = nil; | |||
vkCmdResetQueryPool: TvkCmdResetQueryPool = nil; | |||
vkWaitForFences: TvkWaitForFences = nil; | |||
vkGetRenderAreaGranularity: TvkGetRenderAreaGranularity = nil; | |||
vkBindBufferMemory: TvkBindBufferMemory = nil; | |||
vkBindImageMemory: TvkBindImageMemory = nil; | |||
vkCmdBindVertexBuffers: TvkCmdBindVertexBuffers = nil; | |||
@@ -2504,7 +2510,6 @@ var { command variables } | |||
vkCmdSetViewport: TvkCmdSetViewport = nil; | |||
vkEnumerateDeviceExtensionProperties: TvkEnumerateDeviceExtensionProperties = nil; | |||
vkEnumerateInstanceExtensionProperties: TvkEnumerateInstanceExtensionProperties = nil; | |||
vkGetRenderAreaGranularity: TvkGetRenderAreaGranularity = nil; | |||
vkEnumerateDeviceLayerProperties: TvkEnumerateDeviceLayerProperties = nil; | |||
vkEnumerateInstanceLayerProperties: TvkEnumerateInstanceLayerProperties = nil; | |||
vkCmdBindIndexBuffer: TvkCmdBindIndexBuffer = nil; | |||
@@ -2516,28 +2521,26 @@ var { command variables } | |||
vkGetImageSubresourceLayout: TvkGetImageSubresourceLayout = nil; | |||
vkCmdClearColorImage: TvkCmdClearColorImage = nil; | |||
vkCmdClearDepthStencilImage: TvkCmdClearDepthStencilImage = nil; | |||
vkAllocateCommandBuffers: TvkAllocateCommandBuffers = nil; | |||
vkAllocateDescriptorSets: TvkAllocateDescriptorSets = nil; | |||
vkCmdSetScissor: TvkCmdSetScissor = nil; | |||
vkGetPhysicalDeviceQueueFamilyProperties: TvkGetPhysicalDeviceQueueFamilyProperties = nil; | |||
vkGetPhysicalDeviceImageFormatProperties: TvkGetPhysicalDeviceImageFormatProperties = nil; | |||
vkAllocateCommandBuffers: TvkAllocateCommandBuffers = nil; | |||
vkAllocateDescriptorSets: TvkAllocateDescriptorSets = nil; | |||
vkCmdCopyBufferToImage: TvkCmdCopyBufferToImage = nil; | |||
vkCmdCopyImageToBuffer: TvkCmdCopyImageToBuffer = nil; | |||
vkCmdBlitImage: TvkCmdBlitImage = nil; | |||
vkCmdCopyImage: TvkCmdCopyImage = nil; | |||
vkCmdResolveImage: TvkCmdResolveImage = nil; | |||
vkGetPhysicalDeviceMemoryProperties: TvkGetPhysicalDeviceMemoryProperties = nil; | |||
vkGetPhysicalDeviceProperties: TvkGetPhysicalDeviceProperties = nil; | |||
vkGetImageSparseMemoryRequirements: TvkGetImageSparseMemoryRequirements = nil; | |||
vkCreateBuffer: TvkCreateBuffer = nil; | |||
vkCreateBufferView: TvkCreateBufferView = nil; | |||
vkCreateCommandPool: TvkCreateCommandPool = nil; | |||
vkCreateDescriptorPool: TvkCreateDescriptorPool = nil; | |||
vkDestroyBuffer: TvkDestroyBuffer = nil; | |||
vkDestroyBufferView: TvkDestroyBufferView = nil; | |||
vkDestroyCommandPool: TvkDestroyCommandPool = nil; | |||
vkCmdCopyBufferToImage: TvkCmdCopyBufferToImage = nil; | |||
vkCmdBlitImage: TvkCmdBlitImage = nil; | |||
vkQueueBindSparse: TvkQueueBindSparse = nil; | |||
vkCmdCopyImageToBuffer: TvkCmdCopyImageToBuffer = nil; | |||
vkCmdResolveImage: TvkCmdResolveImage = nil; | |||
vkGetPhysicalDeviceMemoryProperties: TvkGetPhysicalDeviceMemoryProperties = nil; | |||
vkCreateDescriptorPool: TvkCreateDescriptorPool = nil; | |||
vkCreateDevice: TvkCreateDevice = nil; | |||
vkCreateDescriptorSetLayout: TvkCreateDescriptorSetLayout = nil; | |||
vkGetImageSparseMemoryRequirements: TvkGetImageSparseMemoryRequirements = nil; | |||
vkDestroyDescriptorPool: TvkDestroyDescriptorPool = nil; | |||
vkDestroyDescriptorSetLayout: TvkDestroyDescriptorSetLayout = nil; | |||
vkDestroyDevice: TvkDestroyDevice = nil; | |||
@@ -2550,7 +2553,6 @@ var { command variables } | |||
vkDestroyPipeline: TvkDestroyPipeline = nil; | |||
vkDestroyPipelineCache: TvkDestroyPipelineCache = nil; | |||
vkDestroyPipelineLayout: TvkDestroyPipelineLayout = nil; | |||
vkGetPhysicalDeviceProperties: TvkGetPhysicalDeviceProperties = nil; | |||
vkDestroyQueryPool: TvkDestroyQueryPool = nil; | |||
vkDestroyRenderPass: TvkDestroyRenderPass = nil; | |||
vkDestroySampler: TvkDestroySampler = nil; | |||
@@ -2558,7 +2560,10 @@ var { command variables } | |||
vkDestroyShaderModule: TvkDestroyShaderModule = nil; | |||
vkFreeMemory: TvkFreeMemory = nil; | |||
vkCmdClearAttachments: TvkCmdClearAttachments = nil; | |||
vkCreateDevice: TvkCreateDevice = nil; | |||
vkBeginCommandBuffer: TvkBeginCommandBuffer = nil; | |||
vkCreateDescriptorSetLayout: TvkCreateDescriptorSetLayout = nil; | |||
vkQueueBindSparse: TvkQueueBindSparse = nil; | |||
vkCmdNextSubpass: TvkCmdNextSubpass = nil; | |||
vkCmdWriteTimestamp: TvkCmdWriteTimestamp = nil; | |||
vkGetPhysicalDeviceSparseImageFormatProperties: TvkGetPhysicalDeviceSparseImageFormatProperties = nil; | |||
@@ -2578,13 +2583,13 @@ var { command variables } | |||
vkCmdPipelineBarrier: TvkCmdPipelineBarrier = nil; | |||
vkCmdWaitEvents: TvkCmdWaitEvents = nil; | |||
vkCreatePipelineLayout: TvkCreatePipelineLayout = nil; | |||
vkCreateImageView: TvkCreateImageView = nil; | |||
vkCreateInstance: TvkCreateInstance = nil; | |||
vkUpdateDescriptorSets: TvkUpdateDescriptorSets = nil; | |||
vkCmdBeginRenderPass: TvkCmdBeginRenderPass = nil; | |||
vkCreateRenderPass: TvkCreateRenderPass = nil; | |||
vkCreateGraphicsPipelines: TvkCreateGraphicsPipelines = nil; | |||
vkCreateComputePipelines: TvkCreateComputePipelines = nil; | |||
vkCreateGraphicsPipelines: TvkCreateGraphicsPipelines = nil; | |||
vkCreateImageView: TvkCreateImageView = nil; | |||
vkCreateInstance: TvkCreateInstance = nil; | |||
vkUpdateDescriptorSets: TvkUpdateDescriptorSets = nil; | |||
const | |||
VULKAN_LIBNAME = 'vulkan-1.dll'; | |||
@@ -2686,13 +2691,13 @@ begin | |||
vkCmdExecuteCommands := vkGetProcAddress('vkCmdExecuteCommands'); | |||
vkCmdSetBlendConstants := vkGetProcAddress('vkCmdSetBlendConstants'); | |||
vkCmdSetDepthBias := vkGetProcAddress('vkCmdSetDepthBias'); | |||
vkCmdSetDepthBounds := vkGetProcAddress('vkCmdSetDepthBounds'); | |||
vkDeviceWaitIdle := vkGetProcAddress('vkDeviceWaitIdle'); | |||
vkGetDeviceProcAddr := vkGetProcAddress('vkGetDeviceProcAddr'); | |||
vkGetInstanceProcAddr := vkGetProcAddress('vkGetInstanceProcAddr'); | |||
vkEnumeratePhysicalDevices := vkGetProcAddress('vkEnumeratePhysicalDevices'); | |||
vkGetDeviceQueue := vkGetProcAddress('vkGetDeviceQueue'); | |||
vkQueueWaitIdle := vkGetProcAddress('vkQueueWaitIdle'); | |||
vkCmdSetDepthBounds := vkGetProcAddress('vkCmdSetDepthBounds'); | |||
vkCmdSetLineWidth := vkGetProcAddress('vkCmdSetLineWidth'); | |||
vkEndCommandBuffer := vkGetProcAddress('vkEndCommandBuffer'); | |||
vkFreeCommandBuffers := vkGetProcAddress('vkFreeCommandBuffers'); | |||
@@ -2708,6 +2713,7 @@ begin | |||
vkCmdEndQuery := vkGetProcAddress('vkCmdEndQuery'); | |||
vkCmdResetQueryPool := vkGetProcAddress('vkCmdResetQueryPool'); | |||
vkWaitForFences := vkGetProcAddress('vkWaitForFences'); | |||
vkGetRenderAreaGranularity := vkGetProcAddress('vkGetRenderAreaGranularity'); | |||
vkBindBufferMemory := vkGetProcAddress('vkBindBufferMemory'); | |||
vkBindImageMemory := vkGetProcAddress('vkBindImageMemory'); | |||
vkCmdBindVertexBuffers := vkGetProcAddress('vkCmdBindVertexBuffers'); | |||
@@ -2735,7 +2741,6 @@ begin | |||
vkCmdSetViewport := vkGetProcAddress('vkCmdSetViewport'); | |||
vkEnumerateDeviceExtensionProperties := vkGetProcAddress('vkEnumerateDeviceExtensionProperties'); | |||
vkEnumerateInstanceExtensionProperties := vkGetProcAddress('vkEnumerateInstanceExtensionProperties'); | |||
vkGetRenderAreaGranularity := vkGetProcAddress('vkGetRenderAreaGranularity'); | |||
vkEnumerateDeviceLayerProperties := vkGetProcAddress('vkEnumerateDeviceLayerProperties'); | |||
vkEnumerateInstanceLayerProperties := vkGetProcAddress('vkEnumerateInstanceLayerProperties'); | |||
vkCmdBindIndexBuffer := vkGetProcAddress('vkCmdBindIndexBuffer'); | |||
@@ -2747,28 +2752,26 @@ begin | |||
vkGetImageSubresourceLayout := vkGetProcAddress('vkGetImageSubresourceLayout'); | |||
vkCmdClearColorImage := vkGetProcAddress('vkCmdClearColorImage'); | |||
vkCmdClearDepthStencilImage := vkGetProcAddress('vkCmdClearDepthStencilImage'); | |||
vkAllocateCommandBuffers := vkGetProcAddress('vkAllocateCommandBuffers'); | |||
vkAllocateDescriptorSets := vkGetProcAddress('vkAllocateDescriptorSets'); | |||
vkCmdSetScissor := vkGetProcAddress('vkCmdSetScissor'); | |||
vkGetPhysicalDeviceQueueFamilyProperties := vkGetProcAddress('vkGetPhysicalDeviceQueueFamilyProperties'); | |||
vkGetPhysicalDeviceImageFormatProperties := vkGetProcAddress('vkGetPhysicalDeviceImageFormatProperties'); | |||
vkAllocateCommandBuffers := vkGetProcAddress('vkAllocateCommandBuffers'); | |||
vkAllocateDescriptorSets := vkGetProcAddress('vkAllocateDescriptorSets'); | |||
vkCmdCopyBufferToImage := vkGetProcAddress('vkCmdCopyBufferToImage'); | |||
vkCmdCopyImageToBuffer := vkGetProcAddress('vkCmdCopyImageToBuffer'); | |||
vkCmdBlitImage := vkGetProcAddress('vkCmdBlitImage'); | |||
vkCmdCopyImage := vkGetProcAddress('vkCmdCopyImage'); | |||
vkCmdResolveImage := vkGetProcAddress('vkCmdResolveImage'); | |||
vkGetPhysicalDeviceMemoryProperties := vkGetProcAddress('vkGetPhysicalDeviceMemoryProperties'); | |||
vkGetPhysicalDeviceProperties := vkGetProcAddress('vkGetPhysicalDeviceProperties'); | |||
vkGetImageSparseMemoryRequirements := vkGetProcAddress('vkGetImageSparseMemoryRequirements'); | |||
vkCreateBuffer := vkGetProcAddress('vkCreateBuffer'); | |||
vkCreateBufferView := vkGetProcAddress('vkCreateBufferView'); | |||
vkCreateCommandPool := vkGetProcAddress('vkCreateCommandPool'); | |||
vkCreateDescriptorPool := vkGetProcAddress('vkCreateDescriptorPool'); | |||
vkDestroyBuffer := vkGetProcAddress('vkDestroyBuffer'); | |||
vkDestroyBufferView := vkGetProcAddress('vkDestroyBufferView'); | |||
vkDestroyCommandPool := vkGetProcAddress('vkDestroyCommandPool'); | |||
vkCmdCopyBufferToImage := vkGetProcAddress('vkCmdCopyBufferToImage'); | |||
vkCmdBlitImage := vkGetProcAddress('vkCmdBlitImage'); | |||
vkQueueBindSparse := vkGetProcAddress('vkQueueBindSparse'); | |||
vkCmdCopyImageToBuffer := vkGetProcAddress('vkCmdCopyImageToBuffer'); | |||
vkCmdResolveImage := vkGetProcAddress('vkCmdResolveImage'); | |||
vkGetPhysicalDeviceMemoryProperties := vkGetProcAddress('vkGetPhysicalDeviceMemoryProperties'); | |||
vkCreateDescriptorPool := vkGetProcAddress('vkCreateDescriptorPool'); | |||
vkCreateDevice := vkGetProcAddress('vkCreateDevice'); | |||
vkCreateDescriptorSetLayout := vkGetProcAddress('vkCreateDescriptorSetLayout'); | |||
vkGetImageSparseMemoryRequirements := vkGetProcAddress('vkGetImageSparseMemoryRequirements'); | |||
vkDestroyDescriptorPool := vkGetProcAddress('vkDestroyDescriptorPool'); | |||
vkDestroyDescriptorSetLayout := vkGetProcAddress('vkDestroyDescriptorSetLayout'); | |||
vkDestroyDevice := vkGetProcAddress('vkDestroyDevice'); | |||
@@ -2781,7 +2784,6 @@ begin | |||
vkDestroyPipeline := vkGetProcAddress('vkDestroyPipeline'); | |||
vkDestroyPipelineCache := vkGetProcAddress('vkDestroyPipelineCache'); | |||
vkDestroyPipelineLayout := vkGetProcAddress('vkDestroyPipelineLayout'); | |||
vkGetPhysicalDeviceProperties := vkGetProcAddress('vkGetPhysicalDeviceProperties'); | |||
vkDestroyQueryPool := vkGetProcAddress('vkDestroyQueryPool'); | |||
vkDestroyRenderPass := vkGetProcAddress('vkDestroyRenderPass'); | |||
vkDestroySampler := vkGetProcAddress('vkDestroySampler'); | |||
@@ -2789,7 +2791,10 @@ begin | |||
vkDestroyShaderModule := vkGetProcAddress('vkDestroyShaderModule'); | |||
vkFreeMemory := vkGetProcAddress('vkFreeMemory'); | |||
vkCmdClearAttachments := vkGetProcAddress('vkCmdClearAttachments'); | |||
vkCreateDevice := vkGetProcAddress('vkCreateDevice'); | |||
vkBeginCommandBuffer := vkGetProcAddress('vkBeginCommandBuffer'); | |||
vkCreateDescriptorSetLayout := vkGetProcAddress('vkCreateDescriptorSetLayout'); | |||
vkQueueBindSparse := vkGetProcAddress('vkQueueBindSparse'); | |||
vkCmdNextSubpass := vkGetProcAddress('vkCmdNextSubpass'); | |||
vkCmdWriteTimestamp := vkGetProcAddress('vkCmdWriteTimestamp'); | |||
vkGetPhysicalDeviceSparseImageFormatProperties := vkGetProcAddress('vkGetPhysicalDeviceSparseImageFormatProperties'); | |||
@@ -2809,13 +2814,13 @@ begin | |||
vkCmdPipelineBarrier := vkGetProcAddress('vkCmdPipelineBarrier'); | |||
vkCmdWaitEvents := vkGetProcAddress('vkCmdWaitEvents'); | |||
vkCreatePipelineLayout := vkGetProcAddress('vkCreatePipelineLayout'); | |||
vkCreateImageView := vkGetProcAddress('vkCreateImageView'); | |||
vkCreateInstance := vkGetProcAddress('vkCreateInstance'); | |||
vkUpdateDescriptorSets := vkGetProcAddress('vkUpdateDescriptorSets'); | |||
vkCmdBeginRenderPass := vkGetProcAddress('vkCmdBeginRenderPass'); | |||
vkCreateRenderPass := vkGetProcAddress('vkCreateRenderPass'); | |||
vkCreateGraphicsPipelines := vkGetProcAddress('vkCreateGraphicsPipelines'); | |||
vkCreateComputePipelines := vkGetProcAddress('vkCreateComputePipelines'); | |||
vkCreateGraphicsPipelines := vkGetProcAddress('vkCreateGraphicsPipelines'); | |||
vkCreateImageView := vkGetProcAddress('vkCreateImageView'); | |||
vkCreateInstance := vkGetProcAddress('vkCreateInstance'); | |||
vkUpdateDescriptorSets := vkGetProcAddress('vkUpdateDescriptorSets'); | |||
end; | |||
@@ -336,6 +336,16 @@ begin | |||
result := x.TextContent; | |||
end; | |||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function TryGetNodeValue(xml: TDOMNode; const aName: WideString; out aValue: DOMString): Boolean; | |||
var x: TDOMNode; | |||
begin | |||
x := xml.FindNode(aName); | |||
result := Assigned(x); | |||
if result then | |||
aValue := x.TextContent; | |||
end; | |||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function GetNodeValue(xml: TDOMNode; const aName: WideString; const aDefault: DOMString): DOMString; | |||
var x: TDOMNode; | |||
@@ -547,8 +557,50 @@ end; | |||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
class function THeaderGenerator.TvkObject.CreateFromXml(const xml: TDOMNode): THeaderGenerator.TvkObject; | |||
var | |||
s: DOMString; | |||
s, n: DOMString; | |||
x: TDOMNode; | |||
function GenerateVersionEnum: TvkTypeEnum; | |||
var | |||
rx: TRegExpr; | |||
v: TvkTypeEnum.TValue; | |||
begin | |||
result := TvkTypeEnum.Create(otConst); | |||
rx := TRegExpr.Create('\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)'); | |||
try try | |||
if not rx.Exec(xml.TextContent) then | |||
raise XmlException.Create('VK_API_VERSION with malformed version', xml); | |||
v := TvkTypeEnum.TValue.Create; | |||
result.Values.Add(v); | |||
v.Name := 'VK_API_VERSION'; | |||
v.Value := (StrToInt(rx.Match[1]) shl 22) or | |||
(StrToInt(rx.Match[2]) shl 12) or | |||
(StrToInt(rx.Match[3]) shl 0); | |||
v := TvkTypeEnum.TValue.Create; | |||
result.Values.Add(v); | |||
v.Name := 'VK_API_VERSION_MAJOR'; | |||
v.Value := StrToInt(rx.Match[1]); | |||
v := TvkTypeEnum.TValue.Create; | |||
result.Values.Add(v); | |||
v.Name := 'VK_API_VERSION_MINOR'; | |||
v.Value := StrToInt(rx.Match[2]); | |||
v := TvkTypeEnum.TValue.Create; | |||
result.Values.Add(v); | |||
v.Name := 'VK_API_VERSION_BUGFIX'; | |||
v.Value := StrToInt(rx.Match[3]); | |||
finally | |||
FreeAndNil(rx); | |||
end; | |||
except | |||
FreeAndNil(result); | |||
raise; | |||
end; | |||
end; | |||
begin | |||
result := nil; | |||
if (xml.NodeName = 'type') and xml.HasAttributes then begin | |||
@@ -563,7 +615,10 @@ begin | |||
else if (s = 'funcpointer') then | |||
result := TvkTypeFunctionPtr.CreateFromXml(xml) | |||
else if (s = 'struct') or (s = 'union') then | |||
result := TvkTypeStruct.CreateFromXml(xml); | |||
result := TvkTypeStruct.CreateFromXml(xml) | |||
else if (s = 'define') and TryGetNodeValue(xml, 'name', n) and (n = 'VK_API_VERSION') then begin | |||
result := GenerateVersionEnum; | |||
end; | |||
end else if (xml.NodeName = 'command') then | |||
result := TvkCommand.CreateFromXml(xml); | |||
end; | |||
@@ -700,7 +755,7 @@ var | |||
a: TArgument; | |||
begin | |||
s := WideString(Format(' %-50s', [ GetPascalName(0, '') ])); | |||
if (ReturnValue.Typ = 'void') | |||
if (ReturnValue.Typ = 'void') and (ReturnValue.IsPointer = 0) | |||
then s := s + ' = procedure(' | |||
else s := s + ' = function ('; | |||
for i := 0 to fArguments.Count-1 do begin | |||
@@ -712,7 +767,7 @@ begin | |||
s := s + '; '; | |||
end; | |||
s := s + ')'; | |||
if (ReturnValue.Typ <> 'void') then | |||
if (ReturnValue.Typ <> 'void') or (ReturnValue.IsPointer > 0) then | |||
s := s + ': ' + List.GetPascalName(ReturnValue.Typ, ReturnValue.IsPointer); | |||
s := s + '; {$IFDEF VK_CDECL}cdecl{$ELSE}stdcall{$ENDIF};'; | |||
aCode.Add(String(s)); | |||
@@ -4,22 +4,22 @@ | |||
<PathDelim Value="\"/> | |||
<Version Value="9"/> | |||
<BuildModes Active="Default"/> | |||
<Units Count="19"> | |||
<Units Count="20"> | |||
<Unit0> | |||
<Filename Value="generator.lpr"/> | |||
<IsPartOfProject Value="True"/> | |||
<IsVisibleTab Value="True"/> | |||
<CursorPos X="47" Y="16"/> | |||
<UsageCount Value="48"/> | |||
<UsageCount Value="51"/> | |||
<Loaded Value="True"/> | |||
</Unit0> | |||
<Unit1> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<IsPartOfProject Value="True"/> | |||
<IsVisibleTab Value="True"/> | |||
<EditorIndex Value="1"/> | |||
<TopLine Value="695"/> | |||
<CursorPos X="32" Y="705"/> | |||
<UsageCount Value="48"/> | |||
<TopLine Value="746"/> | |||
<CursorPos X="24" Y="756"/> | |||
<UsageCount Value="51"/> | |||
<Loaded Value="True"/> | |||
</Unit1> | |||
<Unit2> | |||
@@ -95,29 +95,27 @@ | |||
</Unit11> | |||
<Unit12> | |||
<Filename Value="..\..\..\libTextSuite\OpenGlCore\dglOpenGL.pas"/> | |||
<EditorIndex Value="-1"/> | |||
<WindowIndex Value="1"/> | |||
<TopLine Value="15048"/> | |||
<CursorPos X="11" Y="14967"/> | |||
<UsageCount Value="13"/> | |||
<Loaded Value="True"/> | |||
</Unit12> | |||
<Unit13> | |||
<Filename Value="..\..\data\Vulkan.tpl"/> | |||
<EditorIndex Value="2"/> | |||
<EditorIndex Value="-1"/> | |||
<CursorPos X="40" Y="11"/> | |||
<UsageCount Value="12"/> | |||
<Loaded Value="True"/> | |||
<DefaultSyntaxHighlighter Value="None"/> | |||
</Unit13> | |||
<Unit14> | |||
<Filename Value="C:\Zusatzprogramme\Lazarus\fpc\3.1.1\source\rtl\inc\dynlibh.inc"/> | |||
<IsVisibleTab Value="True"/> | |||
<EditorIndex Value="1"/> | |||
<EditorIndex Value="-1"/> | |||
<WindowIndex Value="1"/> | |||
<TopLine Value="35"/> | |||
<CursorPos X="25" Y="55"/> | |||
<UsageCount Value="11"/> | |||
<Loaded Value="True"/> | |||
</Unit14> | |||
<Unit15> | |||
<Filename Value="C:\Zusatzprogramme\Lazarus\fpc\3.1.1\source\rtl\win\sysdlh.inc"/> | |||
@@ -147,126 +145,133 @@ | |||
<CursorPos X="41" Y="8"/> | |||
<UsageCount Value="10"/> | |||
</Unit18> | |||
<Unit19> | |||
<Filename Value="..\..\..\SpaceCrush\src\openglcore\uglcContext.pas"/> | |||
<EditorIndex Value="-1"/> | |||
<TopLine Value="94"/> | |||
<UsageCount Value="10"/> | |||
</Unit19> | |||
</Units> | |||
<JumpHistory Count="30" HistoryIndex="29"> | |||
<Position1> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="1025" TopLine="1010"/> | |||
<Caret Line="810" Column="3" TopLine="803"/> | |||
</Position1> | |||
<Position2> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="866" TopLine="852"/> | |||
<Caret Line="568" TopLine="552"/> | |||
</Position2> | |||
<Position3> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="867" TopLine="852"/> | |||
<Caret Line="569" TopLine="552"/> | |||
</Position3> | |||
<Position4> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="268" TopLine="251"/> | |||
<Caret Line="810" TopLine="794"/> | |||
</Position4> | |||
<Position5> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="1013" Column="4" TopLine="996"/> | |||
<Caret Line="811" TopLine="794"/> | |||
</Position5> | |||
<Position6> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="1025" TopLine="1000"/> | |||
<Caret Line="812" TopLine="794"/> | |||
</Position6> | |||
<Position7> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="1026" TopLine="1002"/> | |||
<Caret Line="813" TopLine="794"/> | |||
</Position7> | |||
<Position8> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="269" TopLine="253"/> | |||
<Caret Line="815" TopLine="794"/> | |||
</Position8> | |||
<Position9> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="270" TopLine="253"/> | |||
<Caret Line="814" Column="42" TopLine="794"/> | |||
</Position9> | |||
<Position10> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="271" TopLine="253"/> | |||
<Caret Line="817" TopLine="802"/> | |||
</Position10> | |||
<Position11> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="272" TopLine="253"/> | |||
<Caret Line="818" TopLine="802"/> | |||
</Position11> | |||
<Position12> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="273" TopLine="253"/> | |||
<Caret Line="821" TopLine="802"/> | |||
</Position12> | |||
<Position13> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="275" TopLine="253"/> | |||
<Caret Line="822" TopLine="802"/> | |||
</Position13> | |||
<Position14> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="764" Column="94" TopLine="776"/> | |||
<Caret Line="823" TopLine="802"/> | |||
</Position14> | |||
<Position15> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="1025" TopLine="1010"/> | |||
<Caret Line="821" Column="73" TopLine="802"/> | |||
</Position15> | |||
<Position16> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="1026" TopLine="1010"/> | |||
<Caret Line="817" TopLine="802"/> | |||
</Position16> | |||
<Position17> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="268" TopLine="252"/> | |||
<Caret Line="818" TopLine="802"/> | |||
</Position17> | |||
<Position18> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="269" TopLine="252"/> | |||
<Caret Line="821" TopLine="802"/> | |||
</Position18> | |||
<Position19> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="270" TopLine="252"/> | |||
<Caret Line="822" TopLine="802"/> | |||
</Position19> | |||
<Position20> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="271" TopLine="252"/> | |||
<Caret Line="823" TopLine="802"/> | |||
</Position20> | |||
<Position21> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="273" TopLine="252"/> | |||
<Caret Line="826" TopLine="802"/> | |||
</Position21> | |||
<Position22> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="275" TopLine="252"/> | |||
<Caret Line="827" TopLine="802"/> | |||
</Position22> | |||
<Position23> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="1022" Column="21" TopLine="998"/> | |||
<Caret Line="828" TopLine="802"/> | |||
</Position23> | |||
<Position24> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="268" TopLine="252"/> | |||
</Position24> | |||
<Position25> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="7" Column="29"/> | |||
<Caret Line="269" TopLine="252"/> | |||
</Position25> | |||
<Position26> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="71" Column="27" TopLine="46"/> | |||
<Caret Line="270" TopLine="252"/> | |||
</Position26> | |||
<Position27> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="952" Column="23" TopLine="937"/> | |||
<Caret Line="271" TopLine="252"/> | |||
</Position27> | |||
<Position28> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="106" Column="7" TopLine="85"/> | |||
<Caret Line="272" TopLine="252"/> | |||
</Position28> | |||
<Position29> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="636" TopLine="626"/> | |||
<Caret Line="273" TopLine="252"/> | |||
</Position29> | |||
<Position30> | |||
<Filename Value="HeaderGenerator.pas"/> | |||
<Caret Line="97" Column="35" TopLine="92"/> | |||
<Caret Line="275" TopLine="252"/> | |||
</Position30> | |||
</JumpHistory> | |||
</ProjectSession> | |||
@@ -279,7 +284,7 @@ | |||
<Expression Value="result.fName"/> | |||
</Item2> | |||
<Item3> | |||
<Expression Value="result.fReturnValue.IsPointer"/> | |||
<Expression Value="result.fReturnValue.Typ"/> | |||
</Item3> | |||
</Watches> | |||
</Debugging> | |||
@@ -0,0 +1,106 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<CONFIG> | |||
<ProjectOptions> | |||
<Version Value="9"/> | |||
<PathDelim Value="\"/> | |||
<General> | |||
<SessionStorage Value="InProjectDir"/> | |||
<MainUnit Value="0"/> | |||
<Title Value="triangle"/> | |||
<ResourceType Value="res"/> | |||
<UseXPManifest Value="True"/> | |||
<Icon Value="0"/> | |||
</General> | |||
<i18n> | |||
<EnableI18N LFM="False"/> | |||
</i18n> | |||
<VersionInfo> | |||
<StringTable ProductVersion=""/> | |||
</VersionInfo> | |||
<BuildModes Count="1"> | |||
<Item1 Name="Default" Default="True"/> | |||
</BuildModes> | |||
<PublishOptions> | |||
<Version Value="2"/> | |||
</PublishOptions> | |||
<RunParams> | |||
<local> | |||
<FormatVersion Value="1"/> | |||
</local> | |||
</RunParams> | |||
<RequiredPackages Count="1"> | |||
<Item1> | |||
<PackageName Value="LCL"/> | |||
</Item1> | |||
</RequiredPackages> | |||
<Units Count="7"> | |||
<Unit0> | |||
<Filename Value="triangle.lpr"/> | |||
<IsPartOfProject Value="True"/> | |||
</Unit0> | |||
<Unit1> | |||
<Filename Value="uMainForm.pas"/> | |||
<IsPartOfProject Value="True"/> | |||
<ComponentName Value="MainForm"/> | |||
<HasResources Value="True"/> | |||
<ResourceBaseClass Value="Form"/> | |||
</Unit1> | |||
<Unit2> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<IsPartOfProject Value="True"/> | |||
</Unit2> | |||
<Unit3> | |||
<Filename Value="..\utils\uvkuInstance.pas"/> | |||
<IsPartOfProject Value="True"/> | |||
</Unit3> | |||
<Unit4> | |||
<Filename Value="..\utils\uvkuUtils.pas"/> | |||
<IsPartOfProject Value="True"/> | |||
</Unit4> | |||
<Unit5> | |||
<Filename Value="..\utils\uvkuInstanceEx.pas"/> | |||
<IsPartOfProject Value="True"/> | |||
</Unit5> | |||
<Unit6> | |||
<Filename Value="..\utils\uvkuPhysicalDevice.pas"/> | |||
<IsPartOfProject Value="True"/> | |||
</Unit6> | |||
</Units> | |||
</ProjectOptions> | |||
<CompilerOptions> | |||
<Version Value="11"/> | |||
<PathDelim Value="\"/> | |||
<Target> | |||
<Filename Value="triangle-$(TargetCPU)-$(TargetOS)"/> | |||
</Target> | |||
<SearchPaths> | |||
<IncludeFiles Value="$(ProjOutDir);.."/> | |||
<OtherUnitFiles Value="..;..\utils"/> | |||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> | |||
</SearchPaths> | |||
<Linking> | |||
<Debugging> | |||
<UseHeaptrc Value="True"/> | |||
<UseExternalDbgSyms Value="True"/> | |||
</Debugging> | |||
<Options> | |||
<Win32> | |||
<GraphicApplication Value="True"/> | |||
</Win32> | |||
</Options> | |||
</Linking> | |||
</CompilerOptions> | |||
<Debugging> | |||
<Exceptions Count="3"> | |||
<Item1> | |||
<Name Value="EAbort"/> | |||
</Item1> | |||
<Item2> | |||
<Name Value="ECodetoolError"/> | |||
</Item2> | |||
<Item3> | |||
<Name Value="EFOpenError"/> | |||
</Item3> | |||
</Exceptions> | |||
</Debugging> | |||
</CONFIG> |
@@ -0,0 +1,24 @@ | |||
program triangle; | |||
{$mode objfpc}{$H+} | |||
uses | |||
{$IFDEF UNIX}{$IFDEF UseCThreads} | |||
cthreads, | |||
{$ENDIF}{$ENDIF} | |||
Interfaces, Dialogs, Forms, uMainForm, Vulkan, uvkuInstance, uvkuUtils, uvkuInstanceEx, uvkuPhysicalDevice; | |||
{$R *.res} | |||
begin | |||
if not InitializeVulkan then begin | |||
MessageDlg('Error', 'unable to initialize vulkan api', mtError, [mbOK], 0); | |||
halt; | |||
end; | |||
RequireDerivedFormResource := True; | |||
Application.Initialize; | |||
Application.CreateForm(TMainForm, MainForm); | |||
Application.Run; | |||
end. | |||
@@ -0,0 +1,226 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<CONFIG> | |||
<ProjectSession> | |||
<PathDelim Value="\"/> | |||
<Version Value="9"/> | |||
<BuildModes Active="Default"/> | |||
<Units Count="11"> | |||
<Unit0> | |||
<Filename Value="triangle.lpr"/> | |||
<IsPartOfProject Value="True"/> | |||
<EditorIndex Value="-1"/> | |||
<CursorPos X="47" Y="22"/> | |||
<UsageCount Value="29"/> | |||
</Unit0> | |||
<Unit1> | |||
<Filename Value="uMainForm.pas"/> | |||
<IsPartOfProject Value="True"/> | |||
<ComponentName Value="MainForm"/> | |||
<HasResources Value="True"/> | |||
<ResourceBaseClass Value="Form"/> | |||
<TopLine Value="30"/> | |||
<CursorPos X="25" Y="9"/> | |||
<UsageCount Value="29"/> | |||
<Loaded Value="True"/> | |||
<LoadedDesigner Value="True"/> | |||
</Unit1> | |||
<Unit2> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<IsPartOfProject Value="True"/> | |||
<EditorIndex Value="2"/> | |||
<TopLine Value="2500"/> | |||
<CursorPos X="3" Y="2516"/> | |||
<UsageCount Value="29"/> | |||
<Loaded Value="True"/> | |||
</Unit2> | |||
<Unit3> | |||
<Filename Value="..\utils\uvkuInstance.pas"/> | |||
<IsPartOfProject Value="True"/> | |||
<EditorIndex Value="3"/> | |||
<TopLine Value="59"/> | |||
<CursorPos X="10" Y="85"/> | |||
<UsageCount Value="27"/> | |||
<Loaded Value="True"/> | |||
</Unit3> | |||
<Unit4> | |||
<Filename Value="..\utils\uvkuUtils.pas"/> | |||
<IsPartOfProject Value="True"/> | |||
<EditorIndex Value="6"/> | |||
<CursorPos X="16" Y="13"/> | |||
<UsageCount Value="24"/> | |||
<Loaded Value="True"/> | |||
</Unit4> | |||
<Unit5> | |||
<Filename Value="..\..\data\Vulkan.tpl"/> | |||
<EditorIndex Value="1"/> | |||
<TopLine Value="44"/> | |||
<CursorPos X="27" Y="22"/> | |||
<UsageCount Value="13"/> | |||
<Loaded Value="True"/> | |||
<DefaultSyntaxHighlighter Value="None"/> | |||
</Unit5> | |||
<Unit6> | |||
<Filename Value="C:\Zusatzprogramme\Lazarus\fpc\3.1.1\source\packages\fcl-base\src\custapp.pp"/> | |||
<UnitName Value="CustApp"/> | |||
<EditorIndex Value="-1"/> | |||
<TopLine Value="72"/> | |||
<CursorPos X="14" Y="86"/> | |||
<UsageCount Value="10"/> | |||
</Unit6> | |||
<Unit7> | |||
<Filename Value="C:\Zusatzprogramme\Lazarus\fpc\3.1.1\source\rtl\inc\objpash.inc"/> | |||
<EditorIndex Value="-1"/> | |||
<TopLine Value="213"/> | |||
<CursorPos X="21" Y="224"/> | |||
<UsageCount Value="10"/> | |||
</Unit7> | |||
<Unit8> | |||
<Filename Value="C:\Zusatzprogramme\Lazarus\lcl\include\customform.inc"/> | |||
<EditorIndex Value="-1"/> | |||
<TopLine Value="138"/> | |||
<CursorPos Y="154"/> | |||
<UsageCount Value="10"/> | |||
</Unit8> | |||
<Unit9> | |||
<Filename Value="..\utils\uvkuInstanceEx.pas"/> | |||
<IsPartOfProject Value="True"/> | |||
<EditorIndex Value="5"/> | |||
<TopLine Value="46"/> | |||
<CursorPos X="23" Y="9"/> | |||
<UsageCount Value="21"/> | |||
<Loaded Value="True"/> | |||
</Unit9> | |||
<Unit10> | |||
<Filename Value="..\utils\uvkuPhysicalDevice.pas"/> | |||
<IsPartOfProject Value="True"/> | |||
<IsVisibleTab Value="True"/> | |||
<EditorIndex Value="4"/> | |||
<TopLine Value="61"/> | |||
<CursorPos Y="77"/> | |||
<UsageCount Value="21"/> | |||
<Loaded Value="True"/> | |||
</Unit10> | |||
</Units> | |||
<JumpHistory Count="30" HistoryIndex="27"> | |||
<Position1> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="2569" Column="3" TopLine="2553"/> | |||
</Position1> | |||
<Position2> | |||
<Filename Value="..\Vulkan.pas"/> | |||
</Position2> | |||
<Position3> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="1193" Column="36" TopLine="1179"/> | |||
</Position3> | |||
<Position4> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="1200" Column="73" TopLine="1179"/> | |||
</Position4> | |||
<Position5> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="1750" Column="51" TopLine="1724"/> | |||
</Position5> | |||
<Position6> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="1751" Column="52" TopLine="1725"/> | |||
</Position6> | |||
<Position7> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="1981" Column="28" TopLine="1968"/> | |||
</Position7> | |||
<Position8> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="2327" Column="103" TopLine="2301"/> | |||
</Position8> | |||
<Position9> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="2328" Column="24" TopLine="2313"/> | |||
</Position9> | |||
<Position10> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="2372" TopLine="2346"/> | |||
</Position10> | |||
<Position11> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="2373" TopLine="2346"/> | |||
</Position11> | |||
<Position12> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="2374" TopLine="2348"/> | |||
</Position12> | |||
<Position13> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="2377" Column="23" TopLine="2351"/> | |||
</Position13> | |||
<Position14> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="2378" Column="4" TopLine="2351"/> | |||
</Position14> | |||
<Position15> | |||
<Filename Value="..\utils\uvkuPhysicalDevice.pas"/> | |||
<Caret Line="28" Column="39" TopLine="11"/> | |||
</Position15> | |||
<Position16> | |||
<Filename Value="..\utils\uvkuPhysicalDevice.pas"/> | |||
<Caret Line="39" Column="103" TopLine="11"/> | |||
</Position16> | |||
<Position17> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="2245" Column="33" TopLine="2231"/> | |||
</Position17> | |||
<Position18> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="2328" Column="9" TopLine="2312"/> | |||
</Position18> | |||
<Position19> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="2373" Column="19" TopLine="2354"/> | |||
</Position19> | |||
<Position20> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="2375" Column="18" TopLine="2354"/> | |||
</Position20> | |||
<Position21> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="2386" TopLine="2373"/> | |||
</Position21> | |||
<Position22> | |||
<Filename Value="..\utils\uvkuPhysicalDevice.pas"/> | |||
<Caret Line="52" Column="5" TopLine="44"/> | |||
</Position22> | |||
<Position23> | |||
<Filename Value="..\utils\uvkuPhysicalDevice.pas"/> | |||
<Caret Line="24" Column="12" TopLine="8"/> | |||
</Position23> | |||
<Position24> | |||
<Filename Value="..\utils\uvkuPhysicalDevice.pas"/> | |||
<Caret Line="41" Column="73" TopLine="26"/> | |||
</Position24> | |||
<Position25> | |||
<Filename Value="..\utils\uvkuPhysicalDevice.pas"/> | |||
<Caret Line="43" Column="51" TopLine="27"/> | |||
</Position25> | |||
<Position26> | |||
<Filename Value="..\utils\uvkuPhysicalDevice.pas"/> | |||
<Caret Line="34" Column="51" TopLine="16"/> | |||
</Position26> | |||
<Position27> | |||
<Filename Value="..\utils\uvkuPhysicalDevice.pas"/> | |||
<Caret Line="106" Column="40" TopLine="90"/> | |||
</Position27> | |||
<Position28> | |||
<Filename Value="..\utils\uvkuPhysicalDevice.pas"/> | |||
<Caret Line="77" Column="34" TopLine="61"/> | |||
</Position28> | |||
<Position29> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="2516" Column="3" TopLine="2500"/> | |||
</Position29> | |||
<Position30> | |||
<Filename Value="..\Vulkan.pas"/> | |||
<Caret Line="2377" Column="3" TopLine="2361"/> | |||
</Position30> | |||
</JumpHistory> | |||
</ProjectSession> | |||
</CONFIG> |
@@ -0,0 +1,10 @@ | |||
object MainForm: TMainForm | |||
Left = 419 | |||
Height = 240 | |||
Top = 263 | |||
Width = 320 | |||
Caption = 'Triangle' | |||
OnCreate = FormCreate | |||
OnDestroy = FormDestroy | |||
LCLVersion = '1.7' | |||
end |
@@ -0,0 +1,61 @@ | |||
unit uMainForm; | |||
{$mode objfpc}{$H+} | |||
interface | |||
uses | |||
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, | |||
Vulkan, uvkuInstanceEx; | |||
type | |||
TCustomAllocHandler = class(TvkuAllocationHandler) | |||
protected | |||
procedure InternalAllocationNotification(const aSize: VkSize; const aType: TVkInternalAllocationType; const aScope: TVkSystemAllocationScope); | |||
procedure InternalFreeNotification(const aSize: VkSize; const aType: TVkInternalAllocationType; const aScope: TVkSystemAllocationScope); | |||
end; | |||
TMainForm = class(TForm) | |||
procedure FormCreate(Sender: TObject); | |||
procedure FormDestroy(Sender: TObject); | |||
private | |||
fIntance: TvkuInstanceEx; | |||
public | |||
{ public declarations } | |||
end; | |||
var | |||
MainForm: TMainForm; | |||
implementation | |||
{$R *.lfm} | |||
procedure TCustomAllocHandler.InternalAllocationNotification(const aSize: VkSize; const aType: TVkInternalAllocationType; const aScope: TVkSystemAllocationScope); | |||
begin | |||
inherited InternalAllocationNotification(aSize, aType, aScope); | |||
end; | |||
procedure TCustomAllocHandler.InternalFreeNotification(const aSize: VkSize; const aType: TVkInternalAllocationType; const aScope: TVkSystemAllocationScope); | |||
begin | |||
inherited InternalFreeNotification(aSize, aType, aScope); | |||
end; | |||
procedure TMainForm.FormCreate(Sender: TObject); | |||
begin | |||
fIntance := TvkuInstanceEx.Create( | |||
0, | |||
[], | |||
[], | |||
TvkuInstanceEx.DefaultApplicationInfo, | |||
TvkuAllocationHandler.Create, | |||
true); | |||
end; | |||
procedure TMainForm.FormDestroy(Sender: TObject); | |||
begin | |||
FreeAndNil(fIntance); | |||
end; | |||
end. | |||
@@ -0,0 +1,125 @@ | |||
unit uvkuInstance; | |||
{$mode objfpc}{$H+} | |||
interface | |||
uses | |||
Classes, SysUtils, Vulkan; | |||
type | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
TvkuInstance = class(TObject) | |||
private | |||
fHandle: VkInstance; | |||
fAllocCallbacks: PVkAllocationCallbacks; | |||
fPhysicalDevices: array of VkPhysicalDevice; | |||
function GetPhysicalDeviceCount: Integer; | |||
function GetPhysicalDevices(const aIndex: Integer): VkPhysicalDevice; | |||
procedure UpdatePhysicalDevices; | |||
protected | |||
procedure CreateHandle(aCreateInfo: PVkInstanceCreateInfo; aAllocCallbacks: PVkAllocationCallbacks); | |||
constructor Create; | |||
public | |||
property PhysicalDeviceCount: Integer read GetPhysicalDeviceCount; | |||
property PhysicalDevices[const aIndex: Integer]: VkPhysicalDevice read GetPhysicalDevices; | |||
constructor Create(const aCreateInfo: TVkInstanceCreateInfo); | |||
constructor Create(const aCreateInfo: TVkInstanceCreateInfo; const aAllocCallbacks: TVkAllocationCallbacks); | |||
destructor Destroy; override; | |||
end; | |||
implementation | |||
uses | |||
uvkuUtils; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
//TvkuInstance/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function TvkuInstance.GetPhysicalDeviceCount: Integer; | |||
begin | |||
UpdatePhysicalDevices; | |||
result := Length(fPhysicalDevices); | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function TvkuInstance.GetPhysicalDevices(const aIndex: Integer): VkPhysicalDevice; | |||
begin | |||
UpdatePhysicalDevices; | |||
if (aIndex < Low(fPhysicalDevices)) or (aIndex > High(fPhysicalDevices)) then | |||
raise TvkuException.CreateFmt('index (%d) out of range (%d-%d)', [aIndex, Low(fPhysicalDevices), High(fPhysicalDevices)]); | |||
result := fPhysicalDevices[aIndex]; | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
procedure TvkuInstance.UpdatePhysicalDevices; | |||
var | |||
c: VkUint32; | |||
err: TVkResult; | |||
begin | |||
if (Length(fPhysicalDevices) > 0) then | |||
exit; | |||
err := vkEnumeratePhysicalDevices(fHandle, @c, nil); | |||
if (err < VK_SUCCESS) then | |||
raise TvkuErrorException.Create('unable to get physical device number', err); | |||
SetLength(fPhysicalDevices, c); | |||
err := vkEnumeratePhysicalDevices(fHandle, @c, @fPhysicalDevices[0]); | |||
if (err < VK_SUCCESS) then | |||
raise TvkuErrorException.Create('unable to get physical devices', err); | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
procedure TvkuInstance.CreateHandle(aCreateInfo: PVkInstanceCreateInfo; aAllocCallbacks: PVkAllocationCallbacks); | |||
var e: TVkResult; | |||
begin | |||
if Assigned(aAllocCallbacks) then begin | |||
new(fAllocCallbacks); | |||
fAllocCallbacks^ := aAllocCallbacks^; | |||
end; | |||
e := vkCreateInstance(aCreateInfo, fAllocCallbacks, @fHandle); | |||
if (e < VK_SUCCESS) then | |||
raise TvkuErrorException.Create('unable to create vulkan instance', e); | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
constructor TvkuInstance.Create; | |||
begin | |||
inherited Create; | |||
fHandle := nil; | |||
fAllocCallbacks := nil; | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
constructor TvkuInstance.Create(const aCreateInfo: TVkInstanceCreateInfo); | |||
begin | |||
Create; | |||
CreateHandle(@aCreateInfo, nil); | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
constructor TvkuInstance.Create(const aCreateInfo: TVkInstanceCreateInfo; const aAllocCallbacks: TVkAllocationCallbacks); | |||
begin | |||
Create; | |||
CreateHandle(@aCreateInfo, @aAllocCallbacks); | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
destructor TvkuInstance.Destroy; | |||
begin | |||
if Assigned(fHandle) then begin | |||
vkDestroyInstance(fHandle, fAllocCallbacks); | |||
fHandle := nil; | |||
end; | |||
if Assigned(fAllocCallbacks) then begin | |||
Dispose(fAllocCallbacks); | |||
fAllocCallbacks := nil; | |||
end; | |||
inherited Destroy; | |||
end; | |||
end. | |||
@@ -0,0 +1,316 @@ | |||
unit uvkuInstanceEx; | |||
{$mode objfpc}{$H+} | |||
interface | |||
uses | |||
Classes, SysUtils, | |||
Vulkan, uvkuInstance; | |||
type | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
TvkuApplicationInfo = packed record | |||
AppName: String; | |||
AppVersion: VkVersion; | |||
EngineName: String; | |||
EngineVersion: VkVersion; | |||
ApiVersion: VkVersion; | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
TvkuAllocationHandler = class(TObject) | |||
protected | |||
function AllocateMemory(const aSize: VkSize; const aAlignment: VkSize; const aScope: TVkSystemAllocationScope): PVkVoid; virtual; | |||
function ReallocateMemory(const aOriginal: PVkVoid; const aSize: VkSize; const aAlignment: VkSize; const aScope: TVkSystemAllocationScope): PVkVoid; virtual; | |||
procedure FreeMemory(const aMemory: PVkVoid); virtual; | |||
procedure InternalAllocationNotification(const aSize: VkSize; const aType: TVkInternalAllocationType; const aScope: TVkSystemAllocationScope); | |||
procedure InternalFreeNotification(const aSize: VkSize; const aType: TVkInternalAllocationType; const aScope: TVkSystemAllocationScope); | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
TvkuInstanceEx = class(TvkuInstance) | |||
private | |||
fFlags: VkInstanceCreateFlags; | |||
fOwnsAllocHandler: Boolean; | |||
fAllocationHandler: TvkuAllocationHandler; | |||
fApplicationInfo: TvkuApplicationInfo; | |||
fLayers: TStringList; | |||
fExtensions: TStringList; | |||
function GetLayers: TStrings; | |||
function GetExtensions: TStrings; | |||
procedure Initialize; | |||
procedure MakeStringsFromArray(const aArray: array of String; const aStrings: TStrings); | |||
procedure CreateHandle; | |||
public | |||
property Flags: VkInstanceCreateFlags read fFlags; | |||
property OwnsAllocHandler: Boolean read fOwnsAllocHandler; | |||
property AllocationHandler: TvkuAllocationHandler read fAllocationHandler; | |||
property ApplicationInfo: TvkuApplicationInfo read fApplicationInfo; | |||
property Layers: TStrings read GetLayers; | |||
property Extensions: TStrings read GetExtensions; | |||
constructor Create; | |||
constructor Create( | |||
const aFlags: VkInstanceCreateFlags; | |||
const aLayers: array of String; | |||
const aExtensions: array of String); | |||
constructor Create( | |||
const aFlags: VkInstanceCreateFlags; | |||
const aLayers: array of String; | |||
const aExtensions: array of String; | |||
const aAppInfo: TvkuApplicationInfo); | |||
constructor Create( | |||
const aFlags: VkInstanceCreateFlags; | |||
const aLayers: array of String; | |||
const aExtensions: array of String; | |||
const aAppInfo: TvkuApplicationInfo; | |||
const aAllocHandler: TvkuAllocationHandler; | |||
const aOwnsAllocHandler: Boolean); | |||
destructor Destroy; override; | |||
public | |||
class function DefaultApplicationInfo: TvkuApplicationInfo; | |||
class function MakeApplicationInfo( | |||
aAppName: String; | |||
aAppVersion: VkVersion; | |||
aEngineName: String; | |||
aEngineVersion: VkVersion; | |||
aApiVersion: VkVersion = VK_API_VERSION): TvkuApplicationInfo; | |||
end; | |||
implementation | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
//TvkuAllocationHandler////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function TvkuAllocationHandler.AllocateMemory(const aSize: VkSize; const aAlignment: VkSize; const aScope: TVkSystemAllocationScope): PVkVoid; | |||
begin | |||
result := System.GetMemory(aSize); | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function TvkuAllocationHandler.ReallocateMemory(const aOriginal: PVkVoid; const aSize: VkSize; const aAlignment: VkSize; const aScope: TVkSystemAllocationScope): PVkVoid; | |||
begin | |||
result := System.ReAllocMemory(aOriginal, aSize); | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
procedure TvkuAllocationHandler.FreeMemory(const aMemory: PVkVoid); | |||
begin | |||
System.FreeMemory(aMemory); | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
procedure TvkuAllocationHandler.InternalAllocationNotification(const aSize: VkSize; const aType: TVkInternalAllocationType; const aScope: TVkSystemAllocationScope); | |||
begin | |||
// DUMMY | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
procedure TvkuAllocationHandler.InternalFreeNotification(const aSize: VkSize; const aType: TVkInternalAllocationType; const aScope: TVkSystemAllocationScope); | |||
begin | |||
// DUMMY | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function AllocateMemoryCallback(aUserData: PVkVoid; aSize: VkSize; aAlignment: VkSize; aScope: TVkSystemAllocationScope): PVkVoid; stdcall; | |||
begin | |||
result := TvkuAllocationHandler(aUserData).AllocateMemory(aSize, aAlignment, aScope); | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function ReallocateMemoryCallback(aUserData: PVkVoid; aOriginal: PVkVoid; aSize: VkSize; | |||
aAlignment: VkSize; aScope: TVkSystemAllocationScope): PVkVoid; stdcall; | |||
begin | |||
result := TvkuAllocationHandler(aUserData).ReallocateMemory(aOriginal, aSize, aAlignment, aScope); | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
procedure FreeMemoryCallback(aUserData: PVkVoid; aMemory: PVkVoid); stdcall; | |||
begin | |||
TvkuAllocationHandler(aUserData).FreeMemory(aMemory); | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
procedure InternalAllocationCallback(aUserData: PVkVoid; aSize: VkSize; aType: TVkInternalAllocationType; aScope: TVkSystemAllocationScope); stdcall; | |||
begin | |||
TvkuAllocationHandler(aUserData).InternalAllocationNotification(aSize, aType, aScope); | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
procedure InternalFreeCallback(aUserData: PVkVoid; aSize: VkSize; aType: TVkInternalAllocationType; aScope: TVkSystemAllocationScope); stdcall; | |||
begin | |||
TvkuAllocationHandler(aUserData).InternalFreeNotification(aSize, aType, aScope); | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
//TvkuInstanceEx/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function TvkuInstanceEx.GetLayers: TStrings; | |||
begin | |||
result := fLayers; | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function TvkuInstanceEx.GetExtensions: TStrings; | |||
begin | |||
result := fExtensions; | |||
end; | |||
procedure TvkuInstanceEx.Initialize; | |||
begin | |||
fLayers := TStringList.Create; | |||
fExtensions := TStringList.Create; | |||
fApplicationInfo := DefaultApplicationInfo; | |||
fFlags := 0; | |||
fAllocationHandler := nil; | |||
fOwnsAllocHandler := false; | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
procedure TvkuInstanceEx.MakeStringsFromArray(const aArray: array of String; const aStrings: TStrings); | |||
var i: Integer; | |||
begin | |||
for i := Low(aArray) to High(aArray) do | |||
aStrings.Add(aArray[i]); | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
procedure TvkuInstanceEx.CreateHandle; | |||
var | |||
CreateInfo: TVkInstanceCreateInfo; | |||
AppInfo: TVkApplicationInfo; | |||
AllocCallbacks: TVkAllocationCallbacks; | |||
i: Integer; | |||
lay: array of PVkChar; | |||
ext: array of PVkChar; | |||
begin | |||
FillByte(AppInfo, SizeOf(AppInfo), 0); | |||
AppInfo.sType := VK_STRUCTURE_TYPE_APPLICATION_INFO; | |||
AppInfo.pNext := nil; | |||
AppInfo.pApplicationName := PVkChar(fApplicationInfo.AppName); | |||
AppInfo.applicationVersion := fApplicationInfo.AppVersion; | |||
AppInfo.pEngineName := PVkChar(fApplicationInfo.EngineName); | |||
AppInfo.engineVersion := fApplicationInfo.EngineVersion; | |||
AppInfo.apiVersion := fApplicationInfo.ApiVersion; | |||
SetLength(lay, fLayers.Count); | |||
for i := 0 to fLayers.Count-1 do | |||
lay[i] := PVkChar(fLayers[i]); | |||
SetLength(ext, fExtensions.Count); | |||
for i := 0 to fExtensions.Count-1 do | |||
ext[i] := PVkChar(fExtensions[i]); | |||
FillByte(CreateInfo, SizeOf(CreateInfo), 0); | |||
CreateInfo.sType := VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; | |||
CreateInfo.pNext := nil; | |||
CreateInfo.flags := fFlags; | |||
CreateInfo.pApplicationInfo := @AppInfo; | |||
CreateInfo.enabledLayerCount := Length(lay); | |||
CreateInfo.ppEnabledLayerNames := @lay[0]; | |||
CreateInfo.enabledExtensionCount := Length(ext); | |||
CreateInfo.ppEnabledExtensionNames := @ext[0]; | |||
if Assigned(fAllocationHandler) then begin | |||
FillByte(AllocCallbacks, SizeOf(AllocCallbacks), 0); | |||
AllocCallbacks.pUserData := fAllocationHandler; | |||
AllocCallbacks.pfnAllocation := @AllocateMemoryCallback; | |||
AllocCallbacks.pfnReallocation := @ReallocateMemoryCallback; | |||
AllocCallbacks.pfnFree := @FreeMemoryCallback; | |||
AllocCallbacks.pfnInternalAllocation := @InternalAllocationCallback; | |||
AllocCallbacks.pfnInternalFree := @InternalFreeCallback; | |||
inherited CreateHandle(@CreateInfo, @AllocCallbacks); | |||
end else | |||
inherited CreateHandle(@CreateInfo, nil); | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
constructor TvkuInstanceEx.Create; | |||
begin | |||
Initialize; | |||
CreateHandle; | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
constructor TvkuInstanceEx.Create(const aFlags: VkInstanceCreateFlags; | |||
const aLayers: array of String; const aExtensions: array of String); | |||
begin | |||
inherited Create; | |||
Initialize; | |||
fFlags := aFlags; | |||
MakeStringsFromArray(aLayers, fLayers); | |||
MakeStringsFromArray(aExtensions, fExtensions); | |||
CreateHandle; | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
constructor TvkuInstanceEx.Create(const aFlags: VkInstanceCreateFlags;const aLayers: array of String; | |||
const aExtensions: array of String; const aAppInfo: TvkuApplicationInfo); | |||
begin | |||
inherited Create; | |||
Initialize; | |||
fFlags := aFlags; | |||
fApplicationInfo := aAppInfo; | |||
MakeStringsFromArray(aLayers, fLayers); | |||
MakeStringsFromArray(aExtensions, fExtensions); | |||
CreateHandle; | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
constructor TvkuInstanceEx.Create(const aFlags: VkInstanceCreateFlags; const aLayers: array of String;const aExtensions: array of String; | |||
const aAppInfo: TvkuApplicationInfo; const aAllocHandler: TvkuAllocationHandler; const aOwnsAllocHandler: Boolean); | |||
begin | |||
inherited Create; | |||
Initialize; | |||
fFlags := aFlags; | |||
fApplicationInfo := aAppInfo; | |||
fAllocationHandler := aAllocHandler; | |||
fOwnsAllocHandler := aOwnsAllocHandler; | |||
MakeStringsFromArray(aLayers, fLayers); | |||
MakeStringsFromArray(aExtensions, fExtensions); | |||
CreateHandle; | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
destructor TvkuInstanceEx.Destroy; | |||
begin | |||
inherited Destroy; | |||
if fOwnsAllocHandler then | |||
FreeAndNil(fAllocationHandler); | |||
FreeAndNil(fLayers); | |||
FreeAndNil(fExtensions); | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
class function TvkuInstanceEx.DefaultApplicationInfo: TvkuApplicationInfo; | |||
begin | |||
result.AppName := ExtractFileName(ParamStr(0)); | |||
result.AppVersion := 0; | |||
result.EngineName := ExtractFileName(ParamStr(0)); | |||
result.EngineVersion := 0; | |||
result.ApiVersion := VK_API_VERSION; | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
class function TvkuInstanceEx.MakeApplicationInfo(aAppName: String; aAppVersion: VkVersion; aEngineName: String; aEngineVersion: VkVersion; aApiVersion: VkVersion): TvkuApplicationInfo; | |||
begin | |||
result := DefaultApplicationInfo; | |||
result.AppName := aAppName; | |||
result.AppVersion := aAppVersion; | |||
result.EngineName := aEngineName; | |||
result.EngineVersion := aEngineVersion; | |||
result.ApiVersion := aApiVersion; | |||
end; | |||
end. | |||
@@ -0,0 +1,144 @@ | |||
unit uvkuPhysicalDevice; | |||
{$mode objfpc}{$H+} | |||
interface | |||
uses | |||
Classes, SysUtils, | |||
Vulkan; | |||
type | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
TVkSparseImageFormatPropertiesArr = array of TVkSparseImageFormatProperties; | |||
TvkuPhysicalDevice = class(TObject) | |||
private type | |||
TPropertyFlag = ( | |||
pfFeatures, | |||
pfProperties, | |||
pfMemoryProperties | |||
); | |||
TPropertyFlags = set of TPropertyFlag; | |||
private | |||
fHandle: VkPhysicalDevice; | |||
fCached: TPropertyFlags; | |||
fFeatures: TVkPhysicalDeviceFeatures; | |||
fProperties: TVkPhysicalDeviceProperties; | |||
fMemoryProperties: TVkPhysicalDeviceMemoryProperties; | |||
fFormatProperties: array[TVkFormat] of PVkFormatProperties; | |||
function GetFeatures: TVkPhysicalDeviceFeatures; | |||
function GetProperties: TVkPhysicalDeviceProperties; | |||
function GetMemoryProperties: TVkPhysicalDeviceMemoryProperties; | |||
function GetQueueFamilyPropertyCount: Integer; | |||
function GetQueueFamilyProperties(const aIndex: Integer): TVkQueueFamilyProperties; | |||
function GetFormatProperties(const aFormat: TVkFormat): TVkFormatProperties; | |||
public | |||
property Handle: VkPhysicalDevice read fHandle; | |||
property Features: TVkPhysicalDeviceFeatures read GetFeatures; | |||
property Properties: TVkPhysicalDeviceProperties read GetProperties; | |||
property MemoryProperties: TVkPhysicalDeviceMemoryProperties read GetMemoryProperties; | |||
property QueueFamilyPropertyCount: Integer read GetQueueFamilyPropertyCount; | |||
property QueueFamilyProperties[const aIndex: Integer]: TVkQueueFamilyProperties read GetQueueFamilyProperties; | |||
property FormatProperties[const aFormat: TVkFormat]: TVkFormatProperties read GetFormatProperties; | |||
function GetImageFormatProperties( | |||
const aFormat: TVkFormat; | |||
const aImageType: TVkImageType; | |||
const aTiling: TVkImageTiling; | |||
const aUsage: VkImageUsageFlags; | |||
const aFlags: VkImageCreateFlags): TVkImageFormatProperties; | |||
function GetSparseImageFormatProperties( | |||
const aFormat: TVkFormat; | |||
const aImageType: TVkImageType; | |||
const aSamples: TVkSampleCountFlagBits; | |||
const aUsage: VkImageUsageFlags; | |||
const aTiling: TVkImageTiling): TVkSparseImageFormatPropertiesArr; | |||
constructor Create(const aHandle: VkPhysicalDevice); | |||
end; | |||
implementation | |||
uses | |||
uvkuUtils; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
//TvkuPhysicalDevice///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function TvkuPhysicalDevice.GetFeatures: TVkPhysicalDeviceFeatures; | |||
begin | |||
if not (pfFeatures in fCached) then begin | |||
vkGetPhysicalDeviceFeatures(fHandle, @fFeatures); | |||
Include(fCached, pfFeatures); | |||
end; | |||
result := fFeatures; | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function TvkuPhysicalDevice.GetProperties: TVkPhysicalDeviceProperties; | |||
begin | |||
if not (pfProperties in fCached) then begin | |||
vkGetPhysicalDeviceProperties(fHandle, @fProperties); | |||
Include(fCached, pfProperties); | |||
end; | |||
result := fProperties; | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function TvkuPhysicalDevice.GetMemoryProperties: TVkPhysicalDeviceMemoryProperties; | |||
begin | |||
if not (pfMemoryProperties in fCached) then begin | |||
vkGetPhysicalDeviceMemoryProperties(fHandle, @fMemoryProperties); | |||
Include(fCached, pfMemoryProperties); | |||
end; | |||
result := fMemoryProperties; | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function TvkuPhysicalDevice.GetQueueFamilyPropertyCount: Integer; | |||
begin | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function TvkuPhysicalDevice.GetQueueFamilyProperties(const aIndex: Integer): TVkQueueFamilyProperties; | |||
begin | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function TvkuPhysicalDevice.GetFormatProperties(const aFormat: TVkFormat): TVkFormatProperties; | |||
begin | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function TvkuPhysicalDevice.GetImageFormatProperties(const aFormat: TVkFormat; const aImageType: TVkImageType; | |||
const aTiling: TVkImageTiling; const aUsage: VkImageUsageFlags; const aFlags: VkImageCreateFlags): TVkImageFormatProperties; | |||
begin | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function TvkuPhysicalDevice.GetSparseImageFormatProperties(const aFormat: TVkFormat; const aImageType: TVkImageType; | |||
const aSamples: TVkSampleCountFlagBits; const aUsage: VkImageUsageFlags; const aTiling: TVkImageTiling): TVkSparseImageFormatPropertiesArr; | |||
begin | |||
end; | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
constructor TvkuPhysicalDevice.Create(const aHandle: VkPhysicalDevice); | |||
begin | |||
if not Assigned(aHandle) then | |||
raise TvkuException.Create('invalid physical device handle'); | |||
inherited Create; | |||
fHandle := aHandle; | |||
end; | |||
end. | |||
@@ -0,0 +1,34 @@ | |||
unit uvkuUtils; | |||
{$mode objfpc}{$H+} | |||
interface | |||
uses | |||
Classes, SysUtils, | |||
Vulkan; | |||
type | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
TvkuException = class(Exception); | |||
TvkuErrorException = class(TvkuException) | |||
private | |||
fError: TVkResult; | |||
public | |||
property Error: TVkResult read fError; | |||
constructor Create(const msg: string; const aError: TVkResult); | |||
end; | |||
implementation | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
//TvkuErrorException////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
constructor TvkuErrorException.Create(const msg: string; const aError: TVkResult); | |||
begin | |||
inherited Create(msg); | |||
fError := aError; | |||
end; | |||
end. | |||