Mercurial > games > semicongine
comparison tests/test_rendering.nim @ 1229:5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
| author | sam <sam@basx.dev> |
|---|---|
| date | Thu, 18 Jul 2024 21:32:41 +0700 |
| parents | 4e465583ea32 |
| children | 51221494caeb |
comparison
equal
deleted
inserted
replaced
| 1228:4e465583ea32 | 1229:5dcb503ef0c0 |
|---|---|
| 1 import std/options | 1 import std/options |
| 2 import std/random | 2 import std/random |
| 3 | 3 |
| 4 import ../semiconginev2 | 4 import ../semiconginev2 |
| 5 | 5 |
| 6 var | 6 proc test_01_triangle(nFrames: int, swapchain: var Swapchain) = |
| 7 mainRenderpass: VkRenderPass | |
| 8 swapchain: Swapchain | |
| 9 | |
| 10 proc test_01_triangle(nFrames: int, renderPass: VkRenderPass, samples = VK_SAMPLE_COUNT_1_BIT) = | |
| 11 var renderdata = InitRenderData() | 7 var renderdata = InitRenderData() |
| 12 | 8 |
| 13 type | 9 type |
| 14 TrianglShader = object | 10 TrianglShader = object |
| 15 position {.VertexAttribute.}: Vec3f | 11 position {.VertexAttribute.}: Vec3f |
| 31 ) | 27 ) |
| 32 AssignBuffers(renderdata, mesh) | 28 AssignBuffers(renderdata, mesh) |
| 33 renderdata.FlushAllMemory() | 29 renderdata.FlushAllMemory() |
| 34 | 30 |
| 35 var | 31 var |
| 36 pipeline = CreatePipeline[TrianglShader](renderPass = renderPass, samples = samples) | 32 pipeline = CreatePipeline[TrianglShader](renderPass = swapchain.renderPass) |
| 37 | 33 |
| 38 var c = 0 | 34 var c = 0 |
| 39 while UpdateInputs() and c < nFrames: | 35 while UpdateInputs() and c < nFrames: |
| 40 WithNextFrame(swapchain, framebuffer, commandbuffer): | 36 WithNextFrame(swapchain, framebuffer, commandbuffer): |
| 41 WithRenderPass(renderPass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): | 37 WithRenderPass(swapchain.renderPass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): |
| 42 WithPipeline(commandbuffer, pipeline): | 38 WithPipeline(commandbuffer, pipeline): |
| 43 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh) | 39 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh) |
| 44 inc c | 40 inc c |
| 45 | 41 |
| 46 # cleanup | 42 # cleanup |
| 47 checkVkResult vkDeviceWaitIdle(vulkan.device) | 43 checkVkResult vkDeviceWaitIdle(vulkan.device) |
| 48 DestroyPipeline(pipeline) | 44 DestroyPipeline(pipeline) |
| 49 DestroyRenderData(renderdata) | 45 DestroyRenderData(renderdata) |
| 50 | 46 |
| 51 | 47 |
| 52 proc test_02_triangle_quad_instanced(nFrames: int, renderPass: VkRenderPass, samples = VK_SAMPLE_COUNT_1_BIT) = | 48 proc test_02_triangle_quad_instanced(nFrames: int, swapchain: var Swapchain) = |
| 53 var renderdata = InitRenderData() | 49 var renderdata = InitRenderData() |
| 54 | 50 |
| 55 type | 51 type |
| 56 SomeShader = object | 52 SomeShader = object |
| 57 position {.VertexAttribute.}: Vec3f | 53 position {.VertexAttribute.}: Vec3f |
| 99 AssignBuffers(renderdata, quad) | 95 AssignBuffers(renderdata, quad) |
| 100 AssignBuffers(renderdata, instancesA) | 96 AssignBuffers(renderdata, instancesA) |
| 101 AssignBuffers(renderdata, instancesB) | 97 AssignBuffers(renderdata, instancesB) |
| 102 renderdata.FlushAllMemory() | 98 renderdata.FlushAllMemory() |
| 103 | 99 |
| 104 var pipeline = CreatePipeline[SomeShader](renderPass = renderPass, samples = samples) | 100 var pipeline = CreatePipeline[SomeShader](renderPass = swapchain.renderPass) |
| 105 | 101 |
| 106 var c = 0 | 102 var c = 0 |
| 107 while UpdateInputs() and c < nFrames: | 103 while UpdateInputs() and c < nFrames: |
| 108 WithNextFrame(swapchain, framebuffer, commandbuffer): | 104 WithNextFrame(swapchain, framebuffer, commandbuffer): |
| 109 WithRenderPass(renderPass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): | 105 WithRenderPass(swapchain.renderPass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): |
| 110 WithPipeline(commandbuffer, pipeline): | 106 WithPipeline(commandbuffer, pipeline): |
| 111 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad, instances = instancesA) | 107 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad, instances = instancesA) |
| 112 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad, instances = instancesB) | 108 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad, instances = instancesB) |
| 113 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = tri, instances = instancesA) | 109 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = tri, instances = instancesA) |
| 114 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = tri, instances = instancesB) | 110 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = tri, instances = instancesB) |
| 117 # cleanup | 113 # cleanup |
| 118 checkVkResult vkDeviceWaitIdle(vulkan.device) | 114 checkVkResult vkDeviceWaitIdle(vulkan.device) |
| 119 DestroyPipeline(pipeline) | 115 DestroyPipeline(pipeline) |
| 120 DestroyRenderData(renderdata) | 116 DestroyRenderData(renderdata) |
| 121 | 117 |
| 122 proc test_03_simple_descriptorset(nFrames: int, renderPass: VkRenderPass, samples = VK_SAMPLE_COUNT_1_BIT) = | 118 proc test_03_simple_descriptorset(nFrames: int, swapchain: var Swapchain) = |
| 123 var renderdata = InitRenderData() | 119 var renderdata = InitRenderData() |
| 124 | 120 |
| 125 type | 121 type |
| 126 Material = object | 122 Material = object |
| 127 baseColor: Vec3f | 123 baseColor: Vec3f |
| 176 AssignBuffers(renderdata, uniforms2) | 172 AssignBuffers(renderdata, uniforms2) |
| 177 UploadImages(renderdata, uniforms1) | 173 UploadImages(renderdata, uniforms1) |
| 178 UploadImages(renderdata, uniforms2) | 174 UploadImages(renderdata, uniforms2) |
| 179 renderdata.FlushAllMemory() | 175 renderdata.FlushAllMemory() |
| 180 | 176 |
| 181 var pipeline = CreatePipeline[QuadShader](renderPass = renderPass, samples = samples) | 177 var pipeline = CreatePipeline[QuadShader](renderPass = swapchain.renderPass) |
| 182 | 178 |
| 183 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1) | 179 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1) |
| 184 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms2) | 180 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms2) |
| 185 | 181 |
| 186 var c = 0 | 182 var c = 0 |
| 187 while UpdateInputs() and c < nFrames: | 183 while UpdateInputs() and c < nFrames: |
| 188 WithNextFrame(swapchain, framebuffer, commandbuffer): | 184 WithNextFrame(swapchain, framebuffer, commandbuffer): |
| 189 WithRenderPass(renderPass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): | 185 WithRenderPass(swapchain.renderPass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): |
| 190 WithPipeline(commandbuffer, pipeline): | 186 WithPipeline(commandbuffer, pipeline): |
| 191 WithBind(commandbuffer, (uniforms1, ), pipeline, swapchain.currentFiF): | 187 WithBind(commandbuffer, (uniforms1, ), pipeline, swapchain.currentFiF): |
| 192 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) | 188 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) |
| 193 WithBind(commandbuffer, (uniforms2, ), pipeline, swapchain.currentFiF): | 189 WithBind(commandbuffer, (uniforms2, ), pipeline, swapchain.currentFiF): |
| 194 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) | 190 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) |
| 197 # cleanup | 193 # cleanup |
| 198 checkVkResult vkDeviceWaitIdle(vulkan.device) | 194 checkVkResult vkDeviceWaitIdle(vulkan.device) |
| 199 DestroyPipeline(pipeline) | 195 DestroyPipeline(pipeline) |
| 200 DestroyRenderData(renderdata) | 196 DestroyRenderData(renderdata) |
| 201 | 197 |
| 202 proc test_04_multiple_descriptorsets(nFrames: int, renderPass: VkRenderPass, samples = VK_SAMPLE_COUNT_1_BIT) = | 198 proc test_04_multiple_descriptorsets(nFrames: int, swapchain: var Swapchain) = |
| 203 var renderdata = InitRenderData() | 199 var renderdata = InitRenderData() |
| 204 | 200 |
| 205 type | 201 type |
| 206 RenderSettings = object | 202 RenderSettings = object |
| 207 brigthness: float32 | 203 brigthness: float32 |
| 284 AssignBuffers(renderdata, otherset1) | 280 AssignBuffers(renderdata, otherset1) |
| 285 AssignBuffers(renderdata, otherset2) | 281 AssignBuffers(renderdata, otherset2) |
| 286 UploadImages(renderdata, mainset) | 282 UploadImages(renderdata, mainset) |
| 287 renderdata.FlushAllMemory() | 283 renderdata.FlushAllMemory() |
| 288 | 284 |
| 289 var pipeline = CreatePipeline[QuadShader](renderPass = renderPass, samples = samples) | 285 var pipeline = CreatePipeline[QuadShader](renderPass = swapchain.renderPass) |
| 290 | 286 |
| 291 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], constset) | 287 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], constset) |
| 292 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[1], mainset) | 288 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[1], mainset) |
| 293 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[2], otherset1) | 289 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[2], otherset1) |
| 294 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[2], otherset2) | 290 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[2], otherset2) |
| 295 | 291 |
| 296 var c = 0 | 292 var c = 0 |
| 297 while UpdateInputs() and c < nFrames: | 293 while UpdateInputs() and c < nFrames: |
| 298 TimeAndLog: | 294 TimeAndLog: |
| 299 WithNextFrame(swapchain, framebuffer, commandbuffer): | 295 WithNextFrame(swapchain, framebuffer, commandbuffer): |
| 300 WithRenderPass(renderPass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): | 296 WithRenderPass(swapchain.renderPass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)): |
| 301 WithPipeline(commandbuffer, pipeline): | 297 WithPipeline(commandbuffer, pipeline): |
| 302 WithBind(commandbuffer, (constset, mainset, otherset1), pipeline, swapchain.currentFiF): | 298 WithBind(commandbuffer, (constset, mainset, otherset1), pipeline, swapchain.currentFiF): |
| 303 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) | 299 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) |
| 304 WithBind(commandbuffer, (constset, mainset, otherset2), pipeline, swapchain.currentFiF): | 300 WithBind(commandbuffer, (constset, mainset, otherset2), pipeline, swapchain.currentFiF): |
| 305 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) | 301 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) |
| 313 # cleanup | 309 # cleanup |
| 314 checkVkResult vkDeviceWaitIdle(vulkan.device) | 310 checkVkResult vkDeviceWaitIdle(vulkan.device) |
| 315 DestroyPipeline(pipeline) | 311 DestroyPipeline(pipeline) |
| 316 DestroyRenderData(renderdata) | 312 DestroyRenderData(renderdata) |
| 317 | 313 |
| 318 proc test_05_triangle_2pass(nFrames: int, samples = VK_SAMPLE_COUNT_1_BIT) = | 314 proc test_05_triangle_2pass(nFrames: int) = |
| 319 var | 315 var |
| 320 (offscreenRP, presentRP) = CreateIndirectPresentationRenderPass() | 316 (offscreenRP, presentRP) = CreateIndirectPresentationRenderPass(depthBuffer = true, samples = VK_SAMPLE_COUNT_4_BIT) |
| 321 swapchain = InitSwapchain(renderpass = presentRP).get() | 317 swapchain = InitSwapchain(renderpass = presentRP).get() |
| 322 | 318 |
| 323 var renderdata = InitRenderData() | 319 var renderdata = InitRenderData() |
| 324 | 320 |
| 325 type | 321 type |
| 374 var uniforms1 = asDescriptorSet( | 370 var uniforms1 = asDescriptorSet( |
| 375 Uniforms( | 371 Uniforms( |
| 376 frameTexture: Image[TVec4[uint8]](width: swapchain.width, height: swapchain.height, isRenderTarget: true), | 372 frameTexture: Image[TVec4[uint8]](width: swapchain.width, height: swapchain.height, isRenderTarget: true), |
| 377 ) | 373 ) |
| 378 ) | 374 ) |
| 379 var uniforms2 = asDescriptorSet( | |
| 380 Uniforms( | |
| 381 frameTexture: Image[TVec4[uint8]](width: swapchain.width, height: swapchain.height, isRenderTarget: true), | |
| 382 ) | |
| 383 ) | |
| 384 AssignBuffers(renderdata, mesh) | 375 AssignBuffers(renderdata, mesh) |
| 385 AssignBuffers(renderdata, quad) | 376 AssignBuffers(renderdata, quad) |
| 386 UploadImages(renderdata, uniforms1) | 377 UploadImages(renderdata, uniforms1) |
| 387 UploadImages(renderdata, uniforms2) | |
| 388 renderdata.FlushAllMemory() | 378 renderdata.FlushAllMemory() |
| 389 | 379 |
| 390 var | 380 var |
| 391 drawPipeline = CreatePipeline[TriangleShader](renderPass = offscreenRP, samples = samples) | 381 drawPipeline = CreatePipeline[TriangleShader](renderPass = offscreenRP) |
| 392 presentPipeline = CreatePipeline[PresentShader](renderPass = presentRP, samples = samples) | 382 presentPipeline = CreatePipeline[PresentShader](renderPass = presentRP) |
| 393 | 383 |
| 394 InitDescriptorSet(renderdata, presentPipeline.descriptorSetLayouts[0], uniforms1) | 384 InitDescriptorSet(renderdata, presentPipeline.descriptorSetLayouts[0], uniforms1) |
| 395 InitDescriptorSet(renderdata, presentPipeline.descriptorSetLayouts[0], uniforms2) | 385 |
| 396 | 386 # create depth buffer images (will not use the one in the swapchain |
| 397 var offscreenFB = svkCreateFramebuffer(offscreenRP, swapchain.width, swapchain.height, [uniforms1.data.frameTexture.imageview]) | 387 var |
| 388 depthImage: VkImage | |
| 389 depthImageView: VkImageView | |
| 390 depthMemory: VkDeviceMemory | |
| 391 if offscreenRP.depthBuffer: | |
| 392 depthImage = svkCreate2DImage( | |
| 393 width = swapchain.width, | |
| 394 height = swapchain.height, | |
| 395 format = DEPTH_FORMAT, | |
| 396 usage = [VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT], | |
| 397 samples = offscreenRP.samples, | |
| 398 ) | |
| 399 let requirements = svkGetImageMemoryRequirements(depthImage) | |
| 400 depthMemory = svkAllocateMemory( | |
| 401 requirements.size, | |
| 402 BestMemory(mappable = false, filter = requirements.memoryTypes) | |
| 403 ) | |
| 404 checkVkResult vkBindImageMemory( | |
| 405 vulkan.device, | |
| 406 depthImage, | |
| 407 depthMemory, | |
| 408 0, | |
| 409 ) | |
| 410 depthImageView = svkCreate2DImageView( | |
| 411 image = depthImage, | |
| 412 format = DEPTH_FORMAT, | |
| 413 aspect = VK_IMAGE_ASPECT_DEPTH_BIT | |
| 414 ) | |
| 415 | |
| 416 # create msaa images (will not use the one in the swapchain | |
| 417 var | |
| 418 msaaImage: VkImage | |
| 419 msaaImageView: VkImageView | |
| 420 msaaMemory: VkDeviceMemory | |
| 421 if offscreenRP.samples != VK_SAMPLE_COUNT_1_BIT: | |
| 422 msaaImage = svkCreate2DImage( | |
| 423 width = swapchain.width, | |
| 424 height = swapchain.height, | |
| 425 format = SURFACE_FORMAT, | |
| 426 usage = [VK_IMAGE_USAGE_SAMPLED_BIT, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT], | |
| 427 samples = offscreenRP.samples, | |
| 428 ) | |
| 429 let requirements = svkGetImageMemoryRequirements(msaaImage) | |
| 430 msaaMemory = svkAllocateMemory( | |
| 431 requirements.size, | |
| 432 BestMemory(mappable = false, filter = requirements.memoryTypes) | |
| 433 ) | |
| 434 checkVkResult vkBindImageMemory( | |
| 435 vulkan.device, | |
| 436 msaaImage, | |
| 437 msaaMemory, | |
| 438 0, | |
| 439 ) | |
| 440 msaaImageView = svkCreate2DImageView(image = msaaImage, format = SURFACE_FORMAT) | |
| 441 | |
| 442 var attachments: seq[VkImageView] | |
| 443 if offscreenRP.samples == VK_SAMPLE_COUNT_1_BIT: | |
| 444 if offscreenRP.depthBuffer: | |
| 445 attachments = @[uniforms1.data.frameTexture.imageview, depthImageView] | |
| 446 else: | |
| 447 attachments = @[uniforms1.data.frameTexture.imageview] | |
| 448 else: | |
| 449 if offscreenRP.depthBuffer: | |
| 450 attachments = @[msaaImageView, depthImageView, uniforms1.data.frameTexture.imageview] | |
| 451 else: | |
| 452 attachments = @[msaaImageView, uniforms1.data.frameTexture.imageview] | |
| 453 echo attachments | |
| 454 var offscreenFB = svkCreateFramebuffer( | |
| 455 offscreenRP.vk, | |
| 456 swapchain.width, | |
| 457 swapchain.height, | |
| 458 attachments | |
| 459 ) | |
| 398 | 460 |
| 399 var c = 0 | 461 var c = 0 |
| 400 while UpdateInputs() and c < nFrames: | 462 while UpdateInputs() and c < nFrames: |
| 401 | 463 |
| 402 TimeAndLog: | 464 TimeAndLog: |
| 415 # cleanup | 477 # cleanup |
| 416 checkVkResult vkDeviceWaitIdle(vulkan.device) | 478 checkVkResult vkDeviceWaitIdle(vulkan.device) |
| 417 DestroyPipeline(presentPipeline) | 479 DestroyPipeline(presentPipeline) |
| 418 DestroyPipeline(drawPipeline) | 480 DestroyPipeline(drawPipeline) |
| 419 DestroyRenderData(renderdata) | 481 DestroyRenderData(renderdata) |
| 420 vkDestroyRenderPass(vulkan.device, offscreenRP, nil) | 482 if depthImage.Valid: |
| 421 vkDestroyRenderPass(vulkan.device, presentRP, nil) | 483 vkDestroyImageView(vulkan.device, depthImageView, nil) |
| 484 vkDestroyImage(vulkan.device, depthImage, nil) | |
| 485 vkFreeMemory(vulkan.device, depthMemory, nil) | |
| 486 if msaaImage.Valid: | |
| 487 vkDestroyImageView(vulkan.device, msaaImageView, nil) | |
| 488 vkDestroyImage(vulkan.device, msaaImage, nil) | |
| 489 vkFreeMemory(vulkan.device, msaaMemory, nil) | |
| 490 vkDestroyRenderPass(vulkan.device, offscreenRP.vk, nil) | |
| 491 vkDestroyRenderPass(vulkan.device, presentRP.vk, nil) | |
| 422 vkDestroyFramebuffer(vulkan.device, offscreenFB, nil) | 492 vkDestroyFramebuffer(vulkan.device, offscreenFB, nil) |
| 423 DestroySwapchain(swapchain) | 493 DestroySwapchain(swapchain) |
| 424 | 494 |
| 425 when isMainModule: | 495 when isMainModule: |
| 426 var nFrames = 2000 | 496 var nFrames = 1000 |
| 427 InitVulkan() | 497 InitVulkan() |
| 428 | 498 |
| 499 var mainRenderpass: RenderPass | |
| 500 var renderPasses = [ | |
| 501 (depthBuffer: false, samples: VK_SAMPLE_COUNT_1_BIT), | |
| 502 (depthBuffer: false, samples: VK_SAMPLE_COUNT_4_BIT), | |
| 503 (depthBuffer: true, samples: VK_SAMPLE_COUNT_1_BIT), | |
| 504 (depthBuffer: true, samples: VK_SAMPLE_COUNT_4_BIT), | |
| 505 ] | |
| 429 | 506 |
| 430 # test normal | 507 # test normal |
| 431 block: | 508 if false: |
| 432 mainRenderpass = CreateDirectPresentationRenderPass() | 509 for i, (depthBuffer, samples) in renderPasses: |
| 433 swapchain = InitSwapchain(renderpass = mainRenderpass).get() | 510 var renderpass = CreateDirectPresentationRenderPass(depthBuffer = depthBuffer, samples = samples) |
| 434 | 511 var swapchain = InitSwapchain(renderpass = renderpass).get() |
| 435 # tests a simple triangle with minimalistic shader and vertex format | 512 |
| 436 test_01_triangle(nFrames, renderPass = mainRenderpass) | 513 # tests a simple triangle with minimalistic shader and vertex format |
| 437 | 514 test_01_triangle(nFrames, swapchain) |
| 438 # tests instanced triangles and quads, mixing meshes and instances | 515 |
| 439 test_02_triangle_quad_instanced(nFrames, renderPass = mainRenderpass) | 516 # tests instanced triangles and quads, mixing meshes and instances |
| 440 | 517 test_02_triangle_quad_instanced(nFrames, swapchain) |
| 441 # teste descriptor sets | 518 |
| 442 test_03_simple_descriptorset(nFrames, renderPass = mainRenderpass) | 519 # teste descriptor sets |
| 443 | 520 test_03_simple_descriptorset(nFrames, swapchain) |
| 444 # tests multiple descriptor sets and arrays | 521 |
| 445 test_04_multiple_descriptorsets(nFrames, renderPass = mainRenderpass) | 522 # tests multiple descriptor sets and arrays |
| 446 | 523 test_04_multiple_descriptorsets(nFrames, swapchain) |
| 447 checkVkResult vkDeviceWaitIdle(vulkan.device) | 524 |
| 448 vkDestroyRenderPass(vulkan.device, mainRenderpass, nil) | 525 checkVkResult vkDeviceWaitIdle(vulkan.device) |
| 449 DestroySwapchain(swapchain) | 526 vkDestroyRenderPass(vulkan.device, renderpass.vk, nil) |
| 450 | 527 DestroySwapchain(swapchain) |
| 451 # test MSAA | |
| 452 block: | |
| 453 mainRenderpass = CreateDirectPresentationRenderPass(samples = VK_SAMPLE_COUNT_4_BIT) | |
| 454 swapchain = InitSwapchain(renderpass = mainRenderpass, samples = VK_SAMPLE_COUNT_4_BIT).get() | |
| 455 | |
| 456 test_01_triangle(nFrames, renderPass = mainRenderpass, VK_SAMPLE_COUNT_4_BIT) | |
| 457 | |
| 458 checkVkResult vkDeviceWaitIdle(vulkan.device) | |
| 459 vkDestroyRenderPass(vulkan.device, mainRenderpass, nil) | |
| 460 DestroySwapchain(swapchain) | |
| 461 | 528 |
| 462 # test multiple render passes | 529 # test multiple render passes |
| 463 block: | 530 block: |
| 464 test_05_triangle_2pass(999999999) | 531 test_05_triangle_2pass(nFrames) |
| 465 | 532 |
| 466 DestroyVulkan() | 533 DestroyVulkan() |
