Skip to content

Commit

Permalink
Merge pull request #33 from floooh/issue1037_bindings_cleanup
Browse files Browse the repository at this point in the history
Changes for sokol-gfx bindings cleanup.
  • Loading branch information
floooh authored Nov 7, 2024
2 parents a4f38f3 + 38041f2 commit 32b73db
Show file tree
Hide file tree
Showing 36 changed files with 5,583 additions and 4,330 deletions.
4 changes: 2 additions & 2 deletions examples/blend.nim
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ proc frame() {.cdecl.} =
tick += 1.0 * time
sg.applyPipeline(bgPip)
sg.applyBindings(bindings)
sg.applyUniforms(shaderStageFs, shd.slotBgFsParams, sg.Range(addr: bgFsParams.addr, size: bgFsParams.sizeof))
sg.applyUniforms(shd.ubBgFsParams, sg.Range(addr: bgFsParams.addr, size: bgFsParams.sizeof))
sg.draw(0, 4, 1)

# draw the blended quads
Expand All @@ -109,7 +109,7 @@ proc frame() {.cdecl.} =
let quadVsParams = QuadVsParams(mvp: viewProj * model)
sg.applyPipeline(pip[src][dst])
sg.applyBindings(bindings)
sg.applyUniforms(shaderStageVs, shd.slotQuadVsParams, sg.Range(addr: quadVsParams.addr, size: quadVsParams.sizeof))
sg.applyUniforms(shd.ubQuadVsParams, sg.Range(addr: quadVsParams.addr, size: quadVsParams.sizeof))
sg.draw(0, 4, 1)
r0 += 0.6
sg.endPass()
Expand Down
2 changes: 1 addition & 1 deletion examples/cube.nim
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ proc frame() {.cdecl.} =
sg.beginPass(Pass(action: passAction, swapchain: sglue.swapchain()))
sg.applyPipeline(pip)
sg.applyBindings(bindings)
sg.applyUniforms(shaderStageVs, shd.slotVsParams, sg.Range(addr: vsParams.addr, size: vsParams.sizeof))
sg.applyUniforms(shd.ubVsParams, sg.Range(addr: vsParams.addr, size: vsParams.sizeof))
sg.draw(0, 36, 1)
sg.endPass()
sg.commit()
Expand Down
2 changes: 1 addition & 1 deletion examples/instancing.nim
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ proc frame() {.cdecl.} =
sg.beginPass(Pass(action: passAction, swapchain: sglue.swapchain()))
sg.applyPipeline(pip)
sg.applyBindings(bindings)
sg.applyUniforms(shaderStageVs, shd.slotVsParams, sg.Range(addr: vsParams.addr, size: vsParams.sizeof))
sg.applyUniforms(shd.ubVsParams, sg.Range(addr: vsParams.addr, size: vsParams.sizeof))
sg.draw(0, 24, curNumParticles.int32)
sg.endPass()
sg.commit()
Expand Down
28 changes: 13 additions & 15 deletions examples/mrt.nim
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ proc createOffscreenAttachments(width: int32, height: int32) =

# also need to update the fullscreen-quad texture bindings
for i in 0..<3:
fsqBindings.fs.images[i] = offscreenAttachmentsDesc.colors[i].image
fsqBindings.images[i] = offscreenAttachmentsDesc.colors[i].image

# listen for window-resize events and recreate offscreen rendertargets
proc event(ev: ptr Event) {.cdecl.} =
Expand Down Expand Up @@ -183,16 +183,14 @@ proc init() {.cdecl.} =

fsqBindings = Bindings(
vertexBuffers: [ quadVbuf ],
fs: StageBindings(
images: [
offscreenAttachmentsDesc.colors[0].image,
offscreenAttachmentsDesc.colors[1].image,
offscreenAttachmentsDesc.colors[2].image
],
samplers: [
smp,
]
)
images: [
offscreenAttachmentsDesc.colors[0].image,
offscreenAttachmentsDesc.colors[1].image,
offscreenAttachmentsDesc.colors[2].image
],
samplers: [
smp,
]
)

# shader, pipeline and bindings to render debug-visualization quads
Expand All @@ -206,7 +204,7 @@ proc init() {.cdecl.} =
primitiveType: primitiveTypeTriangleStrip,
))
dbgBindings.vertexBuffers[0] = quadVbuf
dbgBindings.fs.samplers[0] = smp
dbgBindings.samplers[0] = smp

