Skip to content

Commit

Permalink
[Tests] Cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
hyazinthh committed Dec 14, 2023
1 parent 2628554 commit c6e1d49
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 340 deletions.
341 changes: 1 addition & 340 deletions src/Tests/Aardvark.Rendering.Tests/Program.fs
Original file line number Diff line number Diff line change
@@ -1,250 +1,7 @@
open Aardvark.Rendering.Tests
open Aardvark.Rendering.GL.Tests

open System
open Aardvark.Base

open FSharp.Data.Adaptive
open Aardvark.Rendering
open Aardvark.Rendering.GL
open OpenTK.Graphics.OpenGL4
open Aardvark.Application
open Aardvark.Application.Slim

open BenchmarkDotNet.Running;
open BenchmarkDotNet.Configs
open BenchmarkDotNet.Jobs
open BenchmarkDotNet.Toolchains

open Expecto

let testCompile() =
use runtime = new Runtime(DebugLevel.None)
let ctx = new Context(runtime, fun () -> ContextHandleOpenTK.create runtime.DebugConfig)
runtime.Initialize(ctx)

let signature =
runtime.CreateFramebufferSignature(
[
DefaultSemantic.Colors, TextureFormat.Rgba8
DefaultSemantic.DepthStencil, TextureFormat.Depth24Stencil8
]
)

let callInfo =
DrawCallInfo(
FaceVertexCount = 6,
InstanceCount = 1
)

let surface =
runtime.PrepareEffect(
signature,
[
DefaultSurfaces.constantColor C4f.Red |> toEffect
]
)

let uniforms (t : V3d) =
UniformProvider.ofList [
Symbol.Create "ModelTrafo", AVal.constant (Trafo3d.Translation t) :> IAdaptiveValue
Symbol.Create "ViewProjTrafo", AVal.constant Trafo3d.Identity :> IAdaptiveValue
]

let attributes =
AttributeProvider.ofList [
DefaultSemantic.Positions, [| V3f(-1,-1,0); V3f(1,-1,0); V3f(1,1,0); V3f(1,-1,0); V3f(1,1,0); V3f(-1,1,0) |] :> Array
]

let prototype =
let ro = RenderObject()
ro.DrawCalls <- Direct(AVal.constant [ callInfo ])
ro.Surface <- Surface.Backend (surface :> ISurface)
ro.RasterizerState <- { RasterizerState.Default with FrontFacing = AVal.constant WindingOrder.CounterClockwise }
ro.VertexAttributes <- attributes
ro.Uniforms <- uniforms V3d.Zero
ro

let framebuffer = runtime.CreateFramebuffer(signature, AVal.constant(V2i(1024, 1024)))
framebuffer.Acquire()

let objects =
Array.init (1 <<< 20) (fun i ->
let ro = RenderObject.Clone prototype
ro.Uniforms <- uniforms (V3d(i,0,0))
ro :> IRenderObject
)

let fbo = framebuffer.GetValue()

//let set = ASet.ofArray (Array.take (1 <<< 16) objects)
//let commands = AList.ofArray (Array.take (1 <<< 16) objects |> Array.map RenderCommand.Render)

// Log.line "starting"
// while true do
// //let task = runtime.CompileRender(signature, BackendConfiguration.Default, set)
// let task = runtime.Compile(signature, commands)
// task.Run(RenderToken.Empty, fbo)
// //task.Dispose()


let log = @"C:\Users\Schorsch\Desktop\perfOld.csv"

for cnt in 1000 .. 1000 .. 100000 do
let set = ASet.ofArray (Array.take cnt objects)
//let commands = AList.ofArray (Array.take cnt objects |> Array.map RenderCommand.Render)

Log.startTimed "compile %d" cnt
let sw = System.Diagnostics.Stopwatch.StartNew()
//let task = runtime.Compile(signature, commands)
let task = runtime.CompileRender(signature, set)
task.Run(RenderToken.Empty, fbo)
sw.Stop()
Log.stop()
task.Dispose()
System.IO.File.AppendAllLines(log, [sprintf "%d:%d" cnt sw.MicroTime.TotalNanoseconds])


()

let clearTexture(runtime : Aardvark.Rendering.GL.Runtime, texture : IBackendTexture, color : C4f, level : int) =

using runtime.Context.ResourceLock (fun _ ->

// create temporary fbo
let fbo = GL.GenFramebuffer()
GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, fbo)
GL.FramebufferTexture(FramebufferTarget.DrawFramebuffer, FramebufferAttachment.ColorAttachment0, unbox<int> texture.Handle, level)
GL.Check "[GL] ClearTexture: could not create FramebufferTexture"

// perform clear
GL.ClearColor(color.R, color.G, color.B, color.A)
GL.Clear(ClearBufferMask.ColorBufferBit)
GL.Check "[GL] ClearTexture: could not clear texture"

