Mercurial > games > semicongine
comparison test1.nim @ 1202:a8864fe6fe6e compiletime-tests
add: descriptor sets binding n stuff
| author | sam <sam@basx.dev> |
|---|---|
| date | Mon, 15 Jul 2024 00:04:33 +0700 |
| parents | d4a206b5e5b0 |
| children | e2901100a596 |
comparison
equal
deleted
inserted
replaced
| 1201:d4a206b5e5b0 | 1202:a8864fe6fe6e |
|---|---|
| 27 settings: GPUValue[ShaderSettings, UniformBuffer] | 27 settings: GPUValue[ShaderSettings, UniformBuffer] |
| 28 | 28 |
| 29 ShaderA = object | 29 ShaderA = object |
| 30 # vertex input | 30 # vertex input |
| 31 position {.VertexAttribute.}: Vec3f | 31 position {.VertexAttribute.}: Vec3f |
| 32 objPosition {.InstanceAttribute.}: Vec3f | 32 # objPosition {.InstanceAttribute.}: Vec3f |
| 33 rotation {.InstanceAttribute.}: Vec4f | 33 # rotation {.InstanceAttribute.}: Vec4f |
| 34 # intermediate | 34 # intermediate |
| 35 test {.Pass.}: float32 | 35 test {.Pass.}: float32 |
| 36 test1 {.PassFlat.}: Vec3f | 36 test1 {.PassFlat.}: Vec3f |
| 37 # output | 37 # output |
| 38 color {.ShaderOutput.}: Vec4f | 38 color {.ShaderOutput.}: Vec4f |
| 39 # descriptor sets | 39 # descriptor sets |
| 40 globals: DescriptorSet[GlobalsA, GlobalSet] | 40 globals: DescriptorSet[GlobalsA, GlobalSet] |
| 41 uniforms: DescriptorSet[UniformsA, MaterialSet] | 41 uniforms: DescriptorSet[UniformsA, MaterialSet] |
| 42 # code | 42 # code |
| 43 vertexCode: string = "void main() {}" | 43 vertexCode: string = """void main() { |
| 44 fragmentCode: string = "void main() {}" | 44 gl_Position = vec4(position, 1); |
| 45 | 45 }""" |
| 46 let frameWidth = 100'u32 | 46 fragmentCode: string = """void main() { |
| 47 let frameHeight = 100'u32 | 47 color = vec4(1, 0, 0, 1); |
| 48 }""" | |
| 48 | 49 |
| 49 var myMesh1 = MeshA( | 50 var myMesh1 = MeshA( |
| 50 position: GPUArray[Vec3f, VertexBuffer](data: @[NewVec3f(0, 0, ), NewVec3f(0, 0, ), NewVec3f(0, 0, )]), | 51 position: GPUArray[Vec3f, VertexBuffer](data: @[NewVec3f(-0.5, 0.5, ), NewVec3f(0, -0.5, ), NewVec3f(0.5, 0.5, )]), |
| 52 indices: GPUArray[uint16, IndexBuffer](data: @[0'u16, 1'u16, 2'u16]) | |
| 51 ) | 53 ) |
| 52 var uniforms1 = DescriptorSet[UniformsA, MaterialSet]( | 54 var uniforms1 = DescriptorSet[UniformsA, MaterialSet]( |
| 53 data: UniformsA( | 55 data: UniformsA( |
| 54 defaultTexture: Texture[TVec4[uint8]](width: 1, height: 1, data: @[TVec4[uint8]([0'u8, 0'u8, 0'u8, 1'u8])]), | 56 defaultTexture: Texture[TVec4[uint8]](width: 1, height: 1, data: @[TVec4[uint8]([0'u8, 0'u8, 0'u8, 1'u8])]), |
| 55 materials: GPUValue[array[3, MaterialA], UniformBuffer](data: [ | 57 materials: GPUValue[array[3, MaterialA], UniformBuffer](data: [ |
| 74 settings: GPUValue[ShaderSettings, UniformBuffer](data: ShaderSettings(gamma: 1.0)) | 76 settings: GPUValue[ShaderSettings, UniformBuffer](data: ShaderSettings(gamma: 1.0)) |
| 75 ) | 77 ) |
| 76 ) | 78 ) |
| 77 | 79 |
| 78 let mainRenderpass = CreatePresentationRenderPass() | 80 let mainRenderpass = CreatePresentationRenderPass() |
| 79 var swapchainResult = InitSwapchain(renderpass = mainRenderpass) | 81 var swapchain = InitSwapchain(renderpass = mainRenderpass).get() |
| 80 | |
| 81 assert swapchainResult.isSome() | |
| 82 var swapchain = swapchainResult.get() | |
| 83 | |
| 84 # shaders | |
| 85 var pipeline1 = CreatePipeline[ShaderA](renderPass = mainRenderpass) | 82 var pipeline1 = CreatePipeline[ShaderA](renderPass = mainRenderpass) |
| 86 | 83 |
| 87 var renderdata = InitRenderData() | 84 var renderdata = InitRenderData() |
| 88 | 85 |
| 89 # buffer assignment | 86 # buffer assignment |
| 109 echo "Writing descriptors" | 106 echo "Writing descriptors" |
| 110 InitDescriptorSet(renderdata, pipeline1.GetLayoutFor(GlobalSet), myGlobals) | 107 InitDescriptorSet(renderdata, pipeline1.GetLayoutFor(GlobalSet), myGlobals) |
| 111 InitDescriptorSet(renderdata, pipeline1.GetLayoutFor(MaterialSet), uniforms1) | 108 InitDescriptorSet(renderdata, pipeline1.GetLayoutFor(MaterialSet), uniforms1) |
| 112 | 109 |
| 113 | 110 |
| 114 # start command buffer | 111 # main loop |
| 115 var t = getMonoTime() | 112 var t = getMonoTime() |
| 116 while UpdateInputs(): | 113 while UpdateInputs(): |
| 117 WithNextFrame(swapchain, framebuffer, commandbuffer): | 114 WithNextFrame(swapchain, framebuffer, commandbuffer): |
| 118 WithRenderPass(mainRenderpass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(1, 0, 0, 0)): | 115 WithRenderPass(mainRenderpass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): |
| 119 vkCmdBindPipeline(commandbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline1.vk) | 116 WithPipeline(commandbuffer, pipeline1): |
| 117 WithBind(commandBuffer, myGlobals, uniforms1, pipeline1, swapchain.currentFiF.int): | |
| 118 Render( | |
| 119 commandbuffer = commandbuffer, | |
| 120 pipeline = pipeline1, | |
| 121 globalSet = myGlobals, | |
| 122 materialSet = uniforms1, | |
| 123 mesh = myMesh1, | |
| 124 # instances = instances1, | |
| 125 ) | |
| 126 echo (getMonoTime() - t).inMicroseconds.float / 1000.0 | |
| 127 t = getMonoTime() | |
| 120 | 128 |
| 121 Render( | 129 # cleanup |
| 122 commandbuffer = commandbuffer, | |
| 123 pipeline = pipeline1, | |
| 124 globalSet = myGlobals, | |
| 125 materialSet = uniforms1, | |
| 126 mesh = myMesh1, | |
| 127 instances = instances1, | |
| 128 ) | |
| 129 echo (getMonoTime() - t).inMicroseconds.float / 1000.0 | |
| 130 t = getMonoTime() | |
| 131 | |
| 132 checkVkResult vkDeviceWaitIdle(vulkan.device) | 130 checkVkResult vkDeviceWaitIdle(vulkan.device) |
| 133 DestroyPipeline(pipeline1) | 131 DestroyPipeline(pipeline1) |
| 134 vkDestroyRenderPass(vulkan.device, mainRenderpass, nil) | 132 vkDestroyRenderPass(vulkan.device, mainRenderpass, nil) |
| 135 DestroyRenderData(renderdata) | 133 DestroyRenderData(renderdata) |
| 136 DestroySwapchain(swapchain) | 134 DestroySwapchain(swapchain) |