proc frame() {.cdecl.} =
let t = sapp.frameDuration().float32 * 60
Expand All @@ -229,20 +227,20 @@ proc frame() {.cdecl.} =
sg.beginPass(Pass(action: offscreenPassAction, attachments: offscreenAttachments))
sg.applyPipeline(offscreenPip)
sg.applyBindings(offscreenBindings)
sg.applyUniforms(shaderStageVs, shd.slotOffscreenParams, sg.Range(addr: offscreenParams.addr, size: offscreenParams.sizeof))
sg.applyUniforms(shd.ubOffscreenParams, sg.Range(addr: offscreenParams.addr, size: offscreenParams.sizeof))
sg.draw(0, 36, 1)
sg.endPass()

# render fullscreen quad with the 'composed image', plus 3 small debug-view quads
sg.beginPass(Pass(action: defaultPassAction, swapchain: sglue.swapchain()))
sg.applyPipeline(fsqPip)
sg.applyBindings(fsqBindings)
sg.applyUniforms(shaderStageVs, shd.slotFsqParams, sg.Range(addr: fsqParams.addr, size: fsqParams.sizeof))
sg.applyUniforms(shd.ubFsqParams, sg.Range(addr: fsqParams.addr, size: fsqParams.sizeof))
sg.draw(0, 4, 1)
sg.applyPipeline(dbgPip)
for i in 0..<3:
sg.applyViewport(i.int32*100, 0, 100, 100, false)
dbgBindings.fs.images[0] = offscreenAttachmentsDesc.colors[i].image
dbgBindings.images[0] = offscreenAttachmentsDesc.colors[i].image
sg.applyBindings(dbgBindings)
sg.draw(0, 4, 1)
sg.endPass()
Expand Down
2 changes: 1 addition & 1 deletion examples/noninterleaved.nim
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ proc frame() {.cdecl.} =
sg.beginPass(Pass(action: passAction, swapchain: sglue.swapchain()))
sg.applyPipeline(pip)
sg.applyBindings(bindings)
sg.applyUniforms(shaderStageVs, shd.slotVsParams, sg.Range(addr: vsParams.addr, size: vsParams.sizeof))
sg.applyUniforms(shd.ubVsParams, sg.Range(addr: vsParams.addr, size: vsParams.sizeof))
sg.draw(0, 36, 1)
sg.endPass()
sg.commit()
Expand Down
10 changes: 4 additions & 6 deletions examples/offscreen.nim
Original file line number Diff line number Diff line change
Expand Up @@ -134,10 +134,8 @@ proc init() {.cdecl.} =
defaultBindings = Bindings(
vertexBuffers: [ vbuf ],
indexBuffer: ibuf,
fs: StageBindings(
images: [ colorImg ],
samplers: [ smp ]
)
images: [ colorImg ],
samplers: [ smp ]
)

# a helper function to computer model-view-projection matrix
Expand All @@ -162,7 +160,7 @@ proc frame() {.cdecl.} =
sg.beginPass(Pass(action: offscreenPassAction, attachments: offscreenAttachments))
sg.applyPipeline(offscreenPip)
sg.applyBindings(offscreenBindings)
sg.applyUniforms(shaderStageVs, shd.slotVsParams, sg.Range(addr: offscreenVsParams.addr, size: offscreenVsParams.sizeof))
sg.applyUniforms(shd.ubVsParams, sg.Range(addr: offscreenVsParams.addr, size: offscreenVsParams.sizeof))
sg.draw(donut.baseElement, donut.numElements, 1)
sg.endPass()

