diff --git a/.gitignore b/.gitignore index 6091199e3..87f63298e 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ Development32/ Development64/ Release32/ Release64/ +build/ dist/ Resources/*.png qrenderdoc/Makefile* @@ -14,7 +15,7 @@ qrenderdoc/Makefile* *.ilk *.manifest *.user -bin/ +bin obj/ .obj/ *.opensdf diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..dbe1c92dc --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,44 @@ +cmake_minimum_required(VERSION 2.8.12) + +if(WIN32) + message(FATAL_ERROR "CMake is not needed on Windows, just open and build renderdoc.sln") +endif() + +# disallow in-source builds because we have a top-level wrapper Makefile +if(CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR) + message(FATAL_ERROR "In-source builds not allowed") +endif() + +project(RenderDoc CXX C) + +option(ENABLE_GL "Enable GL driver" ON) +option(ENABLE_VULKAN "Enable Vulkan driver" ON) +option(ENABLE_RENDERDOCCMD "Enable renderdoccmd" ON) +option(ENABLE_QRENDERDOC "Enable qrenderdoc" ON) + +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden") + + set(warning_flags + -Wall + -Werror + -Wno-unused + -Wno-unknown-pragmas + -Wno-reorder) + string(REPLACE ";" " " warning_flags "${warning_flags}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${warning_flags}") +endif() + +add_subdirectory(renderdoc) + +if(ENABLE_RENDERDOCCMD) + add_subdirectory(renderdoccmd) +endif() + +if(ENABLE_QRENDERDOC) + add_subdirectory(qrenderdoc) +endif() diff --git a/Makefile b/Makefile index 6ed76e0ee..0ff7a4a35 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,20 @@ -.PHONY: all -all: - mkdir -p bin/ - cd renderdoc && $(MAKE) librenderdoc.so - cd renderdoccmd && $(MAKE) bin/renderdoccmd - cd qrenderdoc && qmake "CONFIG+=debug" && $(MAKE) - cp renderdoc/librenderdoc.so renderdoc/driver/vulkan/renderdoc_capture.json renderdoccmd/bin/renderdoccmd bin/ +SRC_DIR := $(shell pwd) +DST_DIR := $(SRC_DIR)/build + +.PHONY: all clean renderdoc qrenderdoc + +all: renderdoc qrenderdoc + @ln -sf "$(DST_DIR)/bin" + +renderdoc: + @mkdir -p "$(DST_DIR)" && cd "$(DST_DIR)" && \ + cmake -DENABLE_QRENDERDOC=OFF "$(SRC_DIR)" && \ + $(MAKE) + +qrenderdoc: renderdoc + @mkdir -p "$(DST_DIR)"/qrenderdoc && cd "$(DST_DIR)"/qrenderdoc && \ + qmake "CONFIG+=debug" "DESTDIR=$(DST_DIR)/bin" "$(SRC_DIR)"/qrenderdoc && \ + $(MAKE) -.PHONY: clean clean: - cd renderdoc && $(MAKE) clean - cd renderdoccmd && $(MAKE) clean - cd qrenderdoc && rm -rf .obj Makefile* + @rm -rf "$(DST_DIR)" bin diff --git a/qrenderdoc/CMakeLists.txt b/qrenderdoc/CMakeLists.txt new file mode 100644 index 000000000..390be0f06 --- /dev/null +++ b/qrenderdoc/CMakeLists.txt @@ -0,0 +1,7 @@ +set(output_dir ${CMAKE_BINARY_DIR}/bin) + +include(ExternalProject) +ExternalProject_Add(qrenderdoc + DEPENDS renderdoc + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} + CONFIGURE_COMMAND qmake "CONFIG+=debug" "DESTDIR=${output_dir}" ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/qrenderdoc/qrenderdoc.pro b/qrenderdoc/qrenderdoc.pro index d6bc30d3e..ec2b0a14d 100644 --- a/qrenderdoc/qrenderdoc.pro +++ b/qrenderdoc/qrenderdoc.pro @@ -46,11 +46,12 @@ win32 { QMAKE_CXXFLAGS_WARN_ON -= -w34100 } else { - - DESTDIR = $$_PRO_FILE_PWD_/../bin + isEmpty(DESTDIR) { + DESTDIR = $$_PRO_FILE_PWD_/../bin + } # Link against the core library - LIBS += -L$$_PRO_FILE_PWD_/../renderdoc -lrenderdoc + LIBS += -L$$DESTDIR -lrenderdoc QMAKE_LFLAGS += '-Wl,-rpath,\'\$$ORIGIN\'' QMAKE_CXXFLAGS += -std=c++11 -Wno-unused-parameter -Wno-reorder diff --git a/renderdoc/CMakeLists.txt b/renderdoc/CMakeLists.txt new file mode 100644 index 000000000..15f2d3b88 --- /dev/null +++ b/renderdoc/CMakeLists.txt @@ -0,0 +1,238 @@ +set(CMAKE_POSITION_INDEPENDENT_CODE ON) + +set(RDOC_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +set(RDOC_DEFINITIONS PRIVATE -DRENDERDOC_EXPORTS) +set(RDOC_INCLUDES + PRIVATE ${RDOC_SOURCE_DIR} + PRIVATE ${RDOC_SOURCE_DIR}/3rdparty) +set(RDOC_LIBRARIES) + +# get git commit hash +execute_process(COMMAND sh ${CMAKE_SOURCE_DIR}/calc_hash.sh + OUTPUT_VARIABLE GIT_COMMIT_HASH) +string(STRIP ${GIT_COMMIT_HASH} GIT_COMMIT_HASH) +list(APPEND RDOC_DEFINITIONS + PRIVATE -DGIT_COMMIT_HASH="${GIT_COMMIT_HASH}") + +if(UNIX) + find_package(PkgConfig REQUIRED) + find_package(Threads REQUIRED) + find_package(X11 REQUIRED) + + # This should be fixed and moved to FindXCB.cmake + pkg_check_modules(PC_XCB REQUIRED xcb xcb-keysyms) + set(XCB_INCLUDE_DIRS) + set(XCB_LIBRARIES xcb xcb-keysyms) + + list(APPEND RDOC_DEFINITIONS + PUBLIC -DRENDERDOC_PLATFORM=linux + PRIVATE -DLINUX) + + list(APPEND RDOC_INCLUDES + PRIVATE ${X11_X11_INCLUDE_PATH} + PRIVATE ${XCB_INCLUDE_DIRS}) + + list(APPEND RDOC_LIBRARIES + PRIVATE m + PRIVATE dl + PRIVATE ${CMAKE_THREAD_LIBS_INIT} + PRIVATE ${X11_X11_LIB} + PRIVATE ${XCB_LIBRARIES}) +endif() + +set(sources + api/app/renderdoc_app.h + api/replay/basic_types.h + api/replay/capture_options.h + api/replay/control_types.h + api/replay/d3d11_pipestate.h + api/replay/data_types.h + api/replay/gl_pipestate.h + api/replay/renderdoc_replay.h + api/replay/replay_enums.h + api/replay/shader_types.h + api/replay/vk_pipestate.h + common/common.cpp + common/common.h + common/custom_assert.h + common/dds_readwrite.cpp + common/dds_readwrite.h + common/globalconfig.h + common/shader_cache.h + common/threading.h + common/timing.h + common/wrapped_pool.h + core/core.cpp + core/core.h + core/crash_handler.h + core/remote_access.cpp + core/remote_replay.cpp + core/replay_proxy.cpp + core/replay_proxy.h + core/resource_manager.cpp + core/resource_manager.h + core/socket_helpers.h + data/glsl/debuguniforms.h + data/glsl/texsample.h + data/hlsl/debugcbuffers.h + data/spv/debuguniforms.h + data/spv/texsample.h + data/version.h + hooks/hooks.cpp + hooks/hooks.h + maths/camera.cpp + maths/camera.h + maths/formatpacking.h + maths/half_convert.h + maths/matrix.cpp + maths/matrix.h + maths/quat.h + maths/vec.h + os/os_specific.cpp + os/os_specific.h + replay/app_api.cpp + replay/capture_options.cpp + replay/entry_points.cpp + replay/replay_driver.h + replay/replay_output.cpp + replay/replay_renderer.cpp + replay/replay_renderer.h + replay/type_helpers.cpp + replay/type_helpers.h + serialise/grisu2.cpp + serialise/serialiser.cpp + serialise/serialiser.h + serialise/string_utils.cpp + serialise/string_utils.h + serialise/utf8printf.cpp + 3rdparty/jpeg-compressor/jpgd.cpp + 3rdparty/jpeg-compressor/jpgd.h + 3rdparty/jpeg-compressor/jpge.cpp + 3rdparty/jpeg-compressor/jpge.h + 3rdparty/lz4/lz4.c + 3rdparty/lz4/lz4.h + 3rdparty/stb/stb_image.h + 3rdparty/stb/stb_image_write.h + 3rdparty/stb/stb_impl.c + 3rdparty/stb/stb_truetype.h + 3rdparty/tinyexr/tinyexr.cpp + 3rdparty/tinyexr/tinyexr.h) + +if(UNIX) + list(APPEND sources + data/embedded_files.h + os/linux/linux_callstack.cpp + os/linux/linux_hook.cpp + os/linux/linux_hook.h + os/linux/linux_network.cpp + os/linux/linux_process.cpp + os/linux/linux_stringio.cpp + os/linux/linux_threading.cpp + os/linux_specific.h) + # linux_libentry must be the last so that library_loaded is called after + # static objects are constructed. + list(APPEND sources os/linux/linux_libentry.cpp) +endif() + +add_library(rdoc OBJECT ${sources}) +target_compile_definitions(rdoc ${RDOC_DEFINITIONS}) +target_include_directories(rdoc ${RDOC_INCLUDES}) + +set(data + data/glsl/arraymscopy.comp + data/glsl/blit.frag + data/glsl/blit.vert + data/glsl/checkerboard.frag + data/glsl/debuguniforms.h + data/glsl/generic.frag + data/glsl/generic.vert + data/glsl/histogram.comp + data/glsl/mesh.comp + data/glsl/mesh.frag + data/glsl/mesh.geom + data/glsl/mesh.vert + data/glsl/outline.frag + data/glsl/quadoverdraw.frag + data/glsl/texdisplay.frag + data/glsl/texsample.h + data/glsl/text.frag + data/glsl/text.vert + data/spv/blit.vert + data/spv/checkerboard.frag + data/spv/debuguniforms.h + data/spv/fixedcol.frag + data/spv/histogram.comp + data/spv/mesh.frag + data/spv/mesh.geom + data/spv/mesh.vert + data/spv/minmaxresult.comp + data/spv/minmaxtile.comp + data/spv/outline.frag + data/spv/quadresolve.frag + data/spv/quadwrite.frag + data/spv/texdisplay.frag + data/spv/texsample.h + data/spv/text.frag + data/spv/text.vert + data/sourcecodepro.ttf) + +set(data_objects) + +if(UNIX) + # this is fragile... + if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + set(bfdarch "i386") + set(bfdtarget "elf64-x86-64") + elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "i686") + set(bfdarch "i386") + set(bfdtarget "elf32-i386") + else() + message(FATAL_ERROR "Unknown target architecture") + endif() + + set(data_command ${CMAKE_OBJCOPY} -I binary -O ${bfdtarget} -B ${bfdarch}) + + foreach(res ${data}) + # strip "data/" + string(SUBSTRING ${res} 5 -1 in) + set(working_dir ${CMAKE_CURRENT_SOURCE_DIR}/data) + + set(out ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/data.obj/${in}.o) + get_filename_component(out_dir ${out} DIRECTORY) + + add_custom_command(OUTPUT ${out} + COMMAND ${CMAKE_COMMAND} -E make_directory ${out_dir} + COMMAND ${data_command} ${in} ${out} + WORKING_DIRECTORY ${working_dir} + DEPENDS ${res}) + + list(APPEND data_objects ${out}) + endforeach() +endif() + +set(renderdoc_objects) + +if(ENABLE_GL) + add_subdirectory(driver/gl) + list(APPEND renderdoc_objects $) +endif() + +if(ENABLE_VULKAN) + add_subdirectory(driver/vulkan) + list(APPEND renderdoc_objects $) +endif() + +if(ENABLE_GL OR ENABLE_VULKAN) + add_subdirectory(driver/shaders/spirv) + list(APPEND renderdoc_objects $) +endif() + +# rdoc must be after its drivers because of linux_libentry.cpp +list(APPEND renderdoc_objects + $ + ${data_objects}) + +add_library(renderdoc SHARED ${renderdoc_objects}) +target_compile_definitions(renderdoc ${RDOC_DEFINITIONS}) +target_include_directories(renderdoc ${RDOC_INCLUDES}) +target_link_libraries(renderdoc ${RDOC_LIBRARIES}) diff --git a/renderdoc/Makefile b/renderdoc/Makefile deleted file mode 100644 index 3c5da50a6..000000000 --- a/renderdoc/Makefile +++ /dev/null @@ -1,151 +0,0 @@ -CC=gcc -CPP=g++ -COMMIT=`sh ../calc_hash.sh` -MACROS=-DLINUX \ - -DRENDERDOC_PLATFORM=linux \ - -DRENDERDOC_EXPORTS \ - -DGIT_COMMIT_HASH="\"$(COMMIT)\"" -CFLAGS=-c -Wall -Werror -Wno-unused -Wno-unknown-pragmas -fPIC $(MACROS) -I. -I3rdparty/ -CPPFLAGS=-std=c++11 -g -Wno-reorder -fvisibility=hidden -fvisibility-inlines-hidden -LDFLAGS=-lpthread -lrt -shared -ldl -lX11 -lxcb-keysyms -LIBS=driver/gl/rdoc_gl.a driver/vulkan/rdoc_vulkan.a driver/shaders/spirv/rdoc_spirv.a -OBJDIR=.obj -OBJECTS=replay/replay_output.o \ -replay/replay_renderer.o \ -replay/entry_points.o \ -replay/type_helpers.o \ -replay/app_api.o \ -replay/capture_options.o \ -hooks/hooks.o \ -serialise/serialiser.o \ -serialise/grisu2.o \ -serialise/utf8printf.o \ -serialise/string_utils.o \ -common/common.o \ -common/dds_readwrite.o \ -core/remote_access.o \ -core/replay_proxy.o \ -core/remote_replay.o \ -core/resource_manager.o \ -core/core.o \ -maths/camera.o \ -maths/matrix.o \ -os/os_specific.o \ -3rdparty/jpeg-compressor/jpgd.o \ -3rdparty/jpeg-compressor/jpge.o \ -3rdparty/lz4/lz4.o \ -3rdparty/stb/stb_impl.o \ -3rdparty/tinyexr/tinyexr.o \ -os/linux/linux_callstack.o \ -os/linux/linux_hook.o \ -os/linux/linux_network.o \ -os/linux/linux_process.o \ -os/linux/linux_stringio.o \ -os/linux/linux_threading.o \ -os/linux/linux_libentry.o -# linux_libentry must be the last object file - -DATA=data/glsl/debuguniforms.ho \ -data/glsl/texsample.ho \ -data/glsl/blit.frago \ -data/glsl/blit.verto \ -data/glsl/texdisplay.frago \ -data/glsl/checkerboard.frago \ -data/glsl/generic.frago \ -data/glsl/generic.verto \ -data/glsl/mesh.verto \ -data/glsl/mesh.frago \ -data/glsl/mesh.geomo \ -data/glsl/mesh.compo \ -data/glsl/text.verto \ -data/glsl/text.frago \ -data/glsl/quadoverdraw.frago \ -data/glsl/histogram.compo \ -data/glsl/arraymscopy.compo \ -data/glsl/outline.frago \ -data/spv/blit.verto \ -data/spv/checkerboard.frago \ -data/spv/texdisplay.frago \ -data/spv/text.verto \ -data/spv/text.frago \ -data/spv/fixedcol.frago \ -data/spv/mesh.verto \ -data/spv/mesh.geomo \ -data/spv/mesh.frago \ -data/spv/histogram.compo \ -data/spv/minmaxtile.compo \ -data/spv/minmaxresult.compo \ -data/spv/outline.frago \ -data/spv/debuguniforms.ho \ -data/spv/texsample.ho \ -data/spv/quadwrite.frago \ -data/spv/quadresolve.frago \ -data/sourcecodepro.ttfo - -.PHONY: all -all: librenderdoc.so - -$(OBJDIR)/%.o: %.cpp - @mkdir -p $$(dirname $@) - $(CPP) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< - @$(CPP) $(CFLAGS) $(CPPFLAGS) -MM -MT $(OBJDIR)/$*.o $< > $(OBJDIR)/$*.d - -$(OBJDIR)/%.o: %.c - @mkdir -p $$(dirname $@) - $(CC) $(CFLAGS) -c -o $@ $< - @$(CC) $(CFLAGS) -MM -MT $(OBJDIR)/$*.o $< > $(OBJDIR)/$*.d - -# objcopy needs to be run in with paths in current directory -# to produce the right symbol names -OBJGEN = \ -mkdir -p $$(dirname $@); \ -cd data/; \ -objcopy --input binary --output elf64-x86-64 --binary-architecture i386 $$(echo $< | sed -e '{s/data\///g}') $$(basename $@); \ -cd - > /dev/null 2>&1; \ -mv data/$$(basename $@) $@; - -$(OBJDIR)/%.verto: %.vert - @echo Object building $@ - @$(OBJGEN) -$(OBJDIR)/%.frago: %.frag - @echo Object building $@ - @$(OBJGEN) -$(OBJDIR)/%.geomo: %.geom - @echo Object building $@ - @$(OBJGEN) -$(OBJDIR)/%.compo: %.comp - @echo Object building $@ - @$(OBJGEN) -$(OBJDIR)/%.ttfo: %.ttf - @echo Object building $@ - @$(OBJGEN) -$(OBJDIR)/%.ho: %.h - @echo Object building $@ - @$(OBJGEN) - -OBJDIR_OBJECTS=$(addprefix $(OBJDIR)/, $(OBJECTS)) -OBJDIR_DATA=$(addprefix $(OBJDIR)/, $(DATA)) - --include $(OBJDIR_OBJECTS:.o=.d) - -driver/gl/rdoc_gl.a: force_look - cd driver/gl && $(MAKE) rdoc_gl.a - -driver/vulkan/rdoc_vulkan.a: force_look - cd driver/vulkan && $(MAKE) rdoc_vulkan.a - -driver/shaders/spirv/rdoc_spirv.a: force_look - cd driver/shaders/spirv && $(MAKE) rdoc_spirv.a - -force_look: - true - -librenderdoc.so: $(OBJDIR_OBJECTS) $(OBJDIR_DATA) $(LIBS) - $(CPP) -o librenderdoc.so $(OBJDIR_DATA) -Wl,--whole-archive $(LIBS) -Wl,--no-whole-archive $(OBJDIR_OBJECTS) $(LDFLAGS) - -.PHONY: clean -clean: - rm -rf librenderdoc.so $(OBJDIR) - cd driver/gl && $(MAKE) clean - cd driver/vulkan && $(MAKE) clean - cd driver/shaders/spirv && $(MAKE) clean diff --git a/renderdoc/driver/gl/CMakeLists.txt b/renderdoc/driver/gl/CMakeLists.txt new file mode 100644 index 000000000..0fe62e714 --- /dev/null +++ b/renderdoc/driver/gl/CMakeLists.txt @@ -0,0 +1,46 @@ +set(sources + gl_common.cpp + gl_common.h + gl_counters.cpp + gl_debug.cpp + gl_driver.cpp + gl_driver.h + gl_enum.h + gl_hookset_defs.h + gl_hookset.h + gl_manager.cpp + gl_manager.h + gl_renderstate.cpp + gl_renderstate.h + gl_replay.cpp + gl_replay.h + gl_resources.cpp + gl_resources.h + gl_shader_refl.cpp + gl_shader_refl.h + official/glcorearb.h + official/glext.h + official/glxext.h + official/wglext.h + wrappers/gl_buffer_funcs.cpp + wrappers/gl_debug_funcs.cpp + wrappers/gl_draw_funcs.cpp + wrappers/gl_emulated.cpp + wrappers/gl_framebuffer_funcs.cpp + wrappers/gl_get_funcs.cpp + wrappers/gl_query_funcs.cpp + wrappers/gl_sampler_funcs.cpp + wrappers/gl_shader_funcs.cpp + wrappers/gl_state_funcs.cpp + wrappers/gl_texture_funcs.cpp + wrappers/gl_uniform_funcs.cpp) + +if(UNIX) + list(APPEND sources + gl_replay_linux.cpp + gl_hooks_linux.cpp) +endif() + +add_library(rdoc_gl OBJECT ${sources}) +target_compile_definitions(rdoc_gl ${RDOC_DEFINITIONS}) +target_include_directories(rdoc_gl ${RDOC_INCLUDES}) diff --git a/renderdoc/driver/gl/Makefile b/renderdoc/driver/gl/Makefile deleted file mode 100644 index abc1209e9..000000000 --- a/renderdoc/driver/gl/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -CC=gcc -CPP=g++ -COMMIT=`sh ../../../calc_hash.sh` -MACROS=-DLINUX \ - -DRENDERDOC_PLATFORM=linux \ - -DRENDERDOC_EXPORTS \ - -DGIT_COMMIT_HASH="\"$(COMMIT)\"" -CFLAGS=-c -Wall -Werror -Wno-unused -Wno-unknown-pragmas -fPIC $(MACROS) -I../../ -I../../3rdparty/ -CPPFLAGS=-std=c++11 -g -Wno-reorder -fvisibility=hidden -fvisibility-inlines-hidden -LDFLAGS=-lpthread -lrt -shared -ldl -lX11 -OBJDIR=.obj -OBJECTS=gl_common.o \ -gl_driver.o \ -gl_manager.o \ -gl_debug.o \ -gl_counters.o \ -gl_replay.o \ -gl_replay_linux.o \ -gl_hooks_linux.o \ -gl_shader_refl.o \ -gl_resources.o \ -gl_renderstate.o \ -wrappers/gl_buffer_funcs.o \ -wrappers/gl_debug_funcs.o \ -wrappers/gl_draw_funcs.o \ -wrappers/gl_emulated.o \ -wrappers/gl_framebuffer_funcs.o \ -wrappers/gl_get_funcs.o \ -wrappers/gl_query_funcs.o \ -wrappers/gl_sampler_funcs.o \ -wrappers/gl_shader_funcs.o \ -wrappers/gl_state_funcs.o \ -wrappers/gl_texture_funcs.o \ -wrappers/gl_uniform_funcs.o - -.PHONY: all -all: rdoc_gl.a - -$(OBJDIR)/%.o: %.cpp - @mkdir -p $$(dirname $@) - $(CPP) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< - @$(CPP) $(CFLAGS) $(CPPFLAGS) -MM -MT $(OBJDIR)/$*.o $< > $(OBJDIR)/$*.d - -$(OBJDIR)/%.o: %.c - @mkdir -p $$(dirname $@) - $(CC) $(CFLAGS) -c -o $@ $< - @$(CC) $(CFLAGS) -MM -MT $(OBJDIR)/$*.o $< > $(OBJDIR)/$*.d - -OBJDIR_OBJECTS=$(addprefix $(OBJDIR)/, $(OBJECTS)) - --include $(OBJDIR_OBJECTS:.o=.d) - -rdoc_gl.a: $(OBJDIR_OBJECTS) - ar rcs rdoc_gl.a $(OBJDIR_OBJECTS) - -.PHONY: clean -clean: - rm -rf rdoc_gl.a $(OBJDIR) diff --git a/renderdoc/driver/shaders/spirv/CMakeLists.txt b/renderdoc/driver/shaders/spirv/CMakeLists.txt new file mode 100644 index 000000000..3f4ddf145 --- /dev/null +++ b/renderdoc/driver/shaders/spirv/CMakeLists.txt @@ -0,0 +1,81 @@ +set(glslang_dir ${RDOC_SOURCE_DIR}/3rdparty/glslang) +set(glslang_sources + ${glslang_dir}/OGLCompilersDLL/InitializeDll.cpp + ${glslang_dir}/OGLCompilersDLL/InitializeDll.h + ${glslang_dir}/SPIRV/GlslangToSpv.cpp + ${glslang_dir}/SPIRV/GlslangToSpv.h + ${glslang_dir}/SPIRV/GLSL.std.450.h + ${glslang_dir}/SPIRV/InReadableOrder.cpp + ${glslang_dir}/SPIRV/SpvBuilder.cpp + ${glslang_dir}/SPIRV/SpvBuilder.h + ${glslang_dir}/SPIRV/spvIR.h + ${glslang_dir}/glslang/GenericCodeGen/CodeGen.cpp + ${glslang_dir}/glslang/GenericCodeGen/Link.cpp + ${glslang_dir}/glslang/Include/arrays.h + ${glslang_dir}/glslang/Include/BaseTypes.h + ${glslang_dir}/glslang/Include/Common.h + ${glslang_dir}/glslang/Include/ConstantUnion.h + ${glslang_dir}/glslang/Include/InfoSink.h + ${glslang_dir}/glslang/Include/InitializeGlobals.h + ${glslang_dir}/glslang/Include/intermediate.h + ${glslang_dir}/glslang/Include/PoolAlloc.h + ${glslang_dir}/glslang/Include/ResourceLimits.h + ${glslang_dir}/glslang/Include/revision.h + ${glslang_dir}/glslang/Include/ShHandle.h + ${glslang_dir}/glslang/Include/Types.h + ${glslang_dir}/glslang/MachineIndependent/Constant.cpp + ${glslang_dir}/glslang/MachineIndependent/glslang_tab.cpp + ${glslang_dir}/glslang/MachineIndependent/glslang_tab.cpp.h + ${glslang_dir}/glslang/MachineIndependent/gl_types.h + ${glslang_dir}/glslang/MachineIndependent/InfoSink.cpp + ${glslang_dir}/glslang/MachineIndependent/Initialize.cpp + ${glslang_dir}/glslang/MachineIndependent/Initialize.h + ${glslang_dir}/glslang/MachineIndependent/Intermediate.cpp + ${glslang_dir}/glslang/MachineIndependent/intermOut.cpp + ${glslang_dir}/glslang/MachineIndependent/IntermTraverse.cpp + ${glslang_dir}/glslang/MachineIndependent/limits.cpp + ${glslang_dir}/glslang/MachineIndependent/linkValidate.cpp + ${glslang_dir}/glslang/MachineIndependent/localintermediate.h + ${glslang_dir}/glslang/MachineIndependent/parseConst.cpp + ${glslang_dir}/glslang/MachineIndependent/ParseHelper.cpp + ${glslang_dir}/glslang/MachineIndependent/ParseHelper.h + ${glslang_dir}/glslang/MachineIndependent/PoolAlloc.cpp + ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpAtom.cpp + ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpContext.cpp + ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpContext.h + ${glslang_dir}/glslang/MachineIndependent/preprocessor/Pp.cpp + ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpMemory.cpp + ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpScanner.cpp + ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpSymbols.cpp + ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpTokens.cpp + ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpTokens.h + ${glslang_dir}/glslang/MachineIndependent/reflection.cpp + ${glslang_dir}/glslang/MachineIndependent/reflection.h + ${glslang_dir}/glslang/MachineIndependent/RemoveTree.cpp + ${glslang_dir}/glslang/MachineIndependent/RemoveTree.h + ${glslang_dir}/glslang/MachineIndependent/ScanContext.h + ${glslang_dir}/glslang/MachineIndependent/Scan.cpp + ${glslang_dir}/glslang/MachineIndependent/Scan.h + ${glslang_dir}/glslang/MachineIndependent/ShaderLang.cpp + ${glslang_dir}/glslang/MachineIndependent/SymbolTable.cpp + ${glslang_dir}/glslang/MachineIndependent/SymbolTable.h + ${glslang_dir}/glslang/MachineIndependent/Versions.cpp + ${glslang_dir}/glslang/MachineIndependent/Versions.h + ${glslang_dir}/glslang/OSDependent/osinclude.h + ${glslang_dir}/glslang/Public/ShaderLang.h) + +if(UNIX) + list(APPEND glslang_sources + ${glslang_dir}/glslang/OSDependent/Unix/ossource.cpp) +endif() + +set(sources + spirv_common.cpp + spirv_common.h + spirv_compile.cpp + spirv_disassemble.cpp + ${glslang_sources}) + +add_library(rdoc_spirv OBJECT ${sources}) +target_compile_definitions(rdoc_spirv ${RDOC_DEFINITIONS}) +target_include_directories(rdoc_spirv ${RDOC_INCLUDES}) diff --git a/renderdoc/driver/shaders/spirv/Makefile b/renderdoc/driver/shaders/spirv/Makefile deleted file mode 100644 index ea61c0921..000000000 --- a/renderdoc/driver/shaders/spirv/Makefile +++ /dev/null @@ -1,76 +0,0 @@ -CC=gcc -CPP=g++ -COMMIT=`sh ../../../../calc_hash.sh` -MACROS=-DLINUX \ - -DRENDERDOC_PLATFORM=linux \ - -DRENDERDOC_EXPORTS \ - -DGLSLANG_OSINCLUDE_UNIX \ - -DGIT_COMMIT_HASH="\"$(COMMIT)\"" -CFLAGS=-c -Wall -Werror -Wno-unused -Wno-unknown-pragmas -fPIC $(MACROS) -I../../../ -I../../../3rdparty/ -CPPFLAGS=-std=c++11 -g -Wno-reorder -fvisibility=hidden -fvisibility-inlines-hidden -LDFLAGS=-lpthread -lrt -shared -ldl -lX11 -OBJDIR=.obj - -VPATH=../../../3rdparty - -# VPATH above takes care of finding the glslang files within the 3rdparty directory -OBJECTS=spirv_common.o \ -spirv_compile.o \ -spirv_disassemble.o \ -glslang/OGLCompilersDLL/InitializeDll.o \ -glslang/SPIRV/GlslangToSpv.o \ -glslang/SPIRV/InReadableOrder.o \ -glslang/SPIRV/SpvBuilder.o \ -glslang/glslang/GenericCodeGen/CodeGen.o \ -glslang/glslang/GenericCodeGen/Link.o \ -glslang/glslang/MachineIndependent/Constant.o \ -glslang/glslang/MachineIndependent/glslang_tab.o \ -glslang/glslang/MachineIndependent/InfoSink.o \ -glslang/glslang/MachineIndependent/Initialize.o \ -glslang/glslang/MachineIndependent/Intermediate.o \ -glslang/glslang/MachineIndependent/intermOut.o \ -glslang/glslang/MachineIndependent/IntermTraverse.o \ -glslang/glslang/MachineIndependent/limits.o \ -glslang/glslang/MachineIndependent/linkValidate.o \ -glslang/glslang/MachineIndependent/parseConst.o \ -glslang/glslang/MachineIndependent/ParseHelper.o \ -glslang/glslang/MachineIndependent/PoolAlloc.o \ -glslang/glslang/MachineIndependent/reflection.o \ -glslang/glslang/MachineIndependent/RemoveTree.o \ -glslang/glslang/MachineIndependent/Scan.o \ -glslang/glslang/MachineIndependent/ShaderLang.o \ -glslang/glslang/MachineIndependent/SymbolTable.o \ -glslang/glslang/MachineIndependent/Versions.o \ -glslang/glslang/MachineIndependent/preprocessor/Pp.o \ -glslang/glslang/MachineIndependent/preprocessor/PpAtom.o \ -glslang/glslang/MachineIndependent/preprocessor/PpContext.o \ -glslang/glslang/MachineIndependent/preprocessor/PpMemory.o \ -glslang/glslang/MachineIndependent/preprocessor/PpScanner.o \ -glslang/glslang/MachineIndependent/preprocessor/PpSymbols.o \ -glslang/glslang/MachineIndependent/preprocessor/PpTokens.o \ -glslang/glslang/OSDependent/Unix/ossource.o - - -.PHONY: all -all: rdoc_spirv.a - -$(OBJDIR)/%.o: %.cpp - @mkdir -p $$(dirname $@) - $(CPP) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< - @$(CPP) $(CFLAGS) $(CPPFLAGS) -MM -MT $(OBJDIR)/$*.o $< > $(OBJDIR)/$*.d - -$(OBJDIR)/%.o: %.c - @mkdir -p $$(dirname $@) - $(CC) $(CFLAGS) -c -o $@ $< - @$(CC) $(CFLAGS) -MM -MT $(OBJDIR)/$*.o $< > $(OBJDIR)/$*.d - -OBJDIR_OBJECTS=$(addprefix $(OBJDIR)/, $(OBJECTS)) - --include $(OBJDIR_OBJECTS:.o=.d) - -rdoc_spirv.a: $(OBJDIR_OBJECTS) - ar rcs rdoc_spirv.a $(OBJDIR_OBJECTS) - -.PHONY: clean -clean: - rm -rf rdoc_spirv.a $(OBJDIR) diff --git a/renderdoc/driver/vulkan/CMakeLists.txt b/renderdoc/driver/vulkan/CMakeLists.txt new file mode 100644 index 000000000..1053b31cf --- /dev/null +++ b/renderdoc/driver/vulkan/CMakeLists.txt @@ -0,0 +1,61 @@ +set(sources + vk_common.cpp + vk_common.h + vk_core.cpp + vk_core.h + vk_counters.cpp + vk_debug.cpp + vk_debug.h + vk_dispatchtables.cpp + vk_dispatchtables.h + vk_hookset_defs.h + vk_info.cpp + vk_info.h + vk_initstate.cpp + vk_manager.cpp + vk_manager.h + vk_memory.cpp + vk_replay.cpp + vk_replay.h + vk_resources.cpp + vk_resources.h + vk_state.cpp + vk_state.h + vk_tracelayer.cpp + official/vk_layer.h + official/vk_lunarg_debug_marker.h + official/vk_platform.h + official/vulkan.h + wrappers/vk_cmd_funcs.cpp + wrappers/vk_descriptor_funcs.cpp + wrappers/vk_device_funcs.cpp + wrappers/vk_draw_funcs.cpp + wrappers/vk_dynamic_funcs.cpp + wrappers/vk_get_funcs.cpp + wrappers/vk_misc_funcs.cpp + wrappers/vk_queue_funcs.cpp + wrappers/vk_resource_funcs.cpp + wrappers/vk_shader_funcs.cpp + wrappers/vk_sync_funcs.cpp + wrappers/vk_wsi_funcs.cpp) + +set(definitions ${RDOC_DEFINITIONS}) + +if(UNIX) + list(APPEND sources vk_linux.cpp) + + list(APPEND definitions + PRIVATE -DVK_USE_PLATFORM_XCB_KHR + PRIVATE -DVK_USE_PLATFORM_XLIB_KHR) + + set(json_in ${CMAKE_CURRENT_SOURCE_DIR}/renderdoc.json) + set(json_out ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/renderdoc_capture.json) + add_custom_command(OUTPUT ${json_out} + COMMAND sed '{s%...renderdoc.dll%./librenderdoc.so%}' < ${json_in} > ${json_out} + DEPENDS ${json_in}) + add_custom_target(generate-json ALL DEPENDS ${json_out}) +endif() + +add_library(rdoc_vulkan OBJECT ${sources}) +target_compile_definitions(rdoc_vulkan ${definitions}) +target_include_directories(rdoc_vulkan ${RDOC_INCLUDES}) diff --git a/renderdoc/driver/vulkan/Makefile b/renderdoc/driver/vulkan/Makefile deleted file mode 100644 index 3f2c42615..000000000 --- a/renderdoc/driver/vulkan/Makefile +++ /dev/null @@ -1,65 +0,0 @@ -CC=gcc -CPP=g++ -COMMIT=`sh ../../../calc_hash.sh` -MACROS=-DLINUX \ - -DRENDERDOC_PLATFORM=linux \ - -DRENDERDOC_EXPORTS \ - -DVK_USE_PLATFORM_XCB_KHR \ - -DVK_USE_PLATFORM_XLIB_KHR \ - -DGIT_COMMIT_HASH="\"$(COMMIT)\"" -CFLAGS=-c -Wall -Werror -Wno-unused -Wno-unknown-pragmas -fPIC $(MACROS) -I../../ -I../../3rdparty/ -CPPFLAGS=-std=c++11 -g -Wno-reorder -fvisibility=hidden -fvisibility-inlines-hidden -OBJDIR=.obj -OBJECTS=vk_dispatchtables.o \ -vk_tracelayer.o \ -vk_core.o \ -vk_initstate.o \ -vk_memory.o \ -vk_common.o \ -vk_manager.o \ -vk_resources.o \ -vk_debug.o \ -vk_replay.o \ -vk_counters.o \ -vk_info.o \ -vk_state.o \ -vk_linux.o \ -wrappers/vk_cmd_funcs.o \ -wrappers/vk_dynamic_funcs.o \ -wrappers/vk_descriptor_funcs.o \ -wrappers/vk_device_funcs.o \ -wrappers/vk_draw_funcs.o \ -wrappers/vk_get_funcs.o \ -wrappers/vk_misc_funcs.o \ -wrappers/vk_queue_funcs.o \ -wrappers/vk_sync_funcs.o \ -wrappers/vk_resource_funcs.o \ -wrappers/vk_shader_funcs.o \ -wrappers/vk_wsi_funcs.o - -.PHONY: all -all: rdoc_vulkan.a - -$(OBJDIR)/%.o: %.cpp - @mkdir -p $$(dirname $@) - $(CPP) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< - @$(CPP) $(CFLAGS) $(CPPFLAGS) -MM -MT $(OBJDIR)/$*.o $< > $(OBJDIR)/$*.d - -$(OBJDIR)/%.o: %.c - @mkdir -p $$(dirname $@) - $(CC) $(CFLAGS) -c -o $@ $< - @$(CC) $(CFLAGS) -MM -MT $(OBJDIR)/$*.o $< > $(OBJDIR)/$*.d - -OBJDIR_OBJECTS=$(addprefix $(OBJDIR)/, $(OBJECTS)) - --include $(OBJDIR_OBJECTS:.o=.d) - -renderdoc_capture.json: renderdoc.json - sed '{s%...renderdoc.dll%./librenderdoc.so%}' < renderdoc.json > renderdoc_capture.json - -rdoc_vulkan.a: $(OBJDIR_OBJECTS) renderdoc_capture.json - ar rcs rdoc_vulkan.a $(OBJDIR_OBJECTS) - -.PHONY: clean -clean: - rm -rf rdoc_vulkan.a $(OBJDIR) diff --git a/renderdoccmd/CMakeLists.txt b/renderdoccmd/CMakeLists.txt new file mode 100644 index 000000000..5c48eff66 --- /dev/null +++ b/renderdoccmd/CMakeLists.txt @@ -0,0 +1,20 @@ +set(sources renderdoccmd.cpp) +set(definitions) +set(includes PRIVATE ${CMAKE_SOURCE_DIR}/renderdoc/api) +set(libraries PRIVATE renderdoc) + +if(UNIX) + list(APPEND sources renderdoccmd_linux.cpp) + list(APPEND definitions PRIVATE -DLINUX) + + find_package(OpenGL REQUIRED) + list(APPEND includes PRIVATE ${OPENGL_INCLUDE_DIR}) + list(APPEND libraries PRIVATE ${OPENGL_gl_LIBRARY}) + + list(APPEND libraries PRIVATE -lxcb) +endif() + +add_executable(renderdoccmd ${sources}) +target_compile_definitions(renderdoccmd ${definitions}) +target_include_directories(renderdoccmd ${includes}) +target_link_libraries(renderdoccmd ${libraries}) diff --git a/renderdoccmd/Makefile b/renderdoccmd/Makefile deleted file mode 100644 index 88d110081..000000000 --- a/renderdoccmd/Makefile +++ /dev/null @@ -1,36 +0,0 @@ -CC=gcc -CPP=g++ -COMMIT=`sh ../calc_hash.sh` -MACROS=-DLINUX \ - -DRENDERDOC_PLATFORM=linux \ - -DGIT_COMMIT_HASH="\"$(COMMIT)\"" -CFLAGS=-c -Wall -Werror -fPIC $(MACROS) -I../renderdoc/api/ -CPPFLAGS=-std=c++11 -g -Wno-unused -Wno-unknown-pragmas -Wno-reorder -LDFLAGS=-L../renderdoc/ -lrenderdoc -lGL -lxcb -Wl,-rpath,'$$ORIGIN/' -OBJDIR=.obj -OBJECTS=renderdoccmd.o renderdoccmd_linux.o - -.PHONY: all -all: bin/renderdoccmd - -$(OBJDIR)/%.o: %.cpp - @mkdir -p $$(dirname $@) - $(CPP) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< - @$(CPP) $(CFLAGS) $(CPPFLAGS) -MM -MT $(OBJDIR)/$*.o $*.cpp > $(OBJDIR)/$*.d - -$(OBJDIR)/%.o: %.c - @mkdir -p $$(dirname $@) - $(CC) $(CFLAGS) -c -o $@ $< - @$(CC) $(CFLAGS) -MM -MT $(OBJDIR)/$*.o $*.c > $(OBJDIR)/$*.d - -OBJDIR_OBJECTS=$(addprefix $(OBJDIR)/, $(OBJECTS)) - --include $(OBJDIR_OBJECTS:.o=.d) - -bin/renderdoccmd: $(OBJDIR_OBJECTS) ../renderdoc/librenderdoc.so - mkdir -p bin/ - $(CPP) -o bin/renderdoccmd $(OBJDIR_OBJECTS) $(LDFLAGS) - -.PHONY: clean -clean: - rm -rf bin/ $(OBJDIR)