nem0 / LumixEngine

3D C++ Game Engine - yet another open source game engine
MIT License
3.53k stars 398 forks source link

Bindless #1508

Open nem0 opened 3 months ago

nem0 commented 3 months ago
nem0 commented 3 months ago

trying to use spirv_to_dxil from mesa3D, following script extracts neccessary source code from mesa3d repo

@echo off

REM this script copy parts of mesa we use, so users don't have to clone whole mesa

REM clone mesa repository next to LumixEngine directory
REM needs python3
REM need pyyaml and mako module installed 
REM pip install pyyaml
REM pip install mako

REM call :gen
call :copySources
goto :eof

REM copy only necessary stuff from mesa repository
:copySources
    if not exist external\mesa\include mkdir external\mesa\include
    if not exist external\mesa\include\gl mkdir external\mesa\include\gl
    if not exist external\mesa\include\gles mkdir external\mesa\include\gles
    if not exist external\mesa\include\gles2 mkdir external\mesa\include\gles2
    if not exist external\mesa\include\gles3 mkdir external\mesa\include\gles3
    if not exist external\mesa\include\khr mkdir external\mesa\include\khr
    if not exist external\mesa\include\vk_video mkdir external\mesa\include\vk_video
    if not exist external\mesa\include\vulkan mkdir external\mesa\include\vulkan
    if not exist external\mesa\src\ mkdir external\mesa\src\
    if not exist external\mesa\src\c11 mkdir external\mesa\src\c11
    if not exist external\mesa\src\c11\impl mkdir external\mesa\src\c11\impl
    if not exist external\mesa\src\compiler mkdir external\mesa\src\compiler
    if not exist external\mesa\src\compiler\spirv mkdir external\mesa\src\compiler\spirv
    if not exist external\mesa\src\compiler\glsl mkdir external\mesa\src\compiler\glsl
    if not exist external\mesa\src\compiler\nir mkdir external\mesa\src\compiler\nir
    if not exist external\mesa\src\microsoft\compiler mkdir external\mes\src\microsoft\compiler
    if not exist external\mesa\src\microsoft\compiler\spirv mkdir external\mesa\src\microsoft\compiler\spirv
    if not exist external\mesa\src\microsoft\spirv_to_dxil mkdir external\mesa\src\microsoft\spirv_to_dxil
    if not exist external\mesa\src\util mkdir external\mesa\src\util
    if not exist external\mesa\src\util\blake3 mkdir external\mesa\src\util\blake3
    if not exist external\mesa\src\util\format mkdir external\mesa\src\util\format
    if not exist external\mesa\src\util\sha1 mkdir external\mesa\src\util\sha1

    copy ..\..\..\mesa\include\no_extern_c.h external\mesa\include
    copy ..\..\..\mesa\include\c99_alloca.h external\mesa\include
    copy ..\..\..\mesa\include\c99_compat.h external\mesa\include

    xcopy /y ..\..\..\mesa\include\gl external\mesa\include\gl
    xcopy /y ..\..\..\mesa\include\gles external\mesa\include\gles
    xcopy /y ..\..\..\mesa\include\gles2 external\mesa\include\gles2
    xcopy /y ..\..\..\mesa\include\gles3 external\mesa\include\gles3

    xcopy /y ..\..\..\mesa\include\khr external\mesa\include\khr

    copy ..\..\..\mesa\include\vk_video\vulkan_video_codec_av1std.h external\mesa\include\vk_video
    copy ..\..\..\mesa\include\vk_video\vulkan_video_codec_av1std_decode.h external\mesa\include\vk_video
    copy ..\..\..\mesa\include\vk_video\vulkan_video_codec_h264std.h external\mesa\include\vk_video
    copy ..\..\..\mesa\include\vk_video\vulkan_video_codec_h264std_decode.h external\mesa\include\vk_video
    copy ..\..\..\mesa\include\vk_video\vulkan_video_codec_h264std_encode.h external\mesa\include\vk_video
    copy ..\..\..\mesa\include\vk_video\vulkan_video_codec_h265std.h external\mesa\include\vk_video
    copy ..\..\..\mesa\include\vk_video\vulkan_video_codec_h265std_decode.h external\mesa\include\vk_video
    copy ..\..\..\mesa\include\vk_video\vulkan_video_codec_h265std_encode.h external\mesa\include\vk_video
    copy ..\..\..\mesa\include\vk_video\vulkan_video_codecs_common.h external\mesa\include\vk_video

    copy ..\..\..\mesa\include\vulkan\vk_platform.h external\mesa\include\vulkan
    copy ..\..\..\mesa\include\vulkan\vulkan_core.h external\mesa\include\vulkan
    copy ..\..\..\mesa\include\vulkan\vulkan.h external\mesa\include\vulkan

    copy ..\..\..\mesa\src\git_sha1.h external\mesa\src

    copy ..\..\..\mesa\src\c11\time.h external\mesa\src\c11
    copy ..\..\..\mesa\src\c11\threads.h external\mesa\src\c11

    copy ..\..\..\mesa\src\c11\impl\time.c external\mesa\src\c11\impl

    xcopy /y ..\..\..\mesa\src\microsoft\compiler\*.c external\mesa\src\microsoft\compiler
    xcopy /y ..\..\..\mesa\src\microsoft\compiler\*.h external\mesa\src\microsoft\compiler

    copy ..\..\..\mesa\src\compiler\builtin_types.c external\mesa\src\compiler
    copy ..\..\..\mesa\src\compiler\builtin_types.h external\mesa\src\compiler
    copy ..\..\..\mesa\src\compiler\glsl_types.c external\mesa\src\compiler
    copy ..\..\..\mesa\src\compiler\glsl_types.h external\mesa\src\compiler
    copy ..\..\..\mesa\src\compiler\shader_enums.c external\mesa\src\compiler
    copy ..\..\..\mesa\src\compiler\shader_enums.h external\mesa\src\compiler
    copy ..\..\..\mesa\src\compiler\shader_info.h external\mesa\src\compiler

    copy ..\..\..\mesa\src\compiler\glsl\list.h external\mesa\src\compiler\glsl

    xcopy /y ..\..\..\mesa\src\compiler\spirv\*.h external\mesa\src\compiler\spirv
    xcopy /y ..\..\..\mesa\src\compiler\spirv\*.c external\mesa\src\compiler\spirv

    xcopy /y ..\..\..\mesa\src\compiler\nir\*.c external\mesa\src\compiler\nir
    xcopy /y ..\..\..\mesa\src\compiler\nir\*.h external\mesa\src\compiler\nir

    xcopy /y ..\..\..\mesa\src\util\*.cpp external\mesa\src\util
    xcopy /y ..\..\..\mesa\src\util\*.c external\mesa\src\util
    xcopy /y ..\..\..\mesa\src\util\*.h external\mesa\src\util

    xcopy /y ..\..\..\mesa\src\util\blake3\*.c external\mesa\src\util\blake3
    xcopy /y ..\..\..\mesa\src\util\blake3\*.h external\mesa\src\util\blake3

    copy ..\..\..\mesa\src\util\sha1\sha1.c external\mesa\src\util\sha1
    copy ..\..\..\mesa\src\util\sha1\sha1.h external\mesa\src\util\sha1

    xcopy /y ..\..\..\mesa\src\util\format\*.c external\mesa\src\util\format
    xcopy /y ..\..\..\mesa\src\util\format\*.h external\mesa\src\util\format

    copy ..\..\..\mesa\src\microsoft\spirv_to_dxil\dxil_spirv_nir.c external\mesa\src\microsoft\spirv_to_dxil
    copy ..\..\..\mesa\src\microsoft\spirv_to_dxil\dxil_spirv_nir.h external\mesa\src\microsoft\spirv_to_dxil
    copy ..\..\..\mesa\src\microsoft\spirv_to_dxil\dxil_spirv_nir_lower_bindless.c external\mesa\src\microsoft\spirv_to_dxil
    copy ..\..\..\mesa\src\microsoft\spirv_to_dxil\spirv_to_dxil.c external\mesa\src\microsoft\spirv_to_dxil
    copy ..\..\..\mesa\src\microsoft\spirv_to_dxil\spirv_to_dxil.h external\mesa\src\microsoft\spirv_to_dxil
