changeset 1414:5e5a3311ca44

did: small improvment to allow easy adjustment of shader-code
author sam <sam@basx.dev>
date Fri, 27 Dec 2024 17:20:31 +0700
parents bc6782c0edd6
children 62ebf735ecfa
files semicongine/rendering/shaders.nim tests/test_gltf.nim tests/test_rendering.nim tests/test_text.nim
diffstat 4 files changed, 29 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/semicongine/rendering/shaders.nim	Fri Dec 27 16:43:58 2024 +0700
+++ b/semicongine/rendering/shaders.nim	Fri Dec 27 17:20:31 2024 +0700
@@ -485,6 +485,7 @@
       )
 
 proc createPipeline*[TShader](
+    shader: static TShader,
     renderPass: RenderPass,
     topology: VkPrimitiveTopology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
     polygonMode: VkPolygonMode = VK_POLYGON_MODE_FILL,
@@ -493,9 +494,6 @@
     lineWidth = 1'f32,
     depthClampEnable = false,
 ): Pipeline[TShader] =
-  # create pipeline
-
-  const shader = default(TShader)
   (result.vertexShaderModule, result.fragmentShaderModule) = compileShader(shader)
 
   result.descriptorSetLayouts = createDescriptorSetLayouts[TShader]()
--- a/tests/test_gltf.nim	Fri Dec 27 16:43:58 2024 +0700
+++ b/tests/test_gltf.nim	Fri Dec 27 17:20:31 2024 +0700
@@ -135,7 +135,7 @@
   renderdata.assignBuffers(descriptors)
 
   var pipeline =
-    createPipeline[Shader](renderPass = vulkan.swapchain.renderPass, cullMode = [])
+    createPipeline(Shader(), renderPass = vulkan.swapchain.renderPass, cullMode = [])
   initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], descriptors)
 
   renderdata.flushAllMemory()
--- a/tests/test_rendering.nim	Fri Dec 27 16:43:58 2024 +0700
+++ b/tests/test_rendering.nim	Fri Dec 27 17:20:31 2024 +0700
@@ -43,7 +43,7 @@
   assignBuffers(renderdata, mesh)
   renderdata.flushAllMemory()
 
-  var pipeline = createPipeline[Shader](renderPass = vulkan.swapchain.renderPass)
+  var pipeline = createPipeline(Shader(), renderPass = vulkan.swapchain.renderPass)
 
   var start = getMonoTime()
   while ((getMonoTime() - start).inMilliseconds().int / 1000) < time:
@@ -136,7 +136,7 @@
   assignBuffers(renderdata, instancesB)
   renderdata.flushAllMemory()
 
-  var pipeline = createPipeline[SomeShader](renderPass = vulkan.swapchain.renderPass)
+  var pipeline = createPipeline(SomeShader(), renderPass = vulkan.swapchain.renderPass)
 
   var start = getMonoTime()
   while ((getMonoTime() - start).inMilliseconds().int / 1000) < time:
@@ -251,7 +251,7 @@
   uploadImages(renderdata, uniforms2)
   renderdata.flushAllMemory()
 
-  var pipeline = createPipeline[QuadShader](renderPass = vulkan.swapchain.renderPass)
+  var pipeline = createPipeline(QuadShader(), renderPass = vulkan.swapchain.renderPass)
 
   initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1)
   initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms2)
@@ -390,7 +390,7 @@
   uploadImages(renderdata, mainset)
   renderdata.flushAllMemory()
 
-  var pipeline = createPipeline[QuadShader](renderPass = vulkan.swapchain.renderPass)
+  var pipeline = createPipeline(QuadShader(), renderPass = vulkan.swapchain.renderPass)
 
   initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], constset)
   initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[1], mainset)
@@ -535,7 +535,7 @@
 
   renderdata.flushAllMemory()
 
-  var pipeline = createPipeline[CubeShader](renderPass = vulkan.swapchain.renderPass)
+  var pipeline = createPipeline(CubeShader(), renderPass = vulkan.swapchain.renderPass)
   initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1)
 
   var tStart = getMonoTime()
@@ -620,20 +620,25 @@
   assignBuffers(renderdata, lines)
   renderdata.flushAllMemory()
 