// unbind and delete of fbo
GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, 0)
GL.Check "[GL] ClearTexture: could not unbind Framebuffer"
GL.DeleteFramebuffer(fbo)
GL.Check "[GL] ClearTexture: could not delete FramebufferTexture"
)

let testDownloadSlice() =
let app = new OpenGlApplication(false, true)
let runtime = app.Runtime
let texRt = runtime :> ITextureRuntime
let tex = texRt.CreateTexture2DArray(V2i(222,333), TextureFormat.Rgba8, 1, 8, 5)
let path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)

clearTexture(runtime, tex, C4f.Red, 0)
runtime.Download(tex, 0, 0).Save(Path.combine [path; "slice0.bmp"])

clearTexture(runtime, tex, C4f.Blue, 0)
runtime.Download(tex, 0, 1).Save(Path.combine [path; "slice1.bmp"])

()

let testTextureCubeArray() =
let app = new OpenGlApplication(false, DebugLevel.Normal)
let runtime = app.Runtime
let texRt = runtime :> ITextureRuntime

let cta = texRt.CreateTextureCubeArray(128, TextureFormat.Rgba8, 1, 4)

let cube0View = texRt.CreateTextureView(cta, Range1i(0,0), Range1i(0,5), false) // create TextureCube view of [0]
let cube1View = texRt.CreateTextureView(cta, Range1i(0,0), Range1i(6,11), false) // create TextureCube view of [1]
let cube0Face0View = texRt.CreateTextureView(cta, Range1i(0,0), Range1i(0,0), false) // create Texture2d view of cube[0].face[0]
let cube0Face1View = texRt.CreateTextureView(cta, Range1i(0,0), Range1i(1,1), false) // create Texture2d view of cube[0].face[1]
let cube1Face2View = texRt.CreateTextureView(cta, Range1i(0,0), Range1i(8,8), false) // create Texture2d view of cube[1].face[2]
let cube2Face0To2View = texRt.CreateTextureView(cta, Range1i(0,0), Range1i(12,14), true) // create Texture2dArray of range
let cube2Face0To5View = texRt.CreateTextureView(cta, Range1i(0,0), Range1i(12,17), true) // create Texture2dArray of range spanning cube
let cube0to1FacesView = texRt.CreateTextureView(cta, Range1i(0,0), Range1i(0,11), true) // create Texture2dArray of complete cube 0 & 1
let cubeArrayFacesView = texRt.CreateTextureView(cta, Range1i(0,0), Range1i(0,23), true) // create Texture2dArray of complete TextureCubeArray
//let cube0Cube1ArrayView = texRt.CreateTextureView(cta, Range1i(0,0), Range1i(0,11), true) // API does not allow to create TextureCubeArray sub-range

texRt.DeleteTexture(cta)
texRt.DeleteTexture(cube0View)
texRt.DeleteTexture(cube1View)
texRt.DeleteTexture(cube0Face0View)
texRt.DeleteTexture(cube0Face1View)
texRt.DeleteTexture(cube1Face2View)
texRt.DeleteTexture(cube2Face0To2View)
texRt.DeleteTexture(cube2Face0To5View)
texRt.DeleteTexture(cube0to1FacesView)
texRt.DeleteTexture(cubeArrayFacesView)


let testCopySlice() =
let app = new OpenGlApplication(false, DebugLevel.Normal)
let runtime = app.Runtime
let texRt = runtime :> ITextureRuntime
let texSrc = texRt.CreateTexture2DArray(V2i(222,333), TextureFormat.Rgba8, 1, 1, 2)
let texDst = texRt.CreateTexture2DArray(V2i(222,333), TextureFormat.Rgba8, 1, 1, 2)

clearTexture(runtime, texSrc, C4f.Red, 0)
clearTexture(runtime, texDst, C4f.Blue, 0)

// NOTE: can only be test when testDownloadSlice is fixed
runtime.Download(texSrc, 0, 0).Save("C:\\Debug\\testCopySlice_src_slice0.bmp") // -> should be Red
runtime.Download(texSrc, 0, 1).Save("C:\\Debug\\testCopySlice_src_slice1.bmp") // -> should be Red

// alternative:
let texSrcTile0View = texRt.CreateTextureView(texSrc, Range1i(0,0), Range1i(0,0), false)
runtime.Download(texSrcTile0View).Save("C:\\Debug\\testCopySlice_src_slice0_asView.bmp")
let texSrcTile1View = texRt.CreateTextureView(texSrc, Range1i(0,0), Range1i(1,1), false)
runtime.Download(texSrcTile1View).Save("C:\\Debug\\testCopySlice_src_slice1_asView.bmp")

// copy first slice
runtime.Copy(texSrc, 0, 0, texDst, 0, 0, 1, 1)