goto :eof

REM do necessary part of what meson does in mesa repository
REM we don't want to depend on meson, therefore this function
:gen
    pushd ..\..\..\mesa\src\
    python3 ..\bin\git_sha1_gen.py --output git_sha1.h
    popd

    pushd ..\..\..\mesa\src\util
    python3 driconf_static.py 00-mesa-defaults.conf driconf_static.h
    python3 format_srgb.py > format_srgb.c
    popd

    pushd ..\..\..\mesa\src\util\format
    python3 u_format_table.py u_format.yaml > u_format_table.c
    python3 u_format_table.py u_format.yaml --enums > u_format_gen.h
    python3 u_format_table.py u_format.yaml --header > u_format_pack.h
    popd

    pushd ..\..\..\mesa\src\compiler
    python3 builtin_types_c.py builtin_types.c
    python3 builtin_types_h.py builtin_types.h
    popd

    pushd ..\..\..\mesa\src\compiler\spirv
    python3 vtn_generator_ids_h.py spir-v.xml vtn_generator_ids.h
    python3 vtn_gather_types_c.py spirv.core.grammar.json vtn_gather_types.c
    popd

    pushd ..\..\..\mesa\src\compiler\nir
    python3 nir_constant_expressions.py > nir_constant_expressions.c
    python3 nir_opcodes_c.py > nir_opcodes.c
    python3 nir_opcodes_h.py > nir_opcodes.h
    python3 nir_opt_algebraic.py --out nir_opt_algebraic.c
    python3 nir_intrinsics_c.py --outdir .
    python3 nir_intrinsics_h.py --outdir .
    python3 nir_intrinsics_indices_h.py --outdir .
    python3 nir_builder_opcodes_h.py > nir_builder_opcodes.h
    popd

    pushd ..\..\..\mesa\src\compiler\spirv
    python3 spirv_info_gen.py --json spirv.core.grammar.json --out-h spirv_info.h --out-c spirv_info.c
    popd

    pushd ..\..\..\mesa\src\microsoft\compiler
    python3 dxil_nir_algebraic.py -p ..\..\compiler\nir > dxil_nir_algebraic.c
    popd

    echo generators done

