Mercurial > games > semicongine
comparison tests/test_rendering.nim @ 1217:f819a874058f compiletime-tests
merge
| author | sam <sam@basx.dev> |
|---|---|
| date | Wed, 17 Jul 2024 21:00:54 +0700 |
| parents | 04e446a7eb2b |
| children | 55896320c8bf |
comparison
equal
deleted
inserted
replaced
| 1216:8b5558b29387 | 1217:f819a874058f |
|---|---|
| 5 | 5 |
| 6 var | 6 var |
| 7 mainRenderpass: VkRenderPass | 7 mainRenderpass: VkRenderPass |
| 8 swapchain: Swapchain | 8 swapchain: Swapchain |
| 9 | 9 |
| 10 proc test_01_triangle(nFrames: int) = | 10 proc test_01_triangle(nFrames: int, renderPass: VkRenderPass, samples = VK_SAMPLE_COUNT_1_BIT) = |
| 11 var renderdata = InitRenderData() | 11 var renderdata = InitRenderData() |
| 12 | 12 |
| 13 type | 13 type |
| 14 TrianglShader = object | 14 TrianglShader = object |
| 15 position {.VertexAttribute.}: Vec3f | 15 position {.VertexAttribute.}: Vec3f |
| 31 ) | 31 ) |
| 32 AssignBuffers(renderdata, mesh) | 32 AssignBuffers(renderdata, mesh) |
| 33 renderdata.FlushAllMemory() | 33 renderdata.FlushAllMemory() |
| 34 | 34 |
| 35 var | 35 var |
| 36 pipeline = CreatePipeline[TrianglShader](renderPass = mainRenderpass, samples = swapchain.samples) | 36 pipeline = CreatePipeline[TrianglShader](renderPass = renderPass, samples = samples) |
| 37 | 37 |
| 38 var c = 0 | 38 var c = 0 |
| 39 while UpdateInputs() and c < nFrames: | 39 while UpdateInputs() and c < nFrames: |
| 40 WithNextFrame(swapchain, framebuffer, commandbuffer): | 40 WithNextFrame(swapchain, framebuffer, commandbuffer): |
| 41 WithRenderPass(mainRenderpass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): | 41 WithRenderPass(renderPass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): |
| 42 WithPipeline(commandbuffer, pipeline): | 42 WithPipeline(commandbuffer, pipeline): |
| 43 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh) | 43 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh) |
| 44 inc c | 44 inc c |
| 45 | 45 |
| 46 # cleanup | 46 # cleanup |
| 47 checkVkResult vkDeviceWaitIdle(vulkan.device) | 47 checkVkResult vkDeviceWaitIdle(vulkan.device) |
| 48 DestroyPipeline(pipeline) | 48 DestroyPipeline(pipeline) |
| 49 DestroyRenderData(renderdata) | 49 DestroyRenderData(renderdata) |
| 50 | 50 |
| 51 | 51 |
| 52 proc test_02_triangle_quad_instanced(nFrames: int) = | 52 proc test_02_triangle_quad_instanced(nFrames: int, renderPass: VkRenderPass, samples = VK_SAMPLE_COUNT_1_BIT) = |
| 53 var renderdata = InitRenderData() | 53 var renderdata = InitRenderData() |
| 54 | 54 |
| 55 type | 55 type |
| 56 SomeShader = object | 56 SomeShader = object |
| 57 position {.VertexAttribute.}: Vec3f | 57 position {.VertexAttribute.}: Vec3f |
| 99 AssignBuffers(renderdata, quad) | 99 AssignBuffers(renderdata, quad) |
| 100 AssignBuffers(renderdata, instancesA) | 100 AssignBuffers(renderdata, instancesA) |
| 101 AssignBuffers(renderdata, instancesB) | 101 AssignBuffers(renderdata, instancesB) |
| 102 renderdata.FlushAllMemory() | 102 renderdata.FlushAllMemory() |
| 103 | 103 |
| 104 var pipeline = CreatePipeline[SomeShader](renderPass = mainRenderpass, samples = swapchain.samples) | 104 var pipeline = CreatePipeline[SomeShader](renderPass = renderPass, samples = samples) |
| 105 | 105 |
| 106 var c = 0 | 106 var c = 0 |
| 107 while UpdateInputs() and c < nFrames: | 107 while UpdateInputs() and c < nFrames: |
| 108 WithNextFrame(swapchain, framebuffer, commandbuffer): | 108 WithNextFrame(swapchain, framebuffer, commandbuffer): |
| 109 WithRenderPass(mainRenderpass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): | 109 WithRenderPass(renderPass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): |
| 110 WithPipeline(commandbuffer, pipeline): | 110 WithPipeline(commandbuffer, pipeline): |
| 111 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad, instances = instancesA) | 111 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad, instances = instancesA) |
| 112 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad, instances = instancesB) | 112 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad, instances = instancesB) |
| 113 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = tri, instances = instancesA) | 113 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = tri, instances = instancesA) |
| 114 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = tri, instances = instancesB) | 114 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = tri, instances = instancesB) |
| 117 # cleanup | 117 # cleanup |
| 118 checkVkResult vkDeviceWaitIdle(vulkan.device) | 118 checkVkResult vkDeviceWaitIdle(vulkan.device) |
| 119 DestroyPipeline(pipeline) | 119 DestroyPipeline(pipeline) |
| 120 DestroyRenderData(renderdata) | 120 DestroyRenderData(renderdata) |
| 121 | 121 |
| 122 proc test_03_simple_descriptorset(nFrames: int) = | 122 proc test_03_simple_descriptorset(nFrames: int, renderPass: VkRenderPass, samples = VK_SAMPLE_COUNT_1_BIT) = |
| 123 var renderdata = InitRenderData() | 123 var renderdata = InitRenderData() |
| 124 | 124 |
| 125 type | 125 type |
| 126 Material = object | 126 Material = object |
| 127 baseColor: Vec3f | 127 baseColor: Vec3f |
| 128 | 128 |
| 129 Uniforms = object | 129 Uniforms = object |
| 130 material: GPUValue[Material, UniformBuffer] | 130 material: GPUValue[Material, UniformBuffer] |
| 131 texture1: Texture[TVec3[uint8]] | 131 texture1: Texture[TVec4[uint8]] |
| 132 | 132 |
| 133 QuadShader = object | 133 QuadShader = object |
| 134 position {.VertexAttribute.}: Vec3f | 134 position {.VertexAttribute.}: Vec3f |
| 135 fragmentColor {.Pass.}: Vec3f | 135 fragmentColor {.Pass.}: Vec3f |
| 136 uv {.Pass.}: Vec2f | 136 uv {.Pass.}: Vec2f |
| 147 outColor = vec4(fragmentColor, 1) * texture(texture1, uv);}""" | 147 outColor = vec4(fragmentColor, 1) * texture(texture1, uv);}""" |
| 148 QuadMesh = object | 148 QuadMesh = object |
| 149 position: GPUArray[Vec3f, VertexBuffer] | 149 position: GPUArray[Vec3f, VertexBuffer] |
| 150 indices: GPUArray[uint16, IndexBuffer] | 150 indices: GPUArray[uint16, IndexBuffer] |
| 151 | 151 |
| 152 let R = TVec3[uint8]([255'u8, 0'u8, 0'u8]) | 152 let R = TVec4[uint8]([255'u8, 0'u8, 0'u8, 255'u8]) |
| 153 let G = TVec3[uint8]([0'u8, 255'u8, 0'u8]) | 153 let G = TVec4[uint8]([0'u8, 255'u8, 0'u8, 255'u8]) |
| 154 let B = TVec3[uint8]([0'u8, 0'u8, 255'u8]) | 154 let B = TVec4[uint8]([0'u8, 0'u8, 255'u8, 255'u8]) |
| 155 let W = TVec3[uint8]([255'u8, 255'u8, 255'u8]) | 155 let W = TVec4[uint8]([255'u8, 255'u8, 255'u8, 255'u8]) |
| 156 var | 156 var |
| 157 quad = QuadMesh( | 157 quad = QuadMesh( |
| 158 position: asGPUArray([NewVec3f(-0.5, -0.5), NewVec3f(-0.5, 0.5), NewVec3f(0.5, 0.5), NewVec3f(0.5, -0.5)], VertexBuffer), | 158 position: asGPUArray([NewVec3f(-0.5, -0.5), NewVec3f(-0.5, 0.5), NewVec3f(0.5, 0.5), NewVec3f(0.5, -0.5)], VertexBuffer), |
| 159 indices: asGPUArray([0'u16, 1'u16, 2'u16, 2'u16, 3'u16, 0'u16], IndexBuffer), | 159 indices: asGPUArray([0'u16, 1'u16, 2'u16, 2'u16, 3'u16, 0'u16], IndexBuffer), |
| 160 ) | 160 ) |
| 161 uniforms1 = asDescriptorSet( | 161 uniforms1 = asDescriptorSet( |
| 162 Uniforms( | 162 Uniforms( |
| 163 material: asGPUValue(Material(baseColor: NewVec3f(1, 1, 1)), UniformBuffer), | 163 material: asGPUValue(Material(baseColor: NewVec3f(1, 1, 1)), UniformBuffer), |
| 164 texture1: Texture[TVec3[uint8]](width: 3, height: 3, data: @[R, G, B, G, B, R, B, R, G], interpolation: VK_FILTER_NEAREST), | 164 texture1: Texture[TVec4[uint8]](width: 3, height: 3, data: @[R, G, B, G, B, R, B, R, G], interpolation: VK_FILTER_NEAREST), |
| 165 ) | 165 ) |
| 166 ) | 166 ) |
| 167 uniforms2 = asDescriptorSet( | 167 uniforms2 = asDescriptorSet( |
| 168 Uniforms( | 168 Uniforms( |
| 169 material: asGPUValue(Material(baseColor: NewVec3f(0.5, 0.5, 0.5)), UniformBuffer), | 169 material: asGPUValue(Material(baseColor: NewVec3f(0.5, 0.5, 0.5)), UniformBuffer), |
| 170 texture1: Texture[TVec3[uint8]](width: 2, height: 2, data: @[R, G, B, W]), | 170 texture1: Texture[TVec4[uint8]](width: 2, height: 2, data: @[R, G, B, W]), |
| 171 ) | 171 ) |
| 172 ) | 172 ) |
| 173 | 173 |
| 174 AssignBuffers(renderdata, quad) | 174 AssignBuffers(renderdata, quad) |
| 175 AssignBuffers(renderdata, uniforms1) | 175 AssignBuffers(renderdata, uniforms1) |
| 176 AssignBuffers(renderdata, uniforms2) | 176 AssignBuffers(renderdata, uniforms2) |
| 177 UploadTextures(renderdata, uniforms1) | 177 UploadTextures(renderdata, uniforms1) |
| 178 UploadTextures(renderdata, uniforms2) | 178 UploadTextures(renderdata, uniforms2) |
| 179 renderdata.FlushAllMemory() | 179 renderdata.FlushAllMemory() |
| 180 | 180 |
| 181 var pipeline = CreatePipeline[QuadShader](renderPass = mainRenderpass, samples = swapchain.samples) | 181 var pipeline = CreatePipeline[QuadShader](renderPass = renderPass, samples = samples) |
| 182 | 182 |
| 183 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1) | 183 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1) |
| 184 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms2) | 184 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms2) |
| 185 | 185 |
| 186 var c = 0 | 186 var c = 0 |
| 187 while UpdateInputs() and c < nFrames: | 187 while UpdateInputs() and c < nFrames: |
| 188 WithNextFrame(swapchain, framebuffer, commandbuffer): | 188 WithNextFrame(swapchain, framebuffer, commandbuffer): |
| 189 WithRenderPass(mainRenderpass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): | 189 WithRenderPass(renderPass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): |
| 190 WithPipeline(commandbuffer, pipeline): | 190 WithPipeline(commandbuffer, pipeline): |
| 191 WithBind(commandbuffer, (uniforms1, ), pipeline, swapchain.currentFiF): | 191 WithBind(commandbuffer, (uniforms1, ), pipeline, swapchain.currentFiF): |
| 192 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) | 192 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) |
| 193 WithBind(commandbuffer, (uniforms2, ), pipeline, swapchain.currentFiF): | 193 WithBind(commandbuffer, (uniforms2, ), pipeline, swapchain.currentFiF): |
| 194 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) | 194 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) |
| 197 # cleanup | 197 # cleanup |
| 198 checkVkResult vkDeviceWaitIdle(vulkan.device) | 198 checkVkResult vkDeviceWaitIdle(vulkan.device) |
| 199 DestroyPipeline(pipeline) | 199 DestroyPipeline(pipeline) |
| 200 DestroyRenderData(renderdata) | 200 DestroyRenderData(renderdata) |
| 201 | 201 |
| 202 proc test_04_multiple_descriptorsets(nFrames: int) = | 202 proc test_04_multiple_descriptorsets(nFrames: int, renderPass: VkRenderPass, samples = VK_SAMPLE_COUNT_1_BIT) = |
| 203 var renderdata = InitRenderData() | 203 var renderdata = InitRenderData() |
| 204 | 204 |
| 205 type | 205 type |
| 206 RenderSettings = object | 206 RenderSettings = object |
| 207 brigthness: float32 | 207 brigthness: float32 |
| 284 AssignBuffers(renderdata, otherset1) | 284 AssignBuffers(renderdata, otherset1) |
| 285 AssignBuffers(renderdata, otherset2) | 285 AssignBuffers(renderdata, otherset2) |
| 286 UploadTextures(renderdata, mainset) | 286 UploadTextures(renderdata, mainset) |
| 287 renderdata.FlushAllMemory() | 287 renderdata.FlushAllMemory() |
| 288 | 288 |
| 289 var pipeline = CreatePipeline[QuadShader](renderPass = mainRenderpass, samples = swapchain.samples) | 289 var pipeline = CreatePipeline[QuadShader](renderPass = renderPass, samples = samples) |
| 290 | 290 |
| 291 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], constset) | 291 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], constset) |
| 292 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[1], mainset) | 292 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[1], mainset) |
| 293 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[2], otherset1) | 293 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[2], otherset1) |
| 294 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[2], otherset2) | 294 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[2], otherset2) |
| 295 | 295 |
| 296 var c = 0 | 296 var c = 0 |
| 297 while UpdateInputs() and c < nFrames: | 297 while UpdateInputs() and c < nFrames: |
| 298 WithNextFrame(swapchain, framebuffer, commandbuffer): | 298 TimeAndLog: |
| 299 WithRenderPass(mainRenderpass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): | 299 WithNextFrame(swapchain, framebuffer, commandbuffer): |
| 300 WithPipeline(commandbuffer, pipeline): | 300 WithRenderPass(renderPass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): |
| 301 WithBind(commandbuffer, (constset, mainset, otherset1), pipeline, swapchain.currentFiF): | 301 WithPipeline(commandbuffer, pipeline): |
| 302 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) | 302 WithBind(commandbuffer, (constset, mainset, otherset1), pipeline, swapchain.currentFiF): |
| 303 WithBind(commandbuffer, (constset, mainset, otherset2), pipeline, swapchain.currentFiF): | 303 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) |
| 304 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) | 304 WithBind(commandbuffer, (constset, mainset, otherset2), pipeline, swapchain.currentFiF): |
| 305 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) | |
| 305 mainset.data.renderSettings.data.brigthness = (c.float32 / nFrames.float32) | 306 mainset.data.renderSettings.data.brigthness = (c.float32 / nFrames.float32) |
| 306 otherset1.data.objectSettings.data.scale = 0.5 + (c.float32 / nFrames.float32) | 307 otherset1.data.objectSettings.data.scale = 0.5 + (c.float32 / nFrames.float32) |
| 307 UpdateGPUBuffer(mainset.data.renderSettings) | 308 UpdateGPUBuffer(mainset.data.renderSettings) |
| 308 UpdateGPUBuffer(otherset1.data.objectSettings) | 309 UpdateGPUBuffer(otherset1.data.objectSettings) |
| 309 renderdata.FlushAllMemory() | 310 renderdata.FlushAllMemory() |
| 312 # cleanup | 313 # cleanup |
| 313 checkVkResult vkDeviceWaitIdle(vulkan.device) | 314 checkVkResult vkDeviceWaitIdle(vulkan.device) |
| 314 DestroyPipeline(pipeline) | 315 DestroyPipeline(pipeline) |
| 315 DestroyRenderData(renderdata) | 316 DestroyRenderData(renderdata) |
| 316 | 317 |
| 318 proc test_05_triangle_2pass(nFrames: int, samples = VK_SAMPLE_COUNT_1_BIT) = | |
| 319 var | |
| 320 (offscreenRP, presentRP) = CreateIndirectPresentationRenderPass() | |
| 321 swapchain = InitSwapchain(renderpass = presentRP).get() | |
| 322 | |
| 323 var renderdata = InitRenderData() | |
| 324 | |
| 325 type | |
| 326 Uniforms = object | |
| 327 frameTexture: Texture[TVec4[uint8]] | |
| 328 TriangleShader = object | |
| 329 position {.VertexAttribute.}: Vec3f | |
| 330 color {.VertexAttribute.}: Vec3f | |
| 331 fragmentColor {.Pass.}: Vec3f | |
| 332 outColor {.ShaderOutput.}: Vec4f | |
| 333 # code | |
| 334 vertexCode: string = """void main() { | |
| 335 fragmentColor = color; | |
| 336 gl_Position = vec4(position, 1);}""" | |
| 337 fragmentCode: string = """void main() { | |
| 338 outColor = vec4(fragmentColor, 1);}""" | |
| 339 PresentShader = object | |
| 340 position {.VertexAttribute.}: Vec2f | |
| 341 uv {.Pass.}: Vec2f | |
| 342 outColor {.ShaderOutput.}: Vec4f | |
| 343 descriptorSets {.DescriptorSets.}: (Uniforms, ) | |
| 344 # code | |
| 345 vertexCode: string = """void main() { | |
| 346 uv = ((position + 1) * 0.5) * vec2(1, -1); | |
| 347 gl_Position = vec4(position, 0, 1);}""" | |
| 348 fragmentCode: string = """void main() { | |
| 349 vec2 uv1 = uv + vec2(0.001, 0.001); | |
| 350 vec2 uv2 = uv + vec2(0.001, -0.001); | |
| 351 vec2 uv3 = uv + vec2(-0.001, 0.001); | |
| 352 vec2 uv4 = uv + vec2(-0.001, -0.001); | |
| 353 outColor = ( | |
| 354 texture(frameTexture, uv1) + | |
| 355 texture(frameTexture, uv2) + | |
| 356 texture(frameTexture, uv3) + | |
| 357 texture(frameTexture, uv4) | |
| 358 ) / 4; | |
| 359 }""" | |
| 360 TriangleMesh = object | |
| 361 position: GPUArray[Vec3f, VertexBuffer] | |
| 362 color: GPUArray[Vec3f, VertexBuffer] | |
| 363 QuadMesh = object | |
| 364 position: GPUArray[Vec2f, VertexBuffer] | |
| 365 indices: GPUArray[uint16, IndexBuffer] | |
| 366 var mesh = TriangleMesh( | |
| 367 position: asGPUArray([NewVec3f(-0.5, -0.5), NewVec3f(0, 0.5), NewVec3f(0.5, -0.5)], VertexBuffer), | |
| 368 color: asGPUArray([NewVec3f(0, 0, 1), NewVec3f(0, 1, 0), NewVec3f(1, 0, 0)], VertexBuffer), | |
| 369 ) | |
| 370 var quad = QuadMesh( | |
| 371 position: asGPUArray([NewVec2f(-1, -1), NewVec2f(-1, 1), NewVec2f(1, 1), NewVec2f(1, -1)], VertexBuffer), | |
| 372 indices: asGPUArray([0'u16, 1'u16, 2'u16, 2'u16, 3'u16, 0'u16], IndexBuffer), | |
| 373 ) | |
| 374 var uniforms1 = asDescriptorSet( | |
| 375 Uniforms( | |
| 376 frameTexture: Texture[TVec4[uint8]](width: swapchain.width, height: swapchain.height, isRenderTarget: true), | |
| 377 ) | |
| 378 ) | |
| 379 var uniforms2 = asDescriptorSet( | |
| 380 Uniforms( | |
| 381 frameTexture: Texture[TVec4[uint8]](width: swapchain.width, height: swapchain.height, isRenderTarget: true), | |
| 382 ) | |
| 383 ) | |
| 384 AssignBuffers(renderdata, mesh) | |
| 385 AssignBuffers(renderdata, quad) | |
| 386 UploadTextures(renderdata, uniforms1) | |
| 387 UploadTextures(renderdata, uniforms2) | |
| 388 renderdata.FlushAllMemory() | |
| 389 | |
| 390 var | |
| 391 drawPipeline = CreatePipeline[TriangleShader](renderPass = offscreenRP, samples = samples) | |
| 392 presentPipeline = CreatePipeline[PresentShader](renderPass = presentRP, samples = samples) | |
| 393 | |
| 394 InitDescriptorSet(renderdata, presentPipeline.descriptorSetLayouts[0], uniforms1) | |
| 395 InitDescriptorSet(renderdata, presentPipeline.descriptorSetLayouts[0], uniforms2) | |
| 396 | |
| 397 var offscreenFB = svkCreateFramebuffer(offscreenRP, swapchain.width, swapchain.height, [uniforms1.data.frameTexture.imageview]) | |
| 398 | |
| 399 var c = 0 | |
| 400 while UpdateInputs() and c < nFrames: | |
| 401 | |
| 402 TimeAndLog: | |
| 403 WithNextFrame(swapchain, framebuffer, commandbuffer): | |
| 404 | |
| 405 WithRenderPass(offscreenRP, offscreenFB, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): | |
| 406 WithPipeline(commandbuffer, drawPipeline): | |
| 407 Render(commandbuffer = commandbuffer, pipeline = drawPipeline, mesh = mesh) | |
| 408 | |
| 409 WithRenderPass(presentRP, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): | |
| 410 WithPipeline(commandbuffer, presentPipeline): | |
| 411 WithBind(commandbuffer, (uniforms1, ), presentPipeline, swapchain.currentFiF): | |
| 412 Render(commandbuffer = commandbuffer, pipeline = presentPipeline, mesh = quad) | |
| 413 inc c | |
| 414 | |
| 415 # cleanup | |
| 416 checkVkResult vkDeviceWaitIdle(vulkan.device) | |
| 417 DestroyPipeline(presentPipeline) | |
| 418 DestroyPipeline(drawPipeline) | |
| 419 DestroyRenderData(renderdata) | |
| 420 vkDestroyRenderPass(vulkan.device, offscreenRP, nil) | |
| 421 vkDestroyRenderPass(vulkan.device, presentRP, nil) | |
| 422 vkDestroyFramebuffer(vulkan.device, offscreenFB, nil) | |
| 423 DestroySwapchain(swapchain) | |
| 424 | |
| 317 when isMainModule: | 425 when isMainModule: |
| 318 var nFrames = 2000 | 426 var nFrames = 2000 |
| 319 InitVulkan() | 427 InitVulkan() |
| 320 | 428 |
| 429 | |
| 321 # test normal | 430 # test normal |
| 322 block: | 431 block: |
| 323 mainRenderpass = CreatePresentationRenderPass() | 432 mainRenderpass = CreateDirectPresentationRenderPass() |
| 324 swapchain = InitSwapchain(renderpass = mainRenderpass).get() | 433 swapchain = InitSwapchain(renderpass = mainRenderpass).get() |
| 325 | 434 |
| 326 # tests a simple triangle with minimalistic shader and vertex format | 435 # tests a simple triangle with minimalistic shader and vertex format |
| 327 test_01_triangle(nFrames) | 436 test_01_triangle(nFrames, renderPass = mainRenderpass) |
| 328 | 437 |
| 329 # tests instanced triangles and quads, mixing meshes and instances | 438 # tests instanced triangles and quads, mixing meshes and instances |
| 330 test_02_triangle_quad_instanced(nFrames) | 439 test_02_triangle_quad_instanced(nFrames, renderPass = mainRenderpass) |
| 331 | 440 |
| 332 # teste descriptor sets | 441 # teste descriptor sets |
| 333 test_03_simple_descriptorset(nFrames) | 442 test_03_simple_descriptorset(nFrames, renderPass = mainRenderpass) |
| 334 | 443 |
| 335 # tests multiple descriptor sets and arrays | 444 # tests multiple descriptor sets and arrays |
| 336 test_04_multiple_descriptorsets(nFrames) | 445 test_04_multiple_descriptorsets(nFrames, renderPass = mainRenderpass) |
| 337 | 446 |
| 338 checkVkResult vkDeviceWaitIdle(vulkan.device) | 447 checkVkResult vkDeviceWaitIdle(vulkan.device) |
| 339 vkDestroyRenderPass(vulkan.device, mainRenderpass, nil) | 448 vkDestroyRenderPass(vulkan.device, mainRenderpass, nil) |
| 340 DestroySwapchain(swapchain) | 449 DestroySwapchain(swapchain) |
| 341 | 450 |
| 342 # test MSAA | 451 # test MSAA |
| 343 block: | 452 block: |
| 344 mainRenderpass = CreatePresentationRenderPass(samples = VK_SAMPLE_COUNT_4_BIT) | 453 mainRenderpass = CreateDirectPresentationRenderPass(samples = VK_SAMPLE_COUNT_4_BIT) |
| 345 swapchain = InitSwapchain(renderpass = mainRenderpass, samples = VK_SAMPLE_COUNT_4_BIT).get() | 454 swapchain = InitSwapchain(renderpass = mainRenderpass, samples = VK_SAMPLE_COUNT_4_BIT).get() |
| 346 | 455 |
| 347 test_01_triangle(99999999) | 456 test_01_triangle(nFrames, renderPass = mainRenderpass, VK_SAMPLE_COUNT_4_BIT) |
| 348 | 457 |
| 349 checkVkResult vkDeviceWaitIdle(vulkan.device) | 458 checkVkResult vkDeviceWaitIdle(vulkan.device) |
| 350 vkDestroyRenderPass(vulkan.device, mainRenderpass, nil) | 459 vkDestroyRenderPass(vulkan.device, mainRenderpass, nil) |
| 351 DestroySwapchain(swapchain) | 460 DestroySwapchain(swapchain) |
| 352 | 461 |
| 462 # test multiple render passes | |
| 463 block: | |
| 464 test_05_triangle_2pass(999999999) | |
| 465 | |
| 353 DestroyVulkan() | 466 DestroyVulkan() |
