Skip to content

Commit

Permalink
Revert "shaderprecomp: accept an ID instead of source to register"
Browse files Browse the repository at this point in the history
This reverts commit ecc3f29.

Reason: we are considering to remove ShaderSourceID

Updates #2861
Updates #2999
  • Loading branch information
hajimehoshi committed May 26, 2024
1 parent ecc3f29 commit 3279688
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 85 deletions.
2 changes: 1 addition & 1 deletion examples/shaderprecomp/fxc/gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func run() error {
if errors.Is(err, exec.ErrNotFound) {
fmt.Fprintln(os.Stderr, "fxc.exe not found. Please install Windows SDK.")
fmt.Fprintln(os.Stderr, "See https://learn.microsoft.com/en-us/windows/win32/direct3dtools/fxc for more details.")
fmt.Fprintln(os.Stderr, "HINT: On PowerShell, you can add a path to the PATH environment variable temporarily like:")
fmt.Fprintln(os.Stderr, "On PowerShell, you can add a path to the PATH environment variable temporarily like:")
fmt.Fprintln(os.Stderr)
fmt.Fprintln(os.Stderr, ` & (Get-Process -Id $PID).Path { $env:PATH="C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64;"+$env:PATH; go generate .\examples\shaderprecomp\fxc\ }`)
fmt.Fprintln(os.Stderr)
Expand Down
39 changes: 12 additions & 27 deletions examples/shaderprecomp/register_darwin.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@ package main

import (
"embed"
"errors"
"fmt"
"io/fs"
"os"
"strings"

"github.com/hajimehoshi/ebiten/v2/shaderprecomp"
)
Expand All @@ -27,40 +28,24 @@ import (
var metallibs embed.FS

func registerPrecompiledShaders() error {
ents, err := metallibs.ReadDir("metallib")
srcs := shaderprecomp.AppendBuildinShaderSources(nil)
defaultShaderSource, err := shaderprecomp.NewShaderSource(defaultShaderSourceBytes)
if err != nil {
return err
}
srcs = append(srcs, defaultShaderSource)

var registered bool
for _, ent := range ents {
if ent.IsDir() {
continue
}

const suffix = ".metallib"
name := ent.Name()
if !strings.HasSuffix(name, suffix) {
continue
}

id := name[:len(name)-len(suffix)]
srcID, err := shaderprecomp.ParseSourceID(id)
if err != nil {
continue
}

for _, src := range srcs {
name := src.ID().String() + ".metallib"
lib, err := metallibs.ReadFile("metallib/" + name)
if err != nil {
if errors.Is(err, fs.ErrNotExist) {
fmt.Fprintf(os.Stderr, "precompiled Metal library %s was not found. Run 'go generate' for 'metallib' directory to generate them.\n", name)
continue
}
return err
}

shaderprecomp.RegisterMetalLibrary(srcID, lib)
registered = true
}

if !registered {
fmt.Fprintln(os.Stderr, "precompiled Metal libraries were not found. Run 'go generate' for 'metallib' directory to generate them.")
shaderprecomp.RegisterMetalLibrary(src, lib)
}

return nil
Expand Down
48 changes: 20 additions & 28 deletions examples/shaderprecomp/register_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@ package main

import (
"embed"
"errors"
"fmt"
"io/fs"
"os"
"strings"

"github.com/hajimehoshi/ebiten/v2/shaderprecomp"
)
Expand All @@ -29,44 +30,35 @@ import (
var fxcs embed.FS

func registerPrecompiledShaders() error {
ents, err := fxcs.ReadDir("fxc")
srcs := shaderprecomp.AppendBuildinShaderSources(nil)
defaultShaderSource, err := shaderprecomp.NewShaderSource(defaultShaderSourceBytes)
if err != nil {
return err
}
srcs = append(srcs, defaultShaderSource)

var registered bool
for _, ent := range ents {
if ent.IsDir() {
continue
}

const suffix = "_vs.fxc"
name := ent.Name()
if !strings.HasSuffix(name, suffix) {
continue
}

id := name[:len(name)-len(suffix)]
srcID, err := shaderprecomp.ParseSourceID(id)
if err != nil {
continue
}

vs, err := fxcs.ReadFile("fxc/" + id + "_vs.fxc")
for _, src := range srcs {
vsname := src.ID().String() + "_vs.fxc"
vs, err := fxcs.ReadFile("fxc/" + vsname)
if err != nil {
if errors.Is(err, fs.ErrNotExist) {
fmt.Fprintf(os.Stderr, "precompiled HLSL library %s was not found. Run 'go generate' for 'fxc' directory to generate them.\n", vsname)
continue
}
return err
}
ps, err := fxcs.ReadFile("fxc/" + id + "_ps.fxc")

psname := src.ID().String() + "_ps.fxc"
ps, err := fxcs.ReadFile("fxc/" + psname)
if err != nil {
if errors.Is(err, fs.ErrNotExist) {
fmt.Fprintf(os.Stderr, "precompiled HLSL library %s was not found. Run 'go generate' for 'fxc' directory to generate them.\n", psname)
continue
}
return err
}

shaderprecomp.RegisterFXCs(srcID, vs, ps)
registered = true
}

if !registered {
fmt.Fprintln(os.Stderr, "precompiled HLSL libraries were not found. Run 'go generate' for 'fxc' directory to generate them.")
shaderprecomp.RegisterFXCs(src, vs, ps)
}

return nil
Expand Down
14 changes: 0 additions & 14 deletions internal/shaderir/program.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ package shaderir

import (
"encoding/hex"
"fmt"
"go/constant"
"go/token"
"hash/fnv"
Expand All @@ -43,19 +42,6 @@ func CalcSourceHash(source []byte) SourceHash {
return hash
}

func ParseSourceHash(s string) (SourceHash, error) {
bs, err := hex.DecodeString(s)
if err != nil {
return SourceHash{}, err
}
var hash SourceHash
if len(bs) != len(hash) {
return SourceHash{}, fmt.Errorf("shaderir: invalid size hash: %s", s)
}
copy(hash[:], bs)
return hash, nil
}

func (s SourceHash) String() string {
return hex.EncodeToString(s[:])
}
Expand Down
9 changes: 0 additions & 9 deletions shaderprecomp/shaderprecomp.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,15 +64,6 @@ func (s *ShaderSource) ID() ShaderSourceID {
// ShaderSourceID is a uniuqe identifier for a shader source.
type ShaderSourceID [16]byte

// ParseSourceID parses a string representation of the shader source ID.
func ParseSourceID(s string) (ShaderSourceID, error) {
h, err := shaderir.ParseSourceHash(s)
if err != nil {
return ShaderSourceID{}, err
}
return ShaderSourceID(h), nil
}

// String returns a string representation of the shader source ID.
func (s ShaderSourceID) String() string {
return shaderir.SourceHash(s).String()
Expand Down
6 changes: 3 additions & 3 deletions shaderprecomp/shaderprecomp_darwin.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,11 @@ func CompileToMSL(w io.Writer, source *ShaderSource) error {
return nil
}

// RegisterMetalLibrary registers a precompiled Metal library for a shader source ID.
// RegisterMetalLibrary registers a precompiled Metal library for a shader source.
// library must be the content of a .metallib file.
// For more details, see https://developer.apple.com/documentation/metal/shader_libraries/building_a_shader_library_by_precompiling_source_files.
//
// RegisterMetalLibrary is concurrent-safe.
func RegisterMetalLibrary(id ShaderSourceID, library []byte) {
metal.RegisterPrecompiledLibrary(shaderir.SourceHash(id), library)
func RegisterMetalLibrary(source *ShaderSource, library []byte) {
metal.RegisterPrecompiledLibrary(shaderir.SourceHash(source.ID()), library)
}
6 changes: 3 additions & 3 deletions shaderprecomp/shaderprecomp_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,11 @@ func CompileToHLSL(vertexWriter, pixelWriter io.Writer, source *ShaderSource) er
return nil
}

// RegisterFXCs registers a precompiled HLSL (FXC) for a shader source ID.
// RegisterFXCs registers a precompiled HLSL (FXC) for a shader source.
// vertexFXC and pixelFXC must be the content of .fxc files generated by `fxc` command.
// For more details, see https://learn.microsoft.com/en-us/windows/win32/direct3dtools/dx-graphics-tools-fxc-using.
//
// RegisterFXCs is concurrent-safe.
func RegisterFXCs(id ShaderSourceID, vertexFXC, pixelFXC []byte) {
directx.RegisterPrecompiledFXCs(shaderir.SourceHash(id), vertexFXC, pixelFXC)
func RegisterFXCs(source *ShaderSource, vertexFXC, pixelFXC []byte) {
directx.RegisterPrecompiledFXCs(shaderir.SourceHash(source.ID()), vertexFXC, pixelFXC)
}

0 comments on commit 3279688

Please sign in to comment.