comparison static_utils.nim @ 1172:2e0b527c2753 compiletime-tests

merge?
author sam <sam@basx.dev>
date Thu, 27 Jun 2024 20:52:50 +0700
parents 58694b30b9cb
children fafc2f14da0b
comparison
equal deleted inserted replaced
1171:dc6e1660831d 1172:2e0b527c2753
214 of None: VK_INDEX_TYPE_NONE_KHR 214 of None: VK_INDEX_TYPE_NONE_KHR
215 of UInt8: VK_INDEX_TYPE_UINT8_EXT 215 of UInt8: VK_INDEX_TYPE_UINT8_EXT
216 of UInt16: VK_INDEX_TYPE_UINT16 216 of UInt16: VK_INDEX_TYPE_UINT16
217 of UInt32: VK_INDEX_TYPE_UINT32 217 of UInt32: VK_INDEX_TYPE_UINT32
218 218
219 proc CreateRenderPass*(
220 device: VkDevice,
221 format: VkFormat,
222 ): VkRenderPass =
223
224 var
225 attachments = @[VkAttachmentDescription(
226 format: format,
227 samples: VK_SAMPLE_COUNT_1_BIT,
228 loadOp: VK_ATTACHMENT_LOAD_OP_CLEAR,
229 storeOp: VK_ATTACHMENT_STORE_OP_STORE,
230 stencilLoadOp: VK_ATTACHMENT_LOAD_OP_DONT_CARE,
231 stencilStoreOp: VK_ATTACHMENT_STORE_OP_DONT_CARE,
232 initialLayout: VK_IMAGE_LAYOUT_UNDEFINED,
233 finalLayout: VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
234 )]
235 dependencies = @[VkSubpassDependency(
236 srcSubpass: VK_SUBPASS_EXTERNAL,
237 dstSubpass: 0,
238 srcStageMask: toBits [VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT],
239 srcAccessMask: toBits [VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT],
240 dstStageMask: toBits [VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT],
241 dstAccessMask: toBits [VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT],
242 )]
243 outputs = @[
244 VkAttachmentReference(
245 attachment: 0,
246 layout: VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
247 )
248 ]
249
250 var subpassesList = [
251 VkSubpassDescription(
252 flags: VkSubpassDescriptionFlags(0),
253 pipelineBindPoint: VK_PIPELINE_BIND_POINT_GRAPHICS,
254 inputAttachmentCount: 0,
255 pInputAttachments: nil,
256 colorAttachmentCount: uint32(outputs.len),
257 pColorAttachments: outputs.ToCPointer,
258 pResolveAttachments: nil,
259 pDepthStencilAttachment: nil,
260 preserveAttachmentCount: 0,
261 pPreserveAttachments: nil,
262 )
263 ]
264
265 var createInfo = VkRenderPassCreateInfo(
266 sType: VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
267 attachmentCount: uint32(attachments.len),
268 pAttachments: attachments.ToCPointer,
269 subpassCount: uint32(subpassesList.len),
270 pSubpasses: subpassesList.ToCPointer,
271 dependencyCount: uint32(dependencies.len),
272 pDependencies: dependencies.ToCPointer,
273 )
274 checkVkResult device.vkCreateRenderPass(addr(createInfo), nil, addr(result))
275
219 proc compileGlslToSPIRV(stage: VkShaderStageFlagBits, shaderSource: string): seq[uint32] {.compileTime.} = 276 proc compileGlslToSPIRV(stage: VkShaderStageFlagBits, shaderSource: string): seq[uint32] {.compileTime.} =
220 func stage2string(stage: VkShaderStageFlagBits): string {.compileTime.} = 277 func stage2string(stage: VkShaderStageFlagBits): string {.compileTime.} =
221 case stage 278 case stage
222 of VK_SHADER_STAGE_VERTEX_BIT: "vert" 279 of VK_SHADER_STAGE_VERTEX_BIT: "vert"
223 of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT: "tesc" 280 of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT: "tesc"
551 ) 608 )
552 checkVkResult vkAllocateDescriptorSets(device, addr(allocInfo), result.descriptorSets.ToCPointer) 609 checkVkResult vkAllocateDescriptorSets(device, addr(allocInfo), result.descriptorSets.ToCPointer)
553 610
554 # write descriptor sets 611 # write descriptor sets
555 # TODO 612 # TODO
613 #[
556 var descriptorSetWrites: seq[VkWriteDescriptorSet] 614 var descriptorSetWrites: seq[VkWriteDescriptorSet]
557 for XY in descriptors?: 615 for XY in descriptors?:
558 616
559 bufferInfos.add VkDescriptorBufferInfo( 617 bufferInfos.add VkDescriptorBufferInfo(
560 buffer: descriptor.buffer.vk, 618 buffer: descriptor.buffer.vk,
561 offset: descriptor.offset, 619 offset: descriptor.offset,
562 range: descriptor.size, 620 range: descriptor.size,
563 ) 621 )
564 descriptorSetWrites.add VkWriteDescriptorSet( 622 descriptorSetWrites.add VkWriteDescriptorSet(
565 sType: VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, 623 sType: VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
566 dstSet: descriptorSet.vk, 624 dstSet: descriptorSet.vk,
567 dstBinding: i, 625 dstBinding: i,
568 dstArrayElement: 0, 626 dstArrayElement: 0,
569 descriptorType: descriptor.vkType, 627 descriptorType: descriptor.vkType,
570 descriptorCount: uint32(descriptor.count), 628 descriptorCount: uint32(descriptor.count),
571 pBufferInfo: addr bufferInfos[^1], 629 pBufferInfo: addr bufferInfos[^1],
572 ) 630 )
573 631 vkUpdateDescriptorSets(device, uint32(descriptorSetWrites.len), descriptorSetWrites.ToCPointer, 0, nil)
574 vkUpdateDescriptorSets(device, uint32(descriptorSetWrites.len), descriptorSetWrites.ToCPointer, 0, nil) 632 ]#
633
575 634
576 proc CreateRenderable[TMesh, TInstance]( 635 proc CreateRenderable[TMesh, TInstance](
577 mesh: TMesh, 636 mesh: TMesh,
578 instance: TInstance, 637 instance: TInstance,
579 buffers: RenderBuffers, 638 buffers: RenderBuffers,
580 ): Renderable[TMesh, TInstance] = 639 ): Renderable[TMesh, TInstance] =
581 result.indexType = None 640 result.indexType = None
582 641
583 proc Bind(pipeline: Pipeline, commandBuffer: VkCommandBuffer, currentFrameInFlight: int) = 642 proc Bind[T](pipeline: Pipeline[T], commandBuffer: VkCommandBuffer, currentFrameInFlight: int) =
643 let a = pipeline.descriptorSets
644 echo a[^currentFrameInFlight]
584 commandBuffer.vkCmdBindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline.pipeline) 645 commandBuffer.vkCmdBindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline.pipeline)
585 if pipeline.descriptorSets[currentFrameInFlight] != VkDescriptorSet(0): 646 if a[currentFrameInFlight] != VkDescriptorSet(0):
586 commandBuffer.vkCmdBindDescriptorSets( 647 commandBuffer.vkCmdBindDescriptorSets(
587 VK_PIPELINE_BIND_POINT_GRAPHICS, 648 VK_PIPELINE_BIND_POINT_GRAPHICS,
588 pipeline.layout, 649 pipeline.layout,
589 0, 650 0,
590 1, 651 1,
680 when isMainModule: 741 when isMainModule:
681 import semicongine/platform/window 742 import semicongine/platform/window
682 import semicongine/vulkan/instance 743 import semicongine/vulkan/instance
683 import semicongine/vulkan/device 744 import semicongine/vulkan/device
684 import semicongine/vulkan/physicaldevice 745 import semicongine/vulkan/physicaldevice
685 import semicongine/vulkan/renderpass 746 # import semicongine/vulkan/renderpass
686 import semicongine/vulkan/commandbuffer 747 import semicongine/vulkan/commandbuffer
687 import std/options 748 import std/options
688 749
689 type 750 type
690 MaterialA = object 751 MaterialA = object
745 const shader = ShaderA() 806 const shader = ShaderA()
746 let shaderObject = d.vk.CompileShader(shader) 807 let shaderObject = d.vk.CompileShader(shader)
747 let rp = d.vk.CreateRenderPass(d.physicalDevice.GetSurfaceFormats().FilterSurfaceFormat().format) 808 let rp = d.vk.CreateRenderPass(d.physicalDevice.GetSurfaceFormats().FilterSurfaceFormat().format)
748 var p = CreatePipeline(d.vk, renderPass = rp, shaderObject) 809 var p = CreatePipeline(d.vk, renderPass = rp, shaderObject)
749 810
750 let commandBufferPool = d.CreateCommandBufferPool(d.FirstGraphicsQueue().get().family, INFLIGHTFRAMES) 811 let commandBufferPool = d.CreateCommandBufferPool(d.FirstGraphicsQueue().get().family, INFLIGHTFRAMES.int)
751 let cmd = commandBufferPool.buffers[0] 812 let cmd = commandBufferPool.buffers[0]
752 813
753 checkVkResult cmd.vkResetCommandBuffer(VkCommandBufferResetFlags(0)) 814 checkVkResult cmd.vkResetCommandBuffer(VkCommandBufferResetFlags(0))
754 let beginInfo = VkCommandBufferBeginInfo( 815 let beginInfo = VkCommandBufferBeginInfo(
755 sType: VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, 816 sType: VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
756 flags: VkCommandBufferUsageFlags(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT), 817 flags: VkCommandBufferUsageFlags(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT),
757 ) 818 )
758 checkVkResult cmd.vkBeginCommandBuffer(addr(beginInfo)) 819 checkVkResult cmd.vkBeginCommandBuffer(addr(beginInfo))
759 p.Bind(cmd, currentFrameInFlight = 0) 820 Bind(p, cmd, currentFrameInFlight = 0)
760 p.Render(r, g, cmd) 821 Render(p, r, g, cmd)
761 822
762 checkVkResult cmd.vkEndCommandBuffer() 823 checkVkResult cmd.vkEndCommandBuffer()