gpu: introduce pipeline abstraction

Modern API such as Metal and Vulkan want clients to compile expensive
state changes into pipeline objects. Change our GPU driver abstraction
to match, thereby paving the way for future drivers.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2021-08-10 16:18:47 +02:00
parent 13b93b27d8
commit afaa31eca8
9 changed files with 548 additions and 400 deletions
+10
View File
@@ -1449,6 +1449,16 @@ func IUnknownQueryInterface(obj unsafe.Pointer, queryInterfaceMethod uintptr, gu
return ref, nil
}
func IUnknownAddRef(obj unsafe.Pointer, addRefMethod uintptr) {
syscall.Syscall(
addRefMethod,
1,
uintptr(obj),
0,
0,
)
}
func IUnknownRelease(obj unsafe.Pointer, releaseMethod uintptr) {
syscall.Syscall(
releaseMethod,
+4 -4
View File
@@ -9,12 +9,12 @@ import (
)
func CreateProgram(ctx *Functions, vsSrc, fsSrc string, attribs []string) (Program, error) {
vs, err := createShader(ctx, VERTEX_SHADER, vsSrc)
vs, err := CreateShader(ctx, VERTEX_SHADER, vsSrc)
if err != nil {
return Program{}, err
}
defer ctx.DeleteShader(vs)
fs, err := createShader(ctx, FRAGMENT_SHADER, fsSrc)
fs, err := CreateShader(ctx, FRAGMENT_SHADER, fsSrc)
if err != nil {
return Program{}, err
}
@@ -38,7 +38,7 @@ func CreateProgram(ctx *Functions, vsSrc, fsSrc string, attribs []string) (Progr
}
func CreateComputeProgram(ctx *Functions, src string) (Program, error) {
cs, err := createShader(ctx, COMPUTE_SHADER, src)
cs, err := CreateShader(ctx, COMPUTE_SHADER, src)
if err != nil {
return Program{}, err
}
@@ -57,7 +57,7 @@ func CreateComputeProgram(ctx *Functions, src string) (Program, error) {
return prog, nil
}
func createShader(ctx *Functions, typ Enum, src string) (Shader, error) {
func CreateShader(ctx *Functions, typ Enum, src string) (Shader, error) {
sh := ctx.CreateShader(typ)
if !sh.Valid() {
return Shader{}, errors.New("glCreateShader failed")