Expand All @@ -174,7 +172,7 @@ proc frame() {.cdecl.} =
sg.beginPass(Pass(action: defaultPassAction, swapchain: sglue.swapchain()))
sg.applyPipeline(defaultPip)
sg.applyBindings(defaultBindings)
sg.applyUniforms(shaderStageVs, shd.slotVsParams, sg.Range(addr: defaultVsParams.addr, size: offscreenVsParams.sizeof))
sg.applyUniforms(shd.ubVsParams, sg.Range(addr: defaultVsParams.addr, size: offscreenVsParams.sizeof))
sg.draw(sphere.baseElement, sphere.numElements, 1)
sg.endPass()
sg.commit()
Expand Down
4 changes: 2 additions & 2 deletions examples/shaders/blend.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ void main() {
@end

@fs fs_bg
uniform bg_fs_params {
layout(binding=0) uniform bg_fs_params {
float tick;
};

Expand All @@ -24,7 +24,7 @@ void main() {
@program bg vs_bg fs_bg

@vs vs_quad
uniform quad_vs_params {
layout(binding=0) uniform quad_vs_params {
mat4 mvp;
};

Expand Down
207 changes: 110 additions & 97 deletions examples/shaders/blend.nim
Original file line number Diff line number Diff line change
Expand Up @@ -12,29 +12,30 @@ import ../math/mat4
# =========
# Shader program: 'bg':
# Get shader desc: bgShaderDesc(sg.queryBackend())
# Vertex shader: vs_bg
# Attributes:
# attrVsBgPosition => 0
# Fragment shader: fs_bg
# Uniform block 'bg_fs_params':
# Nim struct: BgFsParams
# Bind slot: slotBgFsParams => 0
# Vertex Shader: vs_bg
# Fragment Shader: fs_bg
# Attributes:
# attrBgPosition => 0
# Shader program: 'quad':
# Get shader desc: quadShaderDesc(sg.queryBackend())
# Vertex shader: vs_quad
# Attributes:
# attrVsQuadPosition => 0
# attrVsQuadColor0 => 1
# Uniform block 'quad_vs_params':
# Nim struct: QuadVsParams
# Bind slot: slotQuadVsParams => 0
# Fragment shader: fs_quad
#
const attrVsBgPosition* = 0
const attrVsQuadPosition* = 0
const attrVsQuadColor0* = 1
const slotBgFsParams* = 0
const slotQuadVsParams* = 0
# Vertex Shader: vs_quad
# Fragment Shader: fs_quad
# Attributes:
# attrQuadPosition => 0
# attrQuadColor0 => 1
# Bindings:
# Uniform block 'bg_fs_params':
# Nim struct: BgFsParams
# Bind slot: ubBgFsParams => 0
# Uniform block 'quad_vs_params':
# Nim struct: QuadVsParams
# Bind slot: ubQuadVsParams => 0
#
const attrBgPosition* = 0
const attrQuadPosition* = 0
const attrQuadColor0* = 1
const ubBgFsParams* = 0
const ubQuadVsParams* = 0
type BgFsParams* {.packed.} = object
tick* {.align(16).}: float32
pad_4: array[12, uint8]
Expand Down Expand Up @@ -801,91 +802,103 @@ proc bgShaderDesc*(backend: sg.Backend): sg.ShaderDesc =
result.label = "bg_shader"
case backend:
of backendGlcore:
result.attrs[0].name = "position"
result.vs.source = cast[cstring](addr(vsBgSourceGlsl430))
result.vs.entry = "main"
result.fs.source = cast[cstring](addr(fsBgSourceGlsl430))
result.fs.entry = "main"
result.fs.uniformBlocks[0].size = 16
result.fs.uniformBlocks[0].layout = uniformLayoutStd140
result.fs.uniformBlocks[0].uniforms[0].name = "bg_fs_params"
result.fs.uniformBlocks[0].uniforms[0].type = uniformTypeFloat4
result.fs.uniformBlocks[0].uniforms[0].arrayCount = 1
result.vertexFunc.source = cast[cstring](addr(vsBgSourceGlsl430))
result.vertexFunc.entry = "main"
result.fragmentFunc.source = cast[cstring](addr(fsBgSourceGlsl430))
result.fragmentFunc.entry = "main"
result.attrs[0].glslName = "position"
result.uniformBlocks[0].stage = shaderStageFragment
result.uniformBlocks[0].layout = uniformLayoutStd140
result.uniformBlocks[0].size = 16
result.uniformBlocks[0].glslUniforms[0].type = uniformTypeFloat4
result.uniformBlocks[0].glslUniforms[0].arrayCount = 1
result.uniformBlocks[0].glslUniforms[0].glslName = "bg_fs_params"
of backendGles3:
result.attrs[0].name = "position"
result.vs.source = cast[cstring](addr(vsBgSourceGlsl300es))
result.vs.entry = "main"
result.fs.source = cast[cstring](addr(fsBgSourceGlsl300es))
result.fs.entry = "main"
result.fs.uniformBlocks[0].size = 16
result.fs.uniformBlocks[0].layout = uniformLayoutStd140
result.fs.uniformBlocks[0].uniforms[0].name = "bg_fs_params"
result.fs.uniformBlocks[0].uniforms[0].type = uniformTypeFloat4
result.fs.uniformBlocks[0].uniforms[0].arrayCount = 1
result.vertexFunc.source = cast[cstring](addr(vsBgSourceGlsl300es))
result.vertexFunc.entry = "main"
result.fragmentFunc.source = cast[cstring](addr(fsBgSourceGlsl300es))
result.fragmentFunc.entry = "main"
result.attrs[0].glslName = "position"
result.uniformBlocks[0].stage = shaderStageFragment
result.uniformBlocks[0].layout = uniformLayoutStd140
result.uniformBlocks[0].size = 16
result.uniformBlocks[0].glslUniforms[0].type = uniformTypeFloat4
result.uniformBlocks[0].glslUniforms[0].arrayCount = 1
result.uniformBlocks[0].glslUniforms[0].glslName = "bg_fs_params"
of backendD3d11:
result.attrs[0].semName = "TEXCOORD"
result.attrs[0].semIndex = 0
result.vs.source = cast[cstring](addr(vsBgSourceHlsl5))
result.vs.d3d11Target = "vs_5_0"
result.vs.entry = "main"
result.fs.source = cast[cstring](addr(fsBgSourceHlsl5))
result.fs.d3d11Target = "ps_5_0"
result.fs.entry = "main"
result.fs.uniformBlocks[0].size = 16
result.fs.uniformBlocks[0].layout = uniformLayoutStd140
result.vertexFunc.source = cast[cstring](addr(vsBgSourceHlsl5))
result.vertexFunc.d3d11Target = "vs_5_0"
result.vertexFunc.entry = "main"
result.fragmentFunc.source = cast[cstring](addr(fsBgSourceHlsl5))
result.fragmentFunc.d3d11Target = "ps_5_0"
result.fragmentFunc.entry = "main"
result.attrs[0].hlslSemName = "TEXCOORD"
result.attrs[0].hlslSemIndex = 0
result.uniformBlocks[0].stage = shaderStageFragment
result.uniformBlocks[0].layout = uniformLayoutStd140
result.uniformBlocks[0].size = 16
result.uniformBlocks[0].hlslRegisterBN = 0
of backendMetalMacos:
result.vs.source = cast[cstring](addr(vsBgSourceMetalMacos))
result.vs.entry = "main0"
result.fs.source = cast[cstring](addr(fsBgSourceMetalMacos))
result.fs.entry = "main0"
result.fs.uniformBlocks[0].size = 16
result.fs.uniformBlocks[0].layout = uniformLayoutStd140
result.vertexFunc.source = cast[cstring](addr(vsBgSourceMetalMacos))
result.vertexFunc.entry = "main0"
result.fragmentFunc.source = cast[cstring](addr(fsBgSourceMetalMacos))
result.fragmentFunc.entry = "main0"
result.uniformBlocks[0].stage = shaderStageFragment
result.uniformBlocks[0].layout = uniformLayoutStd140
result.uniformBlocks[0].size = 16
result.uniformBlocks[0].mslBufferN = 0
else: discard
proc quadShaderDesc*(backend: sg.Backend): sg.ShaderDesc =
result.label = "quad_shader"
case backend:
of backendGlcore:
result.attrs[0].name = "position"
result.attrs[1].name = "color0"
result.vs.source = cast[cstring](addr(vsQuadSourceGlsl430))
result.vs.entry = "main"
result.vs.uniformBlocks[0].size = 64
result.vs.uniformBlocks[0].layout = uniformLayoutStd140
result.vs.uniformBlocks[0].uniforms[0].name = "quad_vs_params"
result.vs.uniformBlocks[0].uniforms[0].type = uniformTypeFloat4
result.vs.uniformBlocks[0].uniforms[0].arrayCount = 4
result.fs.source = cast[cstring](addr(fsQuadSourceGlsl430))
result.fs.entry = "main"
result.vertexFunc.source = cast[cstring](addr(vsQuadSourceGlsl430))
result.vertexFunc.entry = "main"
result.fragmentFunc.source = cast[cstring](addr(fsQuadSourceGlsl430))
result.fragmentFunc.entry = "main"
result.attrs[0].glslName = "position"
result.attrs[1].glslName = "color0"
result.uniformBlocks[0].stage = shaderStageVertex
result.uniformBlocks[0].layout = uniformLayoutStd140
result.uniformBlocks[0].size = 64
result.uniformBlocks[0].glslUniforms[0].type = uniformTypeFloat4
result.uniformBlocks[0].glslUniforms[0].arrayCount = 4
result.uniformBlocks[0].glslUniforms[0].glslName = "quad_vs_params"
of backendGles3:
result.attrs[0].name = "position"
result.attrs[1].name = "color0"
result.vs.source = cast[cstring](addr(vsQuadSourceGlsl300es))
result.vs.entry = "main"
result.vs.uniformBlocks[0].size = 64
result.vs.uniformBlocks[0].layout = uniformLayoutStd140
result.vs.uniformBlocks[0].uniforms[0].name = "quad_vs_params"
result.vs.uniformBlocks[0].uniforms[0].type = uniformTypeFloat4
result.vs.uniformBlocks[0].uniforms[0].arrayCount = 4
result.fs.source = cast[cstring](addr(fsQuadSourceGlsl300es))
result.fs.entry = "main"
result.vertexFunc.source = cast[cstring](addr(vsQuadSourceGlsl300es))
result.vertexFunc.entry = "main"
result.fragmentFunc.source = cast[cstring](addr(fsQuadSourceGlsl300es))
result.fragmentFunc.entry = "main"
result.attrs[0].glslName = "position"
result.attrs[1].glslName = "color0"
result.uniformBlocks[0].stage = shaderStageVertex
result.uniformBlocks[0].layout = uniformLayoutStd140
result.uniformBlocks[0].size = 64
result.uniformBlocks[0].glslUniforms[0].type = uniformTypeFloat4
result.uniformBlocks[0].glslUniforms[0].arrayCount = 4
result.uniformBlocks[0].glslUniforms[0].glslName = "quad_vs_params"
of backendD3d11:
result.attrs[0].semName = "TEXCOORD"
result.attrs[0].semIndex = 0
result.attrs[1].semName = "TEXCOORD"
result.attrs[1].semIndex = 1
result.vs.source = cast[cstring](addr(vsQuadSourceHlsl5))
result.vs.d3d11Target = "vs_5_0"
result.vs.entry = "main"
result.vs.uniformBlocks[0].size = 64
result.vs.uniformBlocks[0].layout = uniformLayoutStd140
result.fs.source = cast[cstring](addr(fsQuadSourceHlsl5))
result.fs.d3d11Target = "ps_5_0"
result.fs.entry = "main"
result.vertexFunc.source = cast[cstring](addr(vsQuadSourceHlsl5))
result.vertexFunc.d3d11Target = "vs_5_0"
result.vertexFunc.entry = "main"
result.fragmentFunc.source = cast[cstring](addr(fsQuadSourceHlsl5))
result.fragmentFunc.d3d11Target = "ps_5_0"
result.fragmentFunc.entry = "main"
result.attrs[0].hlslSemName = "TEXCOORD"
result.attrs[0].hlslSemIndex = 0
result.attrs[1].hlslSemName = "TEXCOORD"
result.attrs[1].hlslSemIndex = 1
result.uniformBlocks[0].stage = shaderStageVertex
result.uniformBlocks[0].layout = uniformLayoutStd140
result.uniformBlocks[0].size = 64
result.uniformBlocks[0].hlslRegisterBN = 0
of backendMetalMacos:
result.vs.source = cast[cstring](addr(vsQuadSourceMetalMacos))
result.vs.entry = "main0"
result.vs.uniformBlocks[0].size = 64
result.vs.uniformBlocks[0].layout = uniformLayoutStd140
result.fs.source = cast[cstring](addr(fsQuadSourceMetalMacos))
result.fs.entry = "main0"
result.vertexFunc.source = cast[cstring](addr(vsQuadSourceMetalMacos))
result.vertexFunc.entry = "main0"
result.fragmentFunc.source = cast[cstring](addr(fsQuadSourceMetalMacos))
result.fragmentFunc.entry = "main0"
result.uniformBlocks[0].stage = shaderStageVertex
result.uniformBlocks[0].layout = uniformLayoutStd140
result.uniformBlocks[0].size = 64
result.uniformBlocks[0].mslBufferN = 0
else: discard
Loading

0 comments on commit 32b73db

Please sign in to comment.