diff --git a/internal/graphicscommand/bench_test.go b/internal/graphicscommand/bench_test.go new file mode 100644 index 000000000..03a7cf0a1 --- /dev/null +++ b/internal/graphicscommand/bench_test.go @@ -0,0 +1,34 @@ +// 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. + +package graphicscommand_test + +import ( + "image" + "testing" + + "github.com/hajimehoshi/ebiten/v2/internal/graphics" + "github.com/hajimehoshi/ebiten/v2/internal/graphicscommand" +) + +func BenchmarkPrependPreservedUniforms(b *testing.B) { + var uniforms [graphics.PreservedUniformUint32Count]uint32 + dst := graphicscommand.NewImage(16, 16, false, "") + src := graphicscommand.NewImage(16, 16, false, "") + dr := image.Rect(0, 0, 16, 16) + sr := image.Rect(0, 0, 16, 16) + for i := 0; i < b.N; i++ { + graphicscommand.PrependPreservedUniforms(uniforms[:], nearestFilterShader, dst, [graphics.ShaderSrcImageCount]*graphicscommand.Image{src}, dr, [graphics.ShaderSrcImageCount]image.Rectangle{sr}) + } +} diff --git a/internal/graphicscommand/commandqueue.go b/internal/graphicscommand/commandqueue.go index 388a18563..519b25b12 100644 --- a/internal/graphicscommand/commandqueue.go +++ b/internal/graphicscommand/commandqueue.go @@ -349,7 +349,10 @@ func (q *commandQueue) prependPreservedUniforms(uniforms []uint32, shader *Shade origUniforms := uniforms uniforms = q.uint32sBuffer.alloc(len(origUniforms) + graphics.PreservedUniformUint32Count) copy(uniforms[graphics.PreservedUniformUint32Count:], origUniforms) + return prependPreservedUniforms(uniforms, shader, dst, srcs, dstRegion, srcRegions) +} +func prependPreservedUniforms(uniforms []uint32, shader *Shader, dst *Image, srcs [graphics.ShaderSrcImageCount]*Image, dstRegion image.Rectangle, srcRegions [graphics.ShaderSrcImageCount]image.Rectangle) []uint32 { // Set the destination texture size. dw, dh := dst.InternalSize() uniforms[0] = math.Float32bits(float32(dw)) diff --git a/internal/graphicscommand/export_test.go b/internal/graphicscommand/export_test.go index 016c4569f..a17cd7dfb 100644 --- a/internal/graphicscommand/export_test.go +++ b/internal/graphicscommand/export_test.go @@ -14,8 +14,18 @@ package graphicscommand +import ( + "image" + + "github.com/hajimehoshi/ebiten/v2/internal/graphics" +) + type WritePixelsCommandArgs = writePixelsCommandArgs func (i *Image) BufferedWritePixelsArgsForTesting() []WritePixelsCommandArgs { return i.bufferedWritePixelsArgs } + +func PrependPreservedUniforms(uniforms []uint32, shader *Shader, dst *Image, srcs [graphics.ShaderSrcImageCount]*Image, dstRegion image.Rectangle, srcRegions [graphics.ShaderSrcImageCount]image.Rectangle) []uint32 { + return prependPreservedUniforms(uniforms, shader, dst, srcs, dstRegion, srcRegions) +}