annotate semiconginev2/old/vulkan/image.nim @ 1221:000befd9479f compiletime-tests

did: remove support for git, for now
author sam <sam@basx.dev>
date Wed, 17 Jul 2024 21:05:47 +0700
parents 56781cc0fc7c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
1 import std/strformat
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
2 import std/tables
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
3 import std/logging
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
4
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
5 import ../core
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
6 import ./device
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
7 import ./physicaldevice
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
8 import ./buffer
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
9 import ./memory
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
10 import ./commandbuffer
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
11
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
12 type
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
13 PixelDepth = 1 .. 4
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
14 VulkanImage* = object
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
15 device*: Device
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
16 vk*: VkImage
959
c104dbf5bbb8 did: adjust integer sizes to match vulkan API (more) directly
sam <sam@basx.dev>
parents: 958
diff changeset
17 width*: uint32 # pixel
c104dbf5bbb8 did: adjust integer sizes to match vulkan API (more) directly
sam <sam@basx.dev>
parents: 958
diff changeset
18 height*: uint32 # pixel
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
19 depth*: PixelDepth
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
20 format*: VkFormat
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
21 usage*: seq[VkImageUsageFlagBits]
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
22 case memoryAllocated*: bool
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
23 of false: discard
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
24 of true:
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
25 memory*: DeviceMemory
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
26 VulkanSampler* = object
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
27 device*: Device
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
28 vk*: VkSampler
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
29 ImageView* = object
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
30 vk*: VkImageView
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
31 image*: VulkanImage
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
32 VulkanTexture* = object
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
33 image*: VulkanImage
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
34 imageView*: ImageView
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
35 sampler*: VulkanSampler
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
36
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
37 const DEPTH_FORMAT_MAP = {
962
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
38 PixelDepth(1): [VK_FORMAT_R8_SRGB, VK_FORMAT_R8_UNORM],
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
39 PixelDepth(2): [VK_FORMAT_R8G8_SRGB, VK_FORMAT_R8G8_UNORM],
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
40 PixelDepth(3): [VK_FORMAT_R8G8B8_SRGB, VK_FORMAT_R8G8B8_UNORM],
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
41 PixelDepth(4): [VK_FORMAT_R8G8B8A8_SRGB, VK_FORMAT_R8G8B8A8_UNORM],
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
42 }.toTable
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
43
962
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
44 const LINEAR_FORMATS = [
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
45 VK_FORMAT_R8_UNORM,
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
46 VK_FORMAT_R8G8_UNORM,
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
47 VK_FORMAT_R8G8B8_UNORM,
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
48 VK_FORMAT_R8G8B8A8_UNORM,
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
49 ]
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
50
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
51
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
52 proc requirements(image: VulkanImage): MemoryRequirements =
1139
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
53 assert image.vk.Valid
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
54 assert image.device.vk.Valid
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
55 var req: VkMemoryRequirements
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
56 image.device.vk.vkGetImageMemoryRequirements(image.vk, addr req)
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
57 result.size = req.size
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
58 result.alignment = req.alignment
1138
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
59 let memorytypes = image.device.physicaldevice.vk.GetMemoryProperties().types
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
60 for i in 0 ..< sizeof(req.memoryTypeBits) * 8:
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
61 if ((req.memoryTypeBits shr i) and 1) == 1:
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
62 result.memoryTypes.add memorytypes[i]
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
63
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
64 proc allocateMemory(image: var VulkanImage, requireMappable: bool, preferVRAM: bool, preferAutoFlush: bool) =
1139
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
65 assert image.device.vk.Valid
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
66 assert image.memoryAllocated == false
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
67
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
68 let requirements = image.requirements()
1138
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
69 let memoryType = requirements.memoryTypes.SelectBestMemoryType(
902
904e0a827ef3 did: auto-formatting
Sam <sam@basx.dev>
parents: 872
diff changeset
70 requireMappable = requireMappable,
904e0a827ef3 did: auto-formatting
Sam <sam@basx.dev>
parents: 872
diff changeset
71 preferVRAM = preferVRAM,
904e0a827ef3 did: auto-formatting
Sam <sam@basx.dev>
parents: 872
diff changeset
72 preferAutoFlush = preferAutoFlush
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
73 )
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
74
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
75 debug "Allocating memory for image: ", image.width, "x", image.height, "x", image.depth, ", ", requirements.size, " bytes of type ", memoryType
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
76 image = VulkanImage(
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
77 device: image.device,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
78 vk: image.vk,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
79 width: image.width,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
80 height: image.height,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
81 depth: image.depth,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
82 format: image.format,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
83 usage: image.usage,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
84 memoryAllocated: true,
1138
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
85 memory: image.device.Allocate(requirements.size, memoryType),
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
86 )
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
87 checkVkResult image.device.vk.vkBindImageMemory(image.vk, image.memory.vk, VkDeviceSize(0))
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
88
943
925197a1ec95 add: some sync (not finished), simplify renderpass af
sam <sam@basx.dev>
parents: 940
diff changeset
89 proc transitionImageLayout(image: VulkanImage, queue: Queue, oldLayout, newLayout: VkImageLayout) =
945
b65068f5f246 del: do not use vulkan 1.3 functions to support older hardware
sam <sam@basx.dev>
parents: 943
diff changeset
90 var
b65068f5f246 del: do not use vulkan 1.3 functions to support older hardware
sam <sam@basx.dev>
parents: 943
diff changeset
91 barrier = VkImageMemoryBarrier(
b65068f5f246 del: do not use vulkan 1.3 functions to support older hardware
sam <sam@basx.dev>
parents: 943
diff changeset
92 sType: VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
943
925197a1ec95 add: some sync (not finished), simplify renderpass af
sam <sam@basx.dev>
parents: 940
diff changeset
93 oldLayout: oldLayout,
925197a1ec95 add: some sync (not finished), simplify renderpass af
sam <sam@basx.dev>
parents: 940
diff changeset
94 newLayout: newLayout,
925197a1ec95 add: some sync (not finished), simplify renderpass af
sam <sam@basx.dev>
parents: 940
diff changeset
95 srcQueueFamilyIndex: VK_QUEUE_FAMILY_IGNORED,
925197a1ec95 add: some sync (not finished), simplify renderpass af
sam <sam@basx.dev>
parents: 940
diff changeset
96 dstQueueFamilyIndex: VK_QUEUE_FAMILY_IGNORED,
925197a1ec95 add: some sync (not finished), simplify renderpass af
sam <sam@basx.dev>
parents: 940
diff changeset
97 image: image.vk,
925197a1ec95 add: some sync (not finished), simplify renderpass af
sam <sam@basx.dev>
parents: 940
diff changeset
98 subresourceRange: VkImageSubresourceRange(
925197a1ec95 add: some sync (not finished), simplify renderpass af
sam <sam@basx.dev>
parents: 940
diff changeset
99 aspectMask: toBits [VK_IMAGE_ASPECT_COLOR_BIT],
925197a1ec95 add: some sync (not finished), simplify renderpass af
sam <sam@basx.dev>
parents: 940
diff changeset
100 baseMipLevel: 0,
925197a1ec95 add: some sync (not finished), simplify renderpass af
sam <sam@basx.dev>
parents: 940
diff changeset
101 levelCount: 1,
925197a1ec95 add: some sync (not finished), simplify renderpass af
sam <sam@basx.dev>
parents: 940
diff changeset
102 baseArrayLayer: 0,
925197a1ec95 add: some sync (not finished), simplify renderpass af
sam <sam@basx.dev>
parents: 940
diff changeset
103 layerCount: 1,
945
b65068f5f246 del: do not use vulkan 1.3 functions to support older hardware
sam <sam@basx.dev>
parents: 943
diff changeset
104 ),
b65068f5f246 del: do not use vulkan 1.3 functions to support older hardware
sam <sam@basx.dev>
parents: 943
diff changeset
105 )
b65068f5f246 del: do not use vulkan 1.3 functions to support older hardware
sam <sam@basx.dev>
parents: 943
diff changeset
106 srcStage: VkPipelineStageFlagBits
b65068f5f246 del: do not use vulkan 1.3 functions to support older hardware
sam <sam@basx.dev>
parents: 943
diff changeset
107 dstStage: VkPipelineStageFlagBits
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
108 if oldLayout == VK_IMAGE_LAYOUT_UNDEFINED and newLayout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:
945
b65068f5f246 del: do not use vulkan 1.3 functions to support older hardware
sam <sam@basx.dev>
parents: 943
diff changeset
109 srcStage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT
b65068f5f246 del: do not use vulkan 1.3 functions to support older hardware
sam <sam@basx.dev>
parents: 943
diff changeset
110 barrier.srcAccessMask = VkAccessFlags(0)
b65068f5f246 del: do not use vulkan 1.3 functions to support older hardware
sam <sam@basx.dev>
parents: 943
diff changeset
111 dstStage = VK_PIPELINE_STAGE_TRANSFER_BIT
b65068f5f246 del: do not use vulkan 1.3 functions to support older hardware
sam <sam@basx.dev>
parents: 943
diff changeset
112 barrier.dstAccessMask = [VK_ACCESS_TRANSFER_WRITE_BIT].toBits
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
113 elif oldLayout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL and newLayout == VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:
945
b65068f5f246 del: do not use vulkan 1.3 functions to support older hardware
sam <sam@basx.dev>
parents: 943
diff changeset
114 srcStage = VK_PIPELINE_STAGE_TRANSFER_BIT
b65068f5f246 del: do not use vulkan 1.3 functions to support older hardware
sam <sam@basx.dev>
parents: 943
diff changeset
115 barrier.srcAccessMask = [VK_ACCESS_TRANSFER_WRITE_BIT].toBits
b65068f5f246 del: do not use vulkan 1.3 functions to support older hardware
sam <sam@basx.dev>
parents: 943
diff changeset
116 dstStage = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT
b65068f5f246 del: do not use vulkan 1.3 functions to support older hardware
sam <sam@basx.dev>
parents: 943
diff changeset
117 barrier.dstAccessMask = [VK_ACCESS_SHADER_READ_BIT].toBits
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
118 else:
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
119 raise newException(Exception, "Unsupported layout transition!")
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
120
1138
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
121 WithSingleUseCommandBuffer(image.device, queue, commandBuffer):
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
122 commandBuffer.PipelineBarrier([srcStage], [dstStage], imageBarriers = [barrier])
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
123
1138
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
124 proc Copy*(src: Buffer, dst: VulkanImage, queue: Queue) =
1139
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
125 assert src.device.vk.Valid
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
126 assert dst.device.vk.Valid
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
127 assert src.device == dst.device
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
128 assert VK_BUFFER_USAGE_TRANSFER_SRC_BIT in src.usage
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
129 assert VK_IMAGE_USAGE_TRANSFER_DST_BIT in dst.usage
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
130
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
131 var region = VkBufferImageCopy(
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
132 bufferOffset: 0,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
133 bufferRowLength: 0,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
134 bufferImageHeight: 0,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
135 imageSubresource: VkImageSubresourceLayers(
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
136 aspectMask: toBits [VK_IMAGE_ASPECT_COLOR_BIT],
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
137 mipLevel: 0,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
138 baseArrayLayer: 0,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
139 layerCount: 1,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
140 ),
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
141 imageOffset: VkOffset3D(x: 0, y: 0, z: 0),
959
c104dbf5bbb8 did: adjust integer sizes to match vulkan API (more) directly
sam <sam@basx.dev>
parents: 958
diff changeset
142 imageExtent: VkExtent3D(width: dst.width, height: dst.height, depth: 1)
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
143 )
1138
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
144 WithSingleUseCommandBuffer(src.device, queue, commandBuffer):
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
145 commandBuffer.vkCmdCopyBufferToImage(
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
146 src.vk,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
147 dst.vk,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
148 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
149 1,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
150 addr region
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
151 )
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
152
1167
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
153 proc CreateImage*(device: Device, width, height, depth: uint32, format: VkFormat, samples: VkSampleCountFlagBits, usage: openArray[VkImageUsageFlagBits]): VulkanImage =
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
154 assert device.vk.Valid
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
155 assert width > 0
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
156 assert height > 0
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
157
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
158 result.device = device
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
159 result.usage = @usage
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
160
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
161
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
162 result.width = width
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
163 result.height = height
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
164 result.depth = depth
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
165 result.format = format
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
166
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
167 var imageInfo = VkImageCreateInfo(
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
168 sType: VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
169 imageType: VK_IMAGE_TYPE_2D,
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
170 extent: VkExtent3D(width: uint32(width), height: uint32(height), depth: 1),
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
171 mipLevels: 1,
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
172 arrayLayers: 1,
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
173 format: result.format,
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
174 tiling: VK_IMAGE_TILING_OPTIMAL,
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
175 initialLayout: VK_IMAGE_LAYOUT_UNDEFINED,
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
176 usage: toBits result.usage,
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
177 sharingMode: VK_SHARING_MODE_EXCLUSIVE,
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
178 samples: samples,
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
179 )
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
180 checkVkResult device.vk.vkCreateImage(addr imageInfo, nil, addr result.vk)
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
181 result.allocateMemory(requireMappable = false, preferVRAM = true, preferAutoFlush = false)
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
182
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
183 # currently only usable for texture access from shader
1167
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
184 proc createTextureImage[T](device: Device, queue: Queue, width, height: uint32, depth: PixelDepth, image: Image[T]): VulkanImage =
1139
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
185 assert device.vk.Valid
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
186 assert width > 0
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
187 assert height > 0
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
188 assert depth != 2
962
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
189
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
190 result.device = device
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
191 result.usage = @[VK_IMAGE_USAGE_TRANSFER_DST_BIT, VK_IMAGE_USAGE_SAMPLED_BIT]
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
192
959
c104dbf5bbb8 did: adjust integer sizes to match vulkan API (more) directly
sam <sam@basx.dev>
parents: 958
diff changeset
193 let size: uint64 = width * height * uint32(depth)
962
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
194 let usageBits = toBits result.usage
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
195 var formatList = DEPTH_FORMAT_MAP[depth]
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
196 var selectedFormat: VkFormat
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
197 var formatProperties = VkImageFormatProperties2(sType: VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2)
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
198
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
199 for format in formatList:
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
200 var formatInfo = VkPhysicalDeviceImageFormatInfo2(
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
201 sType: VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2,
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
202 format: format,
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
203 thetype: VK_IMAGE_TYPE_2D,
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
204 tiling: VK_IMAGE_TILING_OPTIMAL,
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
205 usage: usageBits,
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
206 )
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
207 let formatCheck = device.physicalDevice.vk.vkGetPhysicalDeviceImageFormatProperties2(
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
208 addr formatInfo,
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
209 addr formatProperties,
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
210 )
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
211 if formatCheck == VK_SUCCESS: # found suitable format
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
212 selectedFormat = format
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
213 break
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
214 elif formatCheck == VK_ERROR_FORMAT_NOT_SUPPORTED: # nope, try to find other format
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
215 continue
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
216 else: # raise error
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
217 checkVkResult formatCheck
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
218
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
219 # assumption: images comes in sRGB color space
979
6406766a222d fix: tests
sam <sam@basx.dev>
parents: 962
diff changeset
220 # convert to linear space if there is not support for sRGB
962
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
221 var data = addr image.imagedata[0]
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
222 if selectedFormat in LINEAR_FORMATS:
1137
a4aa9f374d44 did: more renaming
sam <sam@basx.dev>
parents: 979
diff changeset
223 let linearImage = image.AsLinear()
979
6406766a222d fix: tests
sam <sam@basx.dev>
parents: 962
diff changeset
224 data = addr linearImage.imagedata[0]
962
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
225
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
226 assert size <= uint64(formatProperties.imageFormatProperties.maxResourceSize)
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
227 assert width <= uint64(formatProperties.imageFormatProperties.maxExtent.width)
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
228 assert height <= uint64(formatProperties.imageFormatProperties.maxExtent.height)
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
229
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
230 result.width = width
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
231 result.height = height
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
232 result.depth = depth
962
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
233 result.format = selectedFormat
959
c104dbf5bbb8 did: adjust integer sizes to match vulkan API (more) directly
sam <sam@basx.dev>
parents: 958
diff changeset
234
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
235 var imageInfo = VkImageCreateInfo(
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
236 sType: VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
237 imageType: VK_IMAGE_TYPE_2D,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
238 extent: VkExtent3D(width: uint32(width), height: uint32(height), depth: 1),
958
40214e384e2b add: some checks for image creation
sam <sam@basx.dev>
parents: 956
diff changeset
239 mipLevels: min(1'u32, formatProperties.imageFormatProperties.maxMipLevels),
40214e384e2b add: some checks for image creation
sam <sam@basx.dev>
parents: 956
diff changeset
240 arrayLayers: min(1'u32, formatProperties.imageFormatProperties.maxArrayLayers),
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
241 format: result.format,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
242 tiling: VK_IMAGE_TILING_OPTIMAL,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
243 initialLayout: VK_IMAGE_LAYOUT_UNDEFINED,
962
7855746f2d13 add: support for color space conversion, convert color space if srgb is not available for images
sam <sam@basx.dev>
parents: 960
diff changeset
244 usage: usageBits,
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
245 sharingMode: VK_SHARING_MODE_EXCLUSIVE,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
246 samples: VK_SAMPLE_COUNT_1_BIT,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
247 )
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
248 checkVkResult device.vk.vkCreateImage(addr imageInfo, nil, addr result.vk)
902
904e0a827ef3 did: auto-formatting
Sam <sam@basx.dev>
parents: 872
diff changeset
249 result.allocateMemory(requireMappable = false, preferVRAM = true, preferAutoFlush = false)
943
925197a1ec95 add: some sync (not finished), simplify renderpass af
sam <sam@basx.dev>
parents: 940
diff changeset
250 result.transitionImageLayout(queue, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL)
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
251
1138
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
252 var stagingBuffer = device.CreateBuffer(size = size, usage = [VK_BUFFER_USAGE_TRANSFER_SRC_BIT], requireMappable = true, preferVRAM = false, preferAutoFlush = true)
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
253 stagingBuffer.SetData(queue, src = data, size = size)
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
254 stagingBuffer.Copy(result, queue)
943
925197a1ec95 add: some sync (not finished), simplify renderpass af
sam <sam@basx.dev>
parents: 940
diff changeset
255 result.transitionImageLayout(queue, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
1138
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
256 stagingBuffer.Destroy()
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
257
1138
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
258 proc Destroy*(image: var VulkanImage) =
1139
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
259 assert image.device.vk.Valid
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
260 assert image.vk.Valid
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
261 image.device.vk.vkDestroyImage(image.vk, nil)
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
262 if image.memoryAllocated:
1139
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
263 assert image.memory.vk.Valid
1138
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
264 image.memory.Free()
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
265 image = VulkanImage(
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
266 device: image.device,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
267 vk: image.vk,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
268 width: image.width,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
269 height: image.height,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
270 depth: image.depth,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
271 format: image.format,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
272 usage: image.usage,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
273 memoryAllocated: false,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
274 )
1139
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
275 image.vk.Reset
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
276
1138
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
277 proc CreateSampler*(device: Device, sampler: Sampler): VulkanSampler =
1139
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
278 assert device.vk.Valid
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
279 var samplerInfo = VkSamplerCreateInfo(
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
280 sType: VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
281 magFilter: sampler.magnification,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
282 minFilter: sampler.minification,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
283 addressModeU: sampler.wrapModeS,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
284 addressModeV: sampler.wrapModeT,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
285 addressModeW: VK_SAMPLER_ADDRESS_MODE_REPEAT,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
286 anisotropyEnable: device.enabledFeatures.samplerAnisotropy,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
287 maxAnisotropy: device.physicalDevice.properties.limits.maxSamplerAnisotropy,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
288 borderColor: VK_BORDER_COLOR_INT_OPAQUE_BLACK,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
289 unnormalizedCoordinates: VK_FALSE,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
290 compareEnable: VK_FALSE,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
291 compareOp: VK_COMPARE_OP_ALWAYS,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
292 mipmapMode: VK_SAMPLER_MIPMAP_MODE_LINEAR,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
293 mipLodBias: 0,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
294 minLod: 0,
940
459066429a72 fix: last commit was actually only relevant for ARM, also adjust validation outputs
sam <sam@basx.dev>
parents: 939
diff changeset
295 maxLod: 0,
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
296 )
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
297 result.device = device
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
298 checkVkResult device.vk.vkCreateSampler(addr samplerInfo, nil, addr result.vk)
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
299
1138
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
300 proc Destroy*(sampler: var VulkanSampler) =
1139
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
301 assert sampler.device.vk.Valid
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
302 assert sampler.vk.Valid
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
303 sampler.device.vk.vkDestroySampler(sampler.vk, nil)
1139
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
304 sampler.vk.Reset
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
305
1138
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
306 proc CreateImageView*(
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
307 image: VulkanImage,
902
904e0a827ef3 did: auto-formatting
Sam <sam@basx.dev>
parents: 872
diff changeset
308 imageviewtype = VK_IMAGE_VIEW_TYPE_2D,
904e0a827ef3 did: auto-formatting
Sam <sam@basx.dev>
parents: 872
diff changeset
309 baseMipLevel = 0'u32,
904e0a827ef3 did: auto-formatting
Sam <sam@basx.dev>
parents: 872
diff changeset
310 levelCount = 1'u32,
904e0a827ef3 did: auto-formatting
Sam <sam@basx.dev>
parents: 872
diff changeset
311 baseArrayLayer = 0'u32,
904e0a827ef3 did: auto-formatting
Sam <sam@basx.dev>
parents: 872
diff changeset
312 layerCount = 1'u32
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
313 ): ImageView =
1139
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
314 assert image.device.vk.Valid
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
315 assert image.vk.Valid
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
316
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
317 var createInfo = VkImageViewCreateInfo(
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
318 sType: VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
319 image: image.vk,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
320 viewType: imageviewtype,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
321 format: image.format,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
322 components: VkComponentMapping(
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
323 r: VK_COMPONENT_SWIZZLE_IDENTITY,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
324 g: VK_COMPONENT_SWIZZLE_IDENTITY,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
325 b: VK_COMPONENT_SWIZZLE_IDENTITY,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
326 a: VK_COMPONENT_SWIZZLE_IDENTITY,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
327 ),
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
328 subresourceRange: VkImageSubresourceRange(
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
329 aspectMask: VkImageAspectFlags(VK_IMAGE_ASPECT_COLOR_BIT),
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
330 baseMipLevel: baseMipLevel,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
331 levelCount: levelCount,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
332 baseArrayLayer: baseArrayLayer,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
333 layerCount: layerCount,
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
334 ),
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
335 )
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
336 result.image = image
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
337 checkVkResult image.device.vk.vkCreateImageView(addr(createInfo), nil, addr(result.vk))
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
338
1138
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
339 proc Destroy*(imageview: var ImageView) =
1139
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
340 assert imageview.image.device.vk.Valid
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
341 assert imageview.vk.Valid
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
342 imageview.image.device.vk.vkDestroyImageView(imageview.vk, nil)
1139
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
343 imageview.vk.Reset()
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
344
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
345 func `$`*(texture: VulkanTexture): string =
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
346 &"VulkanTexture({texture.image.width}x{texture.image.height})"
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
347
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
348
1138
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
349 proc UploadTexture*(device: Device, queue: Queue, texture: Texture): VulkanTexture =
1139
114f395b9144 did: finish refactoring and updated all tests accordingly
sam <sam@basx.dev>
parents: 1138
diff changeset
350 assert device.vk.Valid
872
1ee397815b0b did: image & font refactoring, add texture-atlas-packing
Sam <sam@basx.dev>
parents: 840
diff changeset
351 if texture.isGrayscale:
1167
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
352 result.image = createTextureImage(device = device, queue = queue, width = texture.grayImage.width, height = texture.grayImage.height, depth = 1, image = texture.grayImage)
872
1ee397815b0b did: image & font refactoring, add texture-atlas-packing
Sam <sam@basx.dev>
parents: 840
diff changeset
353 else:
1167
cdf7ec8d04d2 add: MSAA, yipieee
sam <sam@basx.dev>
parents: 1139
diff changeset
354 result.image = createTextureImage(device = device, queue = queue, width = texture.colorImage.width, height = texture.colorImage.height, depth = 4, image = texture.colorImage)
1138
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
355 result.imageView = result.image.CreateImageView()
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
356 result.sampler = result.image.device.CreateSampler(texture.sampler)
840
44ec744fbedc did: package restructuring according to nimble recommendation for libraries
Sam <sam@basx.dev>
parents:
diff changeset
357
1138
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
358 proc Destroy*(texture: var VulkanTexture) =
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
359 texture.image.Destroy()
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
360 texture.imageView.Destroy()
02e1d2658ff5 did: more renaming
sam <sam@basx.dev>
parents: 1137
diff changeset
361 texture.sampler.Destroy()