// NOTE: can only be test when testDownloadSlice is fixed
runtime.Download(texDst, 0, 0).Save("C:\\Debug\\testCopySlice_dst_slice0.bmp") // -> should be Red
runtime.Download(texDst, 0, 1).Save("C:\\Debug\\testCopySlice_dst_slice1.bmp") // -> should be Blue

// alternative:
let texDstTile0View = texRt.CreateTextureView(texDst, Range1i(0,0), Range1i(0,0), false)
runtime.Download(texDstTile0View).Save("C:\\Debug\\testCopySlice_dst_slice0_asView.bmp") // -> should be Red
let texDstTile1View = texRt.CreateTextureView(texDst, Range1i(0,0), Range1i(1,1), false)
runtime.Download(texDstTile1View).Save("C:\\Debug\\testCopySlice_dst_slice1_asView.bmp") // -> should be Blue

()

module CSTest =

module Shader =
open FShade

[<LocalSize(X = 8, Y = 8)>]
let write (img : Image2d<Formats.rgba8>) =
compute {
let id = getGlobalId().XY
let s = img.Size
if id.X < s.X && id.Y < s.Y then
img.[id] <- V4d(V2d id / V2d s, 1.0, 1.0)
}

let run() =

let app = new OpenGlApplication()
let runtime = app.Runtime :> IRuntime

let dst = runtime.CreateTexture2D(V2i(1024, 1024), TextureFormat.Rgba8, 1, 1)

let sh = runtime.CreateComputeShader Shader.write
let ip = runtime.CreateInputBinding sh
ip.["img"] <- dst.[TextureAspect.Color, 0, 0]
ip.Flush()

runtime.Run [
ComputeCommand.Bind sh
ComputeCommand.SetInput ip
ComputeCommand.Dispatch (dst.Size.XY / 8)
]

let img = PixImage<byte>(Col.Format.RGBA, dst.Size.XY)
dst.Download(img)
img.SaveImageSharp @"C:\Users\Schorsch\Desktop\bla.png"

[<EntryPoint>]
let main argv =

Expand Down Expand Up @@ -309,102 +66,6 @@ let main argv =
let runManuallyInMain = true

if runManuallyInMain then
let stopOnFail = false
let failed = ResizeArray<string>()
let skipped = ResizeArray<string>()
let mutable passed = 0

let tests = Test.toTestCodeList allTests
let count = tests.Length

let printSummary() =
let print fmt =
Printf.kprintf (fun str ->
if failed.Count = 0 then Log.line "%s" str
else Log.error "%s" str
) fmt

Report.Line()
print $"Total: {count}, Passed: {passed}, Failed: {failed.Count}, Skipped: {skipped.Count}"

if failed.Count > 0 then
Report.Line()
print "Failed tests:"
for t in failed do
print " %s" t

if skipped.Count > 0 then
Report.Line()
print "Skipped tests:"
for t in skipped do
print " %s" t

let rec run (index : int) (tests : FlatTest list) =
match tests with
| t :: rem ->
let name = t.fullName "."
let mutable success = false

Report.Begin $"({index + 1} / {count}) {name}"

match t.test with
| Sync f ->
try
f()
success <- true
inc &passed
with exn ->
Log.error "%A" exn
failed.Add name
| _ ->
Log.error "Test not supported"
skipped.Add name

Report.End(if success then " - passed" else " - failed") |> ignore

if success || not stopOnFail then
run (index + 1) rem

| _ ->
()

run 0 tests
printSummary()
0

runTestsSynchronously false allTests
else
runTestsWithCLIArgs [ CLIArguments.No_Spinner ] argv allTests

//Aardvark.Init()
//CSTest.run()

//let cfg =
// let job = Job.Default.WithToolchain(InProcess.Emit.InProcessEmitToolchain.Instance)
// ManualConfig.Create(DefaultConfig.Instance).AddJob(job)

//BenchmarkSwitcher.FromAssembly(typeof<Texture.TextureCompression.OnTheFlyCompression>.Assembly).Run(argv, cfg) |> ignore;

//exit 0
//``Texture Tests``.runAllTests()
//testCompile()

//RadixSortTest.run()

//testDownloadSlice()
//testCopySlice()

// BenchmarkRunner.Run<StatsBench.StatsTest>() |> ignore


//testTextureCubeArray()

//RenderingTests.``[GL] concurrent group change``()
//RenderingTests.``[GL] memory leak test``()
//MultipleStageAgMemoryLeakTest.run() |> ignore

//PerformanceTests.PerformanceTest.runConsole()
//Examples.PerformanceTest.run()
//PerformanceTests.StartupPerformance.runConsole args
//PerformanceTests.IsActiveFlagPerformance.run args
//UseTest.bla()
// 0
Loading

0 comments on commit c6e1d49

Please sign in to comment.