comparison semiconginev2/old/vulkan/renderpass.nim.orig @ 1218:56781cc0fc7c compiletime-tests

did: renamge main package
author sam <sam@basx.dev>
date Wed, 17 Jul 2024 21:01:37 +0700
parents semicongine/old/vulkan/renderpass.nim.orig@a3eb305bcac2
children
comparison
equal deleted inserted replaced
1217:f819a874058f 1218:56781cc0fc7c
1 import ../core
2 import ./framebuffer
3
4 proc CreateRenderPass*(
5 device: VkDevice,
6 format: VkFormat,
7 ): VkRenderPass =
8
9 var
10 attachments = @[VkAttachmentDescription(
11 format: format,
12 samples: VK_SAMPLE_COUNT_1_BIT,
13 loadOp: VK_ATTACHMENT_LOAD_OP_CLEAR,
14 storeOp: VK_ATTACHMENT_STORE_OP_STORE,
15 stencilLoadOp: VK_ATTACHMENT_LOAD_OP_DONT_CARE,
16 stencilStoreOp: VK_ATTACHMENT_STORE_OP_DONT_CARE,
17 initialLayout: VK_IMAGE_LAYOUT_UNDEFINED,
18 finalLayout: VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
19 )]
20 # dependencies seems to be optional, TODO: benchmark difference
21 dependencies = @[VkSubpassDependency(
22 srcSubpass: VK_SUBPASS_EXTERNAL,
23 dstSubpass: 0,
24 srcStageMask: toBits [VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT],
25 srcAccessMask: VkAccessFlags(0),
26 dstStageMask: toBits [VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT],
27 dstAccessMask: toBits [VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT],
28 )]
29 outputs = @[
30 VkAttachmentReference(
31 attachment: 0,
32 layout: VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
33 )
34 ]
35
36 var subpassesList = [
37 VkSubpassDescription(
38 flags: VkSubpassDescriptionFlags(0),
39 pipelineBindPoint: VK_PIPELINE_BIND_POINT_GRAPHICS,
40 inputAttachmentCount: 0,
41 pInputAttachments: nil,
42 colorAttachmentCount: uint32(outputs.len),
43 pColorAttachments: outputs.ToCPointer,
44 pResolveAttachments: nil,
45 pDepthStencilAttachment: nil,
46 preserveAttachmentCount: 0,
47 pPreserveAttachments: nil,
48 )
49 ]
50
51 var createInfo = VkRenderPassCreateInfo(
52 sType: VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
53 attachmentCount: uint32(attachments.len),
54 pAttachments: attachments.ToCPointer,
55 subpassCount: uint32(subpassesList.len),
56 pSubpasses: subpassesList.ToCPointer,
57 dependencyCount: uint32(dependencies.len),
58 pDependencies: dependencies.ToCPointer,
59 )
60 checkVkResult device.vkCreateRenderPass(addr(createInfo), nil, addr(result))
61
62 proc BeginRenderCommands*(commandBuffer: VkCommandBuffer, renderpass: VkRenderPass, framebuffer: Framebuffer, oneTimeSubmit: bool, clearColor: Vec4f) =
63 assert commandBuffer.Valid
64 assert framebuffer.vk.Valid
65 let
66 w = framebuffer.dimension.x
67 h = framebuffer.dimension.y
68
69 var clearColors = [VkClearValue(color: VkClearColorValue(float32: clearColor))]
70 var
71 beginInfo = VkCommandBufferBeginInfo(
72 sType: VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
73 pInheritanceInfo: nil,
74 flags: if oneTimeSubmit: VkCommandBufferUsageFlags(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT) else: VkCommandBufferUsageFlags(0),
75 )
76 renderPassInfo = VkRenderPassBeginInfo(
77 sType: VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
78 renderPass: renderpass,
79 framebuffer: framebuffer.vk,
80 renderArea: VkRect2D(
81 offset: VkOffset2D(x: 0, y: 0),
82 extent: VkExtent2D(width: w, height: h),
83 ),
84 clearValueCount: uint32(clearColors.len),
85 pClearValues: clearColors.ToCPointer(),
86 )
87 viewport = VkViewport(
88 x: 0.0,
89 y: 0.0,
90 width: (float)w,
91 height: (float)h,
92 minDepth: 0.0,
93 maxDepth: 1.0,
94 )
95 scissor = VkRect2D(
96 offset: VkOffset2D(x: 0, y: 0),
97 extent: VkExtent2D(width: w, height: h)
98 )
99 checkVkResult commandBuffer.vkResetCommandBuffer(VkCommandBufferResetFlags(0))
100 checkVkResult commandBuffer.vkBeginCommandBuffer(addr(beginInfo))
101 commandBuffer.vkCmdBeginRenderPass(addr(renderPassInfo), VK_SUBPASS_CONTENTS_INLINE)
102 commandBuffer.vkCmdSetViewport(firstViewport = 0, viewportCount = 1, addr(viewport))
103 commandBuffer.vkCmdSetScissor(firstScissor = 0, scissorCount = 1, addr(scissor))
104
105 proc EndRenderCommands*(commandBuffer: VkCommandBuffer) =
106 commandBuffer.vkCmdEndRenderPass()
107 checkVkResult commandBuffer.vkEndCommandBuffer()