1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- -- Compile shaders to includables headers
- rule("compile.shaders")
- set_extensions(".nzsl", ".nzslb")
- add_deps("@nzsl/find_nzsl")
- on_config(function (target)
- local archives = {}
- for _, sourcebatch in pairs(target:sourcebatches()) do
- local rulename = sourcebatch.rulename
- if rulename == "@nzsl/compile.shaders" then
- for _, sourcefile in ipairs(sourcebatch.sourcefiles) do
- local fileconfig = target:fileconfig(sourcefile)
- if fileconfig and fileconfig.archive then
- local archivefiles = archives[fileconfig.archive]
- if not archivefiles then
- archivefiles = {}
- archives[fileconfig.archive] = archivefiles
- end
- table.insert(archivefiles, path.join(path.directory(sourcefile), path.basename(sourcefile) .. ".nzslb"))
- end
- end
- end
- end
- if not table.empty(archives) then
- assert(target:rule("@nzsl/archive.shaders"), "you must add the @nzsl/archive.shaders rule to the target")
- for archive, archivefiles in table.orderpairs(archives) do
- local args = { rule = "@nzsl/archive.shaders", always_added = true, compress = true, files = archivefiles }
- if archive:endswith(".nzsla.h") or archive:endswith(".nzsla.hpp") then
- args.header = path.extension(archive)
- archive = archive:sub(1, -#args.header - 1) -- foo.nzsla.h => foo.nzsla
- end
- target:add("files", archive, args)
- end
- end
- end)
- before_buildcmd_file(function (target, batchcmds, shaderfile, opt)
- local outputdir = target:data("nzsl_includedirs")
- local nzslc = target:data("nzslc")
- local runenvs = target:data("nzsl_runenv")
- assert(nzslc, "nzslc not found! please install nzsl package with nzslc enabled")
- local fileconfig = target:fileconfig(shaderfile) or {}
- local header = fileconfig.archive == nil
- -- add commands
- batchcmds:show_progress(opt.progress, "${color.build.object}compiling.shader %s", shaderfile)
- local argv = { "--compile=nzslb" .. (header and "-header" or ""), "--partial", "--optimize" }
- if outputdir then
- batchcmds:mkdir(outputdir)
- table.insert(argv, "--output=" .. outputdir)
- end
- -- handle --log-format
- local kind = target:data("plugin.project.kind") or ""
- if kind:match("vs") then
- table.insert(argv, "--log-format=vs")
- end
- table.insert(argv, shaderfile)
- batchcmds:vrunv(nzslc.program, argv, { curdir = ".", envs = runenvs })
- local outputfile = path.join(outputdir or path.directory(shaderfile), path.basename(shaderfile) .. ".nzslb" .. (header and ".h" or ""))
- -- add deps
- batchcmds:add_depfiles(shaderfile)
- batchcmds:add_depvalues(nzslc.version)
- batchcmds:set_depmtime(os.mtime(outputfile))
- batchcmds:set_depcache(target:dependfile(outputfile))
- end)
|