comparison semiconginev2/rendering/renderer.nim @ 1253:c4f98eb4bb05

fix: a few things
author sam <sam@basx.dev>
date Fri, 26 Jul 2024 23:39:24 +0700
parents 01e9f41d35b1
children b0f4c8ccd49a
comparison
equal deleted inserted replaced
1252:01e9f41d35b1 1253:c4f98eb4bb05
668 pipeline: Pipeline[TShader], 668 pipeline: Pipeline[TShader],
669 mesh: TMesh, 669 mesh: TMesh,
670 ) = 670 ) =
671 Render(commandBuffer, pipeline, mesh, EMPTY()) 671 Render(commandBuffer, pipeline, mesh, EMPTY())
672 672
673 proc assertValidPushConstantType(TShader, TPushConstant: typedesc) =
674 assert sizeof(TPushConstant) <= PUSH_CONSTANT_SIZE, "Push constant values must be <= 128 bytes"
675 var foundPushConstant = false
676 for fieldname, fieldvalue in default(TShader).fieldPairs():
677 when hasCustomPragma(fieldvalue, PushConstantAttribute):
678 assert typeof(fieldvalue) is TPushConstant, "Provided push constant has not same type as declared in shader"
679 assert foundPushConstant == false, "More than on push constant found in shader"
680 foundPushConstant = true
681 assert foundPushConstant == true, "No push constant found in shader"
682
673 proc RenderWithPushConstant*[TShader, TMesh, TInstance, TPushConstant]( 683 proc RenderWithPushConstant*[TShader, TMesh, TInstance, TPushConstant](
674 commandBuffer: VkCommandBuffer, 684 commandBuffer: VkCommandBuffer,
675 pipeline: Pipeline[TShader], 685 pipeline: Pipeline[TShader],
676 mesh: TMesh, 686 mesh: TMesh,
677 instances: TInstance, 687 instances: TInstance,
678 pushConstant: TPushConstant, 688 pushConstant: TPushConstant,
679 ) = 689 ) =
690 static: assertValidPushConstantType(TShader, TPushConstant)
680 vkCmdPushConstants( 691 vkCmdPushConstants(
681 commandBuffer = commandBuffer, 692 commandBuffer = commandBuffer,
682 layout = pipeline.layout, 693 layout = pipeline.layout,
683 stageFlags = VkShaderStageFlags(VK_SHADER_STAGE_ALL_GRAPHICS), 694 stageFlags = VkShaderStageFlags(VK_SHADER_STAGE_ALL_GRAPHICS),
684 offset = 0, 695 offset = 0,
685 size = 128, 696 size = PUSH_CONSTANT_SIZE,
686 pValues = addr(pushConstant) 697 pValues = addr(pushConstant)
687 ); 698 );
688 Render(commandBuffer, pipeline, mesh, instances) 699 Render(commandBuffer, pipeline, mesh, instances)
689 proc RenderWithPushConstant*[TShader, TMesh, TPushConstant]( 700 proc RenderWithPushConstant*[TShader, TMesh, TPushConstant](
690 commandBuffer: VkCommandBuffer, 701 commandBuffer: VkCommandBuffer,
691 pipeline: Pipeline[TShader], 702 pipeline: Pipeline[TShader],
692 mesh: TMesh, 703 mesh: TMesh,
693 pushConstant: TPushConstant, 704 pushConstant: TPushConstant,
694 ) = 705 ) =
706 static: assertValidPushConstantType(TShader, TPushConstant)
695 vkCmdPushConstants( 707 vkCmdPushConstants(
696 commandBuffer = commandBuffer, 708 commandBuffer = commandBuffer,
697 layout = pipeline.layout, 709 layout = pipeline.layout,
698 stageFlags = VkShaderStageFlags(VK_SHADER_STAGE_ALL_GRAPHICS), 710 stageFlags = VkShaderStageFlags(VK_SHADER_STAGE_ALL_GRAPHICS),
699 offset = 0, 711 offset = 0,
700 size = 128, 712 size = PUSH_CONSTANT_SIZE,
701 pValues = addr(pushConstant) 713 pValues = addr(pushConstant)
702 ); 714 );
703 Render(commandBuffer, pipeline, mesh, EMPTY()) 715 Render(commandBuffer, pipeline, mesh, EMPTY())
704 716
705 proc asGPUArray*[T](data: openArray[T], bufferType: static BufferType): auto = 717 proc asGPUArray*[T](data: openArray[T], bufferType: static BufferType): auto =