diff options
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | CMakeLists.txt | 16 | ||||
| -rw-r--r-- | cmake/CompileFXToH.cmake | 7 | ||||
| -rw-r--r-- | cmake/FindDirectX.cmake | 5 | ||||
| -rw-r--r-- | compiler/cmake/NvWaveWorks.cmake | 85 | ||||
| -rw-r--r-- | src/Entrypoints.cpp | 5 | ||||
| -rw-r--r-- | src/Quadtree.cpp | 2 |
7 files changed, 95 insertions, 26 deletions
@@ -42,3 +42,4 @@ test/gl2/win64/debug/cudart64_55.dll *.app compiler/vc12win64-cmake/ src/generated/ +bin/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 7116a55..9833f7d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,16 +42,20 @@ IF (NOT ${TARGET_BUILD_PLATFORM} IN_LIST PLATFORM_LIST) ENDIF() IF(TARGET_BUILD_PLATFORM STREQUAL "Windows") - SET(CMAKE_CXX_FLAGS "/Wall /wd4514 /wd4820 /wd4127 /wd4710 /wd4711 /d2Zi+ /WX /W4 /GF /GS- /GR- /Gd /fp:fast") + + #/GS /Gm /Od /MTd + #/GS- /Gy /Gm- /Ox /Ob2 /GF /Oy /MT /Ot + + SET(CMAKE_CXX_FLAGS "/W4 /Zc:wchar_t /Zi /errorReport:prompt /Zc:forScope /fp:fast /WX- /GR- /Gd /openmp- /nologo") - SET(CMAKE_CXX_FLAGS_DEBUG "/Od /MTd /RTCu") - SET(CMAKE_CXX_FLAGS_CHECKED "/Ox /MT") - SET(CMAKE_CXX_FLAGS_PROFILE "/Ox /MT") - SET(CMAKE_CXX_FLAGS_RELEASE "/Ox /MT") + SET(CMAKE_CXX_FLAGS_DEBUG "/GS /Gm /Od /MTd") + SET(CMAKE_CXX_FLAGS_RELEASE "/GS- /Gy /Gm- /Ox /Ob2 /GF /Oy /MT /Ot") IF(CMAKE_CL_64) ADD_DEFINITIONS(-DWIN64) - ENDIF(CMAKE_CL_64) + ENDIF(CMAKE_CL_64) + + ADD_DEFINITIONS(-DUNICODE -D_UNICODE) ELSEIF(TARGET_BUILD_PLATFORM STREQUAL "PS4") diff --git a/cmake/CompileFXToH.cmake b/cmake/CompileFXToH.cmake index 02817e8..4839cba 100644 --- a/cmake/CompileFXToH.cmake +++ b/cmake/CompileFXToH.cmake @@ -1,16 +1,15 @@ -FUNCTION(CompileFXToH FILE OUTPUT_DIR TARGET INCLUDE_DIR INCLUDE_DIR2 ENTRYPOINT OPTIONS) +FUNCTION(CompileFXToH FILE OUTPUT_FILE TARGET INCLUDE_DIR INCLUDE_DIR2 ENTRYPOINT OPTIONS) GET_FILENAME_COMPONENT(FILE_WE ${FILE} NAME_WE) # "/I${SHADER_SRC_DIR} /EGFSDK_WAVEWORKS_VERTEX_INPUT_Sig /Tvs_4_0 ${SHADER_SRC_DIR}\Quadtree_SM4_sig.fx /Fh ${WW_SOURCE_DIR}\generated\Quadtree_SM4_sig.h" - ADD_CUSTOM_TARGET(${TARGET} ALL) ADD_CUSTOM_COMMAND( PRE_BUILD # TARGET ${TARGET} - OUTPUT ${OUTPUT_DIR}/${FILE_WE}.h - COMMAND ${DirectX_FXC_EXECUTABLE} /I${INCLUDE_DIR} /I${INCLUDE_DIR2} /E${ENTRYPOINT} ${OPTIONS} ${FILE} /Fh ${OUTPUT_DIR}/${FILE_WE}.h + OUTPUT ${OUTPUT_FILE} + COMMAND ${DirectX_FXC_EXECUTABLE} /I${INCLUDE_DIR} /I${INCLUDE_DIR2} /E${ENTRYPOINT} ${OPTIONS} ${FILE} /Fh ${OUTPUT_FILE} ${ARGV7} ${ARGV8} MAIN_DEPENDENCY ${FILE} COMMENT "FXC Compile ${FILE}" VERBATIM diff --git a/cmake/FindDirectX.cmake b/cmake/FindDirectX.cmake index 34dbdd8..33be604 100644 --- a/cmake/FindDirectX.cmake +++ b/cmake/FindDirectX.cmake @@ -75,6 +75,7 @@ if (WIN32) # See also: # - http://msdn.microsoft.com/en-us/library/windows/desktop/ee663275.aspx if (DEFINED MSVC_VERSION AND NOT ${MSVC_VERSION} LESS 1700) + MESSAGE(Using WINSDK Headers) set (USE_WINSDK_HEADERS TRUE) endif () @@ -199,6 +200,7 @@ if (WIN32) find_winsdk_header (D3D11 d3d11.h) find_winsdk_library (D3D11 d3d11) + find_winsdk_library (DXGUID dxguid) find_combined (D3D11 D3D11 D3D11) find_winsdk_header (D3D11_1 d3d11_1.h) find_combined (D3D11_1 D3D11_1 D3D11) @@ -219,7 +221,8 @@ if (WIN32) endif () find_program (DirectX_FXC_EXECUTABLE fxc - HINTS ${DirectX_BIN_SEARCH_PATH} + HINTS "${ProgramFiles}/Windows Kits/8.1/bin/x86" "${ProgramFiles}/Windows Kits/8.0/bin/x86" ${DirectX_BIN_SEARCH_PATH} + DOC "Path to fxc.exe executable." ) diff --git a/compiler/cmake/NvWaveWorks.cmake b/compiler/cmake/NvWaveWorks.cmake index 387dc84..6ca3015 100644 --- a/compiler/cmake/NvWaveWorks.cmake +++ b/compiler/cmake/NvWaveWorks.cmake @@ -147,15 +147,75 @@ SET(CUDA_FILES ${WW_SOURCE_DIR}/FFT_Simulation_CUDA_kernel.cu ) +SET(FX_FILES + ${SHADER_SRC_DIR}/Quadtree_SM4_sig.fx + ${SHADER_SRC_DIR}/Quadtree_SM5_sig.fx + ${SHADER_SRC_DIR}/FoamGeneration_SM4.fx + ${SHADER_SRC_DIR}/FoamGeneration_SM3.fx + + ${WW_SOURCE_DIR}/FFT_Simulation_DirectCompute_shader.hlsl +) + +SET(GENERATED_HLSL_FILES + ${GEN_SRC_DIR}/Quadtree_SM4_sig.h + ${GEN_SRC_DIR}/Quadtree_SM5_sig.h + ${GEN_SRC_DIR}/FoamGeneration_vs_4_0.h + ${GEN_SRC_DIR}/FoamGeneration_ps_4_0.h + ${GEN_SRC_DIR}/FoamGeneration_vs_3_0.h + ${GEN_SRC_DIR}/FoamGeneration_ps_3_0.h + ${GEN_SRC_DIR}/ComputeH0_cs_5_0.h + ${GEN_SRC_DIR}/ComputeRows_cs_5_0.h + ${GEN_SRC_DIR}/ComputeColumns_cs_5_0.h +) + INCLUDE(cmake/CompileFXToH.cmake) #ADD_CUSTOM_TARGET(fx ALL) -#FUNCTION(CompileFXToH FILE OUTPUT_DIR TARGET INCLUDE_DIR ENTRYPOINT OPTIONS) +#FUNCTION(CompileFXToH FILE OUTPUT_FILE TARGET INCLUDE_DIR ENTRYPOINT OPTIONS) + +# Compile the .fx files to .h files so they can be loaded easily. +ADD_CUSTOM_TARGET(fx ALL) + +CompileFXToH(${SHADER_SRC_DIR}/Quadtree_SM4_sig.fx ${GEN_SRC_DIR}/Quadtree_SM4_sig.h fx ${SHADER_SRC_DIR} ${DISTRO_INCLUDE_DIR} GFSDK_WAVEWORKS_VERTEX_INPUT_Sig /Tvs_4_0) +CompileFXToH(${SHADER_SRC_DIR}/Quadtree_SM5_sig.fx ${GEN_SRC_DIR}/Quadtree_SM5_sig.h fx ${SHADER_SRC_DIR} ${DISTRO_INCLUDE_DIR} GFSDK_WAVEWORKS_VERTEX_INPUT_Sig /Tvs_5_0) + +# NOTE: This does a weird thing. Only the PS command invocation will show in VS. The other one is there, but is in some sort of hidden file. +# It can still be seen in the project xml. +CompileFXToH(${SHADER_SRC_DIR}/FoamGeneration_SM4.fx ${GEN_SRC_DIR}/FoamGeneration_ps_4_0.h fx ${SHADER_SRC_DIR} ${GEN_SRC_DIR} ps /Tps_4_0) +CompileFXToH(${SHADER_SRC_DIR}/FoamGeneration_SM4.fx ${GEN_SRC_DIR}/FoamGeneration_vs_4_0.h fx ${SHADER_SRC_DIR} ${GEN_SRC_DIR} vs /Tvs_4_0) + +CompileFXToH(${SHADER_SRC_DIR}/FoamGeneration_SM3.fx ${GEN_SRC_DIR}/FoamGeneration_ps_3_0.h fx ${SHADER_SRC_DIR} ${GEN_SRC_DIR} ps /Tps_3_0) +CompileFXToH(${SHADER_SRC_DIR}/FoamGeneration_SM3.fx ${GEN_SRC_DIR}/FoamGeneration_vs_3_0.h fx ${SHADER_SRC_DIR} ${GEN_SRC_DIR} vs /Tvs_3_0) + +CompileFXToH(${SHADER_SRC_DIR}/CalcGradient_SM4.fx ${GEN_SRC_DIR}/CalcGradient_ps_4_0.h fx ${SHADER_SRC_DIR} ${GEN_SRC_DIR} ps /Tps_4_0) +CompileFXToH(${SHADER_SRC_DIR}/CalcGradient_SM4.fx ${GEN_SRC_DIR}/CalcGradient_vs_4_0.h fx ${SHADER_SRC_DIR} ${GEN_SRC_DIR} vs /Tvs_4_0) + +CompileFXToH(${SHADER_SRC_DIR}/CalcGradient_SM3.fx ${GEN_SRC_DIR}/CalcGradient_ps_3_0.h fx ${SHADER_SRC_DIR} ${GEN_SRC_DIR} ps /Tps_3_0) +CompileFXToH(${SHADER_SRC_DIR}/CalcGradient_SM3.fx ${GEN_SRC_DIR}/CalcGradient_vs_3_0.h fx ${SHADER_SRC_DIR} ${GEN_SRC_DIR} vs /Tvs_3_0) -CompileFXToH(${SHADER_SRC_DIR}/Quadtree_SM4_sig.fx ${GEN_SRC_DIR} fx1 ${SHADER_SRC_DIR} ${DISTRO_INCLUDE_DIR} GFSDK_WAVEWORKS_VERTEX_INPUT_Sig /Tvs_4_0) -CompileFXToH(${SHADER_SRC_DIR}/Quadtree_SM5_sig.fx ${GEN_SRC_DIR} fx2 ${SHADER_SRC_DIR} ${DISTRO_INCLUDE_DIR} GFSDK_WAVEWORKS_VERTEX_INPUT_Sig /Tvs_5_0) +CompileFXToH(${WW_SOURCE_DIR}/FFT_Simulation_DirectCompute_shader.hlsl ${GEN_SRC_DIR}/ComputeH0_cs_5_0.h fx ${SHADER_SRC_DIR} ${GEN_SRC_DIR} ComputeH0 /Tcs_5_0 /Vng_ComputeH0) +CompileFXToH(${WW_SOURCE_DIR}/FFT_Simulation_DirectCompute_shader.hlsl ${GEN_SRC_DIR}/ComputeRows_cs_5_0.h fx ${SHADER_SRC_DIR} ${GEN_SRC_DIR} ComputeRows /Tcs_5_0 /Vng_ComputeRows) +CompileFXToH(${WW_SOURCE_DIR}/FFT_Simulation_DirectCompute_shader.hlsl ${GEN_SRC_DIR}/ComputeColumns_cs_5_0.h fx ${SHADER_SRC_DIR} ${GEN_SRC_DIR} ComputeColumns /Tcs_5_0 /Vng_ComputeColumns) + + +# Now the CUDA file +# CUDA! +SET(CUDA_NVCC_FLAGS "-G -g -DWIN32 -D_WINDOWS -D_UNICODE -DUNICODE -D_LIB -gencode arch=compute_30,code=compute_30 -gencode arch=compute_20,code=sm_20") + +CUDA_INCLUDE_DIRECTORIES( + ${CUDA_INCLUDE_DIRS} +) + +SET(CUDA_PROPAGATE_HOST_FLAGS OFF) + +SET(CUDA_NVCC_FLAGS_DEBUG "--compiler-options=/Zi,/W4,/nologo,/Od,/MTd") +SET(CUDA_NVCC_FLAGS_RELEASE "-use_fast_math -DNDEBUG --compiler-options=/W4,/nologo,/O2,/GF,/GS-,/Gy,/fp:fast,/GR-,/MT") + +CUDA_COMPILE(GENERATED_CUDA_FILES_1 + ${WW_SOURCE_DIR}/FFT_Simulation_CUDA_kernel.cu +) ADD_LIBRARY(WaveWorks ${WW_LIBTYPE} ${WW_PLATFORM_SRC_FILES} @@ -164,18 +224,19 @@ ADD_LIBRARY(WaveWorks ${WW_LIBTYPE} ${H_FILES} ${DISTRO_INCLUDE_FILES} - ${WW_SOURCE_DIR}/generated/Quadtree_SM4_sig.h - ${SHADER_SRC_DIR}/Quadtree_SM4_sig.fx - - ${WW_SOURCE_DIR}/generated/Quadtree_SM5_sig.h - ${SHADER_SRC_DIR}/Quadtree_SM5_sig.fx - + ${FX_FILES} + ${GENERATED_HLSL_FILES} + + ${GENERATED_CUDA_FILES_1} + # ${HLSL_FILES} # ${CUDA_FILES} ) SOURCE_GROUP("src" FILES ${CPP_FILES} ${H_FILES}) SOURCE_GROUP("include" FILES ${DISTRO_INCLUDE_FILES}) +SOURCE_GROUP("generated" FILES ${GENERATED_HLSL_FILES}) +SOURCE_GROUP("fx" FILES ${FX_FILES}) #SOURCE_GROUP("header" FILES ${H_FILES}) #SOURCE_GROUP("hlsl" FILES ${HLSL_FILES}) #SOURCE_GROUP("cuda" FILES ${CUDA_FILES}) @@ -206,7 +267,7 @@ TARGET_COMPILE_DEFINITIONS(WaveWorks IF(TARGET_BUILD_PLATFORM STREQUAL "Windows") # Add linked libraries -# TARGET_LINK_LIBRARIES(WaveWorks PUBLIC ${NVTOOLSEXT_LIBRARIES} LowLevel LowLevelAABB LowLevelCloth LowLevelDynamics LowLevelParticles WaveWorksCommon WaveWorksGpu PxFoundation PxPvdSDK PxTask SceneQuery SimulationController) + TARGET_LINK_LIBRARIES(WaveWorks PUBLIC ${CUDA_LIBRARIES} ${DirectX_DXGUID_LIBRARY}) IF(CMAKE_CL_64) SET(LIBPATH_SUFFIX "win64") @@ -215,8 +276,8 @@ IF(TARGET_BUILD_PLATFORM STREQUAL "Windows") ENDIF(CMAKE_CL_64) SET_TARGET_PROPERTIES(WaveWorks PROPERTIES - LINK_FLAGS_DEBUG "/DELAYLOAD:nvcuda.dll /MAP /DELAYLOAD:PxFoundationDEBUG_${LIBPATH_SUFFIX}.dll /DELAYLOAD:WaveWorks3CommonDEBUG_${LIBPATH_SUFFIX}.dll /DEBUG" - LINK_FLAGS_RELEASE "/DELAYLOAD:nvcuda.dll /MAP /DELAYLOAD:WaveWorks3Common_${LIBPATH_SUFFIX}.dll /DELAYLOAD:PxFoundation_${LIBPATH_SUFFIX}.dll /INCREMENTAL:NO" + LINK_FLAGS_DEBUG "/MAP /DEBUG" + LINK_FLAGS_RELEASE "/MAP /INCREMENTAL:NO" ) ELSEIF(TARGET_BUILD_PLATFORM STREQUAL "PS4") diff --git a/src/Entrypoints.cpp b/src/Entrypoints.cpp index ad94648..996fe55 100644 --- a/src/Entrypoints.cpp +++ b/src/Entrypoints.cpp @@ -431,8 +431,9 @@ const char* GFSDK_WAVEWORKS_CALL_CONV GFSDK_WaveWorks_GetBuildString() #elif defined(TARGET_PLATFORM_ANDROID) return "ANDROID_TEST"; // TIMT: TODO!!! -#else - extern const char* kNVWaveWorks_build_string; +#else + //TODO: Fix this build string thing. + const char* kNVWaveWorks_build_string = "FixBuildString!"; return kNVWaveWorks_build_string; #endif } diff --git a/src/Quadtree.cpp b/src/Quadtree.cpp index 2ee2d76..daa7d23 100644 --- a/src/Quadtree.cpp +++ b/src/Quadtree.cpp @@ -1169,7 +1169,7 @@ int GFSDK_WaveWorks_Quadtree::buildNodeList( QuadNode& quad_node, // Estimate the min grid coverage float min_coverage = estimateGridCoverage(quad_node, m_params, matProj, NumPixelsInViewport, eyePoint); - float geomorphing_degree = max(0.f,min(m_params.geomorphing_degree,1.f)); + //float geomorphing_degree = max(0.f,min(m_params.geomorphing_degree,1.f)); // Recursively attatch sub-nodes. bool visible = true; |