diff --git a/internal/graphicsdriver/playstation5/graphics_playstation5.go b/internal/graphicsdriver/playstation5/graphics_playstation5.go index a9bc03279..7ac2a3d3e 100644 --- a/internal/graphicsdriver/playstation5/graphics_playstation5.go +++ b/internal/graphicsdriver/playstation5/graphics_playstation5.go @@ -153,3 +153,7 @@ func (s *Shader) ID() graphicsdriver.ShaderID { func (s *Shader) Dispose() { C.ebitengine_DisposeShader(C.int(s.id)) } + +func RegisterPrecompiledShaders(hash shaderir.SourceHash, vertex, pixel []byte) { + // TODO: Implement this. +} diff --git a/internal/shaderir/pssl/pssl.go b/internal/shaderir/pssl/pssl.go index 5bc8c8e20..2f5c4ba1e 100644 --- a/internal/shaderir/pssl/pssl.go +++ b/internal/shaderir/pssl/pssl.go @@ -15,3 +15,11 @@ // The actual implementation will be provided by -overlay. package pssl + +import ( + "github.com/hajimehoshi/ebiten/v2/internal/shaderir" +) + +func Compile(p *shaderir.Program) (vertexShader, pixelShader string) { + panic("not implemented") +} diff --git a/shaderprecomp/shaderprecomp_darwin.go b/shaderprecomp/shaderprecomp_darwin.go index ed2eaa9ce..b795ba685 100644 --- a/shaderprecomp/shaderprecomp_darwin.go +++ b/shaderprecomp/shaderprecomp_darwin.go @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build !playstation5 + package shaderprecomp import ( diff --git a/shaderprecomp/shaderprecomp_playstation5.go b/shaderprecomp/shaderprecomp_playstation5.go new file mode 100644 index 000000000..102ed5b0c --- /dev/null +++ b/shaderprecomp/shaderprecomp_playstation5.go @@ -0,0 +1,51 @@ +// Copyright 2024 The Ebitengine Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build playstation5 + +package shaderprecomp + +import ( + "io" + + "github.com/hajimehoshi/ebiten/v2/internal/graphics" + "github.com/hajimehoshi/ebiten/v2/internal/graphicsdriver/playstation5" + "github.com/hajimehoshi/ebiten/v2/internal/shaderir" + "github.com/hajimehoshi/ebiten/v2/internal/shaderir/pssl" +) + +// CompileToPSSL compiles the shader source to PlayStaton Shader Language to writers. +// +// CompileToPSSL is concurrent-safe. +func CompileToPSSL(vertexWriter, pixelWriter io.Writer, source *ShaderSource) error { + ir, err := graphics.CompileShader(source.source) + if err != nil { + return err + } + vs, ps := pssl.Compile(ir) + if _, err = vertexWriter.Write([]byte(vs)); err != nil { + return err + } + if _, err = pixelWriter.Write([]byte(ps)); err != nil { + return err + } + return nil +} + +// RegisterPlayStationShaders registers a precompiled PlayStation Shader for a shader source. +// +// RegisterPlayStationShaders is concurrent-safe. +func RegisterPlayStationShaders(source *ShaderSource, vertexShader, pixelShader []byte) { + playstation5.RegisterPrecompiledShaders(shaderir.SourceHash(source.ID()), vertexShader, pixelShader) +} diff --git a/shaderprecomp/shaderprecomp_windows.go b/shaderprecomp/shaderprecomp_windows.go index f1b96bdbb..27c9de404 100644 --- a/shaderprecomp/shaderprecomp_windows.go +++ b/shaderprecomp/shaderprecomp_windows.go @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build !playstation5 + package shaderprecomp import (