Skip to content

AdvancedVulkanFallbackSmoke.kt

src/jvmMain/kotlin/afield/graphics/render/AdvancedVulkanFallbackSmoke.kt · 36 lines

package afield.graphics.render

import afield.graphics.scene.main

import afield.document.graph.Box
import afield.graphics.vulkan.Renderer
import afield.graphics.shader.learning.GpuShaderTraining
import afield.graphics.shader.learning.LearnedShader
import afield.media.reconstruction.ReconstructionCapture
import afield.graphics.vulkan.util.Options
import afield.graphics.vulkan.util.Window
import kotlin.system.exitProcess

object AdvancedVulkanFallbackSmoke

Force optional feature gates off on a supporting device and exercise ordinary shader inference.

@JvmStatic fun main(args: Array<String>)

    @JvmStatic fun main(args: Array<String>) {
        System.setProperty("afield.clusterAccelerationStructure.disabled","true")
        System.setProperty("afield.cooperativeVector.disabled","true")
        Options.enableVR=false;Options.enableHDR=false;Options.doVulkanSDK()
        val window=Window("Field optional features disabled");val renderer=Renderer(window)
        val box=Box("advanced-fallback");box.setPropertyRaw("renderer",renderer,doResync=false)
        try { Box.withBoxContextNow(box) {
            check(!renderer.device.supportsClusterAccelerationStructure && !renderer.device.supportsCooperativeVectorTraining)
            check(runCatching { ClusterGeometry(renderer,1) }.exceptionOrNull()?.message?.contains("not enabled")==true)
            check(runCatching { GpuShaderTraining(renderer,64,48) }.exceptionOrNull()?.message?.contains("not enabled")==true)
            LearnedShader(renderer,320,180,cooperative=false).use { learned ->
                val end=renderer.frameCounter+12
                while(renderer.frameCounter<end){window.pollEvents();renderer.render()}
                val pixels=ReconstructionCapture.read(renderer,learned.output)
                check(pixels.all { it.isFinite() } && pixels.max()>.1f)
            }
        }} finally {renderer.cleanup();window.cleanup()}
        println("ADVANCED VULKAN FALLBACK CHECK DONE");exitProcess(0)
    }
}