@echo off
rem //------------------------------------------------------------
rem //
rem // DirectX11 HLSL シェーダをコンパイルするバッチファイル
rem //
rem //------------------------------------------------------------
rem fxc.exe の場所
set SHADER_COMPILER="C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Utilities\bin\x86\fxc.exe"
rem 結果の出力先
set OUTPUT_DIR=..\..\temporary
rem //------------------------------------------------------------
rem //
rem // デフォルトの設定
rem //
rem //------------------------------------------------------------
set SHADER_OPT_DEFAULT=1
set VS_PROFILE_DEFAULT=vs_5_0
set GS_PROFILE_DEFAULT=gs_5_0
set PS_PROFILE_DEFAULT=ps_5_0
set CS_PROFILE_DEFAULT=cs_5_0
set VS_ENTRYPOINT_DEFAULT=VSMain
set GS_ENTRYPOINT_DEFAULT=GSMain
set PS_ENTRYPOINT_DEFAULT=PSMain
set CS_ENTRYPOINT_DEFAULT=CSMain
set SHADER_SOURCE_SUFFIX_DEFAULT=hlsl
set SHADER_ASM_SUFFIX_DEFAULT=shasm
set SHADER_OBJ_SUFFIX_DEFAULT=shobj
rem //------------------------------------------------------------
if not exist %SHADER_COMPILER% (
echo エラー : SHADER_COMPILER がないです.
echo SHADER_COMPILER は %SHADER_COMPILER% です.
return
)
if not exist %OUTPUT_DIR% (
echo エラー : OUTPUT_DIR がないです.
echo OUTPUT_DIR は %OUTPUT_DIR% です.
return
)
rem //------------------------------------------------------------
rem //
rem // ビルド対象のシェーダ
rem //
rem //------------------------------------------------------------
rem HLSL のファイル名と エントリポイントを指定
call :build_shader_vs_5_0 FluidRender.hlsl ParticleVS
call :build_shader_gs_5_0 FluidRender.hlsl ParticleGS
call :build_shader_ps_5_0 FluidRender.hlsl ParticlePS
call :build_shader_cs_5_0 FluidCS11.hlsl DensityCS_Simple
call :build_shader_cs_5_0 FluidCS11.hlsl ForceCS_Simple
call :build_shader_cs_5_0 FluidCS11.hlsl IntegrateCS
exit /b %ERRORLEVEL%
rem //------------------------------------------------------------
rem //
rem // 以下は関数
rem //
rem //------------------------------------------------------------
rem 頂点シェーダをビルドする関数
:build_shader_vs_5_0
call :build_shader %1 %VS_PROFILE_DEFAULT% %2
exit /b %ERRORLEVEL%
rem //------------------------------------------------------------
rem ジオメトリシェーダをビルドする関数
:build_shader_gs_5_0
call :build_shader %1 %GS_PROFILE_DEFAULT% %2
exit /b %ERRORLEVEL%
rem //------------------------------------------------------------
rem ピクセルシェーダをビルドする関数
:build_shader_ps_5_0
call :build_shader %1 %PS_PROFILE_DEFAULT% %2
exit /b %ERRORLEVEL%
rem //------------------------------------------------------------
rem コンピュートシェーダをビルドする関数
:build_shader_cs_5_0
call :build_shader %1 %CS_PROFILE_DEFAULT% %2
exit /b %ERRORLEVEL%
rem //------------------------------------------------------------
rem シェーダをビルドする関数
:build_shader
SETLOCAL
set SOURCE_BASE_NAME=%~n1
set HLSL_FILENAME=%1
set ASM_FILENAME=%OUTPUT_DIR%\%SOURCE_BASE_NAME%_%3_%2.%SHADER_ASM_SUFFIX_DEFAULT%
if not exist %HLSL_FILENAME% (
echo エラー : HLSL_FILENAME がないです
echo HLSL_FILENAME = %HLSL_FILENAME% です
exit /b 1
)
echo;
echo %HLSL_FILENAME% のエントリポイント %3 を、%2 でビルド
%SHADER_COMPILER% /O%SHADER_OPT_DEFAULT% /nologo /Fc%ASM_FILENAME% /T%2 /E%3 %HLSL_FILENAME%
if not %ERRORLEVEL% == 0 (
echo コンパイルエラー
echo エラーレベル : %ERRORLEVEL%
echo ファイル名 : %HLSL_FILENAME%
echo エントリポイント : %3
echo プロファイル : %2
echo;
pause
exit /b 1
)
ENDLOCAL
exit /b %ERRORLEVEL%
rem //------------------------------------------------------------