Compare commits

...

20 Commits

Author SHA1 Message Date
loanselot
cf77d7c6d7 Merge pull request #159 from bkaradzic/dependabot/submodules/bgfx-6a03a1e
build(deps): bump bgfx from `f6a1289` to `6a03a1e`
2022-11-02 00:48:54 +03:00
loanselot
33dde1a115 Merge pull request #158 from bkaradzic/dependabot/submodules/bimg-225dad7
build(deps): bump bimg from `1955d8f` to `225dad7`
2022-11-02 00:48:44 +03:00
dependabot[bot]
3e7f1fe200 build(deps): bump bgfx from f6a1289 to 6a03a1e
Bumps [bgfx](https://github.com/bkaradzic/bgfx) from `f6a1289` to `6a03a1e`.
- [Release notes](https://github.com/bkaradzic/bgfx/releases)
- [Commits](f6a1289dbc...6a03a1ec5e)

---
updated-dependencies:
- dependency-name: bgfx
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-01 16:03:17 +00:00
dependabot[bot]
866599edb0 build(deps): bump bimg from 1955d8f to 225dad7
Bumps [bimg](https://github.com/bkaradzic/bimg) from `1955d8f` to `225dad7`.
- [Release notes](https://github.com/bkaradzic/bimg/releases)
- [Commits](1955d8f99a...225dad7441)

---
updated-dependencies:
- dependency-name: bimg
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-01 16:03:13 +00:00
loanselot
089b388ac0 Merge pull request #156 from bkaradzic/temp
Update Submodules
2022-10-28 23:00:25 +03:00
e-erdal
9d3bc4f326 Update bgfx submodule 2022-10-28 22:21:19 +03:00
e-erdal
9ee85d3c1b Fix directx-headers 2022-10-28 21:48:50 +03:00
e-erdal
74a8e4dc72 ordering matters 2022-10-28 21:35:02 +03:00
e-erdal
99f17108ca Add linux compat for bx 2022-10-28 21:25:03 +03:00
e-erdal
862912e7e9 Fix WSL Include 2022-10-28 21:18:47 +03:00
e-erdal
72ea9b6f29 Add other DX Headers 2022-10-28 21:00:43 +03:00
e-erdal
6e23a39de6 Update submodules 2022-10-28 20:36:16 +03:00
loanselot
74e4a3fad9 Merge pull request #151 from SamHellawell/master
Allow to specify which tools to compile
2022-10-28 20:08:06 +03:00
Samuel Hellawell
5c54e5f299 Allow to specify which tools to compile
Signed-off-by: Samuel Hellawell <sshellawell@gmail.com>
2022-09-23 04:36:01 +01:00
Sandy Carter
06b995080d update submodules to dbafa14, 90ac47d, 8e94c8c 2022-08-26 10:29:01 -04:00
Sandy Carter
f5dc53db85 Find shaderc when cross-compiling 2022-08-24 11:56:03 -04:00
Sandy Carter
2051444e25 Install bgfxToolUtils even if not building tools
Fixes corner case of cross compiling with tools from host platform
2022-08-24 11:56:03 -04:00
Sandy Carter
5ba5a38762 add new 47-pixelformats example 2022-08-23 07:20:31 -04:00
Sandy Carter
e4e935c7ae ToolUtils: Add helper to compile shader to header 2022-08-22 08:57:50 -04:00
Sandy Carter
01c90714e1 export cmake function for shaderc_compiling
Remove unused add_shader and shaderc
Example usage:
```
shaderc_parse(
  CLI
  ${ARGS_TYPE} ${PLATFORM_I} WERROR
  "$<$<CONFIG:debug>:DEBUG>$<$<CONFIG:relwithdebinfo>:DEBUG>"
  FILE ${SHADER_FILE_ABSOLUTE}
  OUTPUT ${OUTPUT}
  PROFILE ${PROFILE}
  O "$<$<CONFIG:debug>:0>$<$<CONFIG:release>:3>$<$<CONFIG:relwithdebinfo>:3>$<$<CONFIG:minsizerel>:3>"
  VARYINGDEF ${ARGS_VARYING_DEF}
  INCLUDES ${BGFX_SHADER_INCLUDE_PATH}
  BIN2C BIN2C ${SHADER_FILE_NAME_WE}_${PROFILE_EXT}
)
```
2022-08-22 08:57:50 -04:00
14 changed files with 356 additions and 380 deletions

View File

@@ -26,6 +26,9 @@ if (MSVC AND (MSVC_VERSION GREATER_EQUAL 1914))
endif()
option( BGFX_BUILD_TOOLS "Build bgfx tools." ON )
option( BGFX_BUILD_TOOLS_SHADER "Build bgfx shader tools." ON )
option( BGFX_BUILD_TOOLS_GEOMETRY "Build bgfx geometry tools." ON )
option( BGFX_BUILD_TOOLS_TEXTURE "Build bgfx texture tools." ON )
option( BGFX_BUILD_EXAMPLES "Build bgfx examples." ON )
option( BGFX_INSTALL "Create installation target." ON )
option( BGFX_INSTALL_EXAMPLES "Install examples and their runtimes." OFF )
@@ -131,7 +134,7 @@ if( BGFX_INSTALL )
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
)
if( NOT BGFX_LIBRARY_TYPE MATCHES "SHARED" )
install( TARGETS bimg bx astc-codec astc edtaa3 etc1 etc2 iqa squish nvtt pvrtc tinyexr
install( TARGETS bimg bx astc-encoder edtaa3 etc1 etc2 iqa squish nvtt pvrtc tinyexr
EXPORT "${TARGETS_EXPORT_NAME}"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
@@ -160,6 +163,8 @@ if( BGFX_INSTALL )
)
# install tools
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/bgfxToolUtils.cmake
DESTINATION "${config_install_dir}")
if( BGFX_BUILD_TOOLS )
install( TARGETS shaderc
EXPORT "${TARGETS_EXPORT_NAME}"

2
bgfx

Submodule bgfx updated: 8461f3406e...6a03a1ec5e

2
bimg

Submodule bimg updated: 663f724186...225dad7441

2
bx

Submodule bx updated: 13ae21207d...20efa22f18

View File

@@ -8,21 +8,21 @@
# You should have received a copy of the CC0 Public Domain Dedication along with
# this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
if( TARGET astc-codec )
if( TARGET astc-encoder )
return()
endif()
file(
GLOB
ASTC_CODEC_SOURCES
${BIMG_DIR}/3rdparty/astc-codec/src/decoder/*.cc
${BIMG_DIR}/3rdparty/astc-codec/src/decoder/*.h
ASTC_ENCODER_SOURCES
${BIMG_DIR}/3rdparty/astc-encoder/source/*.cpp
${BIMG_DIR}/3rdparty/astc-encoder/include/*.h
)
add_library( astc-codec STATIC ${ASTC_CODEC_SOURCES} )
target_include_directories( astc-codec
add_library( astc-encoder STATIC ${ASTC_ENCODER_SOURCES} )
target_include_directories( astc-encoder
PUBLIC
$<BUILD_INTERFACE:${BIMG_DIR}/3rdparty>
$<BUILD_INTERFACE:${BIMG_DIR}/3rdparty/astc-codec>
$<BUILD_INTERFACE:${BIMG_DIR}/3rdparty/astc-codec/include> )
set_target_properties( astc-codec PROPERTIES FOLDER "bgfx/3rdparty" )
$<BUILD_INTERFACE:${BIMG_DIR}/3rdparty/astc-encoder>
$<BUILD_INTERFACE:${BIMG_DIR}/3rdparty/astc-encoder/include> )
set_target_properties( astc-encoder PROPERTIES FOLDER "bgfx/3rdparty" )

View File

@@ -1,19 +0,0 @@
# bgfx.cmake - bgfx building in cmake
# Written in 2017 by Joshua Brookover <joshua.al.brookover@gmail.com>
# To the extent possible under law, the author(s) have dedicated all copyright
# and related and neighboring rights to this software to the public domain
# worldwide. This software is distributed without any warranty.
# You should have received a copy of the CC0 Public Domain Dedication along with
# this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
if( TARGET astc )
return()
endif()
file( GLOB ASTC_SOURCES ${BIMG_DIR}/3rdparty/astc/*.cpp ${BIMG_DIR}/3rdparty/astc/*.h )
add_library( astc STATIC ${ASTC_SOURCES} )
target_include_directories( astc PUBLIC $<BUILD_INTERFACE:${BIMG_DIR}/3rdparty> )
set_target_properties( astc PROPERTIES FOLDER "bgfx/3rdparty" )

View File

@@ -1,4 +1,25 @@
@PACKAGE_INIT@
include("${CMAKE_CURRENT_LIST_DIR}/@TARGETS_EXPORT_NAME@.cmake")
check_required_components("@PROJECT_NAME@")
get_target_property(BGFX_INCLUDE_PATH bgfx::bgfx INTERFACE_INCLUDE_DIRECTORIES)
list(GET BGFX_INCLUDE_PATH 0 BGFX_INCLUDE_PATH_1) # bgfx::bgfx exports include directory twice?
set(BGFX_SHADER_INCLUDE_PATH ${BGFX_INCLUDE_PATH_1}/bgfx)
# If cross compiling, we need a host-compatible version of shaderc to compile shaders
if (@CMAKE_CROSSCOMPILING@ AND NOT TARGET bgfx::shaderc)
find_program(
shaderc_EXECUTABLE REQUIRED
NAMES bgfx-shaderc shaderc
PATHS /usr/bin
${CMAKE_CURRENT_SOURCE_DIR}/vcpkg/packages/bgfx_x64-linux/tools/bgfx
${CMAKE_CURRENT_SOURCE_DIR}/vcpkg/packages/bgfx_x64-windows/tools/bgfx
${CMAKE_CURRENT_SOURCE_DIR}/vcpkg/packages/bgfx_x64-osx/tools/bgfx
)
add_executable(bgfx::shaderc IMPORTED)
set_target_properties(
bgfx::shaderc PROPERTIES IMPORTED_LOCATION "${shaderc_EXECUTABLE}"
)
endif ()
include("${CMAKE_CURRENT_LIST_DIR}/bgfxToolUtils.cmake")
check_required_components("@PROJECT_NAME@")

View File

@@ -80,11 +80,24 @@ target_compile_definitions(bgfx
"BGFX_CONFIG_MULTITHREADED=$<BOOL:${BGFX_CONFIG_MULTITHREADED}>"
)
# directx-headers
set (DIRECTX_HEADERS)
if (UNIX AND NOT APPLE AND NOT EMSCRIPTEN AND NOT ANDROID) # Only Linux
set (DIRECTX_HEADERS
${BGFX_DIR}/3rdparty/directx-headers/include/directx
${BGFX_DIR}/3rdparty/directx-headers/include
${BGFX_DIR}/3rdparty/directx-headers/include/wsl/stubs )
elseif (WIN32) # Only Windows
set (DIRECTX_HEADERS
${BGFX_DIR}/3rdparty/directx-headers/include/directx
${BGFX_DIR}/3rdparty/directx-headers/include )
endif()
# Includes
target_include_directories( bgfx
PRIVATE
${DIRECTX_HEADERS}
${BGFX_DIR}/3rdparty
${BGFX_DIR}/3rdparty/dxsdk/include
${BGFX_DIR}/3rdparty/khronos
PUBLIC
$<BUILD_INTERFACE:${BGFX_DIR}/include>

277
cmake/bgfxToolUtils.cmake Normal file
View File

@@ -0,0 +1,277 @@
# shaderc_parse(
# FILE filename
# OUTPUT filename
# FRAGMENT|VERTEX|COMPUTE
# ANDROID|ASM_JS|IOS|LINUX|NACL|OSX|WINDOWS
# [PROFILE profile]
# [O 0|1|2|3]
# [VARYINGDEF filename]
# [BIN2C filename]
# [INCLUDES include;include]
# [DEFINES include;include]
# [DEPENDS]
# [PREPROCESS]
# [RAW]
# [VERBOSE]
# [DEBUG]
# [DISASM]
# [WERROR]
# )
function( shaderc_parse ARG_OUT )
cmake_parse_arguments( ARG "DEPENDS;ANDROID;ASM_JS;IOS;LINUX;NACL;OSX;WINDOWS;PREPROCESS;RAW;FRAGMENT;VERTEX;COMPUTE;VERBOSE;DEBUG;DISASM;WERROR" "FILE;OUTPUT;VARYINGDEF;BIN2C;PROFILE;O" "INCLUDES;DEFINES" ${ARGN} )
set( CLI "" )
# -f
if( ARG_FILE )
list( APPEND CLI "-f" "${ARG_FILE}" )
endif()
# -i
if( ARG_INCLUDES )
foreach( INCLUDE ${ARG_INCLUDES} )
list( APPEND CLI "-i" )
list( APPEND CLI "${INCLUDE}" )
endforeach()
endif()
# -o
if( ARG_OUTPUT )
list( APPEND CLI "-o" "${ARG_OUTPUT}" )
endif()
# --bin2c
if( ARG_BIN2C )
list( APPEND CLI "--bin2c" "${ARG_BIN2C}" )
endif()
# --depends
if( ARG_DEPENDS )
list( APPEND CLI "--depends" )
endif()
# --platform
set( PLATFORM "" )
set( PLATFORMS "ANDROID;ASM_JS;IOS;LINUX;NACL;OSX;WINDOWS" )
foreach( P ${PLATFORMS} )
if( ARG_${P} )
if( PLATFORM )
message( SEND_ERROR "Call to shaderc_parse() cannot have both flags ${PLATFORM} and ${P}." )
return()
endif()
set( PLATFORM "${P}" )
endif()
endforeach()
if( "${PLATFORM}" STREQUAL "" )
message( SEND_ERROR "Call to shaderc_parse() must have a platform flag: ${PLATFORMS}" )
return()
elseif( "${PLATFORM}" STREQUAL "ANDROID" )
list( APPEND CLI "--platform" "android" )
elseif( "${PLATFORM}" STREQUAL "ASM_JS" )
list( APPEND CLI "--platform" "asm.js" )
elseif( "${PLATFORM}" STREQUAL "IOS" )
list( APPEND CLI "--platform" "ios" )
elseif( "${PLATFORM}" STREQUAL "LINUX" )
list( APPEND CLI "--platform" "linux" )
elseif( "${PLATFORM}" STREQUAL "NACL" )
list( APPEND CLI "--platform" "nacl" )
elseif( "${PLATFORM}" STREQUAL "OSX" )
list( APPEND CLI "--platform" "osx" )
elseif( "${PLATFORM}" STREQUAL "WINDOWS" )
list( APPEND CLI "--platform" "windows" )
endif()
# --preprocess
if( ARG_PREPROCESS )
list( APPEND CLI "--preprocess" )
endif()
# --define
if( ARG_DEFINES )
list( APPEND CLI "--defines" )
set( DEFINES "" )
foreach( DEFINE ${ARG_DEFINES} )
if( NOT "${DEFINES}" STREQUAL "" )
set( DEFINES "${DEFINES}\\\\;${DEFINE}" )
else()
set( DEFINES "${DEFINE}" )
endif()
endforeach()
list( APPEND CLI "${DEFINES}" )
endif()
# --raw
if( ARG_RAW )
list( APPEND CLI "--raw" )
endif()
# --type
set( TYPE "" )
set( TYPES "FRAGMENT;VERTEX;COMPUTE" )
foreach( T ${TYPES} )
if( ARG_${T} )
if( TYPE )
message( SEND_ERROR "Call to shaderc_parse() cannot have both flags ${TYPE} and ${T}." )
return()
endif()
set( TYPE "${T}" )
endif()
endforeach()
if( "${TYPE}" STREQUAL "" )
message( SEND_ERROR "Call to shaderc_parse() must have a type flag: ${TYPES}" )
return()
elseif( "${TYPE}" STREQUAL "FRAGMENT" )
list( APPEND CLI "--type" "fragment" )
elseif( "${TYPE}" STREQUAL "VERTEX" )
list( APPEND CLI "--type" "vertex" )
elseif( "${TYPE}" STREQUAL "COMPUTE" )
list( APPEND CLI "--type" "compute" )
endif()
# --varyingdef
if( ARG_VARYINGDEF )
list( APPEND CLI "--varyingdef" "${ARG_VARYINGDEF}" )
endif()
# --verbose
if( ARG_VERBOSE )
list( APPEND CLI "--verbose" )
endif()
# --debug
if( ARG_DEBUG )
list( APPEND CLI "--debug" )
endif()
# --disasm
if( ARG_DISASM )
list( APPEND CLI "--disasm" )
endif()
# --profile
if( ARG_PROFILE )
list( APPEND CLI "--profile" "${ARG_PROFILE}" )
endif()
# -O
if( ARG_O )
list( APPEND CLI "-O" "${ARG_O}" )
endif()
# --Werror
if( ARG_WERROR )
list( APPEND CLI "--Werror" )
endif()
set( ${ARG_OUT} ${CLI} PARENT_SCOPE )
endfunction()
function (_get_profile_ext PROFILE PROFILE_EXT)
string(REPLACE 300_es essl PROFILE ${PROFILE})
string(REPLACE 120 glsl PROFILE ${PROFILE})
string(REPLACE spirv spv PROFILE ${PROFILE})
string(REPLACE metal mtl PROFILE ${PROFILE})
string(REPLACE vs_3_0 dx9 PROFILE ${PROFILE})
string(REPLACE vs_4_0 dx10 PROFILE ${PROFILE})
string(REPLACE vs_5_0 dx11 PROFILE ${PROFILE})
string(REPLACE ps_3_0 dx9 PROFILE ${PROFILE})
string(REPLACE ps_4_0 dx10 PROFILE ${PROFILE})
string(REPLACE ps_5_0 dx11 PROFILE ${PROFILE})
string(REPLACE cs_4_0 dx10 PROFILE ${PROFILE})
string(REPLACE cs_5_0 dx11 PROFILE ${PROFILE})
set(${PROFILE_EXT}
${PROFILE}
PARENT_SCOPE
)
endfunction ()
# compile_shader_to_header(
# TYPE VERTEX|FRAGMENT|COMPUTE
# SHADERS filenames
# VARYING_DEF filename
# OUTPUT_DIR directory
#)
#
function (compile_shader_to_header)
set(options "")
set(oneValueArgs TYPE VARYING_DEF OUTPUT_DIR)
set(multiValueArgs SHADERS)
cmake_parse_arguments(
ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}"
)
set(PROFILES 120 300_es spirv) # pssl
if (UNIX AND NOT APPLE)
set(PLATFORM LINUX)
elseif (EMSCRIPTEN)
set(PLATFORM ASM_JS)
elseif (APPLE)
set(PLATFORM OSX)
list(APPEND PROFILES metal)
elseif (
WIN32
OR MINGW
OR MSYS
OR CYGWIN
)
set(PLATFORM WINDOWS)
if (ARGS_TYPE STREQUAL "VERTEX")
list(APPEND PROFILES vs_3_0)
list(APPEND PROFILES vs_4_0)
list(APPEND PROFILES vs_5_0)
elseif (ARGS_TYPE STREQUAL "FRAGMENT")
list(APPEND PROFILES ps_3_0)
list(APPEND PROFILES ps_4_0)
list(APPEND PROFILES ps_5_0)
elseif (ARGS_TYPE STREQUAL "COMPUTE")
list(APPEND PROFILES cs_4_0)
list(APPEND PROFILES cs_5_0)
else ()
message(error "shaderc: Unsupported type")
endif ()
else ()
message(error "shaderc: Unsupported platform")
endif ()
foreach (SHADER_FILE ${ARGS_SHADERS})
source_group("Shaders" FILES "${SHADER}")
get_filename_component(SHADER_FILE_BASENAME ${SHADER_FILE} NAME)
get_filename_component(SHADER_FILE_NAME_WE ${SHADER_FILE} NAME_WE)
get_filename_component(SHADER_FILE_ABSOLUTE ${SHADER_FILE} ABSOLUTE)
# Build output targets and their commands
set(OUTPUTS "")
set(COMMANDS "")
foreach (PROFILE ${PROFILES})
_get_profile_ext(${PROFILE} PROFILE_EXT)
set(OUTPUT
${ARGS_OUTPUT_DIR}/${SHADER_FILE_BASENAME}.${PROFILE_EXT}.bin.h
)
set(PLATFORM_I ${PLATFORM})
if (PROFILE STREQUAL "spirv")
set(PLATFORM_I LINUX)
endif ()
shaderc_parse(
CLI #
${ARGS_TYPE} ${PLATFORM_I} WERROR
"$<$<CONFIG:debug>:DEBUG>$<$<CONFIG:relwithdebinfo>:DEBUG>"
FILE ${SHADER_FILE_ABSOLUTE}
OUTPUT ${OUTPUT}
PROFILE ${PROFILE}
O "$<$<CONFIG:debug>:0>$<$<CONFIG:release>:3>$<$<CONFIG:relwithdebinfo>:3>$<$<CONFIG:minsizerel>:3>"
VARYINGDEF ${ARGS_VARYING_DEF}
INCLUDES ${BGFX_SHADER_INCLUDE_PATH}
BIN2C BIN2C ${SHADER_FILE_NAME_WE}_${PROFILE_EXT}
)
list(APPEND OUTPUTS ${OUTPUT})
list(APPEND COMMANDS COMMAND bgfx::shaderc ${CLI})
endforeach ()
add_custom_command(
OUTPUT ${OUTPUTS}
COMMAND ${CMAKE_COMMAND} -E make_directory ${ARGS_OUTPUT_DIR} ${COMMANDS}
MAIN_DEPENDENCY ${SHADER_FILE_ABSOLUTE}
DEPENDS ${ARGS_VARYING_DEF}
)
endforeach ()
endfunction ()

View File

@@ -9,8 +9,7 @@
# this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
# Third party libs
include( ${CMAKE_CURRENT_LIST_DIR}/3rdparty/astc-codec.cmake )
include( ${CMAKE_CURRENT_LIST_DIR}/3rdparty/astc.cmake )
include( ${CMAKE_CURRENT_LIST_DIR}/3rdparty/astc-encoder.cmake )
include( ${CMAKE_CURRENT_LIST_DIR}/3rdparty/edtaa3.cmake )
include( ${CMAKE_CURRENT_LIST_DIR}/3rdparty/etc1.cmake )
include( ${CMAKE_CURRENT_LIST_DIR}/3rdparty/etc2.cmake )
@@ -39,7 +38,7 @@ target_include_directories( bimg
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
# bimg dependencies
target_link_libraries( bimg PUBLIC bx PRIVATE astc-codec astc edtaa3 etc1 etc2 iqa squish nvtt pvrtc tinyexr )
target_link_libraries( bimg PUBLIC bx PRIVATE astc-encoder edtaa3 etc1 etc2 iqa squish nvtt pvrtc tinyexr )
# Put in a "bgfx" folder in Visual Studio
set_target_properties( bimg PROPERTIES FOLDER "bgfx" )

View File

@@ -59,11 +59,16 @@ elseif( WIN32 )
PUBLIC
$<BUILD_INTERFACE:${BX_DIR}/include/compat/msvc>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/compat/msvc> )
elseif( APPLE )
elseif( APPLE ) # APPLE is technically UNIX... ORDERING MATTERS!
target_include_directories( bx
PUBLIC
$<BUILD_INTERFACE:${BX_DIR}/include/compat/osx>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/compat/osx> )
$<BUILD_INTERFACE:${BX_DIR}/include/compat/osx>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/compat/osx> )
elseif ( UNIX )
target_include_directories( bx
PUBLIC
$<BUILD_INTERFACE:${BX_DIR}/include/compat/linux>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/compat/linux> )
endif()
# All configurations

View File

@@ -14,6 +14,7 @@ include( ${CMAKE_CURRENT_LIST_DIR}/util/ConfigureDebugging.cmake )
include( ${CMAKE_CURRENT_LIST_DIR}/3rdparty/dear-imgui.cmake )
include( ${CMAKE_CURRENT_LIST_DIR}/3rdparty/meshoptimizer.cmake )
include( ${CMAKE_CURRENT_LIST_DIR}/bgfxToolUtils.cmake )
function( add_bgfx_shader FILE FOLDER )
get_filename_component( FILENAME "${FILE}" NAME_WE )
@@ -277,6 +278,7 @@ if( BGFX_BUILD_EXAMPLES )
44-sss
45-bokeh
46-fsr
47-pixelformats
)
foreach( EXAMPLE ${BGFX_EXAMPLES} )

View File

@@ -13,8 +13,16 @@ if( BGFX_CUSTOM_TARGETS )
set_target_properties( tools PROPERTIES FOLDER "bgfx/tools" )
endif()
include( ${CMAKE_CURRENT_LIST_DIR}/tools/geometryc.cmake )
include( ${CMAKE_CURRENT_LIST_DIR}/tools/geometryv.cmake )
include( ${CMAKE_CURRENT_LIST_DIR}/tools/shaderc.cmake )
include( ${CMAKE_CURRENT_LIST_DIR}/tools/texturec.cmake )
include( ${CMAKE_CURRENT_LIST_DIR}/tools/texturev.cmake )
if( BGFX_BUILD_TOOLS_SHADER )
include( ${CMAKE_CURRENT_LIST_DIR}/tools/shaderc.cmake )
endif()
if( BGFX_BUILD_TOOLS_GEOMETRY )
include( ${CMAKE_CURRENT_LIST_DIR}/tools/geometryc.cmake )
include( ${CMAKE_CURRENT_LIST_DIR}/tools/geometryv.cmake )
endif()
if( BGFX_BUILD_TOOLS_TEXTURE )
include( ${CMAKE_CURRENT_LIST_DIR}/tools/texturec.cmake )
include( ${CMAKE_CURRENT_LIST_DIR}/tools/texturev.cmake )
endif()

View File

@@ -32,338 +32,3 @@ elseif (IOS)
set_target_properties(shaderc PROPERTIES MACOSX_BUNDLE ON
MACOSX_BUNDLE_GUI_IDENTIFIER shaderc)
endif()
function( add_shader ARG_FILE )
# Parse arguments
cmake_parse_arguments( ARG "FRAGMENT;VERTEX;COMPUTE" "OUTPUT;GLSL_VERSION;DX9_MODEL;DX11_MODEL" "PLATFORMS" ${ARGN} )
# Get filename
get_filename_component( FILENAME "${ARG_FILE}" NAME_WE )
# Determine if fragment or vertex or compute
if( ARG_FRAGMENT AND ARG_VERTEX AND ARG_COMPUTE )
message( SEND_ERROR "add_shader cannot be called with all FRAGMENT and VERTEX and COMPUTE." )
return()
elseif( ARG_FRAGMENT AND ARG_VERTEX )
message( SEND_ERROR "add_shader cannot be called with both FRAGMENT and VERTEX." )
return()
elseif( ARG_FRAGMENT AND ARG_COMPUTE )
message( SEND_ERROR "add_shader cannot be called with both FRAGMENT and COMPUTE." )
return()
elseif( ARG_VERTEX AND ARG_COMPUTE )
message( SEND_ERROR "add_shader cannot be called with both VERTEX and COMPUTE." )
return()
endif()
if( ARG_FRAGMENT )
set( TYPE "FRAGMENT" )
set( D3D_PREFIX "ps" )
elseif( ARG_VERTEX )
set( TYPE "VERTEX" )
set( D3D_PREFIX "vs" )
elseif( ARG_COMPUTE )
set( TYPE "COMPUTE" )
set( D3D_PREFIX "cs" )
else()
message( SEND_ERROR "add_shader must be called with either FRAGMENT or VERTEX or COMPUTE." )
return()
endif()
# Determine compatible platforms
if( ARG_PLATFORMS )
set( PLATFORMS ${ARG_PLATFORMS} )
else()
if( MSVC )
set( PLATFORMS dx9 dx11 glsl essl asm.js spirv )
elseif( APPLE )
set( PLATFORMS metal glsl essl asm.js spirv )
else()
set( PLATFORMS glsl essl asm.js spirv )
endif()
endif()
# Build options
set( BASE_OPTIONS
FILE ${ARG_FILE}
${TYPE}
INCLUDES ${BGFX_DIR}/src
)
# Parse profiles
set( DX9_PROFILE PROFILE ${D3D_PREFIX}_3_0 )
if( ARG_DX9_MODEL )
set( DX9_PROFILE PROFILE ${D3D_PREFIX}_${ARG_DX9_MODEL} )
endif()
set( DX11_PROFILE PROFILE ${D3D_PREFIX}_5_0 )
if( ARG_DX11_MODEL )
set( DX11_PROFILE PROFILE ${D3D_PREFIX}_${ARG_DX11_MODEL} )
endif()
set( GLSL_PROFILE PROFILE 120 )
if( ARG_COMPUTE )
set( GLSL_PROFILE PROFILE 430 )
endif()
if( ARG_GLSL_VERSION )
set( GLSL_PROFILE PROFILE ${ARG_GLSL_VERSION} )
endif()
set( SPIRV_PROFILE PROFILE spirv )
# Add commands
set( OUTPUTS "" )
set( COMMANDS "" )
foreach( PLATFORM ${PLATFORMS} )
set( OPTIONS ${BASE_OPTIONS} )
set( OUTPUT "${ARG_OUTPUT}/${PLATFORM}/${FILENAME}.bin" )
get_filename_component( OUTPUT "${OUTPUT}" ABSOLUTE )
if( "${PLATFORM}" STREQUAL "dx9" )
list( APPEND OPTIONS
WINDOWS
${DX9_PROFILE}
OUTPUT ${OUTPUT}
)
elseif( "${PLATFORM}" STREQUAL "dx11" )
list( APPEND OPTIONS
WINDOWS
${DX11_PROFILE}
OUTPUT ${OUTPUT}
)
elseif( "${PLATFORM}" STREQUAL "metal" )
list( APPEND OPTIONS
OSX
PROFILE metal
OUTPUT ${OUTPUT}
)
elseif( "${PLATFORM}" STREQUAL "glsl" )
list( APPEND OPTIONS
LINUX
${GLSL_PROFILE}
OUTPUT ${OUTPUT}
)
elseif( "${PLATFORM}" STREQUAL "essl" )
list( APPEND OPTIONS
ANDROID
OUTPUT ${OUTPUT}
)
elseif( "${PLATFORM}" STREQUAL "asm.js" )
list( APPEND OPTIONS
ASM_JS
OUTPUT ${OUTPUT}
)
elseif( "${PLATFORM}" STREQUAL "spirv" )
list( APPEND OPTIONS
LINUX
${SPIRV_PROFILE}
OUTPUT ${OUTPUT}
)
else()
message( SEND_ERROR "add_shader given bad platform: ${PLATFORM}" )
return()
endif()
list( APPEND OUTPUTS ${OUTPUT} )
shaderc_parse( CMD ${OPTIONS} )
list( APPEND COMMANDS COMMAND "${CMAKE_COMMAND}" -E make_directory "${ARG_OUTPUT}/${PLATFORM}" )
list( APPEND COMMANDS COMMAND "$<TARGET_FILE:shaderc>" ${CMD} )
endforeach()
# Add command
add_custom_command(
MAIN_DEPENDENCY
${ARG_FILE}
OUTPUT
${OUTPUTS}
${COMMANDS}
COMMENT "Compiling shader ${ARG_FILE}"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
# Add to custom filter
source_group( "Shader Files" FILES ${ARG_FILE} )
endfunction()
# shaderc( FILE file OUTPUT file ... )
# See shaderc_parse() below for inputs
function( shaderc )
cmake_parse_arguments( ARG "" "FILE;OUTPUT;LABEL" "" ${ARGN} )
set( LABEL "" )
if( ARG_LABEL )
set( LABEL " (${ARG_LABEL})" )
endif()
shaderc_parse( CLI FILE ${ARG_FILE} OUTPUT ${ARG_OUTPUT} ${ARG_UNPARSED_ARGUMENTS} )
get_filename_component( OUTDIR "${ARG_OUTPUT}" ABSOLUTE )
get_filename_component( OUTDIR "${OUTDIR}" DIRECTORY )
add_custom_command( OUTPUT ${ARG_OUTPUT}
COMMAND ${CMAKE_COMMAND} -E make_directory "${OUTDIR}"
COMMAND "$<TARGET_FILE:shaderc>" ${CLI}
MAIN_DEPENDENCY ${ARG_FILE}
COMMENT "Compiling shader ${ARG_FILE}${LABEL}"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)
endfunction()
# shaderc_parse(
# FILE filename
# OUTPUT filename
# FRAGMENT|VERTEX|COMPUTE
# ANDROID|ASM_JS|IOS|LINUX|NACL|OSX|WINDOWS
# [PROFILE profile]
# [O 0|1|2|3]
# [VARYINGDEF filename]
# [BIN2C filename]
# [INCLUDES include;include]
# [DEFINES include;include]
# [DEPENDS]
# [PREPROCESS]
# [RAW]
# [VERBOSE]
# [DEBUG]
# [DISASM]
# [WERROR]
# )
function( shaderc_parse ARG_OUT )
cmake_parse_arguments( ARG "DEPENDS;ANDROID;ASM_JS;IOS;LINUX;NACL;OSX;WINDOWS;PREPROCESS;RAW;FRAGMENT;VERTEX;COMPUTE;VERBOSE;DEBUG;DISASM;WERROR" "FILE;OUTPUT;VARYINGDEF;BIN2C;PROFILE;O" "INCLUDES;DEFINES" ${ARGN} )
set( CLI "" )
# -f
if( ARG_FILE )
list( APPEND CLI "-f" "${ARG_FILE}" )
endif()
# -i
if( ARG_INCLUDES )
foreach( INCLUDE ${ARG_INCLUDES} )
list( APPEND CLI "-i" )
list( APPEND CLI "${INCLUDE}" )
endforeach()
endif()
# -o
if( ARG_OUTPUT )
list( APPEND CLI "-o" "${ARG_OUTPUT}" )
endif()
# --bin2c
if( ARG_BIN2C )
list( APPEND CLI "--bin2c" "${ARG_BIN2C}" )
endif()
# --depends
if( ARG_DEPENDS )
list( APPEND CLI "--depends" )
endif()
# --platform
set( PLATFORM "" )
set( PLATFORMS "ANDROID;ASM_JS;IOS;LINUX;NACL;OSX;WINDOWS" )
foreach( P ${PLATFORMS} )
if( ARG_${P} )
if( PLATFORM )
message( SEND_ERROR "Call to shaderc_parse() cannot have both flags ${PLATFORM} and ${P}." )
return()
endif()
set( PLATFORM "${P}" )
endif()
endforeach()
if( "${PLATFORM}" STREQUAL "" )
message( SEND_ERROR "Call to shaderc_parse() must have a platform flag: ${PLATFORMS}" )
return()
elseif( "${PLATFORM}" STREQUAL "ANDROID" )
list( APPEND CLI "--platform" "android" )
elseif( "${PLATFORM}" STREQUAL "ASM_JS" )
list( APPEND CLI "--platform" "asm.js" )
elseif( "${PLATFORM}" STREQUAL "IOS" )
list( APPEND CLI "--platform" "ios" )
elseif( "${PLATFORM}" STREQUAL "LINUX" )
list( APPEND CLI "--platform" "linux" )
elseif( "${PLATFORM}" STREQUAL "NACL" )
list( APPEND CLI "--platform" "nacl" )
elseif( "${PLATFORM}" STREQUAL "OSX" )
list( APPEND CLI "--platform" "osx" )
elseif( "${PLATFORM}" STREQUAL "WINDOWS" )
list( APPEND CLI "--platform" "windows" )
endif()
# --preprocess
if( ARG_PREPROCESS )
list( APPEND CLI "--preprocess" )
endif()
# --define
if( ARG_DEFINES )
list( APPEND CLI "--defines" )
set( DEFINES "" )
foreach( DEFINE ${ARG_DEFINES} )
if( NOT "${DEFINES}" STREQUAL "" )
set( DEFINES "${DEFINES}\\\\;${DEFINE}" )
else()
set( DEFINES "${DEFINE}" )
endif()
endforeach()
list( APPEND CLI "${DEFINES}" )
endif()
# --raw
if( ARG_RAW )
list( APPEND CLI "--raw" )
endif()
# --type
set( TYPE "" )
set( TYPES "FRAGMENT;VERTEX;COMPUTE" )
foreach( T ${TYPES} )
if( ARG_${T} )
if( TYPE )
message( SEND_ERROR "Call to shaderc_parse() cannot have both flags ${TYPE} and ${T}." )
return()
endif()
set( TYPE "${T}" )
endif()
endforeach()
if( "${TYPE}" STREQUAL "" )
message( SEND_ERROR "Call to shaderc_parse() must have a type flag: ${TYPES}" )
return()
elseif( "${TYPE}" STREQUAL "FRAGMENT" )
list( APPEND CLI "--type" "fragment" )
elseif( "${TYPE}" STREQUAL "VERTEX" )
list( APPEND CLI "--type" "vertex" )
elseif( "${TYPE}" STREQUAL "COMPUTE" )
list( APPEND CLI "--type" "compute" )
endif()
# --varyingdef
if( ARG_VARYINGDEF )
list( APPEND CLI "--varyingdef" "${ARG_VARYINGDEF}" )
endif()
# --verbose
if( ARG_VERBOSE )
list( APPEND CLI "--verbose" )
endif()
# --debug
if( ARG_DEBUG )
list( APPEND CLI "--debug" )
endif()
# --disasm
if( ARG_DISASM )
list( APPEND CLI "--disasm" )
endif()
# --profile
if( ARG_PROFILE )
list( APPEND CLI "--profile" "${ARG_PROFILE}" )
endif()
# -O
if( ARG_O )
list( APPEND CLI "-O" "${ARG_O}" )
endif()
# --Werror
if( ARG_WERROR )
list( APPEND CLI "--Werror" )
endif()
set( ${ARG_OUT} ${CLI} PARENT_SCOPE )
endfunction()