-  var pipeline1 = createPipeline[Shader](
+  var pipeline1 = createPipeline(
+    Shader(),
     renderPass = vulkan.swapchain.renderPass,
     polygonMode = VK_POLYGON_MODE_LINE,
     lineWidth = 20'f32,
   )
-  var pipeline2 = createPipeline[Shader](
-    renderPass = vulkan.swapchain.renderPass, polygonMode = VK_POLYGON_MODE_POINT
+  var pipeline2 = createPipeline(
+    Shader(),
+    renderPass = vulkan.swapchain.renderPass,
+    polygonMode = VK_POLYGON_MODE_POINT,
   )
-  var pipeline3 = createPipeline[Shader](
+  var pipeline3 = createPipeline(
+    Shader(),
     renderPass = vulkan.swapchain.renderPass,
     topology = VK_PRIMITIVE_TOPOLOGY_LINE_LIST,
     lineWidth = 5,
   )
-  var pipeline4 = createPipeline[Shader](
+  var pipeline4 = createPipeline(
+    Shader(),
     renderPass = vulkan.swapchain.renderPass,
     topology = VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
   )
@@ -719,7 +724,7 @@
   assignBuffers(renderdata, mesh)
   renderdata.flushAllMemory()
 
-  var pipeline = createPipeline[Shader](renderPass = vulkan.swapchain.renderPass)
+  var pipeline = createPipeline(Shader(), renderPass = vulkan.swapchain.renderPass)
   var uniforms1 = asDescriptorSetData(
     Uniforms(textures: loadImageArray[BGRA](["art.png", "art1.png"]))
   )
@@ -796,7 +801,7 @@
   assignBuffers(renderdata, mesh)
   renderdata.flushAllMemory()
 
-  var pipeline = createPipeline[Shader](renderPass = vulkan.swapchain.renderPass)
+  var pipeline = createPipeline(Shader(), renderPass = vulkan.swapchain.renderPass)
   var uniforms1 = asDescriptorSetData(Uniforms(texture1: loadImage[BGRA]("art.png")))
   uploadImages(renderdata, uniforms1)
   initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1)
@@ -906,8 +911,8 @@
   renderdata.flushAllMemory()
 
   var
-    drawPipeline = createPipeline[TriangleShader](renderPass = offscreenRP)
-    presentPipeline = createPipeline[PresentShader](renderPass = presentRP)
+    drawPipeline = createPipeline(TriangleShader(), renderPass = offscreenRP)
+    presentPipeline = createPipeline(PresentShader(), renderPass = presentRP)
 
   initDescriptorSet(renderdata, presentPipeline.descriptorSetLayouts[0], uniforms1)
 
--- a/tests/test_text.nim	Fri Dec 27 16:43:58 2024 +0700
+++ b/tests/test_text.nim	Fri Dec 27 17:20:31 2024 +0700
@@ -18,8 +18,8 @@
 proc test_01_static_label(time: float32) =
   var font = loadFont[MAX_CODEPOINTS](FONTNAME, lineHeightPixels = 200)
   var renderdata = initRenderData()
-  var pipeline = createPipeline[GlyphShader[MAX_CODEPOINTS]](
-    renderPass = vulkan.swapchain.renderPass
+  var pipeline = createPipeline(
+    GlyphShader[MAX_CODEPOINTS](), renderPass = vulkan.swapchain.renderPass
   )
   var textbuffer = font.initTextBuffer(1000, renderdata, baseScale = 0.1)
 
@@ -65,8 +65,8 @@
   var font3 = loadFont[MAX_CODEPOINTS]("DejaVuSans.ttf", lineHeightPixels = 160)
   var renderdata = initRenderData()
 
-  var pipeline = createPipeline[GlyphShader[MAX_CODEPOINTS]](
-    renderPass = vulkan.swapchain.renderPass
+  var pipeline = createPipeline(
+    GlyphShader[MAX_CODEPOINTS](), renderPass = vulkan.swapchain.renderPass
   )
 
   font1.upload(renderdata)
@@ -125,8 +125,8 @@
   var font = loadFont[MAX_CODEPOINTS]("DejaVuSans.ttf", lineHeightPixels = 160)
   var renderdata = initRenderData()
 
-  var pipeline = createPipeline[GlyphShader[MAX_CODEPOINTS]](
-    renderPass = vulkan.swapchain.renderPass
+  var pipeline = createPipeline(
+    GlyphShader[MAX_CODEPOINTS](), renderPass = vulkan.swapchain.renderPass
   )
 
   font.upload(renderdata)
@@ -178,8 +178,8 @@
   var font = loadFont[MAX_CODEPOINTS]("DejaVuSans.ttf", lineHeightPixels = 160)
   var renderdata = initRenderData()
 
-  var pipeline = createPipeline[GlyphShader[MAX_CODEPOINTS]](
-    renderPass = vulkan.swapchain.renderPass
+  var pipeline = createPipeline(
+    GlyphShader[MAX_CODEPOINTS](), renderPass = vulkan.swapchain.renderPass
   )
 
   font.upload(renderdata)