From 0b58bcbe1b5c19362618995df75ea6fd7c9d6401 Mon Sep 17 00:00:00 2001 From: Daniel 'ShellFu' Kendrick <3248200+shellfu@users.noreply.github.com> Date: Mon, 22 Jan 2024 16:19:55 -0700 Subject: [PATCH 1/3] Add Compute Shader and SSBO Functions to raylib-go in `rlgl_purego.go` This commit introduces functions related to compute shaders and Shader Buffer Storage Objects (SSBOs) in raylib-go. It adds bindings for loading, dispatching, and managing compute shaders and SSBOs, aligning raylib-go more closely with the raylib C library's capabilities. Specifically, the functions added are `LoadComputeShaderProgram`, `ComputeShaderDispatch`, `LoadShaderBuffer`, `UnloadShaderBuffer`, `UpdateShaderBuffer`, `BindShaderBuffer`, `ReadShaderBuffer`, and `CopyShaderBuffer`. These additions enhance raylib-go's utility for more advanced GPU operations. --- raylib/rlgl_purego.go | 49 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/raylib/rlgl_purego.go b/raylib/rlgl_purego.go index d79c1d3..1c168d6 100644 --- a/raylib/rlgl_purego.go +++ b/raylib/rlgl_purego.go @@ -108,7 +108,14 @@ var rlUnloadShaderProgram func(id uint32) var rlGetLocationUniform func(shaderId uint32, uniformName string) int32 var rlGetLocationAttrib func(shaderId uint32, attribName string) int32 var rlSetUniformSampler func(locIndex int32, textureId uint32) +var rlLoadComputeShaderProgram func(shaderID uint) uint var rlComputeShaderDispatch func(groupX uint32, groupY uint32, groupZ uint32) +var rlLoadShaderBuffer func(size uint32, data unsafe.Pointer, usageHint int32) uint32 +var rlUnloadShaderBuffer func(id uint32) +var rlUpdateShaderBuffer func(id uint32, data unsafe.Pointer, dataSize uint32, offset uint32) +var rlBindShaderBuffer func(id uint32, index uint32) +var rlReadShaderBuffer func(id uint32, dest unsafe.Pointer, count uint32, offset uint32) +var rlCopyShaderBuffer func(destId uint32, srcId uint32, destOffset uint32, srcOffset uint32, count uint32) var rlGetShaderBufferSize func(id uint32) uint32 var rlBindImageTexture func(id uint32, index uint32, format int32, readonly bool) var rlGetMatrixModelview func(matrix uintptr) @@ -223,7 +230,14 @@ func initRlglPurego() { purego.RegisterLibFunc(&rlGetLocationUniform, raylibDll, "rlGetLocationUniform") purego.RegisterLibFunc(&rlGetLocationAttrib, raylibDll, "rlGetLocationAttrib") purego.RegisterLibFunc(&rlSetUniformSampler, raylibDll, "rlSetUniformSampler") + purego.RegisterLibFunc(&rlLoadComputeShaderProgram, raylibDll, "rlLoadComputeShaderProgram") purego.RegisterLibFunc(&rlComputeShaderDispatch, raylibDll, "rlComputeShaderDispatch") + purego.RegisterLibFunc(&rlLoadShaderBuffer, raylibDll, "rlLoadShaderBuffer") + purego.RegisterLibFunc(&rlUnloadShaderBuffer, "rlUnloadShaderBuffer") + purego.RegisterLibFunc(&rlUpdateShaderBuffer, raylibDll, "rlUpdateShaderBuffer") + purego.RegisterLibFunc(&rlBindShaderBuffer, raylibDll, "rlBindShaderBuffer") + purego.RegisterLibFunc(&rlReadShaderBuffer, raylibDll, "rlReadShaderBuffer") + purego.RegisterLibFunc(&rlCopyShaderBuffer, raylibDll, "rlCopyShaderBuffer") purego.RegisterLibFunc(&rlGetShaderBufferSize, raylibDll, "rlGetShaderBufferSize") purego.RegisterLibFunc(&rlBindImageTexture, raylibDll, "rlBindImageTexture") purego.RegisterLibFunc(&rlGetMatrixModelview, raylibDll, "rlGetMatrixModelview") @@ -746,11 +760,46 @@ func SetUniformSampler(locIndex int32, textureId uint32) { rlSetUniformSampler(locIndex, textureId) } +// LoadComputeShaderProgram - Load compute shader program +func LoadComputeShaderProgram(shaderID uint32) uint32 { + return rlLoadComputeShaderProgram(shaderID) +} + // ComputeShaderDispatch - Dispatch compute shader (equivalent to *draw* for graphics pilepine) func ComputeShaderDispatch(groupX uint32, groupY uint32, groupZ uint32) { rlComputeShaderDispatch(groupX, groupY, groupZ) } +// LoadShaderBuffer loads a shader storage buffer object (SSBO) +func LoadShaderBuffer(size uint32, data unsafe.Pointer, usageHint int32) uint32 { + rlLoadShaderBuffer(size, data, usageHint) +} + +// UnloadShaderBuffer - Unload shader storage buffer object (SSBO) +func UnloadShaderBuffer(id uint32) { + rlUnloadShaderBuffer(id) +} + +// UpdateShaderBuffer - Update SSBO buffer data +func UpdateShaderBuffer(id uint32, data unsafe.Pointer, dataSize uint32, offset uint32) { + rlUpdateShaderBuffer(id, data, dataSize, offset) +} + +// BindShaderBuffer - Bind SSBO buffer +func BindShaderBuffer(id uint32, index uint32) { + rlBindShaderBuffer(id, index) +} + +// ReadShaderBuffer - Read SSBO buffer data (GPU->CPU) +func ReadShaderBuffer(id uint32, dest unsafe.Pointer, count uint32, offset uint32) { + rlReadShaderBuffer(id, dest, count, offset) +} + +// CopyShaderBuffer - Copy SSBO data between buffers +func CopyShaderBuffer(destId uint32, srcId uint32, destOffset uint32, srcOffset uint32, count uint32) { + rlCopyShaderBuffer(destId, srcId, destOffset, srcOffset, count) +} + // GetShaderBufferSize - Get SSBO buffer size func GetShaderBufferSize(id uint32) uint32 { return rlGetShaderBufferSize(id) From 2a08e83ca45789813879fd63b671c2b91c8f7084 Mon Sep 17 00:00:00 2001 From: JupiterRider <60042618+JupiterRider@users.noreply.github.com> Date: Tue, 23 Jan 2024 17:56:50 +0100 Subject: [PATCH 2/3] Fix typo and data-types --- raylib/rlgl_cgo.go | 6 +++--- raylib/rlgl_purego.go | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/raylib/rlgl_cgo.go b/raylib/rlgl_cgo.go index af82f71..c39a2eb 100644 --- a/raylib/rlgl_cgo.go +++ b/raylib/rlgl_cgo.go @@ -9,7 +9,7 @@ import "C" import ( "unsafe" ) - +rlLoadComputeShaderProgram // SetMatrixProjection - Set a custom projection matrix (replaces internal projection matrix) func SetMatrixProjection(proj Matrix) { cproj := proj.cptr() @@ -668,9 +668,9 @@ func SetUniformSampler(locIndex int32, textureId uint32) { } // LoadComputeShaderProgram - -func LoadComputeShaderProgram(shaderID uint) uint { +func LoadComputeShaderProgram(shaderID uint32) uint32 { cshaderID := C.uint(shaderID) - return uint(C.rlLoadComputeShaderProgram(cshaderID)) + return uint32(C.rlLoadComputeShaderProgram(cshaderID)) } // ComputeShaderDispatch - Dispatch compute shader (equivalent to *draw* for graphics pilepine) diff --git a/raylib/rlgl_purego.go b/raylib/rlgl_purego.go index 1c168d6..ccb5029 100644 --- a/raylib/rlgl_purego.go +++ b/raylib/rlgl_purego.go @@ -108,7 +108,7 @@ var rlUnloadShaderProgram func(id uint32) var rlGetLocationUniform func(shaderId uint32, uniformName string) int32 var rlGetLocationAttrib func(shaderId uint32, attribName string) int32 var rlSetUniformSampler func(locIndex int32, textureId uint32) -var rlLoadComputeShaderProgram func(shaderID uint) uint +var rlLoadComputeShaderProgram func(shaderID uint32) uint32 var rlComputeShaderDispatch func(groupX uint32, groupY uint32, groupZ uint32) var rlLoadShaderBuffer func(size uint32, data unsafe.Pointer, usageHint int32) uint32 var rlUnloadShaderBuffer func(id uint32) @@ -233,7 +233,7 @@ func initRlglPurego() { purego.RegisterLibFunc(&rlLoadComputeShaderProgram, raylibDll, "rlLoadComputeShaderProgram") purego.RegisterLibFunc(&rlComputeShaderDispatch, raylibDll, "rlComputeShaderDispatch") purego.RegisterLibFunc(&rlLoadShaderBuffer, raylibDll, "rlLoadShaderBuffer") - purego.RegisterLibFunc(&rlUnloadShaderBuffer, "rlUnloadShaderBuffer") + purego.RegisterLibFunc(&rlUnloadShaderBuffer, raylibDll, "rlUnloadShaderBuffer") purego.RegisterLibFunc(&rlUpdateShaderBuffer, raylibDll, "rlUpdateShaderBuffer") purego.RegisterLibFunc(&rlBindShaderBuffer, raylibDll, "rlBindShaderBuffer") purego.RegisterLibFunc(&rlReadShaderBuffer, raylibDll, "rlReadShaderBuffer") @@ -772,7 +772,7 @@ func ComputeShaderDispatch(groupX uint32, groupY uint32, groupZ uint32) { // LoadShaderBuffer loads a shader storage buffer object (SSBO) func LoadShaderBuffer(size uint32, data unsafe.Pointer, usageHint int32) uint32 { - rlLoadShaderBuffer(size, data, usageHint) + return rlLoadShaderBuffer(size, data, usageHint) } // UnloadShaderBuffer - Unload shader storage buffer object (SSBO) From 3bc33ec8b7402f1de548de9767a5b4b199962ee0 Mon Sep 17 00:00:00 2001 From: JupiterRider <60042618+JupiterRider@users.noreply.github.com> Date: Tue, 23 Jan 2024 17:58:33 +0100 Subject: [PATCH 3/3] Update rlgl_cgo.go --- raylib/rlgl_cgo.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raylib/rlgl_cgo.go b/raylib/rlgl_cgo.go index c39a2eb..15f0067 100644 --- a/raylib/rlgl_cgo.go +++ b/raylib/rlgl_cgo.go @@ -9,7 +9,7 @@ import "C" import ( "unsafe" ) -rlLoadComputeShaderProgram + // SetMatrixProjection - Set a custom projection matrix (replaces internal projection matrix) func SetMatrixProjection(proj Matrix) { cproj := proj.cptr()