bgfx: fix shader compilation (#5106)

pull/5159/head
Bruno Meneguello 3 months ago committed by GitHub
parent 80e24589ed
commit 149ce23f35
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 62
      packages/b/bgfx/rules/shaders.lua
  2. 2
      packages/b/bgfx/xmake.lua

@ -4,9 +4,10 @@
--
-- add_rules("@bgfx/shaders")
-- add_files("shader.vert", {type = "vertex", output_dir = "shaders", output_name = "shader.vert.bin", profiles = {glsl = "330"}})
-- add_files("vs_shader.sc", {type = "vertex", output_dir = "shaders", output_name = "shader.vert.h", header = true, profiles = {glsl = "330"}})
rule("shaders")
set_extensions(".vert", ".frag", ".comp")
set_extensions(".sc", ".vert", ".frag", ".comp")
on_buildcmd_file(function (target, batchcmds, shaderfile, opt)
import("lib.detect.find_program")
import("core.base.option")
@ -24,7 +25,13 @@ rule("shaders")
if fileconfig and fileconfig.output_name then
output_filename = fileconfig.output_name
else
output_filename = path.filename(shaderfile) .. ".bin"
local filename = path.filename(shaderfile)
output_filename = filename:match("^(.*)%.sc$") or filename
if fileconfig and fileconfig.header then
output_filename = output_filename .. ".h"
else
output_filename = output_filename .. ".bin"
end
end
local output_dir
@ -38,26 +45,7 @@ rule("shaders")
if fileconfig and fileconfig.vardef then
vardef_filename = fileconfig.vardef
else
vardef_filename = path.join(
path.directory(shaderfile),
path.basename(shaderfile) .. ".varying.def.sc")
end
local shader_type
if fileconfig and fileconfig.type then
if table.contains(bgfx_types, fileconfig.type) then
shader_type = fileconfig.type
else
raise("unsupported shader type " .. fileconfig.type)
end
elseif shaderfile:match("%.vert$") then
shader_type = "vertex"
elseif shaderfile:match("%.frag$") then
shader_type = "fragment"
elseif shaderfile:match("%.comp$") then
shader_type = "compute"
else
raise("cannot determine shader type from file name " .. path.filename(shaderfile))
vardef_filename = path.join(path.directory(shaderfile), "varying.def.sc")
end
-- determine platform-specific shaderc arguments
@ -73,8 +61,8 @@ rule("shaders")
}
local bgfx_default_profiles = {
windows = {
vertex = {dx9 = "s_3_0", dx11 = "s_5_0", glsl = "120"},
fragment = {dx9 = "s_3_0", dx11 = "s_5_0", glsl = "120"},
vertex = {dx11 = "s_5_0", glsl = "120"},
fragment = {dx11 = "s_5_0", glsl = "120"},
compute = {dx11 = "s_5_0", glsl = "430"},
},
macosx = {
@ -89,6 +77,23 @@ rule("shaders")
}
}
local shader_type
if fileconfig and fileconfig.type then
if table.contains(bgfx_types, fileconfig.type) then
shader_type = fileconfig.type
else
raise("unsupported shader type " .. fileconfig.type)
end
elseif shaderfile:match("^vs_.*%.sc$") or shaderfile:match("%.vert$") then
shader_type = "vertex"
elseif shaderfile:match("^fs_.*%.sc$") or shaderfile:match("%.frag$") then
shader_type = "fragment"
elseif shaderfile:match("^cs_.*%.sc$") or shaderfile:match("%.comp$") then
shader_type = "compute"
else
raise("cannot determine shader type from file name " .. path.filename(shaderfile))
end
-- build command args
local args = {
"-f", shaderfile,
@ -96,6 +101,15 @@ rule("shaders")
"--varyingdef", vardef_filename,
"--platform", bgfx_platforms[target:plat()],
}
if fileconfig and fileconfig.header then
table.insert(args, "--bin2c")
if fileconfig.header ~= true then
table.insert(args, fileconfig.header)
end
end
-- print(target:pkg("bgfx"):installdir())
for _, includedir in ipairs(target:get("includedirs")) do
table.insert(args, "-i")
table.insert(args, includedir)

@ -47,7 +47,7 @@ package("bgfx")
local bimgdir = package:resourcefile("bimg")
local genie = is_host("windows") and "genie.exe" or "genie"
local args = {}
if is_plat("windows|native", "macosx", "linux") then
if package:is_plat("windows", "macosx", "linux") then
args = {"--with-tools"}
end
if package:config("shared") then

Loading…
Cancel
Save