goto :eof

add to genie.lua

project "spirv2dxil_cpp"
    kind "StaticLib"
    files {
        "external/mesa/src/**.cpp",
    }

    includedirs {
        "external/mesa/include/",
        "external/mesa/src/",
        "external/mesa/src/compiler/",
        "external/mesa/src/compiler/nir",
        "external/mesa/src/compiler/spirv",
        "external/mesa/src/microsoft/compiler",
        "external/include",
    }

    defaultConfigurations()
    removeflags { "FatalWarnings" }
    flags { "MinimumWarnings" }

project "spirv2dxil"
    kind "StaticLib"

    buildoptions { "/std:c11" }
    files {
        "mesa.bat",
        "external/mesa/src/**.c",
        "external/mesa/src/**.h",
    }

    includedirs {
        "external/mesa/include/",
        "external/mesa/src/",
        "external/mesa/src/compiler/",
        "external/mesa/src/compiler/nir",
        "external/mesa/src/compiler/spirv",
        "external/mesa/src/microsoft/compiler",
        "external/include",
    }

    removefiles {
        "external/mesa/src/compiler/spirv/spirv2nir.c",
        "external/mesa/src/util/blake3/blake3_neon.c"
    }

    links { "spirv2dxil_cpp" }

    defaultConfigurations()
    removeflags { "FatalWarnings" }
    flags { "MinimumWarnings" }
    defines {
        "HAVE_STRUCT_TIMESPEC",
        "PACKAGE_VERSION=\"0\"",
        "_CRT_SECURE_NO_WARNINGS",
        "WIN32_LEAN_AND_MEAN",
        "NO_REGEX",
        "_WINDOWS",
        "_WIN32_WINNT=0x0A00",
        "_WINVER=0x0A00",
        "PIPE_SUBSYSTEM_WINDOWS_USER",
        "_USE_MATH_DEFINES",
        "VC_EXTRALEAN",
        "_CRT_SECURE_NO_WARNINGS",
        "_CRT_SECURE_NO_DEPRECATE",
        "_SCL_SECURE_NO_WARNINGS",
        "_SCL_SECURE_NO_DEPRECATE",
        "_ALLOW_KEYWORD_MACROS",
        "_HAS_EXCEPTIONS=0",
        "NOMINMAX",
        "WINDOWS_NO_FUTEX",
    }