Merge ~mitchellaugustin/ubuntu/+source/gfxreconstruct:ubuntu/resolute-new into ubuntu/+source/gfxreconstruct:debian/sid

Proposed by Mitchell Augustin
Status: Needs review
Proposed branch: ~mitchellaugustin/ubuntu/+source/gfxreconstruct:ubuntu/resolute-new
Merge into: ubuntu/+source/gfxreconstruct:debian/sid
Diff against target: 1018936 lines (+793720/-54406) (has conflicts)
974 files modified
.github/CODEOWNERS (+1/-0)
.github/workflows/ci_build.yml (+255/-0)
.github/workflows/release_build.yml (+170/-0)
.github/workflows/scripts/build-dependencies-macos.sh (+16/-0)
.github/workflows/sdk_android_build.yml (+32/-0)
.gitignore (+4/-0)
.gitmodules (+20/-0)
CMakeLists.txt (+370/-0)
HOWTO_meta_quest.md (+458/-0)
LICENSE_ThirdParty.txt (+82/-0)
README.md (+106/-0)
TESTING_test_apps.md (+99/-0)
android/build.gradle (+4/-0)
android/framework/application-multi-win/CMakeLists.txt (+37/-0)
android/framework/application/CMakeLists.txt (+22/-0)
android/framework/cmake-config/PlatformConfig.cmake (+53/-0)
android/framework/decode/CMakeLists.txt (+146/-0)
android/framework/encode/CMakeLists.txt (+72/-0)
android/framework/format/CMakeLists.txt (+11/-0)
android/framework/graphics/CMakeLists.txt (+31/-0)
android/framework/util/CMakeLists.txt (+84/-0)
android/gradle.properties (+5/-0)
android/gradle/wrapper/gradle-wrapper.properties (+4/-0)
android/layer/CMakeLists.txt (+73/-0)
android/layer/build.gradle (+41/-0)
android/layer/src/main/AndroidManifest.xml (+4/-0)
android/scripts/gfxrecon.py (+205/-0)
android/settings.gradle (+12/-0)
android/test/test_apps/common/CMakeLists.txt (+69/-0)
android/test/test_apps/launcher/.gitignore (+2/-0)
android/test/test_apps/launcher/CMakeLists.txt (+70/-0)
android/test/test_apps/launcher/build.gradle (+55/-0)
android/test/test_apps/launcher/gfxrecon-test-launcher.map (+6/-0)
android/test/test_apps/launcher/proguard-rules.pro (+21/-0)
android/test/test_apps/launcher/src/main/AndroidManifest.xml (+31/-0)
android/test/test_apps/launcher/src/main/res/drawable-v24/ic_launcher_foreground.xml (+34/-0)
android/test/test_apps/launcher/src/main/res/drawable/ic_launcher_background.xml (+170/-0)
android/test/test_apps/launcher/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (+5/-0)
android/test/test_apps/launcher/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (+5/-0)
android/test/test_apps/launcher/src/main/res/values/colors.xml (+6/-0)
android/test/test_apps/launcher/src/main/res/values/strings.xml (+3/-0)
android/test/test_apps/launcher/src/main/res/values/styles.xml (+11/-0)
android/test/test_apps/triangle/.gitignore (+2/-0)
android/test/test_apps/triangle/CMakeLists.txt (+38/-0)
android/tools/multi-win-replay/.gitignore (+1/-0)
android/tools/multi-win-replay/AndroidManifest.xml (+31/-0)
android/tools/multi-win-replay/CMakeLists.txt (+50/-0)
android/tools/multi-win-replay/build.gradle (+61/-0)
android/tools/multi-win-replay/proguard-rules.pro (+21/-0)
android/tools/multi-win-replay/res/drawable-v24/ic_launcher_foreground.xml (+34/-0)
android/tools/multi-win-replay/res/drawable/ic_launcher_background.xml (+170/-0)
android/tools/multi-win-replay/res/mipmap-anydpi-v26/ic_launcher.xml (+5/-0)
android/tools/multi-win-replay/res/mipmap-anydpi-v26/ic_launcher_round.xml (+5/-0)
android/tools/multi-win-replay/res/values-v27/styles.xml (+12/-0)
android/tools/multi-win-replay/res/values/colors.xml (+6/-0)
android/tools/multi-win-replay/res/values/strings.xml (+3/-0)
android/tools/multi-win-replay/res/values/styles.xml (+11/-0)
android/tools/multi-win-replay/src/main/com/lunarg/gfxreconstruct/replay/ReplayActivity.java (+143/-0)
android/tools/quest_replay/.gitignore (+1/-0)
android/tools/quest_replay/CMakeLists.txt (+68/-0)
android/tools/quest_replay/build.gradle (+52/-0)
android/tools/quest_replay/proguard-rules.pro (+21/-0)
android/tools/quest_replay/src/main/AndroidManifest.xml (+66/-0)
android/tools/quest_replay/src/main/res/drawable-v24/ic_launcher_foreground.xml (+34/-0)
android/tools/quest_replay/src/main/res/drawable/ic_launcher_background.xml (+170/-0)
android/tools/quest_replay/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (+5/-0)
android/tools/quest_replay/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (+5/-0)
android/tools/quest_replay/src/main/res/values/colors.xml (+6/-0)
android/tools/quest_replay/src/main/res/values/strings.xml (+3/-0)
android/tools/quest_replay/src/main/res/values/styles.xml (+11/-0)
android/tools/replay/CMakeLists.txt (+42/-0)
android/tools/replay/build.gradle (+34/-0)
android/tools/replay/src/main/AndroidManifest.xml (+8/-0)
cmake/AgilitySDK.cmake (+18/-0)
cmake/CodeStyle.cmake (+24/-0)
cmake/FindAGS.cmake (+87/-0)
cmake/FindDXC.cmake (+91/-0)
cmake/FindGoogleTest.cmake (+8/-0)
cmake/FindOpenXRVersion.cmake (+64/-0)
cmake/FindVulkanVersion.cmake (+35/-0)
cmake/Findjsoncpp.cmake (+99/-0)
cmake/GenerateLayerJson.cmake (+5/-0)
cmake/InstallDXC.cmake (+19/-0)
cmake/Lint.cmake (+4/-0)
cmake/Test.cmake (+8/-0)
cmake/toolchain/linux_x86_32.cmake (+4/-0)
debian/changelog (+28/-0)
debian/control (+27/-0)
debian/patches/Use-system-spirv-reflect.patch (+35/-0)
debian/patches/Use_system_OpenXR.patch (+30/-0)
debian/patches/Use_system_Vulkan.patch (+29/-0)
debian/patches/series (+6/-0)
debian/salsa-ci.yml (+3/-0)
debian/watch (+10/-0)
docs/GFXReconstruct Architectural Principles.md (+221/-0)
external/AgilitySDK/Microsoft.Direct3D.D3D12.Rules.Project.xml (+38/-0)
external/AgilitySDK/Microsoft.Direct3D.D3D12.props (+9/-0)
external/AgilitySDK/Microsoft.Direct3D.D3D12.targets (+35/-0)
external/AgilitySDK/Update_Agility_SDK.md (+20/-0)
external/AgilitySDK/include/D3D12TokenizedProgramFormat.hpp (+2634/-0)
external/AgilitySDK/include/d3d12.h (+35762/-0)
external/AgilitySDK/include/d3d12.idl (+6803/-0)
external/AgilitySDK/include/d3d12compatibility.h (+899/-0)
external/AgilitySDK/include/d3d12compatibility.idl (+100/-0)
external/AgilitySDK/include/d3d12sdklayers.h (+4278/-0)
external/AgilitySDK/include/d3d12sdklayers.idl (+1858/-0)
external/AgilitySDK/include/d3d12shader.h (+494/-0)
external/AgilitySDK/include/d3d12video.h (+9316/-0)
external/AgilitySDK/include/d3d12video.idl (+3173/-0)
external/AgilitySDK/include/d3dcommon.h (+1133/-0)
external/AgilitySDK/include/d3dcommon.idl (+991/-0)
external/AgilitySDK/include/d3dx12/d3dx12.h (+35/-0)
external/AgilitySDK/include/d3dx12/d3dx12_barriers.h (+192/-0)
external/AgilitySDK/include/d3dx12/d3dx12_check_feature_support.h (+1138/-0)
external/AgilitySDK/include/d3dx12/d3dx12_core.h (+1920/-0)
external/AgilitySDK/include/d3dx12/d3dx12_default.h (+12/-0)
external/AgilitySDK/include/d3dx12/d3dx12_pipeline_state_stream.h (+1497/-0)
external/AgilitySDK/include/d3dx12/d3dx12_property_format_table.h (+128/-0)
external/AgilitySDK/include/d3dx12/d3dx12_render_pass.h (+105/-0)
external/AgilitySDK/include/d3dx12/d3dx12_resource_helpers.h (+609/-0)
external/AgilitySDK/include/d3dx12/d3dx12_root_signature.h (+1227/-0)
external/AgilitySDK/include/d3dx12/d3dx12_state_object.h (+2382/-0)
external/AgilitySDK/include/dxgiformat.h (+144/-0)
external/AgilitySDK/include/dxgiformat.idl (+139/-0)
external/AgilitySDK/src/d3dx12/d3dx12_property_format_table.cpp (+2600/-0)
external/README.md (+4/-0)
external/Tocpp-Android-Template/build.gradle (+4/-0)
external/Tocpp-Android-Template/gradle/wrapper/gradle-wrapper.properties (+4/-0)
external/Vulkan-Utility-Libraries/vk_enum_string_helper.h (+9917/-0)
external/VulkanMemoryAllocator/LICENSE.txt (+4/-0)
external/VulkanMemoryAllocator/include/vk_mem_alloc.h (+17406/-5486)
external/nlohmann-json/include/nlohmann/json.hpp (+24765/-0)
external/nlohmann-json/include/nlohmann/json_fwd.hpp (+176/-0)
external/nlohmann-json/nlohmann_json.natvis (+278/-0)
external/nlohmann-json/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake (+15/-0)
external/nlohmann-json/share/cmake/nlohmann_json/nlohmann_jsonConfigVersion.cmake (+20/-0)
external/nlohmann-json/share/cmake/nlohmann_json/nlohmann_jsonTargets.cmake (+109/-0)
external/nlohmann-json/share/pkgconfig/nlohmann_json.pc (+4/-0)
framework/application/CMakeLists.txt (+8/-0)
framework/application/android_context.cpp (+45/-0)
framework/application/android_context.h (+9/-0)
framework/application/android_jni.cpp (+40/-0)
framework/application/android_window.cpp (+93/-0)
framework/application/android_window.h (+25/-0)
framework/application/application.cpp (+49/-0)
framework/application/application.h (+7/-0)
framework/application/display_context.h (+5/-0)
framework/application/display_window.cpp (+70/-0)
framework/application/display_window.h (+46/-0)
framework/application/headless_context.cpp (+10/-0)
framework/application/headless_context.h (+5/-0)
framework/application/headless_window.cpp (+42/-0)
framework/application/headless_window.h (+23/-0)
framework/application/metal_context.h (+6/-0)
framework/application/metal_window.h (+41/-0)
framework/application/metal_window.mm (+153/-0)
framework/application/wayland_context.h (+5/-0)
framework/application/wayland_window.cpp (+24/-0)
framework/application/wayland_window.h (+17/-0)
framework/application/win32_context.h (+5/-0)
framework/application/win32_window.cpp (+22/-0)
framework/application/win32_window.h (+17/-0)
framework/application/wsi_context.h (+5/-0)
framework/application/xcb_context.h (+5/-0)
framework/application/xcb_window.cpp (+22/-0)
framework/application/xcb_window.h (+17/-0)
framework/application/xlib_context.h (+5/-0)
framework/application/xlib_window.cpp (+22/-0)
framework/application/xlib_window.h (+17/-0)
framework/decode/CMakeLists.txt (+257/-0)
framework/decode/ags_gpu_cmd_wrapper.cpp (+107/-0)
framework/decode/ags_gpu_cmd_wrapper.h (+56/-0)
framework/decode/api_decoder.h (+65/-0)
framework/decode/api_payload.h (+912/-0)
framework/decode/block_buffer.cpp (+162/-0)
framework/decode/block_buffer.h (+116/-0)
framework/decode/block_parser.cpp (+1673/-0)
framework/decode/block_parser.h (+138/-0)
framework/decode/common_consumer_base.h (+17/-0)
framework/decode/common_handle_mapping_util.h (+239/-0)
framework/decode/common_object_info_table.cpp (+65/-0)
framework/decode/common_object_info_table.h (+59/-0)
framework/decode/common_struct_handle_mappers.h (+81/-0)
framework/decode/custom_ags_decoder.cpp (+5/-0)
framework/decode/custom_ags_decoder.h (+16/-0)
framework/decode/custom_ags_replay_consumer.cpp (+155/-0)
framework/decode/custom_ags_replay_consumer.h (+6/-0)
framework/decode/custom_dx12_replay_commands.h (+240/-0)
framework/decode/custom_dx12_struct_decoders.cpp (+406/-0)
framework/decode/custom_dx12_struct_decoders.h (+126/-0)
framework/decode/custom_dx12_struct_decoders_forward.h (+33/-0)
framework/decode/custom_dx12_struct_object_mappers.cpp (+164/-0)
framework/decode/custom_dx12_struct_object_mappers.h (+20/-0)
framework/decode/custom_openxr_struct_decoders.cpp (+125/-0)
framework/decode/custom_openxr_struct_decoders.h (+79/-0)
framework/decode/custom_openxr_struct_decoders_forward.h (+48/-0)
framework/decode/custom_openxr_struct_handle_mappers.cpp (+68/-0)
framework/decode/custom_openxr_struct_handle_mappers.h (+45/-0)
framework/decode/custom_openxr_struct_to_json.cpp (+107/-0)
framework/decode/custom_openxr_struct_to_json.h (+67/-0)
framework/decode/custom_vulkan_struct_decoders.cpp (+204/-0)
framework/decode/custom_vulkan_struct_decoders.h (+114/-0)
framework/decode/custom_vulkan_struct_decoders_forward.h (+25/-0)
framework/decode/custom_vulkan_struct_handle_mappers.cpp (+111/-0)
framework/decode/custom_vulkan_struct_handle_mappers.h (+21/-0)
framework/decode/custom_vulkan_struct_to_json.cpp (+164/-0)
framework/decode/custom_vulkan_struct_to_json.h (+51/-0)
framework/decode/decode_api_detection.cpp (+67/-0)
framework/decode/decode_api_detection.h (+11/-0)
framework/decode/decode_json_util.cpp (+56/-0)
framework/decode/decode_json_util.h (+22/-0)
framework/decode/decoder_util.h (+22/-0)
framework/decode/descriptor_update_template_decoder.cpp (+10/-0)
framework/decode/dx12_consumer_base.h (+43/-0)
framework/decode/dx12_decoder_base.cpp (+77/-0)
framework/decode/dx12_decoder_base.h (+35/-0)
framework/decode/dx12_descriptor_map.cpp (+4/-0)
framework/decode/dx12_dump_resources.cpp (+2789/-0)
framework/decode/dx12_dump_resources.h (+404/-0)
framework/decode/dx12_experimental_resource_value_tracker.cpp (+9/-0)
framework/decode/dx12_json_consumer_base.cpp (+9/-0)
framework/decode/dx12_json_consumer_base.h (+9/-0)
framework/decode/dx12_object_info.h (+190/-0)
framework/decode/dx12_object_mapping_util.cpp (+30/-0)
framework/decode/dx12_object_mapping_util.h (+27/-0)
framework/decode/dx12_object_scanning_consumer.cpp (+6/-0)
framework/decode/dx12_object_scanning_consumer.h (+16/-0)
framework/decode/dx12_pre_process_consumer.h (+1006/-0)
framework/decode/dx12_replay_consumer_base.cpp (+1988/-5)
framework/decode/dx12_replay_consumer_base.h (+559/-0)
framework/decode/dx12_resource_value_mapper.cpp (+364/-0)
framework/decode/dx12_resource_value_mapper.h (+5/-0)
framework/decode/dx12_stats_consumer.h (+6/-0)
framework/decode/dx_replay_options.h (+13/-0)
framework/decode/file_processor.cpp (+530/-0)
framework/decode/file_processor.h (+404/-0)
framework/decode/file_transformer.cpp (+97/-0)
framework/decode/file_transformer.h (+19/-0)
framework/decode/handle_pointer_decoder.h (+5/-0)
framework/decode/info_consumer.h (+41/-0)
framework/decode/info_decoder.cpp (+20/-0)
framework/decode/info_decoder.h (+21/-0)
framework/decode/json_writer.cpp (+10/-0)
framework/decode/mark_injected_commands.cpp (+82/-0)
framework/decode/mark_injected_commands.h (+48/-0)
framework/decode/metadata_consumer_base.h (+56/-0)
framework/decode/metadata_json_consumer.h (+91/-0)
framework/decode/openxr_consumer_base.h (+70/-0)
framework/decode/openxr_decoder_base.cpp (+214/-0)
framework/decode/openxr_decoder_base.h (+217/-0)
framework/decode/openxr_detection_consumer.h (+68/-0)
framework/decode/openxr_enum_util.h (+315/-0)
framework/decode/openxr_feature_util.cpp (+125/-0)
framework/decode/openxr_feature_util.h (+56/-0)
framework/decode/openxr_handle_mapping_util.cpp (+143/-0)
framework/decode/openxr_handle_mapping_util.h (+45/-0)
framework/decode/openxr_json_consumer_base.cpp (+355/-0)
framework/decode/openxr_json_consumer_base.h (+143/-0)
framework/decode/openxr_next_node.h (+108/-0)
framework/decode/openxr_next_typed_node.h (+73/-0)
framework/decode/openxr_object_info.h (+148/-0)
framework/decode/openxr_object_info_table_base.h (+119/-0)
framework/decode/openxr_replay_common_state.h (+59/-0)
framework/decode/openxr_replay_consumer_base.cpp (+2313/-0)
framework/decode/openxr_replay_consumer_base.h (+715/-0)
framework/decode/openxr_replay_options.h (+45/-0)
framework/decode/openxr_replay_session_state.cpp (+154/-0)
framework/decode/openxr_replay_session_state.h (+143/-0)
framework/decode/openxr_replay_swapchain_state.cpp (+675/-0)
framework/decode/openxr_replay_swapchain_state.h (+82/-0)
framework/decode/openxr_resource_tracking_consumer.cpp (+2172/-0)
framework/decode/openxr_resource_tracking_consumer.h (+480/-0)
framework/decode/openxr_stats_consumer.h (+88/-0)
framework/decode/openxr_tracked_object_info.cpp (+35/-0)
framework/decode/openxr_tracked_object_info.h (+687/-0)
framework/decode/openxr_tracked_object_info_table.cpp (+475/-0)
framework/decode/openxr_tracked_object_info_table.h (+248/-0)
framework/decode/parsed_block.cpp (+97/-0)
framework/decode/parsed_block.h (+164/-0)
framework/decode/pointer_decoder.h (+23/-0)
framework/decode/pointer_decoder_base.h (+65/-0)
framework/decode/preload_file_processor.cpp (+119/-0)
framework/decode/preload_file_processor.h (+59/-0)
framework/decode/referenced_resource_table.cpp (+12/-0)
framework/decode/referenced_resource_table.h (+5/-0)
framework/decode/replay_options.h (+51/-0)
framework/decode/screenshot_handler.cpp (+140/-0)
framework/decode/screenshot_handler.h (+33/-0)
framework/decode/screenshot_handler_base.cpp (+21/-0)
framework/decode/screenshot_handler_base.h (+13/-0)
framework/decode/stat_decoder_base.h (+16/-0)
framework/decode/struct_pointer_decoder.h (+209/-0)
framework/decode/test/main.cpp (+81/-0)
framework/decode/value_decoder.h (+54/-0)
framework/decode/vulkan_address_replacer.cpp (+2297/-0)
framework/decode/vulkan_address_replacer.h (+508/-0)
framework/decode/vulkan_address_replacer_shaders.h (+1071/-0)
framework/decode/vulkan_captured_swapchain.cpp (+136/-0)
framework/decode/vulkan_captured_swapchain.h (+84/-0)
framework/decode/vulkan_consumer_base.h (+9/-0)
framework/decode/vulkan_cpp_consumer_base.cpp (+139/-0)
framework/decode/vulkan_cpp_consumer_base.h (+13/-0)
framework/decode/vulkan_cpp_loader_generator.cpp (+15/-0)
framework/decode/vulkan_cpp_structs.cpp (+285/-0)
framework/decode/vulkan_cpp_structs.h (+37/-0)
framework/decode/vulkan_cpp_template_strings.h (+301/-0)
framework/decode/vulkan_cpp_util_datapack.cpp (+4/-0)
framework/decode/vulkan_cpp_utilities.h (+12/-0)
framework/decode/vulkan_decoder_base.cpp (+142/-0)
framework/decode/vulkan_decoder_base.h (+44/-0)
framework/decode/vulkan_default_allocator.cpp (+696/-0)
framework/decode/vulkan_default_allocator.h (+176/-0)
framework/decode/vulkan_device_address_tracker.cpp (+259/-0)
framework/decode/vulkan_device_address_tracker.h (+178/-0)
framework/decode/vulkan_handle_mapping_util.cpp (+238/-0)
framework/decode/vulkan_handle_mapping_util.h (+91/-0)
framework/decode/vulkan_json_consumer_base.cpp (+79/-0)
framework/decode/vulkan_json_consumer_base.h (+23/-0)
framework/decode/vulkan_object_cleanup_util.cpp (+471/-0)
framework/decode/vulkan_object_cleanup_util.h (+19/-0)
framework/decode/vulkan_object_info.h (+551/-0)
framework/decode/vulkan_object_info_table_base.h (+147/-0)
framework/decode/vulkan_offscreen_swapchain.cpp (+92/-0)
framework/decode/vulkan_offscreen_swapchain.h (+67/-0)
framework/decode/vulkan_pnext_node.h (+20/-0)
framework/decode/vulkan_pre_process_consumer.h (+727/-0)
framework/decode/vulkan_realign_allocator.cpp (+579/-0)
framework/decode/vulkan_realign_allocator.h (+40/-0)
framework/decode/vulkan_rebind_allocator.cpp (+2415/-16)
framework/decode/vulkan_rebind_allocator.h (+388/-0)
framework/decode/vulkan_referenced_resource_consumer_base.cpp (+52/-0)
framework/decode/vulkan_referenced_resource_consumer_base.h (+29/-0)
framework/decode/vulkan_replay_consumer_base.cpp (+7683/-166)
framework/decode/vulkan_replay_consumer_base.h (+1465/-0)
framework/decode/vulkan_replay_dump_resources.cpp (+3293/-0)
framework/decode/vulkan_replay_dump_resources.h (+615/-0)
framework/decode/vulkan_replay_dump_resources_common.cpp (+1845/-0)
framework/decode/vulkan_replay_dump_resources_common.h (+863/-0)
framework/decode/vulkan_replay_dump_resources_compute_ray_tracing.cpp (+2315/-0)
framework/decode/vulkan_replay_dump_resources_compute_ray_tracing.h (+512/-0)
framework/decode/vulkan_replay_dump_resources_copy_array_of_pointers.h (+224/-0)
framework/decode/vulkan_replay_dump_resources_delegate.cpp (+1754/-0)
framework/decode/vulkan_replay_dump_resources_delegate.h (+278/-0)
framework/decode/vulkan_replay_dump_resources_draw_calls.cpp (+3826/-0)
framework/decode/vulkan_replay_dump_resources_draw_calls.h (+731/-0)
framework/decode/vulkan_replay_dump_resources_json.cpp (+280/-0)
framework/decode/vulkan_replay_dump_resources_json.h (+104/-0)
framework/decode/vulkan_replay_dump_resources_options.h (+67/-0)
framework/decode/vulkan_replay_options.h (+122/-0)
framework/decode/vulkan_resource_allocator.h (+222/-0)
framework/decode/vulkan_resource_initializer.cpp (+600/-0)
framework/decode/vulkan_resource_initializer.h (+79/-0)
framework/decode/vulkan_resource_tracking_consumer.cpp (+341/-0)
framework/decode/vulkan_resource_tracking_consumer.h (+55/-0)
framework/decode/vulkan_stats_consumer.h (+145/-0)
framework/decode/vulkan_swapchain.cpp (+81/-0)
framework/decode/vulkan_swapchain.h (+117/-0)
framework/decode/vulkan_tracked_object_info.cpp (+220/-0)
framework/decode/vulkan_tracked_object_info.h (+290/-0)
framework/decode/vulkan_tracked_object_info_table.cpp (+96/-0)
framework/decode/vulkan_tracked_object_info_table.h (+60/-0)
framework/decode/vulkan_virtual_swapchain.cpp (+313/-0)
framework/decode/vulkan_virtual_swapchain.h (+91/-0)
framework/decode/window.h (+24/-0)
framework/encode/CMakeLists.txt (+108/-0)
framework/encode/ags_dispatch_table.h (+22/-0)
framework/encode/api_capture_manager.h (+118/-0)
framework/encode/capture_manager.cpp (+946/-0)
framework/encode/capture_manager.h (+445/-0)
framework/encode/capture_settings.cpp (+325/-0)
framework/encode/capture_settings.h (+186/-0)
framework/encode/command_writer.cpp (+165/-0)
framework/encode/command_writer.h (+69/-0)
framework/encode/custom_dx12_struct_encoders.cpp (+261/-0)
framework/encode/custom_dx12_struct_encoders.h (+28/-0)
framework/encode/custom_dx12_struct_unwrappers.cpp (+116/-0)
framework/encode/custom_dx12_struct_unwrappers.h (+9/-0)
framework/encode/custom_dx12_wrapper_commands.h (+121/-0)
framework/encode/custom_openxr_api_call_encoders.cpp (+684/-0)
framework/encode/custom_openxr_api_call_encoders.h (+71/-0)
framework/encode/custom_openxr_encoder_commands.h (+150/-0)
framework/encode/custom_openxr_struct_encoders.cpp (+78/-0)
framework/encode/custom_openxr_struct_encoders.h (+49/-0)
framework/encode/custom_openxr_struct_handle_wrappers.cpp (+54/-0)
framework/encode/custom_openxr_struct_handle_wrappers.h (+49/-0)
framework/encode/custom_vulkan_api_call_encoders.cpp (+258/-0)
framework/encode/custom_vulkan_api_call_encoders.h (+74/-0)
framework/encode/custom_vulkan_encoder_commands.h (+814/-0)
framework/encode/custom_vulkan_layer_func_table.h (+41/-0)
framework/encode/custom_vulkan_struct_encoders.cpp (+126/-0)
framework/encode/custom_vulkan_struct_encoders.h (+8/-0)
framework/encode/custom_vulkan_struct_handle_wrappers.cpp (+49/-0)
framework/encode/custom_vulkan_struct_handle_wrappers.h (+11/-0)
framework/encode/d3d12_capture_manager.cpp (+1153/-0)
framework/encode/d3d12_capture_manager.h (+211/-0)
framework/encode/d3d12_dispatch_table.h (+5/-0)
framework/encode/dx12_dll_initializer.h (+4/-0)
framework/encode/dx12_object_wrapper_info.h (+126/-0)
framework/encode/dx12_object_wrapper_util.h (+5/-0)
framework/encode/dx12_rv_annotation_util.cpp (+4/-0)
framework/encode/dx12_state_tracker.cpp (+391/-0)
framework/encode/dx12_state_tracker.h (+41/-0)
framework/encode/dx12_state_tracker_initializers.h (+4/-0)
framework/encode/dx12_state_writer.cpp (+414/-0)
framework/encode/dx12_state_writer.h (+60/-0)
framework/encode/openxr_capture_manager.cpp (+258/-0)
framework/encode/openxr_capture_manager.h (+240/-0)
framework/encode/openxr_handle_wrapper_util.cpp (+161/-0)
framework/encode/openxr_handle_wrapper_util.h (+2168/-0)
framework/encode/openxr_handle_wrappers.h (+725/-0)
framework/encode/openxr_state_info.h (+52/-0)
framework/encode/openxr_state_table_base.h (+124/-0)
framework/encode/openxr_state_tracker.cpp (+43/-0)
framework/encode/openxr_state_tracker.h (+248/-0)
framework/encode/openxr_state_tracker_initializers.h (+121/-0)
framework/encode/openxr_state_writer.cpp (+180/-0)
framework/encode/openxr_state_writer.h (+97/-0)
framework/encode/parameter_encoder.h (+280/-0)
framework/encode/struct_pointer_encoder.h (+49/-0)
framework/encode/test/main.cpp (+756/-0)
framework/encode/vulkan_acceleration_structure_build_state.h (+99/-0)
framework/encode/vulkan_capture_common.cpp (+969/-0)
framework/encode/vulkan_capture_common.h (+47/-0)
framework/encode/vulkan_capture_layer_settings.cpp (+123/-0)
framework/encode/vulkan_capture_layer_settings.h (+45/-0)
framework/encode/vulkan_capture_manager.cpp (+2143/-10)
framework/encode/vulkan_capture_manager.h (+767/-0)
framework/encode/vulkan_device_address_tracker.cpp (+132/-0)
framework/encode/vulkan_device_address_tracker.h (+114/-0)
framework/encode/vulkan_entry_base.cpp (+336/-0)
framework/encode/vulkan_entry_base.h (+138/-0)
framework/encode/vulkan_handle_wrapper_util.cpp (+5/-0)
framework/encode/vulkan_handle_wrapper_util.h (+111/-0)
framework/encode/vulkan_handle_wrappers.h (+384/-0)
framework/encode/vulkan_state_info.h (+105/-0)
framework/encode/vulkan_state_tracker.cpp (+2936/-77)
framework/encode/vulkan_state_tracker.h (+439/-0)
framework/encode/vulkan_state_tracker_initializers.h (+115/-0)
framework/encode/vulkan_state_writer.cpp (+2647/-90)
framework/encode/vulkan_state_writer.h (+206/-0)
framework/encode/vulkan_track_struct.h (+66/-0)
framework/format/CMakeLists.txt (+9/-0)
framework/format/api_call_id.h (+445/-0)
framework/format/dx12_subobject_types.h (+6/-0)
framework/format/format.h (+203/-0)
framework/format/format_util.cpp (+113/-0)
framework/format/format_util.h (+19/-0)
framework/format/platform_types.h (+704/-0)
framework/format/platform_types_d3d_overrides.h (+6810/-0)
framework/generated/dx12_generators/blacklists.json (+12/-0)
framework/generated/dx12_generators/capture_overrides.json (+45/-0)
framework/generated/dx12_generators/dx12_add_entries_header_generator.py (+4/-0)
framework/generated/dx12_generators/dx12_api_call_encoders_body_generator.py (+55/-0)
framework/generated/dx12_generators/dx12_api_call_encoders_header_generator.py (+4/-0)
framework/generated/dx12_generators/dx12_base_decoder_body_generator.py (+254/-0)
framework/generated/dx12_generators/dx12_base_generator.py (+1048/-0)
framework/generated/dx12_generators/dx12_base_replay_consumer_body_generator.py (+62/-0)
framework/generated/dx12_generators/dx12_base_struct_decoders_body_generator.py (+236/-0)
framework/generated/dx12_generators/dx12_base_struct_decoders_header_generator.py (+113/-0)
framework/generated/dx12_generators/dx12_call_id_to_string_header_generator.py (+18/-0)
framework/generated/dx12_generators/dx12_command_list_util_body_generator.py (+4/-0)
framework/generated/dx12_generators/dx12_command_list_util_header_generator.py (+4/-0)
framework/generated/dx12_generators/dx12_consumer_header_generator.py (+20/-0)
framework/generated/dx12_generators/dx12_decoder_body_generator.py (+17/-0)
framework/generated/dx12_generators/dx12_decoder_header_generator.py (+17/-0)
framework/generated/dx12_generators/dx12_enum_to_json_header_generator.py (+14/-0)
framework/generated/dx12_generators/dx12_enum_to_string_body_generator.py (+18/-0)
framework/generated/dx12_generators/dx12_enum_to_string_header_generator.py (+28/-0)
framework/generated/dx12_generators/dx12_json_consumer_body_generator.py (+23/-0)
framework/generated/dx12_generators/dx12_json_consumer_header_generator.py (+4/-0)
framework/generated/dx12_generators/dx12_replay_consumer_body_generator.py (+467/-0)
framework/generated/dx12_generators/dx12_replay_consumer_header_generator.py (+4/-0)
framework/generated/dx12_generators/dx12_state_table_header_generator.py (+4/-0)
framework/generated/dx12_generators/dx12_struct_decoders_body_generator.py (+44/-0)
framework/generated/dx12_generators/dx12_struct_decoders_forward_generator.py (+33/-0)
framework/generated/dx12_generators/dx12_struct_decoders_header_generator.py (+43/-0)
framework/generated/dx12_generators/dx12_struct_decoders_to_json_body_generator.py (+128/-0)
framework/generated/dx12_generators/dx12_struct_decoders_to_json_header_generator.py (+19/-0)
framework/generated/dx12_generators/dx12_struct_object_mappers_body_generator.py (+337/-0)
framework/generated/dx12_generators/dx12_struct_object_mappers_header_generator.py (+128/-0)
framework/generated/dx12_generators/dx12_struct_unwrappers_body_generator.py (+4/-0)
framework/generated/dx12_generators/dx12_struct_unwrappers_header_generator.py (+4/-0)
framework/generated/dx12_generators/dx12_struct_wrapper_body_generator.py (+10/-0)
framework/generated/dx12_generators/dx12_struct_wrapper_header_generator.py (+4/-0)
framework/generated/dx12_generators/dx12_wrapper_body_generator.py (+152/-0)
framework/generated/dx12_generators/dx12_wrapper_creators_body_generator.py (+4/-0)
framework/generated/dx12_generators/dx12_wrapper_creators_header_generator.py (+4/-0)
framework/generated/dx12_generators/dx12_wrapper_header_generator.py (+10/-0)
framework/generated/dx12_generators/gencode.py (+4/-0)
framework/generated/dx12_generators/reformat_code.py (+77/-0)
framework/generated/dx12_generators/replay_overrides.json (+63/-0)
framework/generated/generate_dx12.py (+42/-0)
framework/generated/generate_openxr.py (+178/-0)
framework/generated/generate_vulkan.py (+37/-0)
framework/generated/generated_dx12_add_entries.h (+440/-0)
framework/generated/generated_dx12_api_call_encoders.cpp (+16111/-5047)
framework/generated/generated_dx12_api_call_encoders.h (+3699/-0)
framework/generated/generated_dx12_call_id_to_string.h (+1550/-0)
framework/generated/generated_dx12_command_list_util.cpp (+19/-0)
framework/generated/generated_dx12_command_list_util.h (+18/-0)
framework/generated/generated_dx12_consumer.h (+4038/-461)
framework/generated/generated_dx12_decoder.cpp (+11104/-273)
framework/generated/generated_dx12_decoder.h (+249/-0)
framework/generated/generated_dx12_enum_to_json.h (+1971/-2)
framework/generated/generated_dx12_enum_to_string.cpp (+1006/-114)
framework/generated/generated_dx12_enum_to_string.h (+110/-0)
framework/generated/generated_dx12_json_consumer.cpp (+13542/-4029)
framework/generated/generated_dx12_json_consumer.h (+4031/-462)
framework/generated/generated_dx12_replay_consumer.cpp (+22127/-4374)
framework/generated/generated_dx12_replay_consumer.h (+4031/-462)
framework/generated/generated_dx12_state_table.h (+189/-0)
framework/generated/generated_dx12_struct_decoders.cpp (+4251/-4)
framework/generated/generated_dx12_struct_decoders.h (+2463/-16)
framework/generated/generated_dx12_struct_decoders_forward.h (+374/-0)
framework/generated/generated_dx12_struct_decoders_to_json.cpp (+4854/-104)
framework/generated/generated_dx12_struct_decoders_to_json.h (+248/-0)
framework/generated/generated_dx12_struct_object_mappers.cpp (+93/-0)
framework/generated/generated_dx12_struct_object_mappers.h (+25/-0)
framework/generated/generated_dx12_struct_unwrappers.cpp (+11/-0)
framework/generated/generated_dx12_struct_unwrappers.h (+11/-0)
framework/generated/generated_dx12_struct_wrappers.cpp (+16/-0)
framework/generated/generated_dx12_struct_wrappers.h (+11/-0)
framework/generated/generated_dx12_wrapper_creators.cpp (+775/-0)
framework/generated/generated_dx12_wrapper_creators.h (+133/-0)
framework/generated/generated_dx12_wrappers.cpp (+25083/-216)
framework/generated/generated_dx12_wrappers.h (+4554/-360)
framework/generated/generated_openxr_api_call_encoders.cpp (+11566/-0)
framework/generated/generated_openxr_api_call_encoders.h (+1328/-0)
framework/generated/generated_openxr_consumer.h (+1908/-0)
framework/generated/generated_openxr_decoder.cpp (+7131/-0)
framework/generated/generated_openxr_decoder.h (+614/-0)
framework/generated/generated_openxr_dispatch_table.h (+922/-0)
framework/generated/generated_openxr_enum_to_json.cpp (+5100/-0)
framework/generated/generated_openxr_enum_to_json.h (+238/-0)
framework/generated/generated_openxr_enum_to_string.cpp (+2562/-0)
framework/generated/generated_openxr_enum_to_string.h (+233/-0)
framework/generated/generated_openxr_json_consumer.cpp (+4566/-0)
framework/generated/generated_openxr_json_consumer.h (+1906/-0)
framework/generated/generated_openxr_layer_func_table.h (+343/-0)
framework/generated/generated_openxr_object_info_table.h (+288/-0)
framework/generated/generated_openxr_replay_consumer.cpp (+6322/-0)
framework/generated/generated_openxr_replay_consumer.h (+1810/-0)
framework/generated/generated_openxr_state_table.h (+736/-0)
framework/generated/generated_openxr_struct_decoders.cpp (+7565/-0)
framework/generated/generated_openxr_struct_decoders.h (+5857/-0)
framework/generated/generated_openxr_struct_decoders_forward.h (+914/-0)
framework/generated/generated_openxr_struct_encoders.cpp (+4326/-0)
framework/generated/generated_openxr_struct_encoders.h (+515/-0)
framework/generated/generated_openxr_struct_handle_mappers.cpp (+1498/-0)
framework/generated/generated_openxr_struct_handle_mappers.h (+288/-0)
framework/generated/generated_openxr_struct_handle_wrappers.cpp (+1182/-0)
framework/generated/generated_openxr_struct_handle_wrappers.h (+429/-0)
framework/generated/generated_openxr_struct_next_decoder.cpp (+527/-0)
framework/generated/generated_openxr_struct_next_encoder.cpp (+402/-0)
framework/generated/generated_openxr_struct_to_json.cpp (+7313/-0)
framework/generated/generated_openxr_struct_to_json.h (+747/-0)
framework/generated/generated_openxr_type_util.h (+413/-0)
framework/generated/generated_vulkan_api_call_encoders.cpp (+19033/-822)
framework/generated/generated_vulkan_api_call_encoders.h (+2898/-3)
framework/generated/generated_vulkan_command_buffer_util.cpp (+815/-24)
framework/generated/generated_vulkan_command_buffer_util.h (+115/-0)
framework/generated/generated_vulkan_constant_maps.h (+8/-0)
framework/generated/generated_vulkan_consumer.h (+1269/-62)
framework/generated/generated_vulkan_cpp_consumer.cpp (+17746/-5911)
framework/generated/generated_vulkan_cpp_consumer.h (+497/-0)
framework/generated/generated_vulkan_cpp_consumer_extension.cpp (+4919/-370)
framework/generated/generated_vulkan_cpp_consumer_extension.h (+11/-0)
framework/generated/generated_vulkan_cpp_structs.cpp (+15292/-1798)
framework/generated/generated_vulkan_cpp_structs.h (+694/-0)
framework/generated/generated_vulkan_decoder.cpp (+12400/-162)
framework/generated/generated_vulkan_decoder.h (+339/-0)
framework/generated/generated_vulkan_dispatch_table.h (+1618/-0)
framework/generated/generated_vulkan_enum_to_json.cpp (+4565/-143)
framework/generated/generated_vulkan_enum_to_json.h (+296/-0)
framework/generated/generated_vulkan_enum_to_string.cpp (+6221/-11)
framework/generated/generated_vulkan_enum_to_string.h (+407/-0)
framework/generated/generated_vulkan_feature_util.cpp (+4978/-647)
framework/generated/generated_vulkan_json_consumer.cpp (+14001/-3874)
framework/generated/generated_vulkan_json_consumer.h (+1217/-62)
framework/generated/generated_vulkan_layer_func_table.h (+760/-0)
framework/generated/generated_vulkan_object_info_table_base2.h (+304/-0)
framework/generated/generated_vulkan_pnext_struct_decoder.cpp (+2714/-0)
framework/generated/generated_vulkan_pnext_struct_encoder.cpp (+2049/-0)
framework/generated/generated_vulkan_recapture_func_table.h (+762/-0)
framework/generated/generated_vulkan_referenced_resource_consumer.cpp (+735/-3)
framework/generated/generated_vulkan_referenced_resource_consumer.h (+221/-0)
framework/generated/generated_vulkan_replay_consumer.cpp (+19607/-5618)
framework/generated/generated_vulkan_replay_consumer.h (+1269/-62)
framework/generated/generated_vulkan_replay_dump_resources.cpp (+7897/-0)
framework/generated/generated_vulkan_replay_dump_resources.h (+2030/-0)
framework/generated/generated_vulkan_state_table.h (+697/-0)
framework/generated/generated_vulkan_struct_decoders.cpp (+18640/-228)
framework/generated/generated_vulkan_struct_decoders.h (+12364/-2618)
framework/generated/generated_vulkan_struct_decoders_forward.h (+2151/-87)
framework/generated/generated_vulkan_struct_deep_copy.cpp (+25442/-0)
framework/generated/generated_vulkan_struct_deep_copy_stype.cpp (+3973/-0)
framework/generated/generated_vulkan_struct_encoders.cpp (+10660/-2154)
framework/generated/generated_vulkan_struct_encoders.h (+888/-0)
framework/generated/generated_vulkan_struct_handle_mappers.cpp (+2023/-119)
framework/generated/generated_vulkan_struct_handle_mappers.h (+406/-0)
framework/generated/generated_vulkan_struct_handle_wrappers.cpp (+2798/-174)
framework/generated/generated_vulkan_struct_handle_wrappers.h (+205/-0)
framework/generated/generated_vulkan_struct_to_json.cpp (+27329/-7667)
framework/generated/generated_vulkan_struct_to_json.h (+571/-0)
framework/generated/generated_vulkan_stype_util.h (+500/-0)
framework/generated/khronos_generators/khronos_api_call_encoders_generator.py (+160/-0)
framework/generated/khronos_generators/khronos_base_generator.py (+2471/-0)
framework/generated/khronos_generators/khronos_consumer_header_generator.py (+96/-0)
framework/generated/khronos_generators/khronos_decode_extended_struct_generator.py (+230/-0)
framework/generated/khronos_generators/khronos_decoder_body_generator.py (+298/-0)
framework/generated/khronos_generators/khronos_decoder_header_generator.py (+87/-0)
framework/generated/khronos_generators/khronos_dispatch_table_generator.py (+285/-0)
framework/generated/khronos_generators/khronos_encode_extended_struct_generator.py (+195/-0)
framework/generated/khronos_generators/khronos_enum_to_json_body_generator.py (+151/-0)
framework/generated/khronos_generators/khronos_enum_to_json_header_generator.py (+77/-0)
framework/generated/khronos_generators/khronos_enum_to_string_body_generator.py (+88/-0)
framework/generated/khronos_generators/khronos_enum_to_string_header_generator.py (+60/-0)
framework/generated/khronos_generators/khronos_json_consumer_body_generator.py (+163/-0)
framework/generated/khronos_generators/khronos_layer_func_table_generator.py (+84/-0)
framework/generated/khronos_generators/khronos_object_info_table_header_generator.py (+79/-0)
framework/generated/khronos_generators/khronos_replay_consumer_body_generator.py (+1104/-0)
framework/generated/khronos_generators/khronos_state_table_header_generator.py (+157/-0)
framework/generated/khronos_generators/khronos_struct_decoders_body_generator.py (+306/-0)
framework/generated/khronos_generators/khronos_struct_decoders_forward_generator.py (+44/-0)
framework/generated/khronos_generators/khronos_struct_decoders_header_generator.py (+274/-0)
framework/generated/khronos_generators/khronos_struct_encoders_body_generator.py (+139/-0)
framework/generated/khronos_generators/khronos_struct_encoders_header_generator.py (+63/-0)
framework/generated/khronos_generators/khronos_struct_handle_mappers_body_generator.py (+447/-0)
framework/generated/khronos_generators/khronos_struct_handle_mappers_header_generator.py (+109/-0)
framework/generated/khronos_generators/khronos_struct_handle_wrappers_body_generator.py (+286/-0)
framework/generated/khronos_generators/khronos_struct_handle_wrappers_header_generator.py (+266/-0)
framework/generated/khronos_generators/khronos_struct_to_json_body_generator.py (+247/-0)
framework/generated/khronos_generators/khronos_struct_to_json_header_generator.py (+80/-0)
framework/generated/khronos_generators/khronos_struct_type_util_generator.py (+87/-0)
framework/generated/khronos_generators/openxr_generators/blacklists.json (+32/-0)
framework/generated/khronos_generators/openxr_generators/capture_overrides.json (+5/-0)
framework/generated/khronos_generators/openxr_generators/gencode.py (+926/-0)
framework/generated/khronos_generators/openxr_generators/openxr_api_call_encoders_body_generator.py (+644/-0)
framework/generated/khronos_generators/openxr_generators/openxr_api_call_encoders_header_generator.py (+86/-0)
framework/generated/khronos_generators/openxr_generators/openxr_base_generator.py (+485/-0)
framework/generated/khronos_generators/openxr_generators/openxr_consumer_header_generator.py (+103/-0)
framework/generated/khronos_generators/openxr_generators/openxr_decoder_body_generator.py (+102/-0)
framework/generated/khronos_generators/openxr_generators/openxr_decoder_header_generator.py (+85/-0)
framework/generated/khronos_generators/openxr_generators/openxr_dispatch_table_generator.py (+120/-0)
framework/generated/khronos_generators/openxr_generators/openxr_enum_to_json_body_generator.py (+86/-0)
framework/generated/khronos_generators/openxr_generators/openxr_enum_to_json_header_generator.py (+88/-0)
framework/generated/khronos_generators/openxr_generators/openxr_enum_to_string_body_generator.py (+85/-0)
framework/generated/khronos_generators/openxr_generators/openxr_enum_to_string_header_generator.py (+85/-0)
framework/generated/khronos_generators/openxr_generators/openxr_json_consumer_body_generator.py (+134/-0)
framework/generated/khronos_generators/openxr_generators/openxr_json_consumer_header_generator.py (+119/-0)
framework/generated/khronos_generators/openxr_generators/openxr_layer_func_table_generator.py (+103/-0)
framework/generated/khronos_generators/openxr_generators/openxr_object_info_table_header_generator.py (+75/-0)
framework/generated/khronos_generators/openxr_generators/openxr_replay_consumer_body_generator.py (+208/-0)
framework/generated/khronos_generators/openxr_generators/openxr_state_table_header_generator.py (+84/-0)
framework/generated/khronos_generators/openxr_generators/openxr_struct_decoders_body_generator.py (+91/-0)
framework/generated/khronos_generators/openxr_generators/openxr_struct_decoders_forward_generator.py (+86/-0)
framework/generated/khronos_generators/openxr_generators/openxr_struct_decoders_header_generator.py (+95/-0)
framework/generated/khronos_generators/openxr_generators/openxr_struct_encoders_body_generator.py (+111/-0)
framework/generated/khronos_generators/openxr_generators/openxr_struct_encoders_header_generator.py (+93/-0)
framework/generated/khronos_generators/openxr_generators/openxr_struct_handle_mappers_body_generator.py (+94/-0)
framework/generated/khronos_generators/openxr_generators/openxr_struct_handle_mappers_header_generator.py (+91/-0)
framework/generated/khronos_generators/openxr_generators/openxr_struct_handle_wrappers_body_generator.py (+100/-0)
framework/generated/khronos_generators/openxr_generators/openxr_struct_handle_wrappers_header_generator.py (+95/-0)
framework/generated/khronos_generators/openxr_generators/openxr_struct_next_decoders_generator.py (+96/-0)
framework/generated/khronos_generators/openxr_generators/openxr_struct_next_encoders_generator.py (+86/-0)
framework/generated/khronos_generators/openxr_generators/openxr_struct_to_json_body_generator.py (+114/-0)
framework/generated/khronos_generators/openxr_generators/openxr_struct_to_json_header_generator.py (+98/-0)
framework/generated/khronos_generators/openxr_generators/openxr_type_util_generator.py (+56/-0)
framework/generated/khronos_generators/openxr_generators/platform_types.json (+86/-0)
framework/generated/khronos_generators/openxr_generators/replay_overrides.json (+4/-0)
framework/generated/khronos_generators/reformat_code.py (+77/-0)
framework/generated/khronos_generators/vulkan_generators/VK_ANDROID_frame_boundary.xml (+18/-0)
framework/generated/khronos_generators/vulkan_generators/blacklists.json (+51/-0)
framework/generated/khronos_generators/vulkan_generators/capture_overrides.json (+22/-0)
framework/generated/khronos_generators/vulkan_generators/codegen.pyproj (+57/-0)
framework/generated/khronos_generators/vulkan_generators/codegen.sln (+23/-0)
framework/generated/khronos_generators/vulkan_generators/dump_resources_overrides.json (+44/-0)
framework/generated/khronos_generators/vulkan_generators/gencode.py (+1154/-0)
framework/generated/khronos_generators/vulkan_generators/platform_types.json (+70/-0)
framework/generated/khronos_generators/vulkan_generators/replay_async_overrides.json (+7/-0)
framework/generated/khronos_generators/vulkan_generators/replay_overrides.json (+173/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_api_call_encoders_body_generator.py (+688/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_api_call_encoders_header_generator.py (+86/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_base_generator.py (+460/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_command_buffer_util_body_generator.py (+234/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_command_buffer_util_header_generator.py (+109/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_constant_maps_generator.py (+106/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_consumer_header_generator.py (+101/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_consumer_body_generator.py (+1092/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_consumer_extension_generator.py (+179/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_consumer_header_generator.py (+187/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_struct_generator.py (+883/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_decoder_body_generator.py (+101/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_decoder_header_generator.py (+83/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_dispatch_table_generator.py (+135/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_json_body_generator.py (+83/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_json_header_generator.py (+85/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_string_body_generator.py (+82/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_string_header_generator.py (+82/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_feature_util_body_generator.py (+215/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_json_consumer_body_generator.py (+154/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_json_consumer_header_generator.py (+120/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_layer_func_table_generator.py (+106/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_object_info_table_base2_header_generator.py (+76/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_pnext_struct_decode_generator.py (+95/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_pnext_struct_encode_generator.py (+92/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_recapture_func_table_generator.py (+106/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_referenced_resource_consumer_body_generator.py (+292/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_referenced_resource_consumer_header_generator.py (+146/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_replay_consumer_body_generator.py (+349/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_replay_dump_resources_body_generator.py (+173/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_replay_dump_resources_header_generator.py (+163/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_state_table_header_generator.py (+80/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_struct_decoders_body_generator.py (+89/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_struct_decoders_forward_generator.py (+86/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_struct_decoders_header_generator.py (+96/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_struct_deep_copy_body_generator.py (+429/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_struct_deep_copy_stype_body_generator.py (+144/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_struct_encoders_body_generator.py (+93/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_struct_encoders_header_generator.py (+89/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_mappers_body_generator.py (+95/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_mappers_header_generator.py (+93/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_wrappers_body_generator.py (+125/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_wrappers_header_generator.py (+94/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_struct_to_json_body_generator.py (+119/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_struct_to_json_header_generator.py (+90/-0)
framework/generated/khronos_generators/vulkan_generators/vulkan_stype_util_generator.py (+49/-0)
framework/graphics/CMakeLists.txt (+44/-0)
framework/graphics/dx12_ags_marker_injector.cpp (+117/-0)
framework/graphics/dx12_ags_marker_injector.h (+53/-0)
framework/graphics/dx12_image_renderer.cpp (+3/-0)
framework/graphics/dx12_image_renderer.h (+9/-0)
framework/graphics/dx12_resource_data_util.cpp (+89/-0)
framework/graphics/dx12_resource_data_util.h (+39/-0)
framework/graphics/dx12_util.cpp (+452/-0)
framework/graphics/dx12_util.h (+138/-0)
framework/graphics/fps_info.cpp (+163/-0)
framework/graphics/fps_info.h (+54/-0)
framework/graphics/test/main.cpp (+37/-0)
framework/graphics/vulkan_check_buffer_references.cpp (+138/-0)
framework/graphics/vulkan_check_buffer_references.h (+79/-0)
framework/graphics/vulkan_device_util.cpp (+231/-0)
framework/graphics/vulkan_device_util.h (+71/-0)
framework/graphics/vulkan_feature_util.cpp (+260/-0)
framework/graphics/vulkan_feature_util.h (+77/-0)
framework/graphics/vulkan_instance_util.cpp (+46/-0)
framework/graphics/vulkan_instance_util.h (+45/-0)
framework/graphics/vulkan_resources_util.cpp (+2235/-12)
framework/graphics/vulkan_resources_util.h (+351/-0)
framework/graphics/vulkan_shader_group_handle.h (+82/-0)
framework/graphics/vulkan_struct_deep_copy.h (+63/-0)
framework/graphics/vulkan_struct_extract_handles.cpp (+118/-0)
framework/graphics/vulkan_struct_extract_handles.h (+60/-0)
framework/graphics/vulkan_struct_get_pnext.h (+179/-0)
framework/graphics/vulkan_util.cpp (+86/-0)
framework/graphics/vulkan_util.h (+53/-0)
framework/util/CMakeLists.txt (+83/-0)
framework/util/alignment_utils.h (+96/-0)
framework/util/android/activity.cpp (+53/-0)
framework/util/android/activity.h (+38/-0)
framework/util/android/intent.cpp (+81/-0)
framework/util/android/intent.h (+41/-0)
framework/util/buffer_writer.cpp (+80/-0)
framework/util/buffer_writer.h (+41/-0)
framework/util/clock_cache.h (+151/-0)
framework/util/compressor.h (+17/-0)
framework/util/date_time.h (+67/-0)
framework/util/defines.h (+9/-0)
framework/util/driver_info.cpp (+15/-0)
framework/util/file_input_stream.cpp (+208/-0)
framework/util/file_input_stream.h (+78/-0)
framework/util/file_output_stream.cpp (+19/-0)
framework/util/file_output_stream.h (+19/-0)
framework/util/file_path.cpp (+90/-0)
framework/util/file_path.h (+22/-0)
framework/util/hash.h (+142/-0)
framework/util/heap_buffer.cpp (+164/-0)
framework/util/heap_buffer.h (+162/-0)
framework/util/image_writer.cpp (+538/-0)
framework/util/image_writer.h (+95/-0)
framework/util/interception/create_process.cpp (+11/-0)
framework/util/json_util.cpp (+41/-1)
framework/util/json_util.h (+43/-0)
framework/util/keyboard.cpp (+78/-0)
framework/util/linear_hashmap.h (+265/-0)
framework/util/logging.cpp (+37/-0)
framework/util/logging.h (+13/-0)
framework/util/lz4_compressor.cpp (+28/-0)
framework/util/lz4_compressor.h (+16/-0)
framework/util/memory_output_stream.cpp (+8/-0)
framework/util/memory_output_stream.h (+4/-0)
framework/util/options.cpp (+13/-0)
framework/util/options.h (+25/-0)
framework/util/output_stream.h (+27/-0)
framework/util/page_guard_manager.cpp (+189/-0)
framework/util/page_guard_manager.h (+63/-0)
framework/util/page_guard_manager_uffd.cpp (+68/-0)
framework/util/page_status_tracker.h (+35/-0)
framework/util/platform.h (+295/-0)
framework/util/span.h (+247/-0)
framework/util/spirv_helper.h (+1647/-0)
framework/util/spirv_parsing_util.cpp (+695/-0)
framework/util/spirv_parsing_util.h (+82/-0)
framework/util/strings.cpp (+55/-0)
framework/util/strings.h (+29/-0)
framework/util/test/main.cpp (+48/-0)
framework/util/test/test_linear_hashmap.cpp (+139/-0)
framework/util/test/test_spirv_parsing_util.cpp (+622/-0)
framework/util/test/test_valid_pointer.cpp (+53/-0)
framework/util/thread_data.cpp (+61/-0)
framework/util/thread_data.h (+91/-0)
framework/util/threadpool.h (+253/-0)
framework/util/to_string.h (+27/-0)
framework/util/type_traits_extras.h (+74/-0)
framework/util/zlib_compressor.cpp (+65/-0)
framework/util/zlib_compressor.h (+16/-0)
framework/util/zstd_compressor.cpp (+17/-0)
framework/util/zstd_compressor.h (+16/-0)
layer/CMakeLists.txt (+97/-0)
layer/VkLayer_gfxreconstruct-android.map (+13/-0)
layer/VkLayer_gfxreconstruct.def (+28/-0)
layer/VkLayer_gfxreconstruct.exp (+8/-0)
layer/VkLayer_gfxreconstruct.map (+13/-0)
layer/ags_capture/CMakeLists.txt (+7/-0)
layer/d3d12/CMakeLists.txt (+8/-0)
layer/d3d12/d3d12.def (+4/-0)
layer/d3d12/d3d12_ms.def (+4/-0)
layer/d3d12/dll_main.cpp (+29/-0)
layer/d3d12/hook_d3d12.cpp (+44/-0)
layer/d3d12/hook_d3d12.h (+21/-0)
layer/d3d12_capture/CMakeLists.txt (+9/-0)
layer/d3d12_capture/dll_main.cpp (+5/-0)
layer/dll_main.cpp (+39/-0)
layer/dxgi/CMakeLists.txt (+4/-0)
layer/gfxrecon_interceptor/CMakeLists.txt (+5/-0)
layer/json/VkLayer_gfxreconstruct.json.in (+49/-0)
layer/json/XrLayer_gfxreconstruct.json.in (+10/-0)
layer/layer_vulkan_entry.cpp (+653/-0)
layer/layer_vulkan_entry.h (+120/-0)
layer/test/main.cpp (+3/-0)
project_version.cpp (+31/-0)
project_version.h.in (+12/-0)
project_version_string.h.in (+41/-0)
scripts/build.py (+26/-0)
scripts/clang-format-diff.py (+5/-0)
scripts/gfxrecon-replay-renamed.py (+97/-0)
test.ref (+1/-0)
test/CMakeLists.txt (+85/-0)
test/android_mock/CMakeLists.txt (+29/-0)
test/android_mock/README.md (+11/-0)
test/android_mock/android/api-level.h (+34/-0)
test/android_mock/android/hardware_buffer.cpp (+46/-0)
test/android_mock/android/hardware_buffer.h (+83/-0)
test/android_mock/android/log.h (+37/-0)
test/android_mock/android/ndk-version.h (+25/-0)
test/android_mock/android_native_app_glue.h (+24/-0)
test/android_mock/sys/system_properties.h (+34/-0)
test/icd/CMakeLists.txt (+133/-0)
test/icd/VkICD_mock_icd.def (+37/-0)
test/icd/VkICD_mock_icd.json.in (+7/-0)
test/icd/generated/.clang-format (+5/-0)
test/icd/generated/function_declarations.h (+5439/-0)
test/icd/generated/function_definitions.h (+8023/-0)
test/icd/generated/vk_typemap_helper.h (+8698/-0)
test/icd/mock_icd.cpp (+186/-0)
test/icd/mock_icd.h (+273/-0)
test/icd/mock_icd_test_config.h (+29/-0)
test/known_good/.gitignore (+1/-0)
test/run-tests.ps1 (+32/-0)
test/run-tests.sh (+24/-0)
test/run-tests_macos.sh (+25/-0)
test/test_apps/CMakeLists.txt (+50/-0)
test/test_apps/acquired-image/CMakeLists.txt (+38/-0)
test/test_apps/acquired-image/acquired_image_app.h (+68/-0)
test/test_apps/acquired-image/app.cpp (+379/-0)
test/test_apps/ahb/CMakeLists.txt (+40/-0)
test/test_apps/ahb/ahb_app.h (+88/-0)
test/test_apps/ahb/app.cpp (+516/-0)
test/test_apps/common/CMakeLists.txt (+15/-0)
test/test_apps/common/CurrentBuildVulkanVersion.cmake (+2/-0)
test/test_apps/common/generate_dispatch.py (+421/-0)
test/test_apps/common/test_app_base.cpp (+3067/-0)
test/test_apps/common/test_app_base.h (+1133/-0)
test/test_apps/common/test_app_dispatch.h (+8326/-0)
test/test_apps/external-memory-fd-export/CMakeLists.txt (+47/-0)
test/test_apps/external-memory-fd-export/app.cpp (+245/-0)
test/test_apps/external-memory-fd-export/external_memory_fd_export_app.h (+67/-0)
test/test_apps/external-memory-fd-import/CMakeLists.txt (+42/-0)
test/test_apps/external-memory-fd-import/app.cpp (+280/-0)
test/test_apps/external-memory-fd-import/external_memory_fd_import_app.h (+67/-0)
test/test_apps/host-image-copy/CMakeLists.txt (+41/-0)
test/test_apps/host-image-copy/app.cpp (+431/-0)
test/test_apps/host-image-copy/host_image_copy_app.h (+76/-0)
test/test_apps/launcher/CMakeLists.txt (+68/-0)
test/test_apps/launcher/README.md (+0/-0)
test/test_apps/launcher/test_launcher.cpp (+292/-0)
test/test_apps/multisample-depth/CMakeLists.txt (+38/-0)
test/test_apps/multisample-depth/app.cpp (+625/-0)
test/test_apps/multisample-depth/multisample_depth_app.h (+82/-0)
test/test_apps/pipeline-binaries/CMakeLists.txt (+39/-0)
test/test_apps/pipeline-binaries/app.cpp (+284/-0)
test/test_apps/pipeline-binaries/pipeline_binaries_app.h (+61/-0)
test/test_apps/set-environment/CMakeLists.txt (+39/-0)
test/test_apps/set-environment/app.cpp (+57/-0)
test/test_apps/set-environment/set_environment_app.h (+43/-0)
test/test_apps/shader-objects/CMakeLists.txt (+38/-0)
test/test_apps/shader-objects/app.cpp (+443/-0)
test/test_apps/shader-objects/shader_objects_app.h (+72/-0)
test/test_apps/sparse-resources/CMakeLists.txt (+37/-0)
test/test_apps/sparse-resources/app.cpp (+1025/-0)
test/test_apps/sparse-resources/sparse_resources_app.h (+104/-0)
test/test_apps/triangle-extra-device/CMakeLists.txt (+39/-0)
test/test_apps/triangle-extra-device/README.md (+14/-0)
test/test_apps/triangle-extra-device/app.cpp (+504/-0)
test/test_apps/triangle-extra-device/triangle_extra_device_app.h (+73/-0)
test/test_apps/triangle/CMakeLists.txt (+39/-0)
test/test_apps/triangle/app.cpp (+466/-0)
test/test_apps/triangle/triangle_app.h (+68/-0)
test/test_apps/wait-for-present/CMakeLists.txt (+38/-0)
test/test_apps/wait-for-present/app.cpp (+495/-0)
test/test_apps/wait-for-present/wait_for_present_app.h (+74/-0)
test/test_cases/acquired-image.cpp (+30/-0)
test/test_cases/ahb.cpp (+30/-0)
test/test_cases/external-memory-fd.cpp (+12/-0)
test/test_cases/multisample-depth.cpp (+8/-0)
test/test_cases/pipeline-binaries.cpp (+8/-0)
test/test_cases/set-environment.cpp (+8/-0)
test/test_cases/shader-objects.cpp (+8/-0)
test/test_cases/triangle.cpp (+8/-0)
test/test_cases/wait-for-present.cpp (+10/-0)
test/verify-gfxr.cpp (+324/-0)
test/verify-gfxr.h (+23/-0)
test_suite.ref (+1/-0)
tools/CMakeLists.txt (+4/-0)
tools/capture-vulkan/CMakeLists.txt (+6/-0)
tools/capture-vulkan/gfxrecon-capture-vulkan.py (+19/-0)
tools/capture/CMakeLists.txt (+6/-0)
tools/compress/CMakeLists.txt (+8/-0)
tools/compress/compression_converter.cpp (+4/-0)
tools/compress/main.cpp (+4/-0)
tools/convert/CMakeLists.txt (+8/-0)
tools/convert/README.md (+3/-0)
tools/convert/main.cpp (+334/-0)
tools/extract/CMakeLists.txt (+8/-0)
tools/extract/main.cpp (+112/-0)
tools/file_version_patch/CMakeLists.txt (+62/-0)
tools/file_version_patch/main.cpp (+248/-0)
tools/gfxrecon/CMakeLists.txt (+6/-0)
tools/info/CMakeLists.txt (+12/-0)
tools/info/main.cpp (+323/-0)
tools/launcher/CMakeLists.txt (+7/-0)
tools/optimize/CMakeLists.txt (+17/-0)
tools/optimize/block_skipping_file_processor.cpp (+16/-0)
tools/optimize/block_skipping_file_processor.h (+4/-0)
tools/optimize/dx12_optimize_util.cpp (+24/-0)
tools/optimize/dx12_resource_value_tracking_consumer.cpp (+6/-0)
tools/optimize/dx12_resource_value_tracking_consumer.h (+6/-0)
tools/optimize/file_optimizer.cpp (+60/-0)
tools/optimize/main.cpp (+36/-0)
tools/replay/CMakeLists.txt (+29/-0)
tools/replay/android_main.cpp (+218/-0)
tools/replay/desktop_main.cpp (+209/-0)
tools/replay/parse_dump_resources_cli.cpp (+582/-0)
tools/replay/parse_dump_resources_cli.h (+37/-0)
tools/replay/recapture_vulkan_entry.cpp (+322/-0)
tools/replay/recapture_vulkan_entry.h (+110/-0)
tools/replay/replay_pre_processing.h (+138/-0)
tools/replay/replay_settings.h (+204/-0)
tools/tocpp/CMakeLists.txt (+4/-0)
tools/tocpp/README.md (+38/-0)
tools/tocpp/main.cpp (+12/-0)
tools/tool_settings.h (+441/-0)
version.rc (+8/-0)
vulkan_dump_resources.md (+610/-0)
Conflict in .github/workflows/ci_build.yml
Conflict in .github/workflows/release_build.yml
Conflict in .github/workflows/scripts/build-dependencies-macos.sh
Conflict in .github/workflows/sdk_android_build.yml
Conflict in .gitignore
Conflict in .gitmodules
Conflict in CMakeLists.txt
Conflict in LICENSE_ThirdParty.txt
Conflict in README.md
Conflict in android/build.gradle
Conflict in android/framework/application/CMakeLists.txt
Conflict in android/framework/cmake-config/PlatformConfig.cmake
Conflict in android/framework/decode/CMakeLists.txt
Conflict in android/framework/encode/CMakeLists.txt
Conflict in android/framework/format/CMakeLists.txt
Conflict in android/framework/graphics/CMakeLists.txt
Conflict in android/framework/util/CMakeLists.txt
Conflict in android/gradle.properties
Conflict in android/gradle/wrapper/gradle-wrapper.properties
Conflict in android/layer/CMakeLists.txt
Conflict in android/layer/build.gradle
Conflict in android/layer/src/main/AndroidManifest.xml
Conflict in android/scripts/gfxrecon.py
Conflict in android/settings.gradle
Conflict in android/tools/replay/CMakeLists.txt
Conflict in android/tools/replay/build.gradle
Conflict in android/tools/replay/src/main/AndroidManifest.xml
Conflict in cmake/AgilitySDK.cmake
Conflict in cmake/CodeStyle.cmake
Conflict in cmake/FindAGS.cmake
Conflict in cmake/FindVulkanVersion.cmake
Conflict in cmake/GenerateLayerJson.cmake
Conflict in cmake/Lint.cmake
Conflict in cmake/Test.cmake
Conflict in cmake/toolchain/linux_x86_32.cmake
Conflict in debian/changelog
Conflict in debian/control
Conflict in debian/patches/series
Conflict in debian/watch
Conflict in external/README.md
Conflict in external/Tocpp-Android-Template/build.gradle
Conflict in external/Tocpp-Android-Template/gradle/wrapper/gradle-wrapper.properties
Conflict in external/VulkanMemoryAllocator/LICENSE.txt
Conflict in external/VulkanMemoryAllocator/include/vk_mem_alloc.h
Conflict in framework/application/CMakeLists.txt
Conflict in framework/application/android_context.cpp
Conflict in framework/application/android_context.h
Conflict in framework/application/android_window.cpp
Conflict in framework/application/android_window.h
Conflict in framework/application/application.cpp
Conflict in framework/application/application.h
Conflict in framework/application/display_context.h
Conflict in framework/application/display_window.cpp
Conflict in framework/application/display_window.h
Conflict in framework/application/headless_context.cpp
Conflict in framework/application/headless_context.h
Conflict in framework/application/headless_window.cpp
Conflict in framework/application/headless_window.h
Conflict in framework/application/metal_context.h
Conflict in framework/application/metal_window.h
Conflict in framework/application/metal_window.mm
Conflict in framework/application/wayland_context.h
Conflict in framework/application/wayland_window.cpp
Conflict in framework/application/wayland_window.h
Conflict in framework/application/win32_context.h
Conflict in framework/application/win32_window.cpp
Conflict in framework/application/win32_window.h
Conflict in framework/application/wsi_context.h
Conflict in framework/application/xcb_context.h
Conflict in framework/application/xcb_window.cpp
Conflict in framework/application/xcb_window.h
Conflict in framework/application/xlib_context.h
Conflict in framework/application/xlib_window.cpp
Conflict in framework/application/xlib_window.h
Conflict in framework/decode/CMakeLists.txt
Conflict in framework/decode/api_decoder.h
Conflict in framework/decode/common_consumer_base.h
Conflict in framework/decode/custom_ags_decoder.cpp
Conflict in framework/decode/custom_ags_decoder.h
Conflict in framework/decode/custom_ags_replay_consumer.cpp
Conflict in framework/decode/custom_ags_replay_consumer.h
Conflict in framework/decode/custom_dx12_struct_decoders.cpp
Conflict in framework/decode/custom_dx12_struct_decoders.h
Conflict in framework/decode/custom_dx12_struct_decoders_forward.h
Conflict in framework/decode/custom_dx12_struct_object_mappers.cpp
Conflict in framework/decode/custom_dx12_struct_object_mappers.h
Conflict in framework/decode/custom_vulkan_struct_decoders.cpp
Conflict in framework/decode/custom_vulkan_struct_decoders.h
Conflict in framework/decode/custom_vulkan_struct_decoders_forward.h
Conflict in framework/decode/custom_vulkan_struct_handle_mappers.cpp
Conflict in framework/decode/custom_vulkan_struct_handle_mappers.h
Conflict in framework/decode/custom_vulkan_struct_to_json.cpp
Conflict in framework/decode/custom_vulkan_struct_to_json.h
Conflict in framework/decode/decode_api_detection.cpp
Conflict in framework/decode/decode_api_detection.h
Conflict in framework/decode/decode_json_util.cpp
Conflict in framework/decode/decode_json_util.h
Conflict in framework/decode/decoder_util.h
Conflict in framework/decode/descriptor_update_template_decoder.cpp
Conflict in framework/decode/dx12_consumer_base.h
Conflict in framework/decode/dx12_decoder_base.cpp
Conflict in framework/decode/dx12_decoder_base.h
Conflict in framework/decode/dx12_descriptor_map.cpp
Conflict in framework/decode/dx12_experimental_resource_value_tracker.cpp
Conflict in framework/decode/dx12_json_consumer_base.cpp
Conflict in framework/decode/dx12_json_consumer_base.h
Conflict in framework/decode/dx12_object_info.h
Conflict in framework/decode/dx12_object_mapping_util.cpp
Conflict in framework/decode/dx12_object_mapping_util.h
Conflict in framework/decode/dx12_object_scanning_consumer.cpp
Conflict in framework/decode/dx12_object_scanning_consumer.h
Conflict in framework/decode/dx12_replay_consumer_base.cpp
Conflict in framework/decode/dx12_replay_consumer_base.h
Conflict in framework/decode/dx12_resource_value_mapper.cpp
Conflict in framework/decode/dx12_resource_value_mapper.h
Conflict in framework/decode/dx12_stats_consumer.h
Conflict in framework/decode/dx_replay_options.h
Conflict in framework/decode/file_processor.cpp
Conflict in framework/decode/file_processor.h
Conflict in framework/decode/file_transformer.cpp
Conflict in framework/decode/file_transformer.h
Conflict in framework/decode/handle_pointer_decoder.h
Conflict in framework/decode/info_consumer.h
Conflict in framework/decode/info_decoder.cpp
Conflict in framework/decode/info_decoder.h
Conflict in framework/decode/json_writer.cpp
Conflict in framework/decode/metadata_consumer_base.h
Conflict in framework/decode/metadata_json_consumer.h
Conflict in framework/decode/pointer_decoder.h
Conflict in framework/decode/pointer_decoder_base.h
Conflict in framework/decode/referenced_resource_table.cpp
Conflict in framework/decode/referenced_resource_table.h
Conflict in framework/decode/replay_options.h
Conflict in framework/decode/screenshot_handler.cpp
Conflict in framework/decode/screenshot_handler.h
Conflict in framework/decode/screenshot_handler_base.cpp
Conflict in framework/decode/screenshot_handler_base.h
Conflict in framework/decode/stat_decoder_base.h
Conflict in framework/decode/struct_pointer_decoder.h
Conflict in framework/decode/test/main.cpp
Conflict in framework/decode/value_decoder.h
Conflict in framework/decode/vulkan_captured_swapchain.cpp
Conflict in framework/decode/vulkan_captured_swapchain.h
Conflict in framework/decode/vulkan_consumer_base.h
Conflict in framework/decode/vulkan_cpp_consumer_base.cpp
Conflict in framework/decode/vulkan_cpp_consumer_base.h
Conflict in framework/decode/vulkan_cpp_loader_generator.cpp
Conflict in framework/decode/vulkan_cpp_structs.cpp
Conflict in framework/decode/vulkan_cpp_structs.h
Conflict in framework/decode/vulkan_cpp_template_strings.h
Conflict in framework/decode/vulkan_cpp_util_datapack.cpp
Conflict in framework/decode/vulkan_cpp_utilities.h
Conflict in framework/decode/vulkan_decoder_base.cpp
Conflict in framework/decode/vulkan_decoder_base.h
Conflict in framework/decode/vulkan_default_allocator.cpp
Conflict in framework/decode/vulkan_default_allocator.h
Conflict in framework/decode/vulkan_handle_mapping_util.cpp
Conflict in framework/decode/vulkan_handle_mapping_util.h
Conflict in framework/decode/vulkan_json_consumer_base.cpp
Conflict in framework/decode/vulkan_json_consumer_base.h
Conflict in framework/decode/vulkan_object_cleanup_util.cpp
Conflict in framework/decode/vulkan_object_cleanup_util.h
Conflict in framework/decode/vulkan_object_info.h
Conflict in framework/decode/vulkan_object_info_table_base.h
Conflict in framework/decode/vulkan_offscreen_swapchain.cpp
Conflict in framework/decode/vulkan_offscreen_swapchain.h
Conflict in framework/decode/vulkan_pnext_node.h
Conflict in framework/decode/vulkan_realign_allocator.cpp
Conflict in framework/decode/vulkan_realign_allocator.h
Conflict in framework/decode/vulkan_rebind_allocator.cpp
Conflict in framework/decode/vulkan_rebind_allocator.h
Conflict in framework/decode/vulkan_referenced_resource_consumer_base.cpp
Conflict in framework/decode/vulkan_referenced_resource_consumer_base.h
Conflict in framework/decode/vulkan_replay_consumer_base.cpp
Conflict in framework/decode/vulkan_replay_consumer_base.h
Conflict in framework/decode/vulkan_replay_options.h
Conflict in framework/decode/vulkan_resource_allocator.h
Conflict in framework/decode/vulkan_resource_initializer.cpp
Conflict in framework/decode/vulkan_resource_initializer.h
Conflict in framework/decode/vulkan_resource_tracking_consumer.cpp
Conflict in framework/decode/vulkan_resource_tracking_consumer.h
Conflict in framework/decode/vulkan_stats_consumer.h
Conflict in framework/decode/vulkan_swapchain.cpp
Conflict in framework/decode/vulkan_swapchain.h
Conflict in framework/decode/vulkan_tracked_object_info.cpp
Conflict in framework/decode/vulkan_tracked_object_info.h
Conflict in framework/decode/vulkan_tracked_object_info_table.cpp
Conflict in framework/decode/vulkan_tracked_object_info_table.h
Conflict in framework/decode/vulkan_virtual_swapchain.cpp
Conflict in framework/decode/vulkan_virtual_swapchain.h
Conflict in framework/decode/window.h
Conflict in framework/encode/CMakeLists.txt
Conflict in framework/encode/ags_dispatch_table.h
Conflict in framework/encode/api_capture_manager.h
Conflict in framework/encode/capture_manager.cpp
Conflict in framework/encode/capture_manager.h
Conflict in framework/encode/capture_settings.cpp
Conflict in framework/encode/capture_settings.h
Conflict in framework/encode/custom_dx12_struct_encoders.cpp
Conflict in framework/encode/custom_dx12_struct_encoders.h
Conflict in framework/encode/custom_dx12_struct_unwrappers.cpp
Conflict in framework/encode/custom_dx12_struct_unwrappers.h
Conflict in framework/encode/custom_dx12_wrapper_commands.h
Conflict in framework/encode/custom_vulkan_api_call_encoders.cpp
Conflict in framework/encode/custom_vulkan_api_call_encoders.h
Conflict in framework/encode/custom_vulkan_encoder_commands.h
Conflict in framework/encode/custom_vulkan_struct_encoders.cpp
Conflict in framework/encode/custom_vulkan_struct_encoders.h
Conflict in framework/encode/custom_vulkan_struct_handle_wrappers.cpp
Conflict in framework/encode/custom_vulkan_struct_handle_wrappers.h
Conflict in framework/encode/d3d12_capture_manager.cpp
Conflict in framework/encode/d3d12_capture_manager.h
Conflict in framework/encode/d3d12_dispatch_table.h
Conflict in framework/encode/dx12_dll_initializer.h
Conflict in framework/encode/dx12_object_wrapper_info.h
Conflict in framework/encode/dx12_object_wrapper_util.h
Conflict in framework/encode/dx12_rv_annotation_util.cpp
Conflict in framework/encode/dx12_state_tracker.cpp
Conflict in framework/encode/dx12_state_tracker.h
Conflict in framework/encode/dx12_state_tracker_initializers.h
Conflict in framework/encode/dx12_state_writer.cpp
Conflict in framework/encode/dx12_state_writer.h
Conflict in framework/encode/parameter_encoder.h
Conflict in framework/encode/struct_pointer_encoder.h
Conflict in framework/encode/test/main.cpp
Conflict in framework/encode/vulkan_capture_manager.cpp
Conflict in framework/encode/vulkan_capture_manager.h
Conflict in framework/encode/vulkan_handle_wrapper_util.cpp
Conflict in framework/encode/vulkan_handle_wrapper_util.h
Conflict in framework/encode/vulkan_handle_wrappers.h
Conflict in framework/encode/vulkan_state_info.h
Conflict in framework/encode/vulkan_state_tracker.cpp
Conflict in framework/encode/vulkan_state_tracker.h
Conflict in framework/encode/vulkan_state_tracker_initializers.h
Conflict in framework/encode/vulkan_state_writer.cpp
Conflict in framework/encode/vulkan_state_writer.h
Conflict in framework/format/CMakeLists.txt
Conflict in framework/format/api_call_id.h
Conflict in framework/format/dx12_subobject_types.h
Conflict in framework/format/format.h
Conflict in framework/format/format_util.cpp
Conflict in framework/format/format_util.h
Conflict in framework/format/platform_types.h
Conflict in framework/generated/dx12_generators/blacklists.json
Conflict in framework/generated/dx12_generators/capture_overrides.json
Conflict in framework/generated/dx12_generators/dx12_add_entries_header_generator.py
Conflict in framework/generated/dx12_generators/dx12_api_call_encoders_body_generator.py
Conflict in framework/generated/dx12_generators/dx12_api_call_encoders_header_generator.py
Conflict in framework/generated/dx12_generators/dx12_base_generator.py
Conflict in framework/generated/dx12_generators/dx12_call_id_to_string_header_generator.py
Conflict in framework/generated/dx12_generators/dx12_command_list_util_body_generator.py
Conflict in framework/generated/dx12_generators/dx12_command_list_util_header_generator.py
Conflict in framework/generated/dx12_generators/dx12_consumer_header_generator.py
Conflict in framework/generated/dx12_generators/dx12_decoder_body_generator.py
Conflict in framework/generated/dx12_generators/dx12_decoder_header_generator.py
Conflict in framework/generated/dx12_generators/dx12_enum_to_json_header_generator.py
Conflict in framework/generated/dx12_generators/dx12_enum_to_string_body_generator.py
Conflict in framework/generated/dx12_generators/dx12_enum_to_string_header_generator.py
Conflict in framework/generated/dx12_generators/dx12_json_consumer_body_generator.py
Conflict in framework/generated/dx12_generators/dx12_json_consumer_header_generator.py
Conflict in framework/generated/dx12_generators/dx12_replay_consumer_body_generator.py
Conflict in framework/generated/dx12_generators/dx12_replay_consumer_header_generator.py
Conflict in framework/generated/dx12_generators/dx12_state_table_header_generator.py
Conflict in framework/generated/dx12_generators/dx12_struct_decoders_body_generator.py
Conflict in framework/generated/dx12_generators/dx12_struct_decoders_forward_generator.py
Conflict in framework/generated/dx12_generators/dx12_struct_decoders_header_generator.py
Conflict in framework/generated/dx12_generators/dx12_struct_decoders_to_json_body_generator.py
Conflict in framework/generated/dx12_generators/dx12_struct_decoders_to_json_header_generator.py
Conflict in framework/generated/dx12_generators/dx12_struct_object_mappers_body_generator.py
Conflict in framework/generated/dx12_generators/dx12_struct_object_mappers_header_generator.py
Conflict in framework/generated/dx12_generators/dx12_struct_unwrappers_body_generator.py
Conflict in framework/generated/dx12_generators/dx12_struct_unwrappers_header_generator.py
Conflict in framework/generated/dx12_generators/dx12_struct_wrapper_body_generator.py
Conflict in framework/generated/dx12_generators/dx12_struct_wrapper_header_generator.py
Conflict in framework/generated/dx12_generators/dx12_wrapper_body_generator.py
Conflict in framework/generated/dx12_generators/dx12_wrapper_creators_body_generator.py
Conflict in framework/generated/dx12_generators/dx12_wrapper_creators_header_generator.py
Conflict in framework/generated/dx12_generators/dx12_wrapper_header_generator.py
Conflict in framework/generated/dx12_generators/gencode.py
Conflict in framework/generated/dx12_generators/replay_overrides.json
Conflict in framework/generated/generate_dx12.py
Conflict in framework/generated/generate_vulkan.py
Conflict in framework/generated/generated_dx12_add_entries.h
Conflict in framework/generated/generated_dx12_api_call_encoders.cpp
Conflict in framework/generated/generated_dx12_api_call_encoders.h
Conflict in framework/generated/generated_dx12_call_id_to_string.h
Conflict in framework/generated/generated_dx12_command_list_util.cpp
Conflict in framework/generated/generated_dx12_command_list_util.h
Conflict in framework/generated/generated_dx12_consumer.h
Conflict in framework/generated/generated_dx12_decoder.cpp
Conflict in framework/generated/generated_dx12_decoder.h
Conflict in framework/generated/generated_dx12_enum_to_json.h
Conflict in framework/generated/generated_dx12_enum_to_string.cpp
Conflict in framework/generated/generated_dx12_enum_to_string.h
Conflict in framework/generated/generated_dx12_json_consumer.cpp
Conflict in framework/generated/generated_dx12_json_consumer.h
Conflict in framework/generated/generated_dx12_replay_consumer.cpp
Conflict in framework/generated/generated_dx12_replay_consumer.h
Conflict in framework/generated/generated_dx12_state_table.h
Conflict in framework/generated/generated_dx12_struct_decoders.cpp
Conflict in framework/generated/generated_dx12_struct_decoders.h
Conflict in framework/generated/generated_dx12_struct_decoders_forward.h
Conflict in framework/generated/generated_dx12_struct_decoders_to_json.cpp
Conflict in framework/generated/generated_dx12_struct_decoders_to_json.h
Conflict in framework/generated/generated_dx12_struct_object_mappers.cpp
Conflict in framework/generated/generated_dx12_struct_object_mappers.h
Conflict in framework/generated/generated_dx12_struct_unwrappers.cpp
Conflict in framework/generated/generated_dx12_struct_unwrappers.h
Conflict in framework/generated/generated_dx12_struct_wrappers.cpp
Conflict in framework/generated/generated_dx12_struct_wrappers.h
Conflict in framework/generated/generated_dx12_wrapper_creators.cpp
Conflict in framework/generated/generated_dx12_wrapper_creators.h
Conflict in framework/generated/generated_dx12_wrappers.cpp
Conflict in framework/generated/generated_dx12_wrappers.h
Conflict in framework/generated/generated_vulkan_api_call_encoders.cpp
Conflict in framework/generated/generated_vulkan_api_call_encoders.h
Conflict in framework/generated/generated_vulkan_command_buffer_util.cpp
Conflict in framework/generated/generated_vulkan_command_buffer_util.h
Conflict in framework/generated/generated_vulkan_constant_maps.h
Conflict in framework/generated/generated_vulkan_consumer.h
Conflict in framework/generated/generated_vulkan_cpp_consumer.cpp
Conflict in framework/generated/generated_vulkan_cpp_consumer.h
Conflict in framework/generated/generated_vulkan_cpp_consumer_extension.cpp
Conflict in framework/generated/generated_vulkan_cpp_consumer_extension.h
Conflict in framework/generated/generated_vulkan_cpp_structs.cpp
Conflict in framework/generated/generated_vulkan_cpp_structs.h
Conflict in framework/generated/generated_vulkan_decoder.cpp
Conflict in framework/generated/generated_vulkan_decoder.h
Conflict in framework/generated/generated_vulkan_dispatch_table.h
Conflict in framework/generated/generated_vulkan_enum_to_json.cpp
Conflict in framework/generated/generated_vulkan_enum_to_json.h
Conflict in framework/generated/generated_vulkan_enum_to_string.cpp
Conflict in framework/generated/generated_vulkan_enum_to_string.h
Conflict in framework/generated/generated_vulkan_feature_util.cpp
Conflict in framework/generated/generated_vulkan_json_consumer.cpp
Conflict in framework/generated/generated_vulkan_json_consumer.h
Conflict in framework/generated/generated_vulkan_object_info_table_base2.h
Conflict in framework/generated/generated_vulkan_referenced_resource_consumer.cpp
Conflict in framework/generated/generated_vulkan_referenced_resource_consumer.h
Conflict in framework/generated/generated_vulkan_replay_consumer.cpp
Conflict in framework/generated/generated_vulkan_replay_consumer.h
Conflict in framework/generated/generated_vulkan_state_table.h
Conflict in framework/generated/generated_vulkan_struct_decoders.cpp
Conflict in framework/generated/generated_vulkan_struct_decoders.h
Conflict in framework/generated/generated_vulkan_struct_decoders_forward.h
Conflict in framework/generated/generated_vulkan_struct_encoders.cpp
Conflict in framework/generated/generated_vulkan_struct_encoders.h
Conflict in framework/generated/generated_vulkan_struct_handle_mappers.cpp
Conflict in framework/generated/generated_vulkan_struct_handle_mappers.h
Conflict in framework/generated/generated_vulkan_struct_handle_wrappers.cpp
Conflict in framework/generated/generated_vulkan_struct_handle_wrappers.h
Conflict in framework/generated/generated_vulkan_struct_to_json.cpp
Conflict in framework/generated/generated_vulkan_struct_to_json.h
Conflict in framework/generated/generated_vulkan_stype_util.h
Conflict in framework/graphics/CMakeLists.txt
Conflict in framework/graphics/dx12_image_renderer.cpp
Conflict in framework/graphics/dx12_image_renderer.h
Conflict in framework/graphics/dx12_resource_data_util.cpp
Conflict in framework/graphics/dx12_resource_data_util.h
Conflict in framework/graphics/dx12_util.cpp
Conflict in framework/graphics/dx12_util.h
Conflict in framework/graphics/fps_info.cpp
Conflict in framework/graphics/fps_info.h
Conflict in framework/graphics/test/main.cpp
Conflict in framework/graphics/vulkan_device_util.cpp
Conflict in framework/graphics/vulkan_device_util.h
Conflict in framework/graphics/vulkan_resources_util.cpp
Conflict in framework/graphics/vulkan_resources_util.h
Conflict in framework/graphics/vulkan_util.cpp
Conflict in framework/graphics/vulkan_util.h
Conflict in framework/util/CMakeLists.txt
Conflict in framework/util/compressor.h
Conflict in framework/util/date_time.h
Conflict in framework/util/defines.h
Conflict in framework/util/driver_info.cpp
Conflict in framework/util/file_output_stream.cpp
Conflict in framework/util/file_output_stream.h
Conflict in framework/util/file_path.cpp
Conflict in framework/util/file_path.h
Conflict in framework/util/hash.h
Conflict in framework/util/image_writer.cpp
Conflict in framework/util/image_writer.h
Conflict in framework/util/interception/create_process.cpp
Conflict in framework/util/json_util.cpp
Conflict in framework/util/json_util.h
Conflict in framework/util/keyboard.cpp
Conflict in framework/util/logging.cpp
Conflict in framework/util/logging.h
Conflict in framework/util/lz4_compressor.cpp
Conflict in framework/util/lz4_compressor.h
Conflict in framework/util/memory_output_stream.cpp
Conflict in framework/util/memory_output_stream.h
Conflict in framework/util/options.cpp
Conflict in framework/util/options.h
Conflict in framework/util/output_stream.h
Conflict in framework/util/page_guard_manager.cpp
Conflict in framework/util/page_guard_manager.h
Conflict in framework/util/page_guard_manager_uffd.cpp
Conflict in framework/util/page_status_tracker.h
Conflict in framework/util/platform.h
Conflict in framework/util/strings.cpp
Conflict in framework/util/strings.h
Conflict in framework/util/test/main.cpp
Conflict in framework/util/to_string.h
Conflict in framework/util/zlib_compressor.cpp
Conflict in framework/util/zlib_compressor.h
Conflict in framework/util/zstd_compressor.cpp
Conflict in framework/util/zstd_compressor.h
Conflict in layer/CMakeLists.txt
Conflict in layer/ags_capture/CMakeLists.txt
Conflict in layer/d3d12/CMakeLists.txt
Conflict in layer/d3d12/d3d12.def
Conflict in layer/d3d12/d3d12_ms.def
Conflict in layer/d3d12/dll_main.cpp
Conflict in layer/d3d12/hook_d3d12.cpp
Conflict in layer/d3d12/hook_d3d12.h
Conflict in layer/d3d12_capture/CMakeLists.txt
Conflict in layer/d3d12_capture/dll_main.cpp
Conflict in layer/dll_main.cpp
Conflict in layer/dxgi/CMakeLists.txt
Conflict in layer/gfxrecon_interceptor/CMakeLists.txt
Conflict in layer/json/VkLayer_gfxreconstruct.json.in
Conflict in layer/test/main.cpp
Conflict in project_version.h.in
Conflict in scripts/build.py
Conflict in scripts/clang-format-diff.py
Conflict in scripts/gfxrecon-replay-renamed.py
Conflict in tools/CMakeLists.txt
Conflict in tools/capture-vulkan/CMakeLists.txt
Conflict in tools/capture-vulkan/gfxrecon-capture-vulkan.py
Conflict in tools/capture/CMakeLists.txt
Conflict in tools/compress/CMakeLists.txt
Conflict in tools/compress/compression_converter.cpp
Conflict in tools/compress/main.cpp
Conflict in tools/convert/CMakeLists.txt
Conflict in tools/convert/README.md
Conflict in tools/convert/main.cpp
Conflict in tools/extract/CMakeLists.txt
Conflict in tools/extract/main.cpp
Conflict in tools/gfxrecon/CMakeLists.txt
Conflict in tools/info/CMakeLists.txt
Conflict in tools/info/main.cpp
Conflict in tools/launcher/CMakeLists.txt
Conflict in tools/optimize/CMakeLists.txt
Conflict in tools/optimize/block_skipping_file_processor.cpp
Conflict in tools/optimize/block_skipping_file_processor.h
Conflict in tools/optimize/dx12_optimize_util.cpp
Conflict in tools/optimize/dx12_resource_value_tracking_consumer.cpp
Conflict in tools/optimize/dx12_resource_value_tracking_consumer.h
Conflict in tools/optimize/file_optimizer.cpp
Conflict in tools/optimize/main.cpp
Conflict in tools/replay/CMakeLists.txt
Conflict in tools/replay/android_main.cpp
Conflict in tools/replay/desktop_main.cpp
Conflict in tools/replay/replay_settings.h
Conflict in tools/tocpp/CMakeLists.txt
Conflict in tools/tocpp/README.md
Conflict in tools/tocpp/main.cpp
Conflict in tools/tool_settings.h
Conflict in version.rc
Reviewer Review Type Date Requested Status
Ubuntu Sponsors Pending
git-ubuntu import Pending
Review via email: mp+499478@code.launchpad.net

Commit message

New upstream release

To post a comment you must log in.
Revision history for this message
Mitchell Augustin (mitchellaugustin) wrote :

I've tagged ubuntu-sponsors here, but I'm not entirely sure how to proceed here since this git history is in a bit of a weird state. Basically, this package was removed from Debian, and is now in the process of being re-introduced.

The branch that I have linked in my linked bug report description contains some Ubuntu-specific modifications (to accommodate our separate spirv-reflect, which is still in the debian NEW queue). Additionally, development in Debian is now happening via this branch: https://salsa.debian.org/xorg-team/vulkan/gfxreconstruct, whose history is not the same as ours in Ubuntu.

This MP is based on that Debian branch since it is the most up-to-date. If it is permissible to just reset our ubuntu/resolute branch to the one I'm proposing, that may be most appropriate here (since we don't currently have any gfxreconstruct in resolute due to its debian removal: https://launchpad.net/ubuntu/+source/gfxreconstruct), but let me know what you think.

Unmerged commits

d743295... by Mitchell Augustin

Bump dependency version to 335

611ca62... by Mitchell Augustin

Update changelog

5fdaea1... by Mitchell Augustin

Merge branch 'upstream' into ubuntu/resolute

a7167a5... by Mitchell Augustin

New upstream version 1.4.335.0+dfsg

bfc4e01... by Mitchell Augustin

Fix debian/watch

4bdc42a... by Mitchell Augustin

s/spirv-reflect-dev/libspirv-reflect-dev

10b5e64... by Mitchell Augustin

Target resolute

4912c0e... by Mitchell Augustin

Update d/changelog and d/control

e163e07... by Mitchell Augustin

Remove spirv-reflect-shared

8b533fb... by Mitchell Augustin

Fix spirv-reflect dependency build/link issues and openxr dependency versioning

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
2new file mode 100644
3index 0000000..1251040
4--- /dev/null
5+++ b/.github/CODEOWNERS
6@@ -0,0 +1 @@
7+* @LunarG/gfxreconstruct-architecture-reviewers
8diff --git a/.github/workflows/ci_build.yml b/.github/workflows/ci_build.yml
9index 31a3e32..bdd6cd8 100644
10--- a/.github/workflows/ci_build.yml
11+++ b/.github/workflows/ci_build.yml
12@@ -15,24 +15,41 @@ jobs:
13 fail-fast: false
14 matrix:
15 config:
16+<<<<<<< .github/workflows/ci_build.yml
17 - {
18 name: "Ubuntu GCC Release",
19 os: ubuntu-latest,
20 artifact: "gfxreconstruct-dev-ubuntu-gcc-release",
21+=======
22+ - {
23+ name: "Ubuntu GCC Release",
24+ os: ubuntu-latest,
25+ artifact: "gfxreconstruct-dev-ubuntu-gcc-release",
26+ test_failure_artifact: "gfxreconstruct-dev-test-failure-ubuntu-gcc-release",
27+>>>>>>> .github/workflows/ci_build.yml
28 type: "release",
29 build_dir: "build",
30 cc: "gcc", cxx: "g++"
31 }
32+<<<<<<< .github/workflows/ci_build.yml
33 - {
34 name: "Ubuntu GCC Debug",
35 os: ubuntu-latest,
36 artifact: "gfxreconstruct-dev-ubuntu-gcc-debug",
37+=======
38+ - {
39+ name: "Ubuntu GCC Debug",
40+ os: ubuntu-latest,
41+ artifact: "gfxreconstruct-dev-ubuntu-gcc-debug",
42+ test_failure_artifact: "gfxreconstruct-dev-test-failure-ubuntu-gcc-debug",
43+>>>>>>> .github/workflows/ci_build.yml
44 type: "debug",
45 build_dir: "dbuild",
46 cc: "gcc", cxx: "g++"
47 }
48 steps:
49 - name: Clone repository
50+<<<<<<< .github/workflows/ci_build.yml
51 uses: actions/checkout@v1
52 - name: Install build dependencies
53 run: |
54@@ -41,10 +58,25 @@ jobs:
55 - uses: lukka/get-cmake@latest
56 with:
57 cmakeVersion: 3.16.3
58+=======
59+ uses: actions/checkout@v4
60+ with:
61+ submodules: 'recursive'
62+ - name: Setup sccache
63+ uses: mozilla-actions/sccache-action@v0.0.9
64+ - name: Install build dependencies
65+ run: |
66+ sudo apt-get update
67+ sudo apt-get install -y libx11-xcb-dev libxcb-keysyms1-dev libwayland-dev libxrandr-dev liblz4-dev libzstd-dev clang-format-14
68+ - uses: lukka/get-cmake@latest
69+ with:
70+ cmakeVersion: 3.24
71+>>>>>>> .github/workflows/ci_build.yml
72 - name: Run build script
73 run: |
74 if [ "${{ matrix.config.type }}" == "release" ]
75 then
76+<<<<<<< .github/workflows/ci_build.yml
77 clang-format --version # A check for version 9 should be added.
78 git fetch origin ${{ github.base_ref }} # Fetch target branch to FETCH_HEAD for code style check.
79 python3 scripts/build.py --skip-tests --config ${{ matrix.config.type }} --check-code-style-base FETCH_HEAD --parallel 0
80@@ -53,6 +85,32 @@ jobs:
81 else
82 python3 scripts/build.py --skip-tests --config ${{ matrix.config.type }} --skip-check-code-style --parallel 0
83 fi
84+=======
85+ clang-format-14 --version
86+ git fetch origin ${{ github.base_ref }} # Fetch target branch to FETCH_HEAD for code style check.
87+ python3 scripts/build.py --config ${{ matrix.config.type }} --check-code-style-base FETCH_HEAD --parallel 0 --test-apps
88+ python3 framework/generated/generate_vulkan.py # check generated code isn't out of date
89+ python3 framework/generated/generate_openxr.py # check generated code isn't out of date
90+ git diff --exit-code
91+ else
92+ python3 scripts/build.py --config ${{ matrix.config.type }} --skip-check-code-style --parallel 0 --test-apps
93+ fi
94+ env:
95+ SCCACHE_GHA_ENABLED: on
96+ CMAKE_C_COMPILER_LAUNCHER: sccache
97+ CMAKE_CXX_COMPILER_LAUNCHER: sccache
98+ - name: Run test app test cases
99+ id: test_apps
100+ run: |
101+ cd ${{matrix.config.build_dir}}/linux/x64/output/test
102+ sudo -n ./run-tests.sh
103+ - name: Upload test failure artifacts
104+ uses: actions/upload-artifact@v4
105+ if: ${{ failure() && steps.test_apps.conclusion == 'failure' }}
106+ with:
107+ name: ${{ matrix.config.test_failure_artifact }}
108+ path: ${{matrix.config.build_dir}}/linux/x64/output/test
109+>>>>>>> .github/workflows/ci_build.yml
110 - name: Prepare artifacts
111 run: |
112 cp LICENSE.txt ${{ matrix.config.build_dir }}/linux/x64/output/bin/
113@@ -63,7 +121,11 @@ jobs:
114 mv ${{ matrix.config.build_dir }}/linux/x64/output/lib*/*.so gfxreconstruct-dev/
115 mv ${{ matrix.config.build_dir }}/linux/x64/output/share/vulkan/explicit_layer.d/*.json gfxreconstruct-dev/
116 - name: Upload artifacts
117+<<<<<<< .github/workflows/ci_build.yml
118 uses: actions/upload-artifact@v1
119+=======
120+ uses: actions/upload-artifact@v4
121+>>>>>>> .github/workflows/ci_build.yml
122 with:
123 name: ${{ matrix.config.artifact }}
124 path: ./gfxreconstruct-dev
125@@ -75,28 +137,87 @@ jobs:
126 fail-fast: false
127 matrix:
128 config:
129+<<<<<<< .github/workflows/ci_build.yml
130 - {
131 name: "Windows MSVC Release",
132 os: windows-latest,
133 artifact: "gfxreconstruct-dev-windows-msvc-release",
134+=======
135+ - {
136+ name: "Windows MSVC Release",
137+ os: windows-latest,
138+ artifact: "gfxreconstruct-dev-windows-msvc-release",
139+ test_failure_artifact: "gfxreconstruct-dev-test-failure-windows-msvc-release",
140+>>>>>>> .github/workflows/ci_build.yml
141 type: "release",
142 build_dir: "build",
143 cc: "cl", cxx: "cl"
144 }
145+<<<<<<< .github/workflows/ci_build.yml
146 - {
147 name: "Windows MSVC Debug",
148 os: windows-latest,
149 artifact: "gfxreconstruct-dev-windows-msvc-debug",
150+=======
151+ - {
152+ name: "Windows MSVC Debug",
153+ os: windows-latest,
154+ artifact: "gfxreconstruct-dev-windows-msvc-debug",
155+ test_failure_artifact: "gfxreconstruct-dev-test-failure-windows-msvc-debug",
156+>>>>>>> .github/workflows/ci_build.yml
157 type: "debug",
158 build_dir: "dbuild",
159 cc: "cl", cxx: "cl"
160 }
161 steps:
162+<<<<<<< .github/workflows/ci_build.yml
163 - name: Clone repository
164 uses: actions/checkout@v1
165 - name: Run build script
166 run: |
167 python scripts\build.py --skip-check-code-style --skip-tests --config ${{ matrix.config.type }} --parallel 0
168+=======
169+ - name: Require Python 3.10
170+ uses: actions/setup-python@v5
171+ with:
172+ python-version: '3.10'
173+ - name: Install Ply Python Module
174+ run: pip install ply
175+ - name: Run with VsDevCmd
176+ uses: ilammy/msvc-dev-cmd@v1
177+ - name: Install SDK 26100
178+ uses: GuillaumeFalourd/setup-windows10-sdk-action@v2
179+ with:
180+ sdk-version: 26100
181+ - name: Set WindowsSDKVersion
182+ run:
183+ echo ("WindowsSDKVersion=10.0.26100.0\") >> $env:GITHUB_ENV
184+ - name: Clone repository from merge of PR branch and dev branch
185+ uses: actions/checkout@v4
186+ with:
187+ submodules: 'recursive'
188+ - name: Check generated code
189+ run: |
190+ python3 framework/generated/generate_dx12.py # check generated code isn't out of date
191+ git diff --exit-code
192+ - name: Run build script
193+ run: |
194+ python scripts\build.py --skip-check-code-style --config ${{ matrix.config.type }} --parallel 0 --test-apps
195+ - name: Run test app test cases
196+ id: test_apps
197+ run: |
198+ curl.exe -o vulkan-sdk.zip https://sdk.lunarg.com/sdk/download/1.3.296.0/windows/VulkanRT-1.3.296.0-Components.zip
199+ Expand-Archive vulkan-sdk.zip -DestinationPath $pwd\vulkan-sdk
200+ $env:Path += ";$pwd\vulkan-sdk\VulkanRT-1.3.296.0-Components\x64"
201+ cd ${{matrix.config.build_dir}}\windows\x64\output\test
202+ ./run-tests.ps1
203+ - name: Upload test failure artifacts
204+ uses: actions/upload-artifact@v4
205+ if: ${{ failure() && steps.test_apps.conclusion == 'failure' }}
206+ with:
207+ name: ${{ matrix.config.test_failure_artifact }}
208+ path: ${{matrix.config.build_dir}}\windows\x64\output\test
209+>>>>>>> .github/workflows/ci_build.yml
210 - name: Prepare artifacts
211 run: |
212 copy LICENSE.txt ${{ matrix.config.build_dir }}\windows\x64\output\bin\
213@@ -106,7 +227,11 @@ jobs:
214 copy layer\vk_layer_settings.txt ${{ matrix.config.build_dir }}\windows\x64\output\bin\
215 move ${{ matrix.config.build_dir }}\windows\x64\output\bin gfxreconstruct-dev
216 - name: Upload artifacts
217+<<<<<<< .github/workflows/ci_build.yml
218 uses: actions/upload-artifact@v1
219+=======
220+ uses: actions/upload-artifact@v4
221+>>>>>>> .github/workflows/ci_build.yml
222 with:
223 name: ${{ matrix.config.artifact }}
224 path: .\gfxreconstruct-dev
225@@ -118,6 +243,7 @@ jobs:
226 fail-fast: false
227 matrix:
228 config:
229+<<<<<<< .github/workflows/ci_build.yml
230 - {
231 name: "macOS Release",
232 os: macos-latest,
233@@ -129,12 +255,35 @@ jobs:
234 name: "macOS Debug",
235 os: macos-latest,
236 artifact: "gfxreconstruct-dev-macOS-debug",
237+=======
238+ - {
239+ name: "macOS Release",
240+ os: macos-latest,
241+ artifact: "gfxreconstruct-dev-macOS-release",
242+ test_failure_artifact: "gfxreconstruct-dev-test-failure-macOS-release",
243+ type: "release",
244+ build_dir: "build"
245+ }
246+ - {
247+ name: "macOS Debug",
248+ os: macos-latest,
249+ artifact: "gfxreconstruct-dev-macOS-debug",
250+ test_failure_artifact: "gfxreconstruct-dev-test-failure-macOS-debug",
251+>>>>>>> .github/workflows/ci_build.yml
252 type: "debug",
253 build_dir: "dbuild"
254 }
255 steps:
256 - name: Clone repository
257+<<<<<<< .github/workflows/ci_build.yml
258 uses: actions/checkout@v1
259+=======
260+ uses: actions/checkout@v4
261+ with:
262+ submodules: 'recursive'
263+ - name: Setup sccache
264+ uses: mozilla-actions/sccache-action@v0.0.9
265+>>>>>>> .github/workflows/ci_build.yml
266 - name: Cache dependencies
267 id: cache-deps
268 uses: actions/cache@v3
269@@ -146,7 +295,46 @@ jobs:
270 run: .github/workflows/scripts/build-dependencies-macos.sh
271 - name: Run build script
272 run: |
273+<<<<<<< .github/workflows/ci_build.yml
274 python3 scripts/build.py --skip-check-code-style --skip-tests --config ${{ matrix.config.type }} --cmake-extra "CMAKE_PREFIX_PATH=$HOME/deps" --cmake-extra CMAKE_OSX_DEPLOYMENT_TARGET=11.0 --parallel 0
275+=======
276+ python3 scripts/build.py --skip-check-code-style --config ${{ matrix.config.type }} --cmake-extra "CMAKE_PREFIX_PATH=$HOME/deps" --cmake-extra CMAKE_OSX_DEPLOYMENT_TARGET=13.3 --parallel 0 --test-apps
277+ env:
278+ SCCACHE_GHA_ENABLED: on
279+ SCCACHE_CACHE_MULTIARCH: on
280+ SCCACHE_IDLE_TIMEOUT: 0
281+ CMAKE_C_COMPILER_LAUNCHER: sccache
282+ CMAKE_CXX_COMPILER_LAUNCHER: sccache
283+ - name: Run test app test cases
284+ id: test_apps
285+ run: |
286+ WORKING_PATH="$(pwd)/${{matrix.config.build_dir}}/darwin/universal/output/test"
287+ cd $WORKING_PATH
288+ curl https://sdk.lunarg.com/sdk/download/1.4.304.0/mac/vulkansdk-macos-1.4.304.0.zip -o ./vulkan-sdk.zip
289+ unzip ./vulkan-sdk.zip -d ./vulkan-sdk
290+ sudo ./vulkan-sdk/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $(pwd)/VulkanSDK/1.3.304.0 --accept-licenses --default-answer --confirm-command install
291+ sudo dscl . -create /Users/test
292+ sudo dscl . append /Groups/staff GroupMembership test
293+ sudo dscl . -create /Users/test UserShell /bin/bash
294+ sudo dscl . -create /Users/test RealName "Test"
295+ sudo dscl . -create /Users/test UniqueID "1001"
296+ sudo dscl . -create /Users/test PrimaryGroupID 80
297+ sudo dscl . -create /Users/test NFSHomeDirectory /Users/test
298+ sudo mkdir -p /Users/test
299+ sudo chown -R test:staff /Users/test
300+ sudo chmod -R g+w .
301+ sudo su - test -c "cd $WORKING_PATH && VULKAN_LIBRARY_PATH=$(pwd)/VulkanSDK/1.3.304.0/macOS/lib/libvulkan.dylib ./run-tests_macos.sh"
302+ - name: Upload test failure artifacts
303+ uses: actions/upload-artifact@v4
304+ if: ${{ failure() && steps.test_apps.conclusion == 'failure' }}
305+ with:
306+ name: ${{ matrix.config.test_failure_artifact }}
307+ path: |
308+ ${{matrix.config.build_dir}}/darwin/universal/output/test
309+ !${{matrix.config.build_dir}}/darwin/universal/output/test/vulkan-sdk
310+ !${{matrix.config.build_dir}}/darwin/universal/output/test/vulkan-sdk.zip
311+ !${{matrix.config.build_dir}}/darwin/universal/output/test/VulkanSDK
312+>>>>>>> .github/workflows/ci_build.yml
313 - name: Prepare artifacts
314 run: |
315 cp LICENSE.txt ${{ matrix.config.build_dir }}/darwin/universal/output/bin/
316@@ -161,7 +349,11 @@ jobs:
317 cd gfxreconstruct-dev
318 zip -r9 "../${{ matrix.config.artifact }}.zip" *
319 - name: Upload artifacts
320+<<<<<<< .github/workflows/ci_build.yml
321 uses: actions/upload-artifact@v1
322+=======
323+ uses: actions/upload-artifact@v4
324+>>>>>>> .github/workflows/ci_build.yml
325 with:
326 name: ${{ matrix.config.artifact }}
327 path: ${{ matrix.config.artifact }}.zip
328@@ -173,6 +365,7 @@ jobs:
329 fail-fast: false
330 matrix:
331 config:
332+<<<<<<< .github/workflows/ci_build.yml
333 - {
334 name: "Android Release/Debug",
335 os: ubuntu-latest,
336@@ -206,3 +399,65 @@ jobs:
337 with:
338 name: ${{ matrix.config.artifact }}
339 path: ./gfxreconstruct-dev
340+=======
341+ - {
342+ name: "Android Debug",
343+ os: ubuntu-latest,
344+ type: "debug",
345+ artifact: "gfxreconstruct-dev-android-debug",
346+ test_failure_artifact: "gfxreconstruct-dev-test-failure-android-debug"
347+ }
348+ - {
349+ name: "Android Release",
350+ os: ubuntu-latest,
351+ type: "release",
352+ artifact: "gfxreconstruct-dev-android-release",
353+ test_failure_artifact: "gfxreconstruct-dev-test-failure-android-release"
354+ }
355+ steps:
356+ - name: Clone repository
357+ uses: actions/checkout@v4
358+ with:
359+ submodules: 'recursive'
360+ - name: Setup sccache
361+ uses: mozilla-actions/sccache-action@v0.0.9
362+ - name: Set up Java
363+ uses: "actions/setup-java@v4"
364+ with:
365+ java-version: 17
366+ distribution: "temurin"
367+ - name: Gradle build
368+ run: |
369+ cd android
370+ if [ "${{ matrix.config.type }}" == "release" ]
371+ then
372+ sh gradlew assembleRelease -Parm64-v8a
373+ else
374+ sh gradlew assembleDebug -Parm64-v8a
375+ fi
376+ env:
377+ SCCACHE_GHA_ENABLED: on
378+ CMAKE_C_COMPILER_LAUNCHER: sccache
379+ CMAKE_CXX_COMPILER_LAUNCHER: sccache
380+ - name: Prepare artifacts
381+ run: |
382+ mkdir gfxreconstruct-dev
383+ mkdir gfxreconstruct-dev/layer
384+ mkdir gfxreconstruct-dev/tools
385+ cp LICENSE.txt gfxreconstruct-dev/
386+ cp LICENSE_ThirdParty.txt gfxreconstruct-dev/
387+ cp USAGE_android.md gfxreconstruct-dev/
388+ cp layer/vk_layer_settings.txt gfxreconstruct-dev/
389+ if [ "${{ matrix.config.type }}" == "release" ]
390+ then
391+ cp -r android/layer/build/intermediates/cxx/RelWithDebInfo/*/obj/arm64-v8a gfxreconstruct-dev/layer/
392+ else
393+ cp android/tools/replay/build/outputs/apk/debug/replay-debug.apk gfxreconstruct-dev/tools/
394+ fi
395+ cp android/scripts/gfxrecon.py gfxreconstruct-dev/tools/
396+ - name: Upload artifacts
397+ uses: actions/upload-artifact@v4
398+ with:
399+ name: ${{ matrix.config.artifact }}
400+ path: ./gfxreconstruct-dev
401+>>>>>>> .github/workflows/ci_build.yml
402diff --git a/.github/workflows/release_build.yml b/.github/workflows/release_build.yml
403index 41348d4..65cba94 100644
404--- a/.github/workflows/release_build.yml
405+++ b/.github/workflows/release_build.yml
406@@ -23,7 +23,18 @@ name: Release Build
407 on:
408 push:
409 tags:
410+<<<<<<< .github/workflows/release_build.yml
411 - v*
412+=======
413+ - v[0-9]*
414+ workflow_dispatch:
415+ inputs:
416+ branch_name:
417+ description: 'Branch to run workflow on'
418+ required: true
419+ default: 'dev'
420+ type: string
421+>>>>>>> .github/workflows/release_build.yml
422
423 jobs:
424 linux:
425@@ -35,13 +46,23 @@ jobs:
426 config:
427 - {
428 name: "Ubuntu GCC Release",
429+<<<<<<< .github/workflows/release_build.yml
430 os: ubuntu-20.04,
431+=======
432+ os: ubuntu-latest,
433+>>>>>>> .github/workflows/release_build.yml
434 artifact: "gfxreconstruct-ubuntu-gcc-release",
435 cc: "gcc", cxx: "g++"
436 }
437 steps:
438 - name: Clone repository
439+<<<<<<< .github/workflows/release_build.yml
440 uses: actions/checkout@v1
441+=======
442+ uses: actions/checkout@v4
443+ with:
444+ submodules: 'recursive'
445+>>>>>>> .github/workflows/release_build.yml
446 - name: Install dependencies
447 run: |
448 sudo apt-get update
449@@ -59,7 +80,11 @@ jobs:
450 mv build/linux/x64/output/lib*/*.so gfxreconstruct-dev/
451 mv build/linux/x64/output/share/vulkan/explicit_layer.d/*.json gfxreconstruct-dev/
452 - name: Upload artifacts
453+<<<<<<< .github/workflows/release_build.yml
454 uses: actions/upload-artifact@v1
455+=======
456+ uses: actions/upload-artifact@v4
457+>>>>>>> .github/workflows/release_build.yml
458 with:
459 name: ${{ matrix.config.artifact }}
460 path: ./gfxreconstruct-dev
461@@ -79,7 +104,13 @@ jobs:
462 }
463 steps:
464 - name: Clone repository
465+<<<<<<< .github/workflows/release_build.yml
466 uses: actions/checkout@v1
467+=======
468+ uses: actions/checkout@v4
469+ with:
470+ submodules: 'recursive'
471+>>>>>>> .github/workflows/release_build.yml
472 - name: Run build script
473 run: |
474 python scripts\build.py --skip-check-code-style --skip-tests --parallel 0
475@@ -92,11 +123,65 @@ jobs:
476 copy layer\vk_layer_settings.txt build\windows\x64\output\bin\
477 move build\windows\x64\output\bin gfxreconstruct-dev
478 - name: Upload artifacts
479+<<<<<<< .github/workflows/release_build.yml
480 uses: actions/upload-artifact@v1
481+=======
482+ uses: actions/upload-artifact@v4
483+>>>>>>> .github/workflows/release_build.yml
484 with:
485 name: ${{ matrix.config.artifact }}
486 path: .\gfxreconstruct-dev
487
488+<<<<<<< .github/workflows/release_build.yml
489+=======
490+ macOS:
491+ name: ${{ matrix.config.name }}
492+ runs-on: ${{ matrix.config.os }}
493+ strategy:
494+ fail-fast: false
495+ matrix:
496+ config:
497+ - {
498+ name: "macOS Release",
499+ os: macos-latest,
500+ artifact: "gfxreconstruct-macos-release",
501+ type: "release",
502+ build_dir: "build"
503+ }
504+ steps:
505+ - name: Clone repository
506+ uses: actions/checkout@v4
507+ with:
508+ submodules: 'recursive'
509+ - name: Cache dependencies
510+ id: cache-deps
511+ uses: actions/cache@v3
512+ with:
513+ path: ~/deps
514+ key: ${{ matrix.config.os }} deps ${{ hashFiles('.github/workflows/scripts/build-dependencies-macos.sh') }}
515+ - name: Build dependencies
516+ if: steps.cache-deps.outputs.cache-hit != 'true'
517+ run: .github/workflows/scripts/build-dependencies-macos.sh
518+ - name: Run build script
519+ run: |
520+ python3 scripts/build.py --skip-check-code-style --skip-tests --config ${{ matrix.config.type }} --cmake-extra "CMAKE_PREFIX_PATH=$HOME/deps" --cmake-extra CMAKE_OSX_DEPLOYMENT_TARGET=13.3 --parallel 0
521+ - name: Prepare artifacts
522+ run: |
523+ cp LICENSE.txt ${{ matrix.config.build_dir }}/darwin/universal/output/bin/
524+ cp LICENSE_ThirdParty.txt ${{ matrix.config.build_dir }}/darwin/universal/output/bin/
525+ cp USAGE_desktop_Vulkan.md ${{ matrix.config.build_dir }}/darwin/universal/output/bin/
526+ cp layer/vk_layer_settings.txt ${{ matrix.config.build_dir }}/darwin/universal/output/bin/
527+ mv ${{ matrix.config.build_dir }}/darwin/universal/output/bin gfxreconstruct-dev
528+ mv ${{ matrix.config.build_dir }}/darwin/universal/output/lib*/*.dylib gfxreconstruct-dev/
529+ mv ${{ matrix.config.build_dir }}/darwin/universal/output/share/vulkan/explicit_layer.d/*.json gfxreconstruct-dev/
530+
531+ - name: Upload artifacts
532+ uses: actions/upload-artifact@v4
533+ with:
534+ name: ${{ matrix.config.artifact }}
535+ path: ./gfxreconstruct-dev
536+
537+>>>>>>> .github/workflows/release_build.yml
538 android:
539 name: ${{ matrix.config.name }}
540 runs-on: ${{ matrix.config.os }}
541@@ -104,6 +189,7 @@ jobs:
542 fail-fast: false
543 matrix:
544 config:
545+<<<<<<< .github/workflows/release_build.yml
546 - {
547 name: "Android Release/Debug",
548 os: ubuntu-latest,
549@@ -119,6 +205,40 @@ jobs:
550 run: |
551 cd android
552 sh gradlew assembleRelease assembleDebug
553+=======
554+ - {
555+ name: "Android Debug",
556+ os: ubuntu-latest,
557+ type: "debug",
558+ artifact: "gfxreconstruct-android-debug",
559+ }
560+ - {
561+ name: "Android Release",
562+ os: ubuntu-latest,
563+ type: "release",
564+ artifact: "gfxreconstruct-android-release",
565+ }
566+ steps:
567+ - name: Clone repository
568+ uses: actions/checkout@v4
569+ with:
570+ submodules: 'recursive'
571+ - name: Set up Java
572+ uses: "actions/setup-java@v4"
573+ with:
574+ java-version: 17
575+ distribution: "temurin"
576+ - name: Gradle build
577+ run: |
578+ cd android
579+ if [ "${{ matrix.config.type }}" == "release" ]
580+ then
581+ sh gradlew assembleRelease -Parm64-v8a
582+ sh gradlew assembleRelease -Parmeabi-v7a
583+ else
584+ sh gradlew assembleDebug -Parm64-v8a
585+ fi
586+>>>>>>> .github/workflows/release_build.yml
587 - name: Prepare artifacts
588 run: |
589 mkdir gfxreconstruct-dev
590@@ -128,12 +248,25 @@ jobs:
591 cp LICENSE_ThirdParty.txt gfxreconstruct-dev/
592 cp USAGE_android.md gfxreconstruct-dev/
593 cp layer/vk_layer_settings.txt gfxreconstruct-dev/
594+<<<<<<< .github/workflows/release_build.yml
595 cp -r android/layer/build/intermediates/cmake/release/obj/arm64-v8a gfxreconstruct-dev/layer/
596 cp -r android/layer/build/intermediates/cmake/release/obj/armeabi-v7a gfxreconstruct-dev/layer/
597 cp android/tools/replay/build/outputs/apk/debug/replay-debug.apk gfxreconstruct-dev/tools/
598 cp android/scripts/gfxrecon.py gfxreconstruct-dev/tools/
599 - name: Upload artifacts
600 uses: actions/upload-artifact@v1
601+=======
602+ if [ "${{ matrix.config.type }}" == "release" ]
603+ then
604+ cp -r android/layer/build/intermediates/cxx/RelWithDebInfo/*/obj/arm64-v8a gfxreconstruct-dev/layer/
605+ cp -r android/layer/build/intermediates/cxx/RelWithDebInfo/*/obj/armeabi-v7a gfxreconstruct-dev/layer/
606+ else
607+ cp android/tools/replay/build/outputs/apk/debug/replay-debug.apk gfxreconstruct-dev/tools/
608+ fi
609+ cp android/scripts/gfxrecon.py gfxreconstruct-dev/tools/
610+ - name: Upload artifacts
611+ uses: actions/upload-artifact@v4
612+>>>>>>> .github/workflows/release_build.yml
613 with:
614 name: ${{ matrix.config.artifact }}
615 path: ./gfxreconstruct-dev
616@@ -141,10 +274,20 @@ jobs:
617 release:
618 name: Create Release for Tag
619 runs-on: ubuntu-latest
620+<<<<<<< .github/workflows/release_build.yml
621 needs: [ linux, windows, android ]
622 steps:
623 - name: Clone repository
624 uses: actions/checkout@v1
625+=======
626+ needs: [ linux, windows, android, macOS ]
627+ if: ${{ github.event_name == 'push' }}
628+ steps:
629+ - name: Clone repository
630+ uses: actions/checkout@v4
631+ with:
632+ submodules: 'recursive'
633+>>>>>>> .github/workflows/release_build.yml
634 - name: Get tag body
635 id: get_tag_body
636 run: |
637@@ -171,7 +314,11 @@ jobs:
638 run: |
639 echo "${{ steps.create_release.outputs.upload_url }}" > ./release_url
640 - name: Upload release URL
641+<<<<<<< .github/workflows/release_build.yml
642 uses: actions/upload-artifact@v1
643+=======
644+ uses: actions/upload-artifact@v4
645+>>>>>>> .github/workflows/release_build.yml
646 with:
647 name: release_url
648 path: ./release_url
649@@ -180,6 +327,10 @@ jobs:
650 name: ${{ matrix.config.name }}
651 runs-on: ${{ matrix.config.os }}
652 needs: release
653+<<<<<<< .github/workflows/release_build.yml
654+=======
655+ if: ${{ github.event_name == 'push' }}
656+>>>>>>> .github/workflows/release_build.yml
657 strategy:
658 fail-fast: false
659 matrix:
660@@ -201,6 +352,17 @@ jobs:
661 type: "application/zip"
662 }
663 - {
664+<<<<<<< .github/workflows/release_build.yml
665+=======
666+ name: "Upload MacOS Release Artifact",
667+ os: ubuntu-latest,
668+ artifact: "gfxreconstruct-macos-release",
669+ command: "tar czf",
670+ suffix: "macos.tar.gz",
671+ type: "application/x-gtar"
672+ }
673+ - {
674+>>>>>>> .github/workflows/release_build.yml
675 name: "Upload Android Release Artifact",
676 os: ubuntu-latest,
677 artifact: "gfxreconstruct-android",
678@@ -215,7 +377,11 @@ jobs:
679 tag_name=`echo "${{ github.ref }}" | cut -d "/" -f 3`
680 echo "::set-output name=tag_name::$tag_name"
681 - name: Download artifacts
682+<<<<<<< .github/workflows/release_build.yml
683 uses: actions/download-artifact@v1
684+=======
685+ uses: actions/download-artifact@v4
686+>>>>>>> .github/workflows/release_build.yml
687 with:
688 name: ${{ matrix.config.artifact }}
689 path: ./gfxreconstruct-${{ steps.get_tag_name.outputs.tag_name }}
690@@ -223,7 +389,11 @@ jobs:
691 run: |
692 ${{ matrix.config.command }} gfxreconstruct-${{ steps.get_tag_name.outputs.tag_name }}-${{ matrix.config.suffix }} gfxreconstruct-${{ steps.get_tag_name.outputs.tag_name }}
693 - name: Download release URL
694+<<<<<<< .github/workflows/release_build.yml
695 uses: actions/download-artifact@v1
696+=======
697+ uses: actions/download-artifact@v4
698+>>>>>>> .github/workflows/release_build.yml
699 with:
700 name: release_url
701 path: ./
702diff --git a/.github/workflows/scripts/build-dependencies-macos.sh b/.github/workflows/scripts/build-dependencies-macos.sh
703index 12a28c5..d777c3b 100755
704--- a/.github/workflows/scripts/build-dependencies-macos.sh
705+++ b/.github/workflows/scripts/build-dependencies-macos.sh
706@@ -7,7 +7,11 @@ export MACOSX_DEPLOYMENT_TARGET=11.0
707 INSTALLDIR="${INSTALLDIR:-"$HOME/deps"}"
708 NPROCS="${NPROCS:-$(getconf _NPROCESSORS_ONLN)}"
709 ZSTD=1.5.5
710+<<<<<<< .github/workflows/scripts/build-dependencies-macos.sh
711 LZ4=1.9.4
712+=======
713+LZ4=1.10.0
714+>>>>>>> .github/workflows/scripts/build-dependencies-macos.sh
715 ZLIB=1.3.1
716
717 mkdir deps-build
718@@ -19,7 +23,11 @@ export CXXFLAGS="-I$INSTALLDIR/include -Os $CXXFLAGS"
719
720 cat > SHASUMS <<EOF
721 9c4396cc829cfae319a6e2615202e82aad41372073482fce286fac78646d3ee4 zstd-$ZSTD.tar.gz
722+<<<<<<< .github/workflows/scripts/build-dependencies-macos.sh
723 0b0e3aa07c8c063ddf40b082bdf7e37a1562bda40a0ff5272957f3e987e0e54b lz4-$LZ4.tar.gz
724+=======
725+537512904744b35e232912055ccf8ec66d768639ff3abe5788d90d792ec5f48b lz4-$LZ4.tar.gz
726+>>>>>>> .github/workflows/scripts/build-dependencies-macos.sh
727 9a93b2b7dfdac77ceba5a558a580e74667dd6fede4585b91eefb60f03b72df23 zlib-$ZLIB.tar.gz
728 EOF
729
730@@ -41,7 +49,11 @@ cd ..
731 echo "Installing zstd..."
732 tar xf "zstd-$ZSTD.tar.gz"
733 cd "zstd-$ZSTD"
734+<<<<<<< .github/workflows/scripts/build-dependencies-macos.sh
735 cmake -B build-dir build/cmake -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DZSTD_BUILD_SHARED=OFF -DCMAKE_BUILD_TYPE=MinSizeRel
736+=======
737+cmake -B build-dir build/cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DZSTD_BUILD_SHARED=OFF -DCMAKE_BUILD_TYPE=MinSizeRel
738+>>>>>>> .github/workflows/scripts/build-dependencies-macos.sh
739 make -C build-dir "-j$NPROCS"
740 make -C build-dir install
741 cd ..
742@@ -49,7 +61,11 @@ cd ..
743 echo "Installing zlib..."
744 tar xf "zlib-$ZLIB.tar.gz"
745 cd "zlib-$ZLIB"
746+<<<<<<< .github/workflows/scripts/build-dependencies-macos.sh
747 cmake -B build-dir build/cmake -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DZLIB_BUILD_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=MinSizeRel
748+=======
749+cmake -B build-dir build/cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DZLIB_BUILD_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=MinSizeRel
750+>>>>>>> .github/workflows/scripts/build-dependencies-macos.sh
751 make -C build-dir "-j$NPROCS"
752 make -C build-dir install
753 cd ..
754diff --git a/.github/workflows/sdk_android_build.yml b/.github/workflows/sdk_android_build.yml
755index 5e71094..2d7ca2e 100644
756--- a/.github/workflows/sdk_android_build.yml
757+++ b/.github/workflows/sdk_android_build.yml
758@@ -35,10 +35,21 @@ jobs:
759 }
760 steps:
761 - name: Clone repository
762+<<<<<<< .github/workflows/sdk_android_build.yml
763 uses: actions/checkout@v1
764 - name: Update submodules
765 run: |
766 git submodule update --init
767+=======
768+ uses: actions/checkout@v4
769+ with:
770+ submodules: 'recursive'
771+ - name: Set up Java
772+ uses: "actions/setup-java@v4"
773+ with:
774+ java-version: 17
775+ distribution: "temurin"
776+>>>>>>> .github/workflows/sdk_android_build.yml
777 - name: Gradle build
778 run: |
779 cd android
780@@ -52,12 +63,21 @@ jobs:
781 cp LICENSE_ThirdParty.txt gfxreconstruct-dev/
782 cp USAGE_android.md gfxreconstruct-dev/
783 cp layer/vk_layer_settings.txt gfxreconstruct-dev/
784+<<<<<<< .github/workflows/sdk_android_build.yml
785 cp -r android/layer/build/intermediates/cmake/release/obj/arm64-v8a gfxreconstruct-dev/layer/
786 cp -r android/layer/build/intermediates/cmake/release/obj/armeabi-v7a gfxreconstruct-dev/layer/
787 cp android/tools/replay/build/outputs/apk/debug/replay-debug.apk gfxreconstruct-dev/tools/
788 cp android/scripts/gfxrecon.py gfxreconstruct-dev/tools/
789 - name: Upload artifacts
790 uses: actions/upload-artifact@v1
791+=======
792+ cp -r android/layer/build/intermediates/cxx/RelWithDebInfo/*/obj/arm64-v8a gfxreconstruct-dev/layer/
793+ cp -r android/layer/build/intermediates/cxx/RelWithDebInfo/*/obj/armeabi-v7a gfxreconstruct-dev/layer/
794+ cp android/tools/replay/build/outputs/apk/debug/replay-debug.apk gfxreconstruct-dev/tools/
795+ cp android/scripts/gfxrecon.py gfxreconstruct-dev/tools/
796+ - name: Upload artifacts
797+ uses: actions/upload-artifact@v4
798+>>>>>>> .github/workflows/sdk_android_build.yml
799 with:
800 name: ${{ matrix.config.artifact }}
801 path: ./gfxreconstruct-dev
802@@ -92,7 +112,11 @@ jobs:
803 run: |
804 echo "${{ steps.create_release.outputs.upload_url }}" > ./release_url
805 - name: Upload release URL
806+<<<<<<< .github/workflows/sdk_android_build.yml
807 uses: actions/upload-artifact@v1
808+=======
809+ uses: actions/upload-artifact@v4
810+>>>>>>> .github/workflows/sdk_android_build.yml
811 with:
812 name: release_url
813 path: ./release_url
814@@ -128,7 +152,11 @@ jobs:
815 tag_name=`echo "${{ github.ref }}" | cut -d "/" -f 3`
816 echo "::set-output name=tag_name::$tag_name"
817 - name: Download artifacts
818+<<<<<<< .github/workflows/sdk_android_build.yml
819 uses: actions/download-artifact@v1
820+=======
821+ uses: actions/download-artifact@v4
822+>>>>>>> .github/workflows/sdk_android_build.yml
823 with:
824 name: ${{ matrix.config.artifact }}
825 path: ./gfxreconstruct-${{ steps.get_tag_name.outputs.tag_name }}
826@@ -136,7 +164,11 @@ jobs:
827 run: |
828 ${{ matrix.config.command }} gfxreconstruct-${{ steps.get_tag_name.outputs.tag_name }}-${{ matrix.config.suffix }} gfxreconstruct-${{ steps.get_tag_name.outputs.tag_name }}
829 - name: Download release URL
830+<<<<<<< .github/workflows/sdk_android_build.yml
831 uses: actions/download-artifact@v1
832+=======
833+ uses: actions/download-artifact@v4
834+>>>>>>> .github/workflows/sdk_android_build.yml
835 with:
836 name: release_url
837 path: ./
838diff --git a/.gitignore b/.gitignore
839index fc4f457..34a0533 100644
840--- a/.gitignore
841+++ b/.gitignore
842@@ -12,3 +12,7 @@ __pycache__/
843 .cache
844 .DS_Store
845 external/wayland-protocols/
846+<<<<<<< .gitignore
847+=======
848+android/layer/assets/
849+>>>>>>> .gitignore
850diff --git a/.gitmodules b/.gitmodules
851index a5284c2..aece6a2 100644
852--- a/.gitmodules
853+++ b/.gitmodules
854@@ -1,3 +1,23 @@
855 [submodule "external/Vulkan-Headers"]
856 path = external/Vulkan-Headers
857 url = https://github.com/KhronosGroup/Vulkan-Headers.git
858+<<<<<<< .gitmodules
859+=======
860+ shallow = true
861+[submodule "external/SPIRV-Headers"]
862+ path = external/SPIRV-Headers
863+ url = https://github.com/KhronosGroup/SPIRV-Headers.git
864+ shallow = true
865+[submodule "external/SPIRV-Reflect"]
866+ path = external/SPIRV-Reflect
867+ url = https://github.com/KhronosGroup/SPIRV-Reflect.git
868+ shallow = true
869+[submodule "external/OpenXR-SDK"]
870+ path = external/OpenXR-SDK
871+ url = https://github.com/KhronosGroup/OpenXR-SDK.git
872+ shallow = true
873+[submodule "external/OpenXR-Docs"]
874+ path = external/OpenXR-Docs
875+ url = https://github.com/KhronosGroup/OpenXR-Docs.git
876+ shallow = true
877+>>>>>>> .gitmodules
878diff --git a/CMakeLists.txt b/CMakeLists.txt
879index 5fbdcd1..b9e087e 100644
880--- a/CMakeLists.txt
881+++ b/CMakeLists.txt
882@@ -32,24 +32,56 @@ set_property(GLOBAL PROPERTY TEST_SCRIPT ${CMAKE_ROOT})
883
884 include(GNUInstallDirs)
885
886+<<<<<<< CMakeLists.txt
887 set(CMAKE_CXX_STANDARD 17)
888 set(CXX_STANDARD_REQUIRED ON)
889 set(CMAKE_POSITION_INDEPENDENT_CODE ON)
890 set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_SOURCE_DIR}/external/cmake-modules")
891+=======
892+set(CMAKE_CXX_STANDARD 20)
893+set(CXX_STANDARD_REQUIRED ON)
894+set(CMAKE_POSITION_INDEPENDENT_CODE ON)
895+set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" "${PROJECT_SOURCE_DIR}/external/cmake-modules")
896+set(CMAKE_CXX_VISIBILITY_PRESET "hidden")
897+set(CMAKE_VISIBILITY_INLINES_HIDDEN "YES")
898+
899+option(USE_STRICT_COMPILER_WARNINGS "Use a stricter compiler-warning level" OFF)
900+
901+if (USE_STRICT_COMPILER_WARNINGS)
902+ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
903+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wconversion -Wextra -Werror -Wshadow -Wno-unused-parameter -Wno-unused-function -Wno-missing-field-initializers")
904+ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
905+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wconversion -Wextra -Werror -Wshadow -Wno-unused-parameter -Wno-unused-function -Wno-missing-field-initializers")
906+ else ()
907+ message(WARNING "option 'USE_STRICT_COMPILER_WARNINGS' is set, but not implemented for this platform")
908+ endif ()
909+endif (USE_STRICT_COMPILER_WARNINGS)
910+>>>>>>> CMakeLists.txt
911
912 # Version info
913 set(GFXRECONSTRUCT_PROJECT_VERSION_MAJOR 1)
914 set(GFXRECONSTRUCT_PROJECT_VERSION_MINOR 0)
915+<<<<<<< CMakeLists.txt
916 set(GFXRECONSTRUCT_PROJECT_VERSION_PATCH 4)
917
918 set(GFXRECON_PROJECT_VERSION_SHA1 "unknown-build-source")
919
920
921+=======
922+set(GFXRECONSTRUCT_PROJECT_VERSION_PATCH 5)
923+
924+set(GFXRECON_PROJECT_VERSION_SHA1 "unknown-build-source")
925+
926+>>>>>>> CMakeLists.txt
927 option(BUILD_STATIC "Build static binaries for HPC clusters (will not build the tracer library)" OFF)
928
929 if (NOT DEFINED HEADLESS)
930 set(HEADLESS TRUE)
931+<<<<<<< CMakeLists.txt
932 endif()
933+=======
934+endif ()
935+>>>>>>> CMakeLists.txt
936
937 include(GetGitRevisionDescription)
938 get_git_head_revision(GIT_REFSPEC GIT_SHA1)
939@@ -64,6 +96,7 @@ if (GIT_REFSPEC)
940 if (GIT_IS_MASTER OR GIT_IS_SDK)
941 if (GIT_TAG)
942 set(GIT_BRANCH ${GIT_TAG})
943+<<<<<<< CMakeLists.txt
944 else()
945 set(GIT_BRANCH "")
946 endif()
947@@ -74,31 +107,62 @@ if (GIT_REFSPEC)
948 set(GFXRECON_PROJECT_VERSION_DESIGNATION "-dev")
949 endif()
950 elseif(GIT_TAG)
951+=======
952+ else ()
953+ set(GIT_BRANCH "")
954+ endif ()
955+ if (NOT DEFINED GFXRECON_PROJECT_VERSION_DESIGNATION)
956+ set(GFXRECON_PROJECT_VERSION_DESIGNATION "")
957+ endif ()
958+ elseif (NOT DEFINED GFXRECON_PROJECT_VERSION_DESIGNATION)
959+ set(GFXRECON_PROJECT_VERSION_DESIGNATION "-dev")
960+ endif ()
961+elseif (GIT_TAG)
962+>>>>>>> CMakeLists.txt
963 string(REGEX MATCH "^v[0-9]+\.[0-9]+\.[0-9]+$" GIT_IS_VERSION_RELEASE_TAG ${GIT_TAG})
964 if (GIT_IS_VERSION_RELEASE_TAG)
965 set(GIT_BRANCH ${GIT_TAG})
966 set(GFXRECON_PROJECT_VERSION_DESIGNATION "")
967+<<<<<<< CMakeLists.txt
968 endif()
969 elseif(NOT DEFINED GFXRECON_PROJECT_VERSION_DESIGNATION)
970 set(GFXRECON_PROJECT_VERSION_DESIGNATION "-unknown")
971 endif()
972+=======
973+ endif ()
974+elseif (NOT DEFINED GFXRECON_PROJECT_VERSION_DESIGNATION)
975+ set(GFXRECON_PROJECT_VERSION_DESIGNATION "-unknown")
976+endif ()
977+>>>>>>> CMakeLists.txt
978
979 if (GIT_SHA1)
980 string(SUBSTRING ${GIT_SHA1} 0 7 GFXRECON_PROJECT_VERSION_SHA1)
981
982 if (GIT_BRANCH)
983 string(CONCAT GFXRECON_PROJECT_VERSION_SHA1 ${GIT_BRANCH} ":" ${GFXRECON_PROJECT_VERSION_SHA1})
984+<<<<<<< CMakeLists.txt
985 endif()
986+=======
987+ endif ()
988+>>>>>>> CMakeLists.txt
989
990 git_local_changes(GIT_LOCAL_STATE)
991 string(COMPARE EQUAL ${GIT_LOCAL_STATE} "DIRTY" GIT_DIRTY)
992 if (GIT_DIRTY)
993 string(CONCAT GFXRECON_PROJECT_VERSION_SHA1 ${GFXRECON_PROJECT_VERSION_SHA1} "*")
994+<<<<<<< CMakeLists.txt
995 endif()
996 endif()
997
998 # Adds all the configure time information into project_version_temp.h.in
999 configure_file("${CMAKE_SOURCE_DIR}/project_version.h.in" "${CMAKE_BINARY_DIR}/project_version_temp.h.in")
1000+=======
1001+ endif ()
1002+endif ()
1003+
1004+# Adds all the configure time information into project_version_temp.h.in
1005+configure_file("${PROJECT_SOURCE_DIR}/project_version.h.in" "${CMAKE_BINARY_DIR}/project_version_temp.h.in")
1006+>>>>>>> CMakeLists.txt
1007
1008 # Generate a "project_version_$<CONFIG>.h" for the current config - necessary to determine the current build configuration
1009 file(GENERATE OUTPUT "${CMAKE_BINARY_DIR}/project_version_$<CONFIG>.h" INPUT "${CMAKE_BINARY_DIR}/project_version_temp.h.in")
1010@@ -106,6 +170,15 @@ file(GENERATE OUTPUT "${CMAKE_BINARY_DIR}/project_version_$<CONFIG>.h" INPUT "${
1011 # Since project_version_$<CONFIG>.h differs per build, set a compiler definition that files can use to include it
1012 add_definitions(-DPROJECT_VERSION_HEADER_FILE="project_version_$<CONFIG>.h")
1013
1014+<<<<<<< CMakeLists.txt
1015+=======
1016+# Isolate the repo SHA in a library to reduce the amount of recompilation on git commit, checkout, etc.
1017+# Clients should #include PROJECT_VERSION_HEADER_FILE and call GetProjectVersionString()
1018+configure_file("${PROJECT_SOURCE_DIR}/project_version_string.h.in" "${CMAKE_BINARY_DIR}/project_version_string.h")
1019+add_library(project_version "${PROJECT_SOURCE_DIR}/project_version.cpp")
1020+target_include_directories(project_version PUBLIC "${CMAKE_BINARY_DIR}")
1021+
1022+>>>>>>> CMakeLists.txt
1023 option(BUILD_WERROR "Build with warnings as errors" ON)
1024
1025 # Code checks
1026@@ -114,6 +187,25 @@ include("Lint")
1027 include("Test")
1028 include("FindVulkanVersion")
1029
1030+<<<<<<< CMakeLists.txt
1031+=======
1032+set(OPENXR_SUPPORT_ENABLED FALSE)
1033+
1034+option(GFXRECON_ENABLE_OPENXR "Enable OpenXR support." ON)
1035+if (GFXRECON_ENABLE_OPENXR)
1036+ include("FindOpenXRVersion")
1037+
1038+ if ((NOT XR_VERSION_MAJOR STREQUAL "") AND (NOT XR_VERSION_MINOR STREQUAL ""))
1039+ set(OPENXR_SUPPORT_ENABLED TRUE)
1040+ message(STATUS "OpenXR support enabled")
1041+ else()
1042+ message(FATAL_ERROR "Failed to find OpenXR headers for support!")
1043+ endif()
1044+else()
1045+ message(STATUS "OpenXR support disabled!")
1046+endif()
1047+
1048+>>>>>>> CMakeLists.txt
1049 # Apply misc build directives to the given target
1050 macro(common_build_directives TARGET)
1051 target_code_style_build_directives(${TARGET})
1052@@ -122,6 +214,7 @@ macro(common_build_directives TARGET)
1053 endmacro()
1054
1055 option(GFXRECON_ENABLE_RELEASE_ASSERTS "Enable release builds to output failed conditions caught by GFXRECON_ASSERT macro." OFF)
1056+<<<<<<< CMakeLists.txt
1057 if(${GFXRECON_ENABLE_RELEASE_ASSERTS})
1058 add_definitions(-DGFXRECON_ENABLE_RELEASE_ASSERTS)
1059 endif()
1060@@ -129,6 +222,17 @@ endif()
1061 option(GFXRECON_TOCPP_SUPPORT "Build ToCpp export tool as part of GFXReconstruct builds." TRUE)
1062
1063 if(MSVC)
1064+=======
1065+if (${GFXRECON_ENABLE_RELEASE_ASSERTS})
1066+ add_definitions(-DGFXRECON_ENABLE_RELEASE_ASSERTS)
1067+endif ()
1068+
1069+option(GFXRECON_TOCPP_SUPPORT "Build ToCpp export tool as part of GFXReconstruct builds." TRUE)
1070+
1071+option(GFXRECON_INCLUDE_TEST_APPS "Build and install test apps" OFF)
1072+
1073+if (MSVC)
1074+>>>>>>> CMakeLists.txt
1075
1076 # The host toolchain architecture (i.e. are the compiler and other tools compiled to ARM/Intel 32bit/64bit binaries):
1077 message(STATUS "CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE: " ${CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE})
1078@@ -139,6 +243,7 @@ if(MSVC)
1079 message(STATUS "CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION: " ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION})
1080
1081 set(GFXR_ARM_WINDOWS_BUILD FALSE)
1082+<<<<<<< CMakeLists.txt
1083 if(CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64")
1084 set(GFXR_ARM_WINDOWS_BUILD TRUE)
1085 endif()
1086@@ -157,6 +262,42 @@ if(MSVC)
1087 ${CMAKE_PREFIX_PATH}
1088 "${CMAKE_SOURCE_DIR}/external/precompiled/win${PRECOMPILED_ARCH}"
1089 "${CMAKE_SOURCE_DIR}/external/precompiled/win${PRECOMPILED_ARCH}")
1090+=======
1091+ # These checks help also keeping `cmake-gui` behaviour consistent when default values are passed.
1092+
1093+ # Some IDEs pass -A in lowercase or in mixed case.
1094+ # Normalize the CMAKE_GENERATOR_PLATFORM string to upper case to avoid architecture detection mismatch.
1095+ # can't assume ${CMAKE_GENERATOR_PLATFORM} is always defined and/or non-empty!
1096+ if(NOT "${CMAKE_GENERATOR_PLATFORM}" STREQUAL "")
1097+ string(TOUPPER "${CMAKE_GENERATOR_PLATFORM}" NORMALIZED_CMAKE_GENERATOR_PLATFORM)
1098+ if (NORMALIZED_CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64")
1099+ set(GFXR_ARM_WINDOWS_BUILD TRUE)
1100+ endif()
1101+ else()
1102+ # No target platform is specified. Try to compute using native tools architecture.
1103+ string(TOUPPER "${CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE}" NORMALIZED_CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE)
1104+ if(NORMALIZED_CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE STREQUAL "ARM64")
1105+ set(GFXR_ARM_WINDOWS_BUILD TRUE)
1106+ endif()
1107+ endif()
1108+
1109+ message(STATUS "GFXR_ARM_WINDOWS_BUILD: " ${GFXR_ARM_WINDOWS_BUILD})
1110+
1111+ # Default to using the precompiled LZ4 and ZLIB binaries for VisualStudio builds.
1112+ set(PRECOMPILED_ARCH "64")
1113+ if (CMAKE_SIZEOF_VOID_P EQUAL 4)
1114+ set(PRECOMPILED_ARCH "32")
1115+ endif (CMAKE_SIZEOF_VOID_P EQUAL 4)
1116+
1117+ if (GFXR_ARM_WINDOWS_BUILD)
1118+ set(PRECOMPILED_ARCH "64-arm")
1119+ endif (GFXR_ARM_WINDOWS_BUILD)
1120+
1121+ set(CMAKE_PREFIX_PATH
1122+ ${CMAKE_PREFIX_PATH}
1123+ "${PROJECT_SOURCE_DIR}/external/precompiled/win${PRECOMPILED_ARCH}"
1124+ "${PROJECT_SOURCE_DIR}/external/precompiled/win${PRECOMPILED_ARCH}")
1125+>>>>>>> CMakeLists.txt
1126
1127 # Enable LARGEADDRESSAWARE to increase memory address space for 32-bit executables
1128 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
1129@@ -167,6 +308,7 @@ if(MSVC)
1130 # Add option to enable/disable launcher and interceptor.
1131 option(BUILD_LAUNCHER_AND_INTERCEPTOR "Build launcher and interceptor" OFF)
1132
1133+<<<<<<< CMakeLists.txt
1134 # Add option to enable/disable D3D12 gfxrecon-convert support.
1135 option(CONVERT_EXPERIMENTAL_D3D12 "Build with convert DX12 enabled" OFF)
1136
1137@@ -196,11 +338,53 @@ if(MSVC)
1138
1139 # Add option to enable/disable AGS support.
1140 option(GFXRECON_AGS_SUPPORT "Build with AGS support enabled. Ignored if D3D12_SUPPORT=OFF." ON)
1141+=======
1142+ # Enable STL locks to work after building capture libs with certain versions of VS
1143+ add_definitions(-D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR)
1144+
1145+ if (${D3D12_SUPPORT})
1146+ set(D3D12_INCLUDE_DIRECTORIES "${PROJECT_SOURCE_DIR}/external/AgilitySDK/include")
1147+ add_definitions(-DD3D12_SUPPORT)
1148+
1149+ # Check Windows SDK version and print warning if there is a mismatch.
1150+ set(EXPECTED_WIN_SDK_VER "10.0.26100.0")
1151+ if (NOT ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION} STREQUAL ${EXPECTED_WIN_SDK_VER})
1152+ message(WARNING
1153+ "D3D12 support is authored against Windows SDK ${EXPECTED_WIN_SDK_VER}. Windows SDK version "
1154+ "${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION} may not be compatible. If you encounter build errors, "
1155+ "set D3D12_SUPPORT=OFF or configure the build with the recommended Windows SDK version. See BUILD.md "
1156+ "for more information.")
1157+ endif ()
1158+
1159+ find_package(DXC)
1160+ if (DXC_FOUND)
1161+ set(D3D12_INCLUDE_DIRECTORIES ${D3D12_INCLUDE_DIRECTORIES} ${DXC_INCLUDE_DIR})
1162+ add_definitions(-DGFXRECON_DXC_SUPPORT)
1163+ endif ()
1164+
1165+ else ()
1166+ set(BUILD_LAUNCHER_AND_INTERCEPTOR OFF)
1167+ endif ()
1168+
1169+
1170+ if (${BUILD_LAUNCHER_AND_INTERCEPTOR})
1171+ add_definitions(-DBUILD_LAUNCHER_AND_INTERCEPTOR)
1172+ endif ()
1173+
1174+ if(NOT ${GFXR_ARM_WINDOWS_BUILD})
1175+ # Add option to enable/disable AGS support. Only supported on non-ARM64 builds.
1176+ option(GFXRECON_AGS_SUPPORT "Build with AGS support enabled. Not supported on Windows on ARM64. Ignored if D3D12_SUPPORT=OFF." ON)
1177+ else()
1178+ set(GFXRECON_AGS_SUPPORT OFF)
1179+ message(STATUS "GFXRECON_AGS_SUPPORT is disabled for Windows on ARM64 builds.")
1180+ endif()
1181+>>>>>>> CMakeLists.txt
1182
1183 if (${D3D12_SUPPORT})
1184 if (${GFXRECON_AGS_SUPPORT})
1185 if (CMAKE_SIZEOF_VOID_P EQUAL 8)
1186 find_package(AGS)
1187+<<<<<<< CMakeLists.txt
1188 if (TARGET AGS::AGS)
1189 add_definitions(-DGFXRECON_AGS_SUPPORT)
1190
1191@@ -238,10 +422,58 @@ endif()
1192 if(WIN32)
1193 find_package(Detours)
1194 endif() # WIN32
1195+=======
1196+ if (AGS_FOUND)
1197+ add_definitions(-DGFXRECON_AGS_SUPPORT)
1198+
1199+ set(D3D12_INCLUDE_DIRECTORIES ${D3D12_INCLUDE_DIRECTORIES} ${AGS_INCLUDE_DIR})
1200+
1201+ # The value for option GFXRECON_AGS_SUPPORT gets cached so use a non-cached variable
1202+ # to determine the final result.
1203+ set(GFXRECON_AGS_SUPPORT_FINAL ON)
1204+ else ()
1205+ message(WARNING "GFXRECON_AGS_SUPPORT was requested but the required dependencies were not found. "
1206+ "AGS support will be disabled.")
1207+ endif () # AGS_FOUND
1208+ else ()
1209+ message(WARNING "GFXRECON_AGS_SUPPORT was requested but is not supported. An x64 build is required. "
1210+ "AGS support will be disabled.")
1211+ endif () # CMAKE_SIZEOF_VOID_P EQUAL 8
1212+ endif () # GFXRECON_AGS_SUPPORT
1213+ endif () # D3D12_SUPPORT
1214+
1215+else (MSVC)
1216+ # Turn off D3D12 support for non MSVC builds.
1217+ set(D3D12_SUPPORT OFF)
1218+ set(BUILD_LAUNCHER_AND_INTERCEPTOR OFF)
1219+ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
1220+ set(CMAKE_PREFIX_PATH
1221+ ${CMAKE_PREFIX_PATH}
1222+ "${PROJECT_SOURCE_DIR}/external/precompiled/linux/lib/arm64-v8a")
1223+ elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "arm")
1224+ set(CMAKE_PREFIX_PATH
1225+ ${CMAKE_PREFIX_PATH}
1226+ "${PROJECT_SOURCE_DIR}/external/precompiled/linux/lib/arm")
1227+ endif ()
1228+endif (MSVC)
1229+
1230+if (APPLE)
1231+ add_link_options(-Wl,-dead_strip -Wl,-dead_strip_dylibs)
1232+ set(CMAKE_PREFIX_PATH
1233+ "${PROJECT_SOURCE_DIR}/external/precompiled/macos"
1234+ ${CMAKE_PREFIX_PATH})
1235+endif ()
1236+
1237+# GFXReconstruct provided find modules
1238+if (WIN32)
1239+ find_package(Detours)
1240+endif () # WIN32
1241+>>>>>>> CMakeLists.txt
1242
1243 option(LZ4_OPTIONAL "Allow building without LZ4-compression" OFF)
1244 find_package(LZ4)
1245
1246+<<<<<<< CMakeLists.txt
1247 if(NOT LZ4_FOUND)
1248 if(LZ4_OPTIONAL)
1249 message(STATUS "LZ4 library not found, but declared optional. LZ4 support is disabled.")
1250@@ -253,10 +485,28 @@ endif()# NOT LZ4_FOUND
1251 find_package(ZSTD)
1252
1253 if(UNIX AND NOT APPLE)
1254+=======
1255+if (NOT LZ4_FOUND)
1256+ if (LZ4_OPTIONAL)
1257+ message(STATUS "LZ4 library not found, but declared optional. LZ4 support is disabled.")
1258+ else ()
1259+ message(FATAL_ERROR "LZ4 library not found. Please install LZ4 or allow building without it by setting LZ4_OPTIONAL to ON.")
1260+ endif ()# LZ4_OPTIONAL
1261+endif ()# NOT LZ4_FOUND
1262+
1263+find_package(ZSTD)
1264+
1265+# Find and use nlohmann_json
1266+list(APPEND CMAKE_PREFIX_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/nlohmann-json")
1267+find_package(nlohmann_json REQUIRED)
1268+
1269+if (UNIX AND NOT APPLE)
1270+>>>>>>> CMakeLists.txt
1271 option(BUILD_WSI_XCB_SUPPORT "Build XCB WSI support" ON)
1272 option(BUILD_WSI_WAYLAND_SUPPORT "Build Wayland WSI support" ON)
1273 option(BUILD_WSI_DISPLAY_SUPPORT "Build direct-to-display swapchain support" ON)
1274
1275+<<<<<<< CMakeLists.txt
1276 if(BUILD_WSI_XCB_SUPPORT)
1277 find_package(XCB)
1278 endif()
1279@@ -278,10 +528,34 @@ if(UNIX AND NOT APPLE)
1280 find_package(X11)
1281 endif()
1282 endif(UNIX AND NOT APPLE)
1283+=======
1284+ if (BUILD_WSI_XCB_SUPPORT)
1285+ find_package(XCB)
1286+ endif ()
1287+
1288+ if (BUILD_WSI_WAYLAND_SUPPORT)
1289+ find_package(WAYLAND)
1290+ endif ()
1291+endif (UNIX AND NOT APPLE)
1292+
1293+# CMake provided find modules
1294+if (BUILD_STATIC)
1295+ find_library(ZLIB NAMES libz.a REQUIRED PATH_SUFFIXES lib lib/x86_64-linux-gnu lib64)
1296+else ()
1297+ find_package(ZLIB)
1298+endif ()
1299+if (UNIX AND NOT APPLE)
1300+ option(BUILD_WSI_XLIB_SUPPORT "Build Xlib WSI support" ON)
1301+ if (BUILD_WSI_XLIB_SUPPORT)
1302+ find_package(X11)
1303+ endif ()
1304+endif (UNIX AND NOT APPLE)
1305+>>>>>>> CMakeLists.txt
1306
1307 add_library(windows_specific INTERFACE)
1308
1309 target_compile_definitions(windows_specific INTERFACE
1310+<<<<<<< CMakeLists.txt
1311 WIN32_LEAN_AND_MEAN
1312 NOMINMAX
1313 VK_USE_PLATFORM_WIN32_KHR
1314@@ -290,10 +564,23 @@ target_compile_definitions(windows_specific INTERFACE
1315 $<$<BOOL:${D3D12_SUPPORT}>:"GFXR_D3D12_CAPTURE_PATH=\"$<TARGET_FILE:d3d12_capture>\"">
1316 $<$<BOOL:${D3D12_SUPPORT}>:"GFXR_D3D12_PATH=\"$<TARGET_FILE:d3d12>\"">
1317 $<$<BOOL:${D3D12_SUPPORT}>:"GFXR_DXGI_PATH=\"$<TARGET_FILE:dxgi>\"">)
1318+=======
1319+ WIN32_LEAN_AND_MEAN
1320+ NOMINMAX
1321+ VK_USE_PLATFORM_WIN32_KHR
1322+ XR_USE_PLATFORM_WIN32
1323+ XR_USE_GRAPHICS_API_VULKAN
1324+ $<$<BOOL:${HEADLESS}>:VK_USE_PLATFORM_HEADLESS>
1325+ $<$<BOOL:${BUILD_LAUNCHER_AND_INTERCEPTOR}>:"GFXR_INTERCEPTOR_PATH=\"$<TARGET_FILE:gfxrecon_interceptor>\"">
1326+ $<$<BOOL:${D3D12_SUPPORT}>:"GFXR_D3D12_CAPTURE_PATH=\"$<TARGET_FILE:d3d12_capture>\"">
1327+ $<$<BOOL:${D3D12_SUPPORT}>:"GFXR_D3D12_PATH=\"$<TARGET_FILE:d3d12>\"">
1328+ $<$<BOOL:${D3D12_SUPPORT}>:"GFXR_DXGI_PATH=\"$<TARGET_FILE:dxgi>\"">)
1329+>>>>>>> CMakeLists.txt
1330
1331
1332 add_library(linux_specific INTERFACE)
1333 target_compile_definitions(linux_specific INTERFACE _FILE_OFFSET_BITS=64 PAGE_GUARD_ENABLE_UCONTEXT_WRITE_DETECTION
1334+<<<<<<< CMakeLists.txt
1335 $<$<BOOL:${X11_FOUND}>:VK_USE_PLATFORM_XLIB_KHR>
1336 $<$<BOOL:${X11_Xrandr_FOUND}>:VK_USE_PLATFORM_XLIB_XRANDR_EXT>
1337 $<$<BOOL:${XCB_FOUND}>:VK_USE_PLATFORM_XCB_KHR>
1338@@ -347,10 +634,93 @@ if(NOT BUILD_STATIC)
1339 endif()
1340 add_subdirectory(tools)
1341
1342+=======
1343+ XR_USE_GRAPHICS_API_VULKAN
1344+ $<$<BOOL:${X11_FOUND}>:VK_USE_PLATFORM_XLIB_KHR XR_USE_PLATFORM_XLIB>
1345+ $<$<BOOL:${X11_Xrandr_FOUND}>:VK_USE_PLATFORM_XLIB_XRANDR_EXT>
1346+ $<$<BOOL:${XCB_FOUND}>:VK_USE_PLATFORM_XCB_KHR XR_USE_PLATFORM_XCB>
1347+ $<$<BOOL:${WAYLAND_FOUND}>:VK_USE_PLATFORM_WAYLAND_KHR XR_USE_PLATFORM_WAYLAND>
1348+ $<$<BOOL:${BUILD_WSI_DISPLAY_SUPPORT}>:VK_USE_PLATFORM_DISPLAY_KHR>
1349+ $<$<BOOL:${HEADLESS}>:VK_USE_PLATFORM_HEADLESS>)
1350+
1351+add_library(macos_specific INTERFACE)
1352+target_compile_definitions(macos_specific INTERFACE
1353+ XR_USE_GRAPHICS_API_VULKAN
1354+ VK_USE_PLATFORM_METAL_EXT
1355+ $<$<BOOL:${HEADLESS}>:VK_USE_PLATFORM_HEADLESS>)
1356+
1357+add_library(platform_specific INTERFACE)
1358+target_link_libraries(platform_specific INTERFACE
1359+ $<$<BOOL:${WIN32}>:windows_specific>
1360+ $<$<BOOL:${APPLE}>:macos_specific>
1361+ $<$<NOT:$<OR:$<BOOL:${WIN32}>,$<BOOL:${APPLE}>>>:linux_specific>)
1362+
1363+if (BUILD_WERROR)
1364+ if (MSVC)
1365+ target_compile_options(platform_specific INTERFACE /WX)
1366+ else ()
1367+ target_compile_options(platform_specific INTERFACE -Werror)
1368+ endif ()
1369+endif ()
1370+
1371+if(MSVC)
1372+ target_compile_options(platform_specific INTERFACE /MP)
1373+endif()
1374+
1375+add_library(vulkan_registry INTERFACE)
1376+target_include_directories(vulkan_registry SYSTEM INTERFACE ${PROJECT_SOURCE_DIR}/external/Vulkan-Headers/include)
1377+target_compile_definitions(vulkan_registry INTERFACE VK_NO_PROTOTYPES VK_ENABLE_BETA_EXTENSIONS)
1378+
1379+add_library(spirv_registry INTERFACE)
1380+target_include_directories(spirv_registry SYSTEM INTERFACE ${PROJECT_SOURCE_DIR}/external/SPIRV-Headers/include)
1381+
1382+add_library(OpenXR INTERFACE)
1383+if (OPENXR_SUPPORT_ENABLED)
1384+ option(DYNAMIC_LOADER "" OFF)
1385+ add_subdirectory(${PROJECT_SOURCE_DIR}/external/OpenXR-SDK)
1386+ target_include_directories(OpenXR INTERFACE ${PROJECT_SOURCE_DIR}/external/OpenXR-SDK/include)
1387+ target_compile_definitions(OpenXR INTERFACE XR_NO_PROTOTYPES ENABLE_OPENXR_SUPPORT=1)
1388+endif()
1389+
1390+add_library(vulkan_memory_allocator INTERFACE)
1391+target_compile_options(vulkan_memory_allocator INTERFACE
1392+ $<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:
1393+ -Wno-nullability-completeness>
1394+)
1395+target_include_directories(vulkan_memory_allocator SYSTEM INTERFACE ${PROJECT_SOURCE_DIR}/external/VulkanMemoryAllocator/include)
1396+
1397+# SPIRV-Reflect included as submodule -> libspirv-reflect-static.a
1398+set(SPIRV_REFLECT_EXAMPLES OFF)
1399+set(SPIRV_REFLECT_EXECUTABLE OFF)
1400+set(SPIRV_REFLECT_STATIC_LIB ON)
1401+set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
1402+add_subdirectory(external/SPIRV-Reflect EXCLUDE_FROM_ALL)
1403+
1404+if (${RUN_TESTS})
1405+ add_library(catch2 INTERFACE)
1406+ target_include_directories(catch2 SYSTEM INTERFACE external)
1407+endif ()
1408+
1409+add_subdirectory(framework)
1410+if (NOT BUILD_STATIC)
1411+ add_subdirectory(layer)
1412+endif ()
1413+add_subdirectory(tools)
1414+
1415+if (GFXRECON_INCLUDE_TEST_APPS)
1416+ add_subdirectory(external/Vulkan-Headers)
1417+ add_subdirectory(test)
1418+endif ()
1419+
1420+>>>>>>> CMakeLists.txt
1421 if (${RUN_TESTS})
1422 add_test_package_file(${CMAKE_CURRENT_LIST_DIR}/scripts/build.py)
1423 add_test_package_file(${CMAKE_CURRENT_LIST_DIR}/scripts/test.py)
1424 generate_test_package(gfx_reconstruct_test)
1425+<<<<<<< CMakeLists.txt
1426 endif()
1427+=======
1428+endif ()
1429+>>>>>>> CMakeLists.txt
1430
1431 add_subdirectory(scripts)
1432diff --git a/HOWTO_meta_quest.md b/HOWTO_meta_quest.md
1433new file mode 100644
1434index 0000000..12406b7
1435--- /dev/null
1436+++ b/HOWTO_meta_quest.md
1437@@ -0,0 +1,458 @@
1438+<!-- markdownlint-disable MD033 -->
1439+<!-- markdownlint-disable MD041 -->
1440+<p align="left"><img src="https://vulkan.lunarg.com/img/NewLunarGLogoBlack.png" alt="LunarG" width=263 height=113 /></p>
1441+
1442+[![Creative Commons][1]][2]
1443+
1444+[1]: https://i.creativecommons.org/l/by-nd/4.0/88x31.png "Creative Commons License"
1445+[2]: https://creativecommons.org/licenses/by-nd/4.0/
1446+
1447+Copyright &copy; 2024-2025 LunarG, Inc.
1448+
1449+# Meta Quest Walkthrough
1450+
1451+## EXPERIMENTAL FEATURE!!!
1452+
1453+Be aware the OpenXR support within GFXReconstruct is an experimental
1454+feature, with restricted functionality and testing. See List of Known
1455+Limitations below.
1456+
1457+## Index
1458+
1459+1. [Purpose](#purpose)
1460+2. [Building GFXReconstruct](#building-gfxreconstruct)
1461+3. [Attaching GFXReconstruct to an Existing Application](#attaching-gfxreconstruct-to-an-existing-application)
1462+4. [Replaying a Capture File](#replaying-a-capture-file)
1463+6. [Capturing the Replay Content](#capturing-the-replay-content)
1464+7. [OpenXR Capture Known Limitations](#openxr-capture-known-limitations)
1465+
1466+## Purpose
1467+
1468+This document shows several examples of how to use the GFXReconstruct
1469+tools for the Meta Quest headsets, in particular the Meta Quest
1470+Pro and Quest 3 models.
1471+
1472+These examples assume that the developer is using a Windows system
1473+as the build and/or host since the Meta Quest Developer Hub tools work
1474+on Windows and not Linux.
1475+
1476+**NOTE:** This assumes the application meets the following requirements
1477+ * Uses Gradle (preferably 8.0+)
1478+ * Builds against Android 10+
1479+
1480+## Building GFXReconstruct
1481+
1482+First, download a version of GFXReconstruct that supports OpenXR
1483+using the [GFXReconstruct GitHub repo](https://github.com/LunarG/gfxreconstruct).
1484+
1485+```bash
1486+git clone --recurse-submodules https://github.com/LunarG/gfxreconstruct.git
1487+```
1488+
1489+The full location of the `gfxreconstruct` folder generated from this
1490+step is to be used in all cases below for `{gfxreconstruct_root}`.
1491+
1492+Next, follow the instructions in the [BUILD.md doc](./BUILD.md)
1493+found in the top-level of the GFXReconstruct repo for building
1494+for an [Android target](./BUILD.md#building-for-android).
1495+
1496+
1497+## Attaching GFXReconstruct to an Existing Application
1498+
1499+To attach GFXReconstruct to an existing application
1500+will require modifying the Gradle files so that the
1501+application can find and build with the capture layer:
1502+
1503+
1504+### 1. App settings.gradle Changes
1505+
1506+Include GFXReconstruct's layer as a known project:
1507+
1508+```bash
1509+include ':VkLayer_gfxreconstruct'
1510+project(':VkLayer_gfxreconstruct').projectDir = file('{gfxreconstruct_root}\\android\\layer')
1511+```
1512+
1513+Replace `{gfxreconstruct_root}` with the location of your
1514+GFXReconstruct source pulled down from Github above in
1515+the [Building GFXReconstruct](#building-gfxreconstruct)
1516+section.
1517+
1518+**NOTE:** Even though the layer is listed as
1519+"Vk"Layer_gfxreconstruct (as in Vulkan),
1520+it also contains information for the OpenXR
1521+API Layer as well.
1522+
1523+
1524+### 2. App build.gradle Changes
1525+
1526+Add GFXReconstruct's layer as a dependency:
1527+
1528+```bash
1529+dependencies {
1530+ implementation project(':VkLayer_gfxreconstruct')
1531+}
1532+```
1533+
1534+### 3. Adjust App AndroidManifest
1535+
1536+Edit the application file to add both the
1537+`WRITE_EXTERNAL_STORAGE` and `MANAGE_EXTERNAL_STORAGE`
1538+permissions so that GFXReconstruct can write the
1539+capture file to your system.
1540+
1541+For example:
1542+
1543+```bash
1544+<?xml version="1.0" encoding="utf-8"?>
1545+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
1546+ xmlns:tools="http://schemas.android.com/tools"
1547+...
1548+ <uses-permission android:name="org.khronos.openxr.permission.OPENXR" />
1549+ <uses-permission android:name="org.khronos.openxr.permission.OPENXR_SYSTEM" />
1550+...
1551++ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
1552++ <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
1553+...
1554+```
1555+
1556+
1557+### 4. Building Your App
1558+
1559+Build it as normal, it should automatically include
1560+the necessary library files and OpenXR Implicit
1561+API Layer.
1562+
1563+#### Note About Release Build of App
1564+
1565+This step is not necessary for Debug builds of an
1566+application.
1567+However, for Release builds, there is some additional
1568+settings required.
1569+This is because on Android/Meta OS the Vulkan layer
1570+is attached at run-time using Android/Meta OS system
1571+settings.
1572+If the application does not have the `debuggable`
1573+flag set to `true` in the build.gradle file, the layer
1574+will not correctly attach at run-time.
1575+
1576+For example:
1577+
1578+```bash
1579+ release {
1580+ signingConfig signingConfigs.release
1581+- debuggable false
1582++ debuggable true
1583+...
1584+ ndk {
1585+- debuggable false
1586++ debuggable true
1587+...
1588+ }
1589+ }
1590+```
1591+
1592+### 5. Enable GFXReconstruct Vulkan Capture
1593+
1594+Using the ADB installed from the Meta Quest Developer Hub ("C:\Program
1595+Files\Meta Quest Developer Hub\resources\bin\adb.exe" on some systems),
1596+enable the GFXReconstruct layer only for the application using the
1597+global settings:
1598+
1599+```bash
1600+adb shell "settings put global enable_gpu_debug_layers 1"
1601+adb shell "settings put global gpu_debug_app {Android applicationId}"
1602+adb shell "settings put global gpu_debug_layers 'VK_LAYER_LUNARG_gfxreconstruct'"
1603+```
1604+
1605+Replace `{Android applicationId}` with the application's Id.
1606+This Id typically can be found in the `build.gradle` file and
1607+should look something similar to the following:
1608+
1609+* com.facebook.igl.shell.openxr.vulkan
1610+* net.beyondreality.openxr_provider.finger_painting3.openxr
1611+
1612+**NOTE:** If you apply an `applicationIdSuffix`, you should append it to
1613+the applicationId to get the full Identifier.
1614+
1615+#### What do These Commands Do?
1616+
1617+The first command setting `enable_gpu_debug_layers` to 1 tells
1618+the OS that you will be using Debug Vulkan Layers that will be
1619+attached to the application at runtime.
1620+
1621+The second command settings `gpu_debug_app` tells the OS
1622+which application you want the layer applied to.
1623+
1624+The third command setting `gpu_debug_layers` identifies which Debug
1625+Vulkan layers you want enabled.
1626+In this case, GFXReconstruct's Vulkan layer name
1627+`VK_LAYER_LUNARG_gfxreconstruct`.
1628+
1629+
1630+### 6. Set the Capture Options
1631+
1632+Now, set the command indicating where to record the contents
1633+of the capture, in this case to the `/sdcard/Download` folder:
1634+
1635+```bash
1636+adb shell "setprop debug.gfxrecon.capture_file '/sdcard/Download/openxr_capture.gfxr'"
1637+```
1638+
1639+This commands will result in the capture file being written
1640+to the `/sdcard/Download` folder on the device with the
1641+prefix of `openxr_capture` and the suffix of `.gfxr`.
1642+
1643+#### Filename With Timestamp
1644+
1645+By default, the filename provided above is modified to include
1646+a timestamp after the main filename.
1647+For example, with the above information, the expanded
1648+filename with timestamp may look something like
1649+`openxr_capture_20240812T132918.gfxr`.
1650+In general, adding a timestamp to the filename is useful
1651+since it creates a unique file per run allowing users
1652+to capture multiple times without fear of overriding
1653+the previous capture.
1654+However, if you are using it in a script and it may be useful
1655+to force a consistent filename by disabling the use of
1656+the timestamp.
1657+
1658+To disable adding a timestamp to the filename when capturing,
1659+set the following Android property:
1660+
1661+```bash
1662+adb shell "setprop debug.gfxrecon.capture_file_timestamp 0"
1663+```
1664+
1665+**NOTE:** The rest of this document assumes this option
1666+is enabled simply so we can simplify the naming of the
1667+capture filename.
1668+
1669+
1670+#### Limit to a Certain Number of Frames
1671+
1672+You can adjust how many frames are captured (instead of
1673+all frames until the app is completed) by defining
1674+the `debug.gfxrecon.capture_frames` property.
1675+
1676+For example, if you want to only capture the first
1677+500 frames, you do the following:
1678+
1679+```bash
1680+adb shell "setprop debug.gfxrecon.capture_frames '1-500'"
1681+```
1682+
1683+**NOTE:** This will change the name of the capture file generated.
1684+For example, above we set the capture file to
1685+`/sdcard/Download/openxr_capture.gfxr`, but with frame limitations
1686+enabled, it will now be named
1687+`/sdcard/Download/openxr_capture_frames_1_through_500.gfxr`.
1688+If timestamps are not disabled, the filename will look even
1689+more complex, like
1690+`/sdcard/Download/openxr_capture_frames_1_through_500_20240812T132918.gfxr`.
1691+
1692+#### Disable Re-Entrant Cases
1693+
1694+By default, GFXReconstruct capturing of OpenXR and Vulkan
1695+content simultaneously attempts to filter out what we call
1696+"re-entrant" calls.
1697+A "re-entrant" call is when the application calls the OpenXR
1698+runtime, which then creates some graphics API commands
1699+(for example Vulkan commands) to perform some additional work
1700+like composition.
1701+If the application is also performing Vulkan commands,
1702+which GFXReconstruct is capturing, then GFXReconstruct could
1703+run into the situation of capturing unnecessary Vulkan commands
1704+which will be re-generated by the OpenXR at replay time.
1705+To avoid this, we disable recording any calls while an OpenXR
1706+command is in the process of being recorded and executed.
1707+
1708+However, some calls may continue to occur outside of these
1709+OpenXR calls.
1710+In some cases, the OpenXR runtime may have a separate thread
1711+waiting on `VkFences` that were triggered during an OpenXR call.
1712+These additional fences would be completely unknown to
1713+GFXReconstruct because they would have been created and used
1714+initially outside of its view.
1715+Therefore, we need to disable recording any Vulkan commands
1716+that have content we don't recognize.
1717+
1718+This is done by setting the following option:
1719+
1720+```bash
1721+adb shell "setprop debug.gfxrecon.skip_threads_with_invalid_data '1'"
1722+```
1723+
1724+#### Additional Options
1725+
1726+More capture options can be found in the
1727+[USAGE_android.md](./USAGE_android.md) under the [Capture
1728+Options](./USAGE_android.md#capture-options) section.
1729+
1730+### 7. Install and Run the Application
1731+
1732+Install the application as normal and run it.
1733+
1734+**NOTE:** There are several situations in Android that may
1735+prevent updating an application that has already been installed
1736+on the system previously.
1737+In those situations, it is better to make sure any previous
1738+installed versions are stopped and uninstalled before
1739+attempting to install the newer version of the application.
1740+
1741+Then run the application as normal to capture
1742+the content.
1743+
1744+If the application fails to launch, review the
1745+`adb logcat` information for any fatal or error messages.
1746+Here is a useful filter for logcat messages.
1747+
1748+```bash
1749+adb logcat -s DEBUG vulkan VulkanLoader VulkanLoaderAndroid OpenXR OpenXR-Loader gfxrecon {application log tag}
1750+```
1751+
1752+Replace `{application log tag}` with the logging tag the application
1753+uses to log messages to logcat.
1754+
1755+Once complete, if everything executed correctly, the capture
1756+file should be present in the `/sdcard/Download` folder.
1757+
1758+Check that it exists:
1759+
1760+```bash
1761+adb shell ls /sdcard/Download/openxr_capture*.gfxr
1762+```
1763+
1764+## Replaying a Capture File
1765+
1766+
1767+### 1. Install the Quest Replay Application
1768+
1769+Install the GFXReconstruct Quest Replay application
1770+that is built as part of the Android build of
1771+GFXReconstruct using the `gfxrecon.py` script:
1772+
1773+For example, if installing the Debug build of
1774+the Quest replay app:
1775+
1776+```bash
1777+cd {gfxreconstruct_root}
1778+python3 android/scripts/gfxrecon.py install-apk android/tools/quest_replay/build/outputs/apk/debug/quest_replay-debug.apk
1779+```
1780+
1781+Replace `{gfxreconstruct_root}` with the location of your
1782+GFXReconstruct source pulled down from Github above in
1783+the [Building GFXReconstruct](#building-gfxreconstruct)
1784+section.
1785+
1786+### 2. Force External Storage Permissions
1787+
1788+Even though the Quest Replay application is built enabling external
1789+storage access permissions in its Android Manifest file,
1790+it doesn't always appear to stick.
1791+Because of this, it is best to just force the external storage
1792+permission on immediately after installing the application to
1793+allow it to access the files in the `/sdcard/Download` directory:
1794+
1795+```bash
1796+adb shell appops set --uid com.lunarg.gfxreconstruct.replay MANAGE_EXTERNAL_STORAGE allow
1797+```
1798+
1799+### 3. Run the replay
1800+
1801+Run the replay using the `gfxrecon.py` script:
1802+
1803+```bash
1804+python3 android/scripts/gfxrecon.py replay sdcard/Download/{capture_file_name}
1805+```
1806+
1807+Replace `{capture_file_name}` with the name of a
1808+valid capture file that was created.
1809+The replay should run, perform the appropriate rendering,
1810+and then close on completion.
1811+
1812+
1813+## Capturing the Replay Content
1814+
1815+At times, capturing the Quest replay itself may be of use but
1816+does require some additional changes.
1817+
1818+### 1. Build the Replay Enabling Capture
1819+
1820+By default, the Quest replay application does not include the
1821+necessary OpenXR capture layer manifest files.
1822+Because of this, you need to pass in the `EnableOpenXRCaptureOfReplay`
1823+Gradle property during build to properly define all the dependencies
1824+for the capture layer.
1825+
1826+This can be done in the following way:
1827+
1828+```bash
1829+gradlew assembleDebug -PEnableOpenXRCaptureOfReplay=true
1830+```
1831+
1832+Once rebuilt, the capture should be ready from the OpenXR side, however,
1833+you still will need to enable the Vulkan settings to completely and
1834+properly capture the necessary content.
1835+
1836+### 2. Change the Debug app to the GFXRecon Quest replay app
1837+
1838+If you haven't already done so, first follow the instructions to enable
1839+the debug layer in the
1840+[Enable GFXReconstruct Vulkan Capture](#5-enable-gfxreconstruct-vulkan-capture)
1841+section above.
1842+
1843+One change is to make sure that:
1844+* The correct application name is used (here it is the Quest replay
1845+ application)
1846+* Adjust the capture file to use a different name than
1847+ the one being replayed (or it will overwrite what is being read)
1848+
1849+```bash
1850+adb shell settings put global gpu_debug_app com.lunarg.gfxreconstruct.replay
1851+adb shell "setprop debug.gfxrecon.capture_file '/sdcard/Download/replay_capture.gfxr'"
1852+```
1853+
1854+### 2. Install the Updated Replay Tool
1855+
1856+(Follow instructions in the
1857+[1. Install the Quest Replay Application](#1-install-the-quest-replay-application))section above (especially if the Quest replay application was
1858+previously installed without re-capture enabled).
1859+
1860+Repeat the permissions modification as noted in the
1861+[2. Force External Storage Permissions](#2-force-external-storage-permissions)
1862+section above.
1863+
1864+### 3. Run Logcat
1865+
1866+```bash
1867+adb logcat -s DEBUG vulkan VulkanLoader VulkanLoaderAndroid OpenXR OpenXR-Loader gfxrecon
1868+```
1869+
1870+### 4. Upload the Replay Capture
1871+
1872+If the capture file that will be used to replay is not already on
1873+the device, push it to the device using ADB:
1874+
1875+```bash
1876+adb push {capture_file_name} /sdcard/Download
1877+```
1878+
1879+### 5. Run the Quest Replay Application
1880+
1881+Run the replay using the `gfxrecon.py` script:
1882+
1883+```bash
1884+python3 android/scripts/gfxrecon.py replay /sdcard/Download/{capture_file_name}
1885+```
1886+
1887+## OpenXR Capture Known Limitations
1888+
1889+The current implementation has been written to cover the OpenXR API
1890+entrypoints and usage based on a limited number of test applications (listed in issue below).
1891+It is possible that meaningful omissions or errors in capture and/or
1892+replay may exist outside the usage tested.
1893+The current set of known limitations is maintained in
1894+[GitHub/LunarG/gfxreconstruct issue 2145](https://github.com/LunarG/gfxreconstruct/issues/2145).
1895+
1896diff --git a/LICENSE_ThirdParty.txt b/LICENSE_ThirdParty.txt
1897index 48923ce..673a38f 100644
1898--- a/LICENSE_ThirdParty.txt
1899+++ b/LICENSE_ThirdParty.txt
1900@@ -1,7 +1,12 @@
1901 # License Information
1902
1903+<<<<<<< LICENSE_ThirdParty.txt
1904 License information for third party software that may be statically linked with
1905 GFXReconstruct binaries.
1906+=======
1907+This file contains the license information for third-party software dependencies
1908+of GFXReconstruct.
1909+>>>>>>> LICENSE_ThirdParty.txt
1910
1911
1912 ## LZ4 Library
1913@@ -202,7 +207,11 @@ SOFTWARE.
1914
1915 ## AGS
1916
1917+<<<<<<< LICENSE_ThirdParty.txt
1918 # Copyright (c) 2020 Advanced Micro Devices, Inc. All rights reserved.
1919+=======
1920+# Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved.
1921+>>>>>>> LICENSE_ThirdParty.txt
1922
1923 Permission is hereby granted, free of charge, to any person obtaining a copy
1924 of this software and associated documentation files (the "Software"), to deal
1925@@ -408,3 +417,76 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques.
1926 Vous pourriez avoir d’autres droits prévus par les lois de votre pays.
1927 Le présent contrat ne modifie pas les droits que vous confèrent les lois
1928 de votre pays si celles-ci ne le permettent pas.
1929+<<<<<<< LICENSE_ThirdParty.txt
1930+=======
1931+
1932+## DirectX Shader Compiler - d3d12shader.h
1933+
1934+Copyright (c) Microsoft Corporation.
1935+
1936+MIT License
1937+
1938+Permission is hereby granted, free of charge, to any person obtaining a copy
1939+of this software and associated documentation files (the "Software"), to deal
1940+in the Software without restriction, including without limitation the rights
1941+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
1942+copies of the Software, and to permit persons to whom the Software is
1943+furnished to do so, subject to the following conditions:
1944+
1945+The above copyright notice and this permission notice shall be included in all
1946+copies or substantial portions of the Software.
1947+
1948+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1949+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1950+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1951+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1952+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1953+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1954+SOFTWARE.
1955+
1956+## DirectX Shader Compiler - all other files
1957+
1958+==============================================================================
1959+LLVM Release License
1960+==============================================================================
1961+University of Illinois/NCSA
1962+Open Source License
1963+
1964+Copyright (c) 2003-2015 University of Illinois at Urbana-Champaign.
1965+All rights reserved.
1966+
1967+Developed by:
1968+
1969+ LLVM Team
1970+
1971+ University of Illinois at Urbana-Champaign
1972+
1973+ http://llvm.org
1974+
1975+Permission is hereby granted, free of charge, to any person obtaining a copy of
1976+this software and associated documentation files (the "Software"), to deal with
1977+the Software without restriction, including without limitation the rights to
1978+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
1979+of the Software, and to permit persons to whom the Software is furnished to do
1980+so, subject to the following conditions:
1981+
1982+ * Redistributions of source code must retain the above copyright notice,
1983+ this list of conditions and the following disclaimers.
1984+
1985+ * Redistributions in binary form must reproduce the above copyright notice,
1986+ this list of conditions and the following disclaimers in the
1987+ documentation and/or other materials provided with the distribution.
1988+
1989+ * Neither the names of the LLVM Team, University of Illinois at
1990+ Urbana-Champaign, nor the names of its contributors may be used to
1991+ endorse or promote products derived from this Software without specific
1992+ prior written permission.
1993+
1994+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1995+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
1996+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1997+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1998+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1999+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
2000+SOFTWARE.
2001+>>>>>>> LICENSE_ThirdParty.txt
2002diff --git a/README.md b/README.md
2003index 0e3ae8f..b58c82c 100644
2004--- a/README.md
2005+++ b/README.md
2006@@ -1,33 +1,68 @@
2007 # Project Components
2008
2009+<<<<<<< README.md
2010 The GFXReconstruct project provides tools for the capture and replay of graphics
2011+=======
2012+The GFXReconstruct project provides tools for the capture and replay of graphics
2013+>>>>>>> README.md
2014 API calls, allowing the graphics commands executed by an application
2015 to be recorded to a file that may later be replayed to reconstruct the
2016 graphics-specific behavior of the captured application. The replay code has
2017 been organized with a framework design to make it easy to create additional
2018+<<<<<<< README.md
2019 tools for processing capture files.
2020+=======
2021+tools for processing capture files.
2022+>>>>>>> README.md
2023
2024 The GFXReconstruct components currently provided with this repository are:
2025
2026 * The `VK_LAYER_LUNARG_gfxreconstruct` Vulkan layer for capturing
2027+<<<<<<< README.md
2028 Vulkan application commands.
2029+=======
2030+ Vulkan application commands.
2031+>>>>>>> README.md
2032 * The D3D12 capture libraries for capturing D3D12 application commands.
2033 * The `gfxrecon-replay` tool to replay GFXReconstruct capture files.
2034 * The `gfxrecon-info` tool to print information describing GFXReconstruct
2035 capture files.
2036 * The `gfxrecon-compress` tool to compress/decompress GFXReconstruct
2037 capture files.
2038+<<<<<<< README.md
2039 * **NOTE:** The gfxrecon-compress tool requires LZ4, Zstandard, and/or
2040 zlib, which are currently optional build dependencies.
2041+=======
2042+ * **NOTE:** The gfxrecon-compress tool requires LZ4, Zstandard, and/or
2043+ zlib, which are currently optional build dependencies.
2044+>>>>>>> README.md
2045 * The `gfxrecon-extract` tool to extract SPIR-V binaries from
2046 GFXReconstruct capture files.
2047 * The `gfxrecon-convert` tool to convert GFXReconstruct capture files to
2048 a [JSON Lines](https://jsonlines.org/) listing of API calls. (experimental
2049 for D3D12 captures)
2050+<<<<<<< README.md
2051 * The `gfxrecon-optimize` tool to produce new capture files with
2052 improved replay performance.
2053
2054
2055+=======
2056+* The `gfxrecon-optimize` tool to produce new capture files with
2057+ improved replay performance.
2058+
2059+## Experimental OpenXR Support
2060+
2061+OpenXR support in GFXReconstruct is experimental and is recommended only for
2062+developer use for evaluation!
2063+Only a subset of features and a very small number of apps are supported.
2064+See [USAGE_desktop_OpenXR](USAGE_desktop_OpenXR.md) and the
2065+"Supported Capabilities" table below for more detail.
2066+
2067+Because OpenXR support is considered a Proof-of-Concept, it is not enabled
2068+in the SDK built version of GFXReconstruct.
2069+If OpenXR support is desired, please pull the source down from the
2070+GitHub repo and build manually.
2071+>>>>>>> README.md
2072
2073 ## Contributing
2074
2075@@ -37,6 +72,62 @@ submit a pull request.
2076 Please see the [CONTRIBUTING](CONTRIBUTING.md) file in this repository for
2077 more details
2078
2079+<<<<<<< README.md
2080+=======
2081+## Supported Capabilities
2082+
2083+| Capability | Windows | Linux | Mac | Android | Meta Quest |
2084+| -------------- | :--------: | :-----: | :-------: | :-----: | :---------: |
2085+| **Vulkan Support** ||||||
2086+| Capture | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :construction: |
2087+| Replay | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :construction: |
2088+| gfxrecon-compress | :white_check_mark: | :white_check_mark: | :white_check_mark: | :large_orange_diamond: | :large_orange_diamond: |
2089+| gfxrecon-convert | :white_check_mark: | :white_check_mark: | :white_check_mark: | :large_orange_diamond: | :large_orange_diamond: |
2090+| gfxrecon-info | :white_check_mark: | :white_check_mark: | :white_check_mark: | :large_orange_diamond: | :large_orange_diamond: |
2091+| gfxrecon-optimize | :white_check_mark: | :white_check_mark: | :white_check_mark: | :large_orange_diamond: | :x: |
2092+| gfxrecon-tocpp | :x: | :construction: | :x: | :construction: | :x: |
2093+| **D3D12 Support** ||||||
2094+| Capture | :white_check_mark: | :x: | :x: | :x: | :x: |
2095+| Replay | :white_check_mark: | :x: | :x: | :x: | :x: |
2096+| gfxrecon-compress | :white_check_mark: | :x: | :x: | :x: | :x: |
2097+| gfxrecon-convert | :white_check_mark: | :x: | :x: | :x: | :x: |
2098+| gfxrecon-info | :white_check_mark: | :x: | :x: | :x: | :x: |
2099+| gfxrecon-optimize | :white_check_mark: | :x: | :x: | :x: | :x: |
2100+| **OpenXR (Vulkan Graphics API only)** ||||||
2101+| Capture | :construction: | :construction: | :x: | :construction: | :construction: |
2102+| Replay | :construction: | :construction: | :x: | :construction: | :construction: |
2103+| gfxrecon-compress | :construction: | :construction: | :x: | :large_orange_diamond: | :large_orange_diamond: |
2104+| gfxrecon-convert | :construction: | :construction: | :x: | :large_orange_diamond: | :large_orange_diamond: |
2105+| gfxrecon-info | :construction: | :construction: | :x: | :large_orange_diamond: | :large_orange_diamond: |
2106+| gfxrecon-optimize | :x: | :x: | :x: | :x: | :x: |
2107+| gfxrecon-tocpp | :x: | :x: | :x: | :x: | :x: |
2108+
2109+**Legend**
2110+* :white_check_mark: : Supported
2111+* :x: : Not Supported
2112+* :large_orange_diamond: : Not supported on Android/Meta Quest, but Desktop tools support modifying the resulting captures
2113+* :construction: : Early Preview / Alpha / Beta
2114+
2115+### Cross-Platform Capture/Replay Support
2116+
2117+The table above only represents replay on the same platform and driver
2118+version on which the file was captured.
2119+
2120+It is possible in some circumstances to replay on one operating system a
2121+trace that was captured on another operating system.
2122+However this is not currently supported unless specified.
2123+
2124+For example, a Windows capture may replay on Linux, and vice versa,
2125+if:
2126+ * Certain settings are forced in the replay application
2127+ * Overriding the windowing system used
2128+ * Disabling unknown extensions
2129+ * Rebinding memory
2130+ * Compability libraries are enabled to expose operating system behavior
2131+ * Such as Wine.
2132+
2133+
2134+>>>>>>> README.md
2135 ## Building
2136
2137 Instructions for building the contents of this repository can be found in
2138@@ -51,6 +142,15 @@ found at the following locations:
2139 * [Desktop Usage - D3D12](USAGE_desktop_D3D12.md)
2140 * [Android Usage](USAGE_android.md)
2141
2142+<<<<<<< README.md
2143+=======
2144+## Testing
2145+
2146+In addition to unit tests, there are several [test apps](TESTING_test_apps.md) included that can
2147+be used to verify GFXReconstruct output. These test apps execute small graphics workloads which
2148+result in small, known .gfxr outputs.
2149+
2150+>>>>>>> README.md
2151 ## License
2152
2153 This work is licensed under the terms of the MIT License; see
2154@@ -60,8 +160,14 @@ This work is licensed under the terms of the MIT License; see
2155
2156 GFXReconstruct is a suite of tools intended for the purpose of
2157 improving application and platform quality by allowing the analysis
2158+<<<<<<< README.md
2159 of capture and replay of graphics command streams. Use cases
2160 include, for example, regression testing, silicon and platform
2161 bringup, and reporting bugs. Using GFXReconstruct to extract assets
2162+=======
2163+of capture and replay of graphics command streams. Use cases
2164+include, for example, regression testing, silicon and platform
2165+bringup, and reporting bugs. Using GFXReconstruct to extract assets
2166+>>>>>>> README.md
2167 from an application or game for which you don’t have an appropriate
2168 license may violate copyrights or software licenses.
2169diff --git a/TESTING_test_apps.md b/TESTING_test_apps.md
2170new file mode 100644
2171index 0000000..db62bf7
2172--- /dev/null
2173+++ b/TESTING_test_apps.md
2174@@ -0,0 +1,99 @@
2175+# GFXReconstruct Test Apps
2176+
2177+## **Adding a Test App**
2178+
2179+1. Create a new folder in the `test_apps` directory. Name the directory the same name as your test app.
2180+2. Add your code to the new folder
2181+3. Create a new `CMakeLists.txt` file in the new directory that builds your test app. For examples
2182+4. Include the new folder in the CMakeLists.txt file in the `test_apps` directory
2183+
2184+See the *triangle* test app for examples.
2185+
2186+## **Test App Architecture**
2187+
2188+The *gfxrecon::test::TestAppBase* class is provided as a base class for test apps. This base class provides basic Vulkan
2189+initialization and a render loop. The *TestAppBase* provides to following overridable virtual functions:
2190+
2191+* ***void configure_instance_builder(InstanceBuilder&)*** - called before instance creation in order to modify the
2192+ instance creation, e.g. add instance extensions
2193+* ***void configure_physical_device_selector(PhysicalDeviceSelector&)*** - called before physical device selection in
2194+ order to modify device selection
2195+* ***void configure_device_builder(DeviceBuilder&, PhysicalDevice const&)*** - called before device creation in order to
2196+ modify device creation, e.g. add device extensions
2197+* ***void configure_swapchain_builder(SwapchainBuilder&)*** - called before swapchain creation in order to modify
2198+ swapchain creation
2199+* ***void setup()*** - called after the swapchain has been built, but before the render loop. Can be used to setup test
2200+ app specific resources
2201+* ***bool frame(const int frame_num)*** - executes a single frame of the render loop. Returns true to continue the
2202+ render loop, false to exit
2203+* ***void cleanup()*** -- called after the render loop has stopped. Can be used to cleanup test app specific resources
2204+
2205+Only the ***frame*** function is required. All others are optional.
2206+
2207+## **Test Launcher**
2208+
2209+The test-launcher is an executable which can be used to launch test apps.
2210+
2211+```console
2212+gfxrecon-test-launcher - A launcher for GFXReconstruct test apps.
2213+
2214+Usage:
2215+ gfxrecon-test-launcher [-h | --help] <test_name>
2216+
2217+Required arguments:
2218+ <test_name> Name of the test app to launch.
2219+ Options are:
2220+ acquired-image
2221+ host-image-copy
2222+ multisample-depth
2223+ pipeline-binaries
2224+ shader-objects
2225+ sparse-resources
2226+ triangle
2227+ external-memory-fd-export
2228+ external-memory-fd-import
2229+ wait-for-present
2230+ [...]
2231+```
2232+
2233+Use of the *TestAppBase* is required to add a test app to the test-launcher.
2234+
2235+In order to add a test app to the test-launcher, make sure to modify `test_launcher.cpp` using the following approach making sure to replace `<test-name>` with the name of your test app:
2236+1. Add `#include <<test-name>-app.h>`
2237+2. Add `"<test-name>"` to `kAppNames`
2238+3. Add the following code to `CreateTestApp()`:
2239+ ```cpp
2240+ else if (app_name == "<test-name>")
2241+ {
2242+ app = std::make_unique<gfxrecon::test_app::<test_name>::App>();
2243+ }
2244+ ```
2245+
2246+Finally, make sure to add your test app library to the `GFXRECON_TEST_LAUNCHER_LINK_LIBRARIES` list in the following CMakeLists files:
2247+
2248+- `android/test/test_apps/launcher/CMakeLists.txt`
2249+- `test/test_apps/launcher/CMakeLists.txt`
2250+
2251+## **Building Test Apps**
2252+
2253+Test apps are built as part of the default build CMAKE build process. In order to stop test apps from building, set the
2254+**GFXRECON_INCLUDE_TEST_APPS** CMake variable to OFF, e.g. provide `-DGFXRECON_INCLUDE_TEST_APPS=OFF` in your cmake command line.
2255+
2256+## **Test App Verification**
2257+
2258+To run the test apps and validate output against known good '.gfxr' files, build the project and then run the test script from within the 'test' install directory.
2259+
2260+*On Windows:* The test app must not be run as administrator. If you receive an error that the ps1 script is not digitally signed, you will need to run 'Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine' to allow the script to run.
2261+
2262+
2263+|Operating System| ./scripts/build.py Test Directory |Test Script|
2264+|---------------|------------------------------------|------------|
2265+|Windows| build/windows/x64/output/test |run-tests.ps1|
2266+|Linux| build/linux/x64/output/test |run-tests.sh|
2267+|macOS| build/darwin/universal/output/test |run-tests_macos.sh|
2268+
2269+## **Run A Single Test App**
2270+
2271+The default of Test Script `run-tests.sh` runs whole test apps. It could also run a single test app by specifying the test name, e.g. `run-tests.sh triangle`.
2272+
2273+It could also run the test app straightforwardly without the test script. However, many environment variables set in the test script are necessary for running a single test app. Plus, some paths of the environment variables might have to be modified to match your environment.
2274diff --git a/android/build.gradle b/android/build.gradle
2275index 3846962..fabd0ec 100644
2276--- a/android/build.gradle
2277+++ b/android/build.gradle
2278@@ -7,7 +7,11 @@ buildscript {
2279 jcenter()
2280 }
2281 dependencies {
2282+<<<<<<< android/build.gradle
2283 classpath 'com.android.tools.build:gradle:4.1.1'
2284+=======
2285+ classpath 'com.android.tools.build:gradle:8.1.2'
2286+>>>>>>> android/build.gradle
2287
2288
2289 // NOTE: Do not place your application dependencies here; they belong
2290diff --git a/android/framework/application-multi-win/CMakeLists.txt b/android/framework/application-multi-win/CMakeLists.txt
2291new file mode 100644
2292index 0000000..2352d0f
2293--- /dev/null
2294+++ b/android/framework/application-multi-win/CMakeLists.txt
2295@@ -0,0 +1,37 @@
2296+add_library(gfxrecon_application_multiwin STATIC "")
2297+
2298+target_compile_definitions(gfxrecon_application_multiwin
2299+ PUBLIC
2300+ GFXR_MULTI_WINDOW_REPLAY=1
2301+ )
2302+
2303+target_sources(gfxrecon_application_multiwin
2304+ PUBLIC
2305+ ${GFXRECON_SOURCE_DIR}/framework/application/android_context.h
2306+ ${GFXRECON_SOURCE_DIR}/framework/application/android_context.cpp
2307+ ${GFXRECON_SOURCE_DIR}/framework/application/android_window.h
2308+ ${GFXRECON_SOURCE_DIR}/framework/application/android_window.cpp
2309+ ${GFXRECON_SOURCE_DIR}/framework/application/application.h
2310+ ${GFXRECON_SOURCE_DIR}/framework/application/application.cpp
2311+ ${GFXRECON_SOURCE_DIR}/framework/application/wsi_context.h
2312+ ${GFXRECON_SOURCE_DIR}/framework/application/wsi_context.cpp
2313+ ${GFXRECON_SOURCE_DIR}/framework/application/android_jni.cpp
2314+ )
2315+
2316+if (OPENXR_SUPPORT_ENABLED)
2317+ target_include_directories(gfxrecon_application_multiwin PUBLIC ${GFXRECON_SOURCE_DIR}/external/OpenXR-SDK/include)
2318+ target_compile_definitions(gfxrecon_application_multiwin PUBLIC ENABLE_OPENXR_SUPPORT=1)
2319+endif()
2320+
2321+target_include_directories(gfxrecon_application_multiwin
2322+ PUBLIC
2323+ ${GFXRECON_SOURCE_DIR}/framework)
2324+
2325+target_link_libraries(gfxrecon_application_multiwin
2326+ gfxrecon_decode
2327+ gfxrecon_graphics
2328+ gfxrecon_format
2329+ gfxrecon_util
2330+ native_app_glue
2331+ vulkan_registry
2332+ platform_specific)
2333diff --git a/android/framework/application/CMakeLists.txt b/android/framework/application/CMakeLists.txt
2334index cacd4a1..c2a716e 100644
2335--- a/android/framework/application/CMakeLists.txt
2336+++ b/android/framework/application/CMakeLists.txt
2337@@ -1,7 +1,11 @@
2338 add_library(gfxrecon_application STATIC "")
2339
2340 target_sources(gfxrecon_application
2341+<<<<<<< android/framework/application/CMakeLists.txt
2342 PRIVATE
2343+=======
2344+ PUBLIC
2345+>>>>>>> android/framework/application/CMakeLists.txt
2346 ${GFXRECON_SOURCE_DIR}/framework/application/android_context.h
2347 ${GFXRECON_SOURCE_DIR}/framework/application/android_context.cpp
2348 ${GFXRECON_SOURCE_DIR}/framework/application/android_window.h
2349@@ -10,17 +14,35 @@ target_sources(gfxrecon_application
2350 ${GFXRECON_SOURCE_DIR}/framework/application/application.cpp
2351 ${GFXRECON_SOURCE_DIR}/framework/application/wsi_context.h
2352 ${GFXRECON_SOURCE_DIR}/framework/application/wsi_context.cpp
2353+<<<<<<< android/framework/application/CMakeLists.txt
2354 )
2355
2356 target_include_directories(gfxrecon_application
2357 PUBLIC
2358 ${GFXRECON_SOURCE_DIR}/framework
2359 ${ANDROID_NDK}/sources/android/native_app_glue)
2360+=======
2361+ ${GFXRECON_SOURCE_DIR}/framework/application/android_jni.cpp
2362+ )
2363+
2364+if (OPENXR_SUPPORT_ENABLED)
2365+ target_include_directories(gfxrecon_application PUBLIC ${GFXRECON_SOURCE_DIR}/external/OpenXR-SDK/include)
2366+ target_compile_definitions(gfxrecon_application PUBLIC ENABLE_OPENXR_SUPPORT=1)
2367+endif()
2368+
2369+target_include_directories(gfxrecon_application
2370+ PUBLIC
2371+ ${GFXRECON_SOURCE_DIR}/framework)
2372+>>>>>>> android/framework/application/CMakeLists.txt
2373
2374 target_link_libraries(gfxrecon_application
2375 gfxrecon_decode
2376 gfxrecon_graphics
2377 gfxrecon_format
2378 gfxrecon_util
2379+<<<<<<< android/framework/application/CMakeLists.txt
2380+=======
2381+ native_app_glue
2382+>>>>>>> android/framework/application/CMakeLists.txt
2383 vulkan_registry
2384 platform_specific)
2385diff --git a/android/framework/cmake-config/PlatformConfig.cmake b/android/framework/cmake-config/PlatformConfig.cmake
2386index 65d9bd4..b261a74 100644
2387--- a/android/framework/cmake-config/PlatformConfig.cmake
2388+++ b/android/framework/cmake-config/PlatformConfig.cmake
2389@@ -1,12 +1,29 @@
2390+<<<<<<< android/framework/cmake-config/PlatformConfig.cmake
2391 set(CMAKE_CXX_STANDARD 17)
2392 set(CXX_STANDARD_REQUIRED ON)
2393
2394 set(CMAKE_MODULE_PATH "${GFXRECON_SOURCE_DIR}/external/cmake-modules")
2395+=======
2396+set(CMAKE_CXX_STANDARD 20)
2397+set(CXX_STANDARD_REQUIRED ON)
2398+
2399+# because the NDK sets CMAKE_FIND_ROOT_PATH_MODE_* to ONLY, it ignores
2400+# us setting CMAKE_PREFIX_PATH. So just set the package DIR directly.
2401+set(nlohmann_json_DIR "${GFXRECON_SOURCE_DIR}/external/nlohmann-json/share/cmake/nlohmann_json")
2402+find_package(nlohmann_json REQUIRED CONFIG PATHS "${nlohmann_json_DIR}" NO_DEFAULT_PATH)
2403+
2404+set(CMAKE_MODULE_PATH "${GFXRECON_SOURCE_DIR}/external/cmake-modules")
2405+list(APPEND CMAKE_MODULE_PATH "${GFXRECON_SOURCE_DIR}/cmake")
2406+>>>>>>> android/framework/cmake-config/PlatformConfig.cmake
2407
2408 # Version info
2409 set(GFXRECONSTRUCT_PROJECT_VERSION_MAJOR 1)
2410 set(GFXRECONSTRUCT_PROJECT_VERSION_MINOR 0)
2411+<<<<<<< android/framework/cmake-config/PlatformConfig.cmake
2412 set(GFXRECONSTRUCT_PROJECT_VERSION_PATCH 4)
2413+=======
2414+set(GFXRECONSTRUCT_PROJECT_VERSION_PATCH 5)
2415+>>>>>>> android/framework/cmake-config/PlatformConfig.cmake
2416
2417 set(GFXRECON_PROJECT_VERSION_DESIGNATION "-unknown")
2418 set(GFXRECON_PROJECT_VERSION_SHA1 "unknown-build-source")
2419@@ -55,12 +72,48 @@ file(GENERATE OUTPUT "${CMAKE_BINARY_DIR}/project_version_$<CONFIG>.h" INPUT "${
2420 # Since project_version_$<CONFIG>.h differs per build, set a compiler definition that files can use to include it
2421 add_definitions(-DPROJECT_VERSION_HEADER_FILE="project_version_$<CONFIG>.h")
2422
2423+<<<<<<< android/framework/cmake-config/PlatformConfig.cmake
2424 add_library(platform_specific INTERFACE)
2425 target_compile_definitions(platform_specific INTERFACE _FILE_OFFSET_BITS=64 PAGE_GUARD_ENABLE_UCONTEXT_WRITE_DETECTION VK_USE_PLATFORM_ANDROID_KHR)
2426+=======
2427+# Isolate the repo SHA in a library to reduce the amount of recompilation on git commit, checkout, etc.
2428+# Clients should #include PROJECT_VERSION_HEADER_FILE and call GetProjectVersionString()
2429+configure_file("${GFXRECON_SOURCE_DIR}/project_version_string.h.in" "${CMAKE_BINARY_DIR}/project_version_string.h")
2430+add_library(project_version "${GFXRECON_SOURCE_DIR}/project_version.cpp")
2431+target_include_directories(project_version PUBLIC "${CMAKE_BINARY_DIR}")
2432+
2433+add_library(platform_specific INTERFACE)
2434+target_compile_definitions(platform_specific INTERFACE
2435+ _FILE_OFFSET_BITS=64
2436+ PAGE_GUARD_ENABLE_UCONTEXT_WRITE_DETECTION
2437+ VK_USE_PLATFORM_ANDROID_KHR
2438+ XR_USE_PLATFORM_ANDROID
2439+ XR_USE_GRAPHICS_API_VULKAN)
2440+>>>>>>> android/framework/cmake-config/PlatformConfig.cmake
2441
2442 add_library(vulkan_registry INTERFACE)
2443 target_include_directories(vulkan_registry INTERFACE ${GFXRECON_SOURCE_DIR}/external/Vulkan-Headers/include)
2444 target_compile_definitions(vulkan_registry INTERFACE VK_NO_PROTOTYPES VK_ENABLE_BETA_EXTENSIONS)
2445
2446+<<<<<<< android/framework/cmake-config/PlatformConfig.cmake
2447 add_library(vulkan_memory_allocator INTERFACE)
2448 target_include_directories(vulkan_memory_allocator INTERFACE ${GFXRECON_SOURCE_DIR}/external/VulkanMemoryAllocator/include)
2449+=======
2450+add_library(spirv_registry INTERFACE)
2451+target_include_directories(spirv_registry INTERFACE ${GFXRECON_SOURCE_DIR}/external/SPIRV-Headers/include)
2452+
2453+add_library(vulkan_memory_allocator INTERFACE)
2454+target_include_directories(vulkan_memory_allocator INTERFACE ${GFXRECON_SOURCE_DIR}/external/VulkanMemoryAllocator/include)
2455+
2456+# SPIRV-Reflect included as submodule -> libspirv-reflect-static.a
2457+set(SPIRV_REFLECT_EXAMPLES OFF CACHE INTERNAL "no spirv_reflect samples" FORCE)
2458+set(SPIRV_REFLECT_EXECUTABLE OFF CACHE INTERNAL "no spirv_reflect executables" FORCE)
2459+set(SPIRV_REFLECT_STATIC_LIB ON CACHE INTERNAL "create spirv-reflect-static library" FORCE)
2460+set(CMAKE_POLICY_DEFAULT_CMP0077 NEW CACHE INTERNAL "set a cmake policy for spirv_reflect" FORCE)
2461+add_subdirectory("${GFXRECON_SOURCE_DIR}/external/SPIRV-Reflect" EXCLUDE_FROM_ALL "${CMAKE_BINARY_DIR}/external/SPIRV-Reflect")
2462+include_directories("${GFXRECON_SOURCE_DIR}/external/SPIRV-Reflect")
2463+
2464+# Export ANativeActivity_onCreate(),
2465+# Refer to: https://github.com/android-ndk/ndk/issues/381.
2466+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")
2467+>>>>>>> android/framework/cmake-config/PlatformConfig.cmake
2468diff --git a/android/framework/decode/CMakeLists.txt b/android/framework/decode/CMakeLists.txt
2469index c8e2d01..04868c1 100644
2470--- a/android/framework/decode/CMakeLists.txt
2471+++ b/android/framework/decode/CMakeLists.txt
2472@@ -4,8 +4,29 @@ target_sources(gfxrecon_decode
2473 PRIVATE
2474 ${GFXRECON_SOURCE_DIR}/framework/decode/annotation_handler.h
2475 ${GFXRECON_SOURCE_DIR}/framework/decode/api_decoder.h
2476+<<<<<<< android/framework/decode/CMakeLists.txt
2477 ${GFXRECON_SOURCE_DIR}/framework/decode/common_consumer_base.h
2478 ${GFXRECON_SOURCE_DIR}/framework/decode/copy_shaders.h
2479+=======
2480+ ${GFXRECON_SOURCE_DIR}/framework/decode/api_payload.h
2481+ ${GFXRECON_SOURCE_DIR}/framework/decode/block_buffer.h
2482+ ${GFXRECON_SOURCE_DIR}/framework/decode/block_buffer.cpp
2483+ ${GFXRECON_SOURCE_DIR}/framework/decode/block_parser.h
2484+ ${GFXRECON_SOURCE_DIR}/framework/decode/block_parser.cpp
2485+ ${GFXRECON_SOURCE_DIR}/framework/decode/common_consumer_base.h
2486+ ${GFXRECON_SOURCE_DIR}/framework/decode/common_handle_mapping_util.h
2487+ ${GFXRECON_SOURCE_DIR}/framework/decode/common_object_info_table.h
2488+ ${GFXRECON_SOURCE_DIR}/framework/decode/common_struct_handle_mappers.h
2489+ ${GFXRECON_SOURCE_DIR}/framework/decode/common_object_info_table.cpp
2490+ ${GFXRECON_SOURCE_DIR}/framework/decode/copy_shaders.h
2491+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/custom_openxr_struct_decoders.h>
2492+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/custom_openxr_struct_decoders.cpp>
2493+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/custom_openxr_struct_decoders_forward.h>
2494+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/custom_openxr_struct_handle_mappers.h>
2495+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/custom_openxr_struct_handle_mappers.cpp>
2496+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/custom_openxr_struct_to_json.h>
2497+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/custom_openxr_struct_to_json.cpp>
2498+>>>>>>> android/framework/decode/CMakeLists.txt
2499 ${GFXRECON_SOURCE_DIR}/framework/decode/custom_vulkan_struct_decoders.h
2500 ${GFXRECON_SOURCE_DIR}/framework/decode/custom_vulkan_struct_decoders.cpp
2501 ${GFXRECON_SOURCE_DIR}/framework/decode/custom_vulkan_struct_decoders_forward.h
2502@@ -17,9 +38,53 @@ target_sources(gfxrecon_decode
2503 ${GFXRECON_SOURCE_DIR}/framework/decode/descriptor_update_template_decoder.cpp
2504 ${GFXRECON_SOURCE_DIR}/framework/decode/file_processor.h
2505 ${GFXRECON_SOURCE_DIR}/framework/decode/file_processor.cpp
2506+<<<<<<< android/framework/decode/CMakeLists.txt
2507+ ${GFXRECON_SOURCE_DIR}/framework/decode/file_transformer.h
2508+ ${GFXRECON_SOURCE_DIR}/framework/decode/file_transformer.cpp
2509+ ${GFXRECON_SOURCE_DIR}/framework/decode/handle_pointer_decoder.h
2510+=======
2511+ ${GFXRECON_SOURCE_DIR}/framework/decode/preload_file_processor.h
2512+ ${GFXRECON_SOURCE_DIR}/framework/decode/preload_file_processor.cpp
2513 ${GFXRECON_SOURCE_DIR}/framework/decode/file_transformer.h
2514 ${GFXRECON_SOURCE_DIR}/framework/decode/file_transformer.cpp
2515 ${GFXRECON_SOURCE_DIR}/framework/decode/handle_pointer_decoder.h
2516+ ${GFXRECON_SOURCE_DIR}/framework/decode/json_writer.h
2517+ ${GFXRECON_SOURCE_DIR}/framework/decode/json_writer.cpp
2518+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_consumer_base.h>
2519+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_decoder_base.h>
2520+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_decoder_base.cpp>
2521+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_detection_consumer.h>
2522+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_enum_util.h>
2523+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_feature_util.h>
2524+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_feature_util.cpp>
2525+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_handle_mapping_util.h>
2526+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_handle_mapping_util.cpp>
2527+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_json_consumer_base.h>
2528+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_json_consumer_base.cpp>
2529+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_next_node.h>
2530+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_next_typed_node.h>
2531+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_object_info.h>
2532+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_object_info_table_base.h>
2533+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_replay_common_state.h>
2534+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_replay_session_state.h>
2535+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_replay_session_state.cpp>
2536+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_replay_swapchain_state.h>
2537+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_replay_swapchain_state.cpp>
2538+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_replay_consumer_base.h>
2539+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_replay_consumer_base.cpp>
2540+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_replay_options.h>
2541+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_resource_tracking_consumer.h>
2542+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_resource_tracking_consumer.cpp>
2543+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_stats_consumer.h>
2544+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_tracked_object_info.h>
2545+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_tracked_object_info_table.h>
2546+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_tracked_object_info.cpp>
2547+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_tracked_object_info_table.cpp>
2548+ ${GFXRECON_SOURCE_DIR}/framework/decode/mark_injected_commands.h
2549+ ${GFXRECON_SOURCE_DIR}/framework/decode/mark_injected_commands.cpp
2550+ ${GFXRECON_SOURCE_DIR}/framework/decode/parsed_block.h
2551+ ${GFXRECON_SOURCE_DIR}/framework/decode/parsed_block.cpp
2552+>>>>>>> android/framework/decode/CMakeLists.txt
2553 ${GFXRECON_SOURCE_DIR}/framework/decode/pointer_decoder_base.h
2554 ${GFXRECON_SOURCE_DIR}/framework/decode/pointer_decoder.h
2555 ${GFXRECON_SOURCE_DIR}/framework/decode/portability.h
2556@@ -45,11 +110,22 @@ target_sources(gfxrecon_decode
2557 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_decoder_base.cpp
2558 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_default_allocator.h
2559 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_default_allocator.cpp
2560+<<<<<<< android/framework/decode/CMakeLists.txt
2561 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_captured_swapchain.h
2562 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_captured_swapchain.cpp
2563 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_enum_util.h
2564 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_feature_util.h
2565 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_feature_util.cpp
2566+=======
2567+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_address_replacer.h
2568+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_address_replacer.cpp
2569+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_address_replacer_shaders.h
2570+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_device_address_tracker.h
2571+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_device_address_tracker.cpp
2572+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_captured_swapchain.h
2573+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_captured_swapchain.cpp
2574+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_enum_util.h
2575+>>>>>>> android/framework/decode/CMakeLists.txt
2576 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_handle_mapping_util.h
2577 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_handle_mapping_util.cpp
2578 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_object_cleanup_util.h
2579@@ -70,6 +146,22 @@ target_sources(gfxrecon_decode
2580 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_consumer_base.h
2581 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_consumer_base.cpp
2582 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_options.h
2583+<<<<<<< android/framework/decode/CMakeLists.txt
2584+=======
2585+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_pre_process_consumer.h
2586+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources.h
2587+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources.cpp
2588+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_common.h
2589+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_common.cpp
2590+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_draw_calls.h
2591+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_draw_calls.cpp
2592+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_compute_ray_tracing.h
2593+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_compute_ray_tracing.cpp
2594+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_delegate.h
2595+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_delegate.cpp
2596+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_json.h
2597+ ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_json.cpp
2598+>>>>>>> android/framework/decode/CMakeLists.txt
2599 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_resource_allocator.h
2600 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_resource_initializer.h
2601 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_resource_initializer.cpp
2602@@ -86,17 +178,47 @@ target_sources(gfxrecon_decode
2603 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_offscreen_swapchain.h
2604 ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_offscreen_swapchain.cpp
2605 ${GFXRECON_SOURCE_DIR}/framework/decode/window.h
2606+<<<<<<< android/framework/decode/CMakeLists.txt
2607 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_consumer.h
2608 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_decoder.h
2609 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_decoder.cpp
2610 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_feature_util.cpp
2611 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_replay_consumer.h
2612 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_replay_consumer.cpp
2613+=======
2614+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_consumer.h>
2615+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_decoder.h>
2616+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_decoder.cpp>
2617+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_enum_to_json.h>
2618+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_enum_to_json.cpp>
2619+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_json_consumer.h>
2620+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_json_consumer.cpp>
2621+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_object_info_table.h>
2622+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_replay_consumer.h>
2623+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_replay_consumer.cpp>
2624+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_struct_decoders.h>
2625+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_struct_decoders.cpp>
2626+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_struct_decoders_forward.h>
2627+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_struct_handle_mappers.h>
2628+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_struct_handle_mappers.cpp>
2629+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_struct_next_decoder.cpp>
2630+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_struct_to_json.h>
2631+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_struct_to_json.cpp>
2632+ ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_consumer.h
2633+ ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_decoder.h
2634+ ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_decoder.cpp
2635+ ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_pnext_struct_decoder.cpp
2636+ ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_replay_consumer.h
2637+ ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_replay_consumer.cpp
2638+ ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_replay_dump_resources.h
2639+ ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_replay_dump_resources.cpp
2640+>>>>>>> android/framework/decode/CMakeLists.txt
2641 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_struct_decoders_forward.h
2642 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_struct_decoders.h
2643 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_struct_decoders.cpp
2644 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_struct_handle_mappers.h
2645 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_struct_handle_mappers.cpp
2646+<<<<<<< android/framework/decode/CMakeLists.txt
2647 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_decode_pnext_struct.cpp
2648 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_object_info_table_base2.h
2649 )
2650@@ -106,3 +228,27 @@ target_include_directories(gfxrecon_decode
2651 ${GFXRECON_SOURCE_DIR}/framework)
2652
2653 target_link_libraries(gfxrecon_decode gfxrecon_graphics gfxrecon_format gfxrecon_util vulkan_registry vulkan_memory_allocator platform_specific)
2654+=======
2655+ ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_object_info_table_base2.h
2656+ )
2657+
2658+if (OPENXR_SUPPORT_ENABLED)
2659+ target_include_directories(gfxrecon_decode PUBLIC ${GFXRECON_SOURCE_DIR}/external/OpenXR-SDK/include)
2660+ target_compile_definitions(gfxrecon_decode PUBLIC ENABLE_OPENXR_SUPPORT=1)
2661+endif()
2662+
2663+target_include_directories(gfxrecon_decode
2664+ PUBLIC
2665+ ${CMAKE_BINARY_DIR}
2666+ ${GFXRECON_SOURCE_DIR}/framework
2667+ ${GFXRECON_SOURCE_DIR}/external/precompiled/android/include)
2668+
2669+target_link_libraries(gfxrecon_decode
2670+ gfxrecon_graphics
2671+ gfxrecon_format
2672+ gfxrecon_util
2673+ vulkan_registry
2674+ vulkan_memory_allocator
2675+ platform_specific
2676+ spirv-reflect-static)
2677+>>>>>>> android/framework/decode/CMakeLists.txt
2678diff --git a/android/framework/encode/CMakeLists.txt b/android/framework/encode/CMakeLists.txt
2679index cace824..7750f22 100644
2680--- a/android/framework/encode/CMakeLists.txt
2681+++ b/android/framework/encode/CMakeLists.txt
2682@@ -8,6 +8,18 @@ target_sources(gfxrecon_encode
2683 ${GFXRECON_SOURCE_DIR}/framework/encode/capture_manager.cpp
2684 ${GFXRECON_SOURCE_DIR}/framework/encode/capture_settings.h
2685 ${GFXRECON_SOURCE_DIR}/framework/encode/capture_settings.cpp
2686+<<<<<<< android/framework/encode/CMakeLists.txt
2687+=======
2688+ ${GFXRECON_SOURCE_DIR}/framework/encode/command_writer.h
2689+ ${GFXRECON_SOURCE_DIR}/framework/encode/command_writer.cpp
2690+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/custom_openxr_encoder_commands.h>
2691+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/custom_openxr_api_call_encoders.h>
2692+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/custom_openxr_api_call_encoders.cpp>
2693+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/custom_openxr_struct_encoders.h>
2694+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/custom_openxr_struct_encoders.cpp>
2695+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/custom_openxr_struct_handle_wrappers.h>
2696+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/custom_openxr_struct_handle_wrappers.cpp>
2697+>>>>>>> android/framework/encode/CMakeLists.txt
2698 ${GFXRECON_SOURCE_DIR}/framework/encode/custom_vulkan_encoder_commands.h
2699 ${GFXRECON_SOURCE_DIR}/framework/encode/custom_vulkan_api_call_encoders.h
2700 ${GFXRECON_SOURCE_DIR}/framework/encode/custom_vulkan_api_call_encoders.cpp
2701@@ -17,6 +29,21 @@ target_sources(gfxrecon_encode
2702 ${GFXRECON_SOURCE_DIR}/framework/encode/custom_vulkan_struct_encoders.cpp
2703 ${GFXRECON_SOURCE_DIR}/framework/encode/custom_vulkan_struct_handle_wrappers.h
2704 ${GFXRECON_SOURCE_DIR}/framework/encode/custom_vulkan_struct_handle_wrappers.cpp
2705+<<<<<<< android/framework/encode/CMakeLists.txt
2706+=======
2707+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/openxr_capture_manager.h>
2708+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/openxr_capture_manager.cpp>
2709+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/openxr_handle_wrappers.h>
2710+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/openxr_handle_wrapper_util.h>
2711+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/openxr_handle_wrapper_util.cpp>
2712+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/openxr_state_info.h>
2713+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/openxr_state_table_base.h>
2714+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/openxr_state_tracker.h>
2715+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/openxr_state_tracker_initializers.h>
2716+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/openxr_state_tracker.cpp>
2717+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/openxr_state_writer.h>
2718+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/encode/openxr_state_writer.cpp>
2719+>>>>>>> android/framework/encode/CMakeLists.txt
2720 ${GFXRECON_SOURCE_DIR}/framework/encode/descriptor_update_template_info.h
2721 ${GFXRECON_SOURCE_DIR}/framework/encode/handle_unwrap_memory.h
2722 ${GFXRECON_SOURCE_DIR}/framework/encode/parameter_buffer.h
2723@@ -24,8 +51,20 @@ target_sources(gfxrecon_encode
2724 ${GFXRECON_SOURCE_DIR}/framework/encode/scoped_destroy_lock.h
2725 ${GFXRECON_SOURCE_DIR}/framework/encode/scoped_destroy_lock.cpp
2726 ${GFXRECON_SOURCE_DIR}/framework/encode/struct_pointer_encoder.h
2727+<<<<<<< android/framework/encode/CMakeLists.txt
2728 ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_capture_manager.h
2729 ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_capture_manager.cpp
2730+=======
2731+ ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_acceleration_structure_build_state.h
2732+ ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_capture_layer_settings.h
2733+ ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_capture_layer_settings.cpp
2734+ ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_capture_manager.h
2735+ ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_capture_manager.cpp
2736+ ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_device_address_tracker.h
2737+ ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_device_address_tracker.cpp
2738+ ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_entry_base.h
2739+ ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_entry_base.cpp
2740+>>>>>>> android/framework/encode/CMakeLists.txt
2741 ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_handle_wrappers.h
2742 ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_handle_wrapper_util.h
2743 ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_handle_wrapper_util.cpp
2744@@ -35,24 +74,57 @@ target_sources(gfxrecon_encode
2745 ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_state_tracker.cpp
2746 ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_state_writer.h
2747 ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_state_writer.cpp
2748+<<<<<<< android/framework/encode/CMakeLists.txt
2749 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_encode_pnext_struct.cpp
2750+=======
2751+ ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_track_struct.h
2752+ ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_capture_common.cpp
2753+ ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_capture_common.h
2754+>>>>>>> android/framework/encode/CMakeLists.txt
2755 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_api_call_encoders.h
2756 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_api_call_encoders.cpp
2757 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_command_buffer_util.h
2758 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_command_buffer_util.cpp
2759+<<<<<<< android/framework/encode/CMakeLists.txt
2760 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_dispatch_table.h
2761+=======
2762+ ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_pnext_struct_encoder.cpp
2763+>>>>>>> android/framework/encode/CMakeLists.txt
2764 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_struct_encoders.h
2765 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_struct_encoders.cpp
2766 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_struct_handle_wrappers.h
2767 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_struct_handle_wrappers.cpp
2768+<<<<<<< android/framework/encode/CMakeLists.txt
2769 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_struct_trackers.h
2770 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_struct_trackers.cpp
2771 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_state_table.h
2772 )
2773
2774+=======
2775+ ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_state_table.h
2776+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_api_call_encoders.h>
2777+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_api_call_encoders.cpp>
2778+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_struct_encoders.h>
2779+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_struct_encoders.cpp>
2780+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_struct_handle_wrappers.h>
2781+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_struct_handle_wrappers.cpp>
2782+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_struct_next_encoder.cpp>
2783+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_state_table.h>
2784+ )
2785+
2786+if (OPENXR_SUPPORT_ENABLED)
2787+ target_include_directories(gfxrecon_encode PUBLIC ${GFXRECON_SOURCE_DIR}/external/OpenXR-SDK/include)
2788+ target_compile_definitions(gfxrecon_encode PUBLIC ENABLE_OPENXR_SUPPORT=1)
2789+endif()
2790+
2791+>>>>>>> android/framework/encode/CMakeLists.txt
2792 target_include_directories(gfxrecon_encode
2793 PUBLIC
2794 ${CMAKE_BINARY_DIR}
2795 ${GFXRECON_SOURCE_DIR}/framework)
2796
2797+<<<<<<< android/framework/encode/CMakeLists.txt
2798 target_link_libraries(gfxrecon_encode gfxrecon_graphics gfxrecon_format gfxrecon_util vulkan_registry platform_specific android)
2799+=======
2800+target_link_libraries(gfxrecon_encode gfxrecon_graphics gfxrecon_format gfxrecon_util vulkan_registry platform_specific project_version android)
2801+>>>>>>> android/framework/encode/CMakeLists.txt
2802diff --git a/android/framework/format/CMakeLists.txt b/android/framework/format/CMakeLists.txt
2803index 65a2ea5..70307d7 100644
2804--- a/android/framework/format/CMakeLists.txt
2805+++ b/android/framework/format/CMakeLists.txt
2806@@ -7,8 +7,19 @@ target_sources(gfxrecon_format
2807 ${GFXRECON_SOURCE_DIR}/framework/format/format_util.h
2808 ${GFXRECON_SOURCE_DIR}/framework/format/format_util.cpp
2809 ${GFXRECON_SOURCE_DIR}/framework/format/platform_types.h
2810+<<<<<<< android/framework/format/CMakeLists.txt
2811 )
2812
2813+=======
2814+ ${GFXRECON_SOURCE_DIR}/framework/format/platform_types_d3d_overrides.h
2815+ )
2816+
2817+if (OPENXR_SUPPORT_ENABLED)
2818+ target_include_directories(gfxrecon_format PUBLIC ${GFXRECON_SOURCE_DIR}/external/OpenXR-SDK/include)
2819+ target_compile_definitions(gfxrecon_format PUBLIC ENABLE_OPENXR_SUPPORT=1)
2820+endif()
2821+
2822+>>>>>>> android/framework/format/CMakeLists.txt
2823 target_include_directories(gfxrecon_format
2824 PUBLIC
2825 ${GFXRECON_SOURCE_DIR}/framework)
2826diff --git a/android/framework/graphics/CMakeLists.txt b/android/framework/graphics/CMakeLists.txt
2827index fd8e97c..f7dfecb 100644
2828--- a/android/framework/graphics/CMakeLists.txt
2829+++ b/android/framework/graphics/CMakeLists.txt
2830@@ -4,17 +4,48 @@ target_sources(gfxrecon_graphics
2831 PRIVATE
2832 ${GFXRECON_SOURCE_DIR}/framework/graphics/fps_info.h
2833 ${GFXRECON_SOURCE_DIR}/framework/graphics/fps_info.cpp
2834+<<<<<<< android/framework/graphics/CMakeLists.txt
2835 ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_device_util.h
2836 ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_device_util.cpp
2837+=======
2838+ ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_check_buffer_references.h
2839+ ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_check_buffer_references.cpp
2840+ ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_device_util.h
2841+ ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_device_util.cpp
2842+ ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_instance_util.h
2843+ ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_instance_util.cpp
2844+>>>>>>> android/framework/graphics/CMakeLists.txt
2845 ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_resources_util.h
2846 ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_resources_util.cpp
2847 ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_util.h
2848 ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_util.cpp
2849+<<<<<<< android/framework/graphics/CMakeLists.txt
2850 )
2851
2852 target_include_directories(gfxrecon_graphics
2853 PUBLIC
2854 ${GFXRECON_SOURCE_DIR}/external/nlohmann/include
2855+=======
2856+ ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_feature_util.h
2857+ ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_feature_util.cpp
2858+ ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_struct_deep_copy.h
2859+ ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_struct_get_pnext.h
2860+ ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_dispatch_table.h
2861+ ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_struct_deep_copy.cpp
2862+ ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_struct_deep_copy_stype.cpp
2863+ ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_feature_util.cpp
2864+ ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_struct_extract_handles.h
2865+ ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_struct_extract_handles.cpp
2866+ )
2867+
2868+if (OPENXR_SUPPORT_ENABLED)
2869+ target_include_directories(gfxrecon_graphics PUBLIC ${GFXRECON_SOURCE_DIR}/external/OpenXR-SDK/include)
2870+ target_compile_definitions(gfxrecon_graphics PUBLIC ENABLE_OPENXR_SUPPORT=1)
2871+endif()
2872+
2873+target_include_directories(gfxrecon_graphics
2874+ PUBLIC
2875+>>>>>>> android/framework/graphics/CMakeLists.txt
2876 ${GFXRECON_SOURCE_DIR}/external
2877 ${GFXRECON_SOURCE_DIR}/framework)
2878
2879diff --git a/android/framework/util/CMakeLists.txt b/android/framework/util/CMakeLists.txt
2880index fb0e712..fa2b077 100644
2881--- a/android/framework/util/CMakeLists.txt
2882+++ b/android/framework/util/CMakeLists.txt
2883@@ -1,22 +1,63 @@
2884+<<<<<<< android/framework/util/CMakeLists.txt
2885+=======
2886+
2887+add_library(native_app_glue STATIC
2888+ ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
2889+
2890+target_include_directories(native_app_glue
2891+ PUBLIC
2892+ ${ANDROID_NDK}/sources/android/native_app_glue)
2893+
2894+>>>>>>> android/framework/util/CMakeLists.txt
2895 add_library(gfxrecon_util STATIC "")
2896
2897 target_sources(gfxrecon_util
2898 PRIVATE
2899+<<<<<<< android/framework/util/CMakeLists.txt
2900 ${GFXRECON_SOURCE_DIR}/framework/util/argument_parser.h
2901 ${GFXRECON_SOURCE_DIR}/framework/util/argument_parser.cpp
2902+=======
2903+ ${GFXRECON_SOURCE_DIR}/framework/util/android/activity.h
2904+ ${GFXRECON_SOURCE_DIR}/framework/util/android/activity.cpp
2905+ ${GFXRECON_SOURCE_DIR}/framework/util/android/intent.h
2906+ ${GFXRECON_SOURCE_DIR}/framework/util/android/intent.cpp
2907+ ${GFXRECON_SOURCE_DIR}/framework/util/alignment_utils.h
2908+ ${GFXRECON_SOURCE_DIR}/framework/util/argument_parser.h
2909+ ${GFXRECON_SOURCE_DIR}/framework/util/argument_parser.cpp
2910+ ${GFXRECON_SOURCE_DIR}/framework/util/buffer_writer.h
2911+ ${GFXRECON_SOURCE_DIR}/framework/util/buffer_writer.cpp
2912+ ${GFXRECON_SOURCE_DIR}/framework/util/clock_cache.h
2913+>>>>>>> android/framework/util/CMakeLists.txt
2914 ${GFXRECON_SOURCE_DIR}/framework/util/compressor.h
2915 ${GFXRECON_SOURCE_DIR}/framework/util/date_time.h
2916 ${GFXRECON_SOURCE_DIR}/framework/util/date_time.cpp
2917 ${GFXRECON_SOURCE_DIR}/framework/util/defines.h
2918+<<<<<<< android/framework/util/CMakeLists.txt
2919+=======
2920+ ${GFXRECON_SOURCE_DIR}/framework/util/file_input_stream.h
2921+ ${GFXRECON_SOURCE_DIR}/framework/util/file_input_stream.cpp
2922+>>>>>>> android/framework/util/CMakeLists.txt
2923 ${GFXRECON_SOURCE_DIR}/framework/util/file_output_stream.h
2924 ${GFXRECON_SOURCE_DIR}/framework/util/file_output_stream.cpp
2925 ${GFXRECON_SOURCE_DIR}/framework/util/file_path.h
2926 ${GFXRECON_SOURCE_DIR}/framework/util/file_path.cpp
2927 ${GFXRECON_SOURCE_DIR}/framework/util/hash.h
2928+<<<<<<< android/framework/util/CMakeLists.txt
2929+ ${GFXRECON_SOURCE_DIR}/framework/util/image_writer.h
2930+ ${GFXRECON_SOURCE_DIR}/framework/util/image_writer.cpp
2931+ ${GFXRECON_SOURCE_DIR}/framework/util/keyboard.h
2932+ ${GFXRECON_SOURCE_DIR}/framework/util/keyboard.cpp
2933+=======
2934+ ${GFXRECON_SOURCE_DIR}/framework/util/heap_buffer.h
2935+ ${GFXRECON_SOURCE_DIR}/framework/util/heap_buffer.cpp
2936 ${GFXRECON_SOURCE_DIR}/framework/util/image_writer.h
2937 ${GFXRECON_SOURCE_DIR}/framework/util/image_writer.cpp
2938+ ${GFXRECON_SOURCE_DIR}/framework/util/json_util.h
2939+ ${GFXRECON_SOURCE_DIR}/framework/util/json_util.cpp
2940 ${GFXRECON_SOURCE_DIR}/framework/util/keyboard.h
2941 ${GFXRECON_SOURCE_DIR}/framework/util/keyboard.cpp
2942+ ${GFXRECON_SOURCE_DIR}/framework/util/linear_hashmap.h
2943+>>>>>>> android/framework/util/CMakeLists.txt
2944 ${GFXRECON_SOURCE_DIR}/framework/util/logging.h
2945 ${GFXRECON_SOURCE_DIR}/framework/util/logging.cpp
2946 ${GFXRECON_SOURCE_DIR}/framework/util/lz4_compressor.h
2947@@ -35,12 +76,32 @@ target_sources(gfxrecon_util
2948 ${GFXRECON_SOURCE_DIR}/framework/util/platform.h
2949 ${GFXRECON_SOURCE_DIR}/framework/util/settings_loader.h
2950 ${GFXRECON_SOURCE_DIR}/framework/util/settings_loader.cpp
2951+<<<<<<< android/framework/util/CMakeLists.txt
2952 ${GFXRECON_SOURCE_DIR}/framework/util/strings.h
2953 ${GFXRECON_SOURCE_DIR}/framework/util/strings.cpp
2954+=======
2955+ ${GFXRECON_SOURCE_DIR}/framework/util/span.h
2956+ ${GFXRECON_SOURCE_DIR}/framework/util/spirv_helper.h
2957+ ${GFXRECON_SOURCE_DIR}/framework/util/spirv_parsing_util.h
2958+ ${GFXRECON_SOURCE_DIR}/framework/util/spirv_parsing_util.cpp
2959+ ${GFXRECON_SOURCE_DIR}/framework/util/strings.h
2960+ ${GFXRECON_SOURCE_DIR}/framework/util/strings.cpp
2961+ ${GFXRECON_SOURCE_DIR}/framework/util/thread_data.h
2962+ ${GFXRECON_SOURCE_DIR}/framework/util/thread_data.cpp
2963+ ${GFXRECON_SOURCE_DIR}/framework/util/type_traits_extras.h
2964+ ${GFXRECON_SOURCE_DIR}/framework/util/to_string.h
2965+ ${GFXRECON_SOURCE_DIR}/framework/util/to_string.cpp
2966+>>>>>>> android/framework/util/CMakeLists.txt
2967 ${GFXRECON_SOURCE_DIR}/framework/util/options.h
2968 ${GFXRECON_SOURCE_DIR}/framework/util/options.cpp
2969 ${GFXRECON_SOURCE_DIR}/framework/util/zstd_compressor.h
2970 ${GFXRECON_SOURCE_DIR}/framework/util/zstd_compressor.cpp
2971+<<<<<<< android/framework/util/CMakeLists.txt
2972+=======
2973+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_enum_to_string.h>
2974+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_enum_to_string.cpp>
2975+ $<$<BOOL:${OPENXR_SUPPORT_ENABLED}>:${GFXRECON_SOURCE_DIR}/framework/generated/generated_openxr_type_util.h>
2976+>>>>>>> android/framework/util/CMakeLists.txt
2977 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_enum_to_string.h
2978 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_enum_to_string.cpp
2979 )
2980@@ -54,13 +115,36 @@ target_compile_definitions(gfxrecon_util
2981
2982 target_include_directories(gfxrecon_util
2983 PUBLIC
2984+<<<<<<< android/framework/util/CMakeLists.txt
2985+=======
2986+ ${ANDROID_NDK}/sources/android/native_app_glue
2987+>>>>>>> android/framework/util/CMakeLists.txt
2988 ${GFXRECON_SOURCE_DIR}/external/precompiled/android/include
2989 ${GFXRECON_SOURCE_DIR}/external/stb
2990 ${GFXRECON_SOURCE_DIR}/framework)
2991
2992+<<<<<<< android/framework/util/CMakeLists.txt
2993 target_link_libraries(gfxrecon_util
2994 platform_specific
2995 vulkan_registry
2996 ${GFXRECON_SOURCE_DIR}/external/precompiled/android/lib/${ANDROID_ABI}/liblz4_static.a
2997 ${GFXRECON_SOURCE_DIR}/external/precompiled/android/lib/${ANDROID_ABI}/libzstd.a
2998 z)
2999+=======
3000+if (OPENXR_SUPPORT_ENABLED)
3001+ target_include_directories(gfxrecon_util PUBLIC ${GFXRECON_SOURCE_DIR}/external/OpenXR-SDK/include)
3002+ target_compile_definitions(gfxrecon_util PUBLIC ENABLE_OPENXR_SUPPORT=1)
3003+endif()
3004+
3005+target_link_libraries(gfxrecon_util
3006+ platform_specific
3007+ vulkan_registry
3008+ spirv_registry
3009+ spirv-reflect-static
3010+ nlohmann_json::nlohmann_json
3011+ android
3012+ log
3013+ ${GFXRECON_SOURCE_DIR}/external/precompiled/android/lib/${ANDROID_ABI}/liblz4_static.a
3014+ ${GFXRECON_SOURCE_DIR}/external/precompiled/android/lib/${ANDROID_ABI}/libzstd.a
3015+ z)
3016+>>>>>>> android/framework/util/CMakeLists.txt
3017diff --git a/android/gradle.properties b/android/gradle.properties
3018index 82618ce..d9b9f88 100644
3019--- a/android/gradle.properties
3020+++ b/android/gradle.properties
3021@@ -13,3 +13,8 @@ org.gradle.jvmargs=-Xmx1536m
3022 # org.gradle.parallel=true
3023
3024
3025+<<<<<<< android/gradle.properties
3026+=======
3027+android.useAndroidX=true
3028+android.enableJetifier=true
3029+>>>>>>> android/gradle.properties
3030diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
3031index bc4865b..e46068a 100644
3032--- a/android/gradle/wrapper/gradle-wrapper.properties
3033+++ b/android/gradle/wrapper/gradle-wrapper.properties
3034@@ -3,4 +3,8 @@ distributionBase=GRADLE_USER_HOME
3035 distributionPath=wrapper/dists
3036 zipStoreBase=GRADLE_USER_HOME
3037 zipStorePath=wrapper/dists
3038+<<<<<<< android/gradle/wrapper/gradle-wrapper.properties
3039 distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip
3040+=======
3041+distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-all.zip
3042+>>>>>>> android/gradle/wrapper/gradle-wrapper.properties
3043diff --git a/android/layer/CMakeLists.txt b/android/layer/CMakeLists.txt
3044index d944cf2..7009b4d 100644
3045--- a/android/layer/CMakeLists.txt
3046+++ b/android/layer/CMakeLists.txt
3047@@ -2,21 +2,60 @@ cmake_minimum_required(VERSION 3.4.1)
3048
3049 get_filename_component(GFXRECON_SOURCE_DIR ../.. ABSOLUTE)
3050
3051+<<<<<<< android/layer/CMakeLists.txt
3052 include(../framework/cmake-config/PlatformConfig.cmake)
3053 add_subdirectory(../framework/util ${CMAKE_SOURCE_DIR}/../framework/util/build/layer/${ANDROID_ABI})
3054 add_subdirectory(../framework/graphics ${CMAKE_SOURCE_DIR}/../framework/graphics/build/layer/${ANDROID_ABI})
3055 add_subdirectory(../framework/format ${CMAKE_SOURCE_DIR}/../framework/format/build/layer/${ANDROID_ABI})
3056 add_subdirectory(../framework/encode ${CMAKE_SOURCE_DIR}/../framework/encode/build/layer/${ANDROID_ABI})
3057+=======
3058+list(APPEND CMAKE_PREFIX_PATH "${GFXRECON_SOURCE_DIR}/external/nlohmann-json")
3059+find_package(nlohmann_json REQUIRED)
3060+
3061+project(VkLayer_gfxreconstruct)
3062+
3063+include(../framework/cmake-config/PlatformConfig.cmake)
3064+
3065+# Generate the OpenXR JSON for Android so that it will get picked up and
3066+# placed in the "assets" folder of the AAR and thus any APK file that
3067+# later includes it.
3068+option(GFXRECON_ENABLE_OPENXR "Enable OpenXR support." ON)
3069+if (GFXRECON_ENABLE_OPENXR)
3070+ file(TO_NATIVE_PATH "./" RELATIVE_PATH_PREFIX)
3071+ string(REPLACE "\\" "\\\\" RELATIVE_PATH_PREFIX "${RELATIVE_PATH_PREFIX}")
3072+ include("FindOpenXRVersion")
3073+ if ((NOT XR_VERSION_MAJOR STREQUAL "") AND (NOT XR_VERSION_MINOR STREQUAL ""))
3074+ message(STATUS "OpenXR support enabled")
3075+ set(OPENXR_SUPPORT_ENABLED TRUE)
3076+ else()
3077+ message(FATAL_ERROR "Failed to find OpenXR headers for support. Continuing with it disabled!")
3078+ endif()
3079+else()
3080+ message(STATUS "OpenXR support disabled!")
3081+endif()
3082+
3083+add_subdirectory(../framework/util ${PROJECT_SOURCE_DIR}/../framework/util/build/layer/${ANDROID_ABI})
3084+add_subdirectory(../framework/graphics ${PROJECT_SOURCE_DIR}/../framework/graphics/build/layer/${ANDROID_ABI})
3085+add_subdirectory(../framework/format ${PROJECT_SOURCE_DIR}/../framework/format/build/layer/${ANDROID_ABI})
3086+add_subdirectory(../framework/encode ${PROJECT_SOURCE_DIR}/../framework/encode/build/layer/${ANDROID_ABI})
3087+>>>>>>> android/layer/CMakeLists.txt
3088
3089 add_library(VkLayer_gfxreconstruct SHARED "")
3090
3091 target_sources(VkLayer_gfxreconstruct
3092 PRIVATE
3093 ${GFXRECON_SOURCE_DIR}/layer/dll_main.cpp
3094+<<<<<<< android/layer/CMakeLists.txt
3095 ${GFXRECON_SOURCE_DIR}/layer/trace_layer.h
3096 ${GFXRECON_SOURCE_DIR}/layer/trace_layer.cpp
3097 ${GFXRECON_SOURCE_DIR}/framework/encode/custom_layer_func_table.h
3098 ${GFXRECON_SOURCE_DIR}/framework/generated/generated_layer_func_table.h
3099+=======
3100+ ${GFXRECON_SOURCE_DIR}/layer/layer_vulkan_entry.h
3101+ ${GFXRECON_SOURCE_DIR}/layer/layer_vulkan_entry.cpp
3102+ ${GFXRECON_SOURCE_DIR}/framework/encode/custom_vulkan_layer_func_table.h
3103+ ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_layer_func_table.h
3104+>>>>>>> android/layer/CMakeLists.txt
3105 )
3106
3107 target_include_directories(VkLayer_gfxreconstruct
3108@@ -33,3 +72,37 @@ target_link_libraries(VkLayer_gfxreconstruct
3109 platform_specific
3110 android
3111 log)
3112+<<<<<<< android/layer/CMakeLists.txt
3113+=======
3114+
3115+
3116+if (GFXRECON_ENABLE_OPENXR)
3117+ include("FindVulkanVersion")
3118+
3119+ set(XR_VERSION ${XR_VERSION_MAJOR}.${XR_VERSION_MINOR}.${XR_VERSION_PATCH})
3120+ math(EXPR GFXRECONSTRUCT_LAYER_JSON_VERSION "${GFXRECONSTRUCT_PROJECT_VERSION_MAJOR} << 22 | ${GFXRECONSTRUCT_PROJECT_VERSION_MINOR} << 12 | ${GFXRECONSTRUCT_PROJECT_VERSION_PATCH}")
3121+ set(GFXRECONSTRUCT_VERSION_STRING ${GFXRECONSTRUCT_PROJECT_VERSION_MAJOR}.${GFXRECONSTRUCT_PROJECT_VERSION_MINOR}.${GFXRECONSTRUCT_PROJECT_VERSION_PATCH}${GFXRECON_PROJECT_VERSION_DESIGNATION})
3122+
3123+ # Firstly, expand variables
3124+ string(CONFIGURE
3125+ [=[
3126+{
3127+ "file_format_version": "1.0.0",
3128+ "api_layer": {
3129+ "name": "XR_APILAYER_LUNARG_gfxreconstruct",
3130+ "library_path": "libVkLayer_gfxreconstruct.so",
3131+ "api_version" : "${XR_VERSION}",
3132+ "implementation_version" : "${GFXRECONSTRUCT_LAYER_JSON_VERSION}",
3133+ "description": "GFXReconstruct Capture Layer Version ${GFXRECONSTRUCT_VERSION_STRING}",
3134+ "disable_environment" : "GFXRECON_DISABLE"
3135+ }
3136+}
3137+ ]=]
3138+ openxr_implicit_layer_contents
3139+ )
3140+
3141+ # Then expand generator expressions
3142+ file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/assets/openxr/1/api_layers/implicit.d)
3143+ file(GENERATE OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/assets/openxr/1/api_layers/implicit.d/XrLayer_gfxreconstruct.json CONTENT "${openxr_implicit_layer_contents}")
3144+endif()
3145+>>>>>>> android/layer/CMakeLists.txt
3146diff --git a/android/layer/build.gradle b/android/layer/build.gradle
3147index fab5d34..f651162 100644
3148--- a/android/layer/build.gradle
3149+++ b/android/layer/build.gradle
3150@@ -2,19 +2,51 @@ apply plugin: 'com.android.library'
3151
3152 android {
3153 compileSdkVersion 33
3154+<<<<<<< android/layer/build.gradle
3155 ndkVersion '24.0.8215888'
3156+=======
3157+ namespace 'com.lunarg.gfxreconstruct.layer'
3158+ ndkVersion '26.3.11579264'
3159+>>>>>>> android/layer/build.gradle
3160 defaultConfig {
3161 minSdkVersion 26
3162 targetSdkVersion 33
3163 versionCode 1
3164 versionName "1.0"
3165 ndk {
3166+<<<<<<< android/layer/build.gradle
3167 abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
3168 }
3169 externalNativeBuild {
3170 cmake {
3171 cppFlags "-fexceptions", "-std=c++14", "-Wno-nullability-completeness"
3172 arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_STL=c++_static"
3173+=======
3174+ if (project.hasProperty("armeabi-v7a")) {
3175+ abiFilters 'armeabi-v7a'
3176+ } else if (project.hasProperty("arm64-v8a")) {
3177+ abiFilters 'arm64-v8a'
3178+ } else if (project.hasProperty("x86")) {
3179+ abiFilters 'x86'
3180+ } else if (project.hasProperty("x86_64")) {
3181+ abiFilters 'x86_64'
3182+ } else {
3183+ abiFilters 'arm64-v8a', 'x86_64'
3184+ }
3185+ }
3186+ externalNativeBuild {
3187+ cmake {
3188+ cppFlags "-fexceptions", "-Wno-nullability-completeness"
3189+ arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_STL=c++_static"
3190+ if (project.hasProperty("DisableOpenXR")) {
3191+ logger.info('GFXReconstruct layer built with NO OpenXr Support! [DisableOpenXR found]')
3192+ arguments.add("-DGFXRECON_ENABLE_OPENXR=OFF")
3193+ }
3194+ else {
3195+ logger.info('GFXReconstruct layer built with OpenXr Support.')
3196+ arguments.add("-DGFXRECON_ENABLE_OPENXR=ON")
3197+ }
3198+>>>>>>> android/layer/build.gradle
3199 }
3200 }
3201 }
3202@@ -29,4 +61,13 @@ android {
3203 path "CMakeLists.txt"
3204 }
3205 }
3206+<<<<<<< android/layer/build.gradle
3207+=======
3208+
3209+ sourceSets {
3210+ main {
3211+ assets.srcDirs = ['assets']
3212+ }
3213+ }
3214+>>>>>>> android/layer/build.gradle
3215 }
3216diff --git a/android/layer/src/main/AndroidManifest.xml b/android/layer/src/main/AndroidManifest.xml
3217index 3391fe1..d30d8dc 100644
3218--- a/android/layer/src/main/AndroidManifest.xml
3219+++ b/android/layer/src/main/AndroidManifest.xml
3220@@ -1,6 +1,10 @@
3221 <?xml version="1.0" encoding="utf-8"?>
3222+<<<<<<< android/layer/src/main/AndroidManifest.xml
3223 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3224 package="com.lunarg.gfxreconstruct.layer">
3225+=======
3226+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
3227+>>>>>>> android/layer/src/main/AndroidManifest.xml
3228
3229 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3230 <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
3231diff --git a/android/scripts/gfxrecon.py b/android/scripts/gfxrecon.py
3232index afd3e47..94a6e26 100644
3233--- a/android/scripts/gfxrecon.py
3234+++ b/android/scripts/gfxrecon.py
3235@@ -1,6 +1,10 @@
3236 #!/usr/bin/env python3
3237 #
3238+<<<<<<< android/scripts/gfxrecon.py
3239 # Copyright (c) 2018-2023 LunarG, Inc.
3240+=======
3241+# Copyright (c) 2018-2025 LunarG, Inc.
3242+>>>>>>> android/scripts/gfxrecon.py
3243 #
3244 # Permission is hereby granted, free of charge, to any person obtaining a copy
3245 # of this software and associated documentation files (the "Software"), to
3246@@ -32,25 +36,65 @@ argc = len(sys.argv)
3247 # Supported commands
3248 valid_commands = [
3249 'install-apk',
3250+<<<<<<< android/scripts/gfxrecon.py
3251+=======
3252+ 'multiwin-replay',
3253+>>>>>>> android/scripts/gfxrecon.py
3254 'replay'
3255 ]
3256
3257 # Arguments
3258 # gfxrecon install-apk <file>
3259 # gfxrecon replay [-p | --push-file <file-on-desktop>] <file-on-device>
3260+<<<<<<< android/scripts/gfxrecon.py
3261+=======
3262+# gfxrecon multiwin-replay [-p | --push-file <file-on-desktop>] <file-on-device>
3263+>>>>>>> android/scripts/gfxrecon.py
3264
3265 # Application info
3266 app_name = 'com.lunarg.gfxreconstruct.replay'
3267 app_activity = '"com.lunarg.gfxreconstruct.replay/android.app.NativeActivity"'
3268+<<<<<<< android/scripts/gfxrecon.py
3269+=======
3270+multiwin_app_activity = '"com.lunarg.gfxreconstruct.replay/.ReplayActivity"'
3271+>>>>>>> android/scripts/gfxrecon.py
3272 app_action = 'android.intent.action.MAIN'
3273 app_category = 'android.intent.category.LAUNCHER'
3274
3275 # ADB commands
3276 adb_install = 'adb install -g -t -r'
3277 adb_sdk_version = 'adb shell getprop ro.build.version.sdk'
3278+<<<<<<< android/scripts/gfxrecon.py
3279 adb_start = 'adb shell am start -n {} -a {} -c {}'.format(app_activity, app_action, app_category)
3280 adb_stop = 'adb shell am force-stop {}'.format(app_name)
3281 adb_push = 'adb push'
3282+=======
3283+adb_stop = 'adb shell am force-stop {}'.format(app_name)
3284+adb_push = 'adb push'
3285+adb_devices = 'adb devices'
3286+
3287+# Environment variable for android serial number
3288+android_serial = 'ANDROID_SERIAL'
3289+
3290+class DeviceSelectionException(Exception):
3291+ pass
3292+
3293+def QueryAvailableDevices():
3294+ result = subprocess.run(shlex.split(adb_devices, posix='win' not in sys.platform), capture_output=True, check=True)
3295+ devices = result.stdout.decode().strip().splitlines()[1:]
3296+ return [device.split('\t')[0] for device in devices]
3297+
3298+def CheckDeviceSelection():
3299+ devices = QueryAvailableDevices()
3300+ if len(devices) <= 1:
3301+ return
3302+
3303+ selection = os.getenv(android_serial)
3304+ if selection is None or selection == '':
3305+ raise DeviceSelectionException('Multiple devices detected - you must specify which one to use by setting ANDROID_SERIAL environment variable.')
3306+ if selection not in devices:
3307+ raise DeviceSelectionException(f'Selected ({selection}) device not present. Available devices: {devices}')
3308+>>>>>>> android/scripts/gfxrecon.py
3309
3310 def CreateCommandParser():
3311 parser = argparse.ArgumentParser(description='GFXReconstruct utility launcher for Android.')
3312@@ -61,6 +105,10 @@ def CreateCommandParser():
3313 def CreateInstallApkParser():
3314 parser = argparse.ArgumentParser(prog=os.path.basename(sys.argv[0]) + ' install-apk', description='Install the replay tool.')
3315 parser.add_argument('file', help='APK file to install')
3316+<<<<<<< android/scripts/gfxrecon.py
3317+=======
3318+ parser.add_argument('-s', '--select', metavar='DEVICE_ID', help='Specify the destination device id. Needed if multiple devices are attached.')
3319+>>>>>>> android/scripts/gfxrecon.py
3320 return parser
3321
3322 def CreateReplayParser():
3323@@ -68,16 +116,32 @@ def CreateReplayParser():
3324 parser.add_argument('-p', '--push-file', metavar='LOCAL_FILE', help='Local file to push to the location on device specified by <file>')
3325 parser.add_argument('--version', action='store_true', default=False, help='Print version information and exit (forwarded to replay tool)')
3326 parser.add_argument('--log-level', metavar='LEVEL', help='Specify highest level message to log. Options are: debug, info, warning, error, and fatal. Default is info. (forwarded to replay tool)')
3327+<<<<<<< android/scripts/gfxrecon.py
3328+ parser.add_argument('--log-file', metavar='DEVICE_FILE', help='Write log messages to a file at the specified path instead of logcat (forwarded to replay tool)')
3329+ parser.add_argument('--pause-frame', metavar='N', help='Pause after replaying frame number N (forwarded to replay tool)')
3330+ parser.add_argument('--paused', action='store_true', default=False, help='Pause after replaying the first frame (same as "--pause-frame 1"; forwarded to replay tool)')
3331+ parser.add_argument('--screenshot-all', action='store_true', default=False, help='Generate screenshots for all frames. When this option is specified, --screenshots is ignored (forwarded to replay tool)')
3332+ parser.add_argument('--screenshots', metavar='RANGES', help='Generate screenshots for the specified frames. Target frames are specified as a comma separated list of frame ranges. A frame range can be specified as a single value, to specify a single frame, or as two hyphenated values, to specify the first and last frames to process. Frame ranges should be specified in ascending order and cannot overlap. Note that frame numbering is 1-based (i.e. the first frame is frame 1). Example: 200,301-305 will generate six screenshots (forwarded to replay tool)')
3333+=======
3334+ parser.add_argument('--log-timestamps', action='store_true', help='Output a timestamp in front of each log message. (forwarded to replay tool)')
3335 parser.add_argument('--log-file', metavar='DEVICE_FILE', help='Write log messages to a file at the specified path instead of logcat (forwarded to replay tool)')
3336+ parser.add_argument('--debug-messenger-level', metavar='LEVEL', help='Specify highest debug messenger severity level. Options are: debug, info, warning, and error. Default is warning. (forwarded to replay tool)')
3337 parser.add_argument('--pause-frame', metavar='N', help='Pause after replaying frame number N (forwarded to replay tool)')
3338 parser.add_argument('--paused', action='store_true', default=False, help='Pause after replaying the first frame (same as "--pause-frame 1"; forwarded to replay tool)')
3339+ parser.add_argument('--cpu-mask', metavar='binary_mask', help='Set of CPU cores used by the replayer. `binary-mask` is a succession of "0" and "1" that specifies used/unused cores read from left to right. For example "10010" activates the first and fourth cores and deactivate all other cores. If the option is not set, all cores can be used. If the option is set only for some cores, the other cores are not used. (forwarded to replay tool)')
3340 parser.add_argument('--screenshot-all', action='store_true', default=False, help='Generate screenshots for all frames. When this option is specified, --screenshots is ignored (forwarded to replay tool)')
3341 parser.add_argument('--screenshots', metavar='RANGES', help='Generate screenshots for the specified frames. Target frames are specified as a comma separated list of frame ranges. A frame range can be specified as a single value, to specify a single frame, or as two hyphenated values, to specify the first and last frames to process. Frame ranges should be specified in ascending order and cannot overlap. Note that frame numbering is 1-based (i.e. the first frame is frame 1). Example: 200,301-305 will generate six screenshots (forwarded to replay tool)')
3342+ parser.add_argument('--screenshot-interval', metavar='INTERVAL', help='Specifies the number of frames between two screenshots within a screenshot range. Example: If screenshot range is 10-15 and interval is 2, screenshot will be generated for frames 10, 12 and 14. Default is 1. (forwarded to replay tool)')
3343+>>>>>>> android/scripts/gfxrecon.py
3344 parser.add_argument('--screenshot-format', metavar='FORMAT', choices=['bmp', 'png'], help='Image file format to use for screenshot generation. Available formats are: bmp, png (forwarded to replay tool)')
3345 parser.add_argument('--screenshot-dir', metavar='DIR', help='Directory to write screenshots. Default is "/sdcard" (forwarded to replay tool)')
3346 parser.add_argument('--screenshot-prefix', metavar='PREFIX', help='Prefix to apply to the screenshot file name. Default is "screenshot" (forwarded to replay tool)')
3347 parser.add_argument('--screenshot-size', metavar='SIZE', help='Screenshot dimensions. Ignored if --screenshot-scale is specified. Expected format is <width>x<height>.')
3348 parser.add_argument('--screenshot-scale', metavar='SCALE', help='Scale screenshot dimensions. Overrides --screenshot-size, if specified. Expects a number which can be decimal')
3349+<<<<<<< android/scripts/gfxrecon.py
3350+=======
3351+ parser.add_argument('--capture', action='store_true', default=False, help='Capture the replaying GFXR file. Capture option behavior and usage is the same as when capturing with the GFXR layer. The capture functionality is included in the `gfxrecon-replay` executable--no GFXR capture layer is added to the Vulkan layer chain.')
3352+>>>>>>> android/scripts/gfxrecon.py
3353 parser.add_argument('--sfa', '--skip-failed-allocations', action='store_true', default=False, help='Skip vkAllocateMemory, vkAllocateCommandBuffers, and vkAllocateDescriptorSets calls that failed during capture (forwarded to replay tool)')
3354 parser.add_argument('--opcd', '--omit-pipeline-cache-data', action='store_true', default=False, help='Omit pipeline cache data from calls to vkCreatePipelineCache and skip calls to vkGetPipelineCacheData (forwarded to replay tool)')
3355 parser.add_argument('--surface-index', metavar='N', help='Restrict rendering to the Nth surface object created. Used with captures that include multiple surfaces. Default is -1 (render to all surfaces; forwarded to replay tool)')
3356@@ -92,14 +156,36 @@ def CreateReplayParser():
3357 parser.add_argument('--quit-after-measurement-range', action='store_true', default=False, help='If this is specified the replayer will abort when it reaches the <end_frame> specified in the --measurement-frame-range argument. (forwarded to replay tool)')
3358 parser.add_argument('--flush-measurement-range', action='store_true', default=False, help='If this is specified the replayer will flush and wait for all current GPU work to finish at the start and end of the measurement range. (forwarded to replay tool)')
3359 parser.add_argument('--flush-inside-measurement-range', action='store_true', default=False, help='If this is specified the replayer will flush and wait for all current GPU work to finish at end of each frame inside the measurement range. (forwarded to replay tool)')
3360+<<<<<<< android/scripts/gfxrecon.py
3361 parser.add_argument('--sgfs', '--skip-get-fence-status', metavar='STATUS', default=0, help='Specify behaviour to skip calls to vkWaitForFences and vkGetFenceStatus. Default is 0 - No skip (forwarded to replay tool)')
3362+=======
3363+ parser.add_argument('--sgfs', '--skip-get-fence-status', metavar='STATUS', default=0, help='Specify behavior to skip calls to vkWaitForFences and vkGetFenceStatus. Default is 0 - No skip (forwarded to replay tool)')
3364+>>>>>>> android/scripts/gfxrecon.py
3365 parser.add_argument('--sgfr', '--skip-get-fence-ranges', metavar='FRAME-RANGES', default='', help='Frame ranges where --sgfs applies. Default is all frames (forwarded to replay tool)')
3366 parser.add_argument('--wait-before-present', action='store_true', default=False, help='Force wait on completion of queue operations for all queues before calling Present. This is needed for accurate acquisition of instrumentation data on some platforms.')
3367 parser.add_argument('-m', '--memory-translation', metavar='MODE', choices=['none', 'remap', 'realign', 'rebind'], help='Enable memory translation for replay on GPUs with memory types that are not compatible with the capture GPU\'s memory types. Available modes are: none, remap, realign, rebind (forwarded to replay tool)')
3368 parser.add_argument('--swapchain', metavar='MODE', choices=['virtual', 'captured', 'offscreen'], help='Choose a swapchain mode to replay. Available modes are: virtual, captured, offscreen (forwarded to replay tool)')
3369+<<<<<<< android/scripts/gfxrecon.py
3370+ parser.add_argument('--vssb', '--virtual-swapchain-skip-blit', action='store_true', default=False, help='Skip blit to real swapchain to gain performance during replay.')
3371+ parser.add_argument('--use-captured-swapchain-indices', action='store_true', default=False, help='Same as "--swapchain captured". Ignored if the "--swapchain" option is used.')
3372+ parser.add_argument('file', nargs='?', help='File on device to play (forwarded to replay tool)')
3373+=======
3374+ parser.add_argument('--present-mode', metavar='MODE', choices=['capture', 'immediate', 'mailbox', 'fifo', 'fifo_relaxed'], help='Set swapchain\'s VkPresentModeKHR. Available modes are: auto, immediate, mailbox, fifo, fifo_relaxed (forwarded to replay tool)')
3375 parser.add_argument('--vssb', '--virtual-swapchain-skip-blit', action='store_true', default=False, help='Skip blit to real swapchain to gain performance during replay.')
3376 parser.add_argument('--use-captured-swapchain-indices', action='store_true', default=False, help='Same as "--swapchain captured". Ignored if the "--swapchain" option is used.')
3377 parser.add_argument('file', nargs='?', help='File on device to play (forwarded to replay tool)')
3378+ parser.add_argument('--dump-resources', metavar='DUMP_RESOURCES', help='Extract dump resources block indices and options from the specified json file. The format for the json file is documented in detail in vulkan_dump_resources.md.')
3379+ parser.add_argument('--dump-resources-dir', metavar='DIR', help='Directory to write dump resources output files.')
3380+ parser.add_argument('--pbi-all', action='store_true', default=False, help='Print all block information.')
3381+ parser.add_argument('--pbis', metavar='RANGES', default=False, help='Print block information between block index1 and block index2')
3382+ parser.add_argument('--pcj', '--pipeline-creation-jobs', action='store_true', default=False, help='Specify the number of pipeline-creation-jobs or background-threads.')
3383+ parser.add_argument('--save-pipeline-cache', metavar='DEVICE_FILE', help='If set, produces pipeline caches at replay time instead of using the one saved at capture time and save those caches in DEVICE_FILE. (forwarded to replay tool)')
3384+ parser.add_argument('--load-pipeline-cache', metavar='DEVICE_FILE', help='If set, loads data created by the `--save-pipeline-cache` option in DEVICE_FILE and uses it to create the pipelines instead of the pipeline caches saved at capture time. (forwarded to replay tool)')
3385+ parser.add_argument('--add-new-pipeline-caches', action='store_true', default=False, help='If set, allows gfxreconstruct to create new vkPipelineCache objects when it encounters a pipeline created without cache. This option can be used in coordination with `--save-pipeline-cache` and `--load-pipeline-cache`. (forwarded to replay tool)')
3386+ parser.add_argument('--quit-after-frame', metavar='FRAME', help='Specify a frame after which replay will terminate.')
3387+ parser.add_argument('--screenshot-ignore-FrameBoundaryANDROID', action='store_true', default=False, help='If set, frames switced with vkFrameBoundANDROID will be ignored from the screenshot handler.')
3388+
3389+>>>>>>> android/scripts/gfxrecon.py
3390 return parser
3391
3392 def MakeExtrasString(args):
3393@@ -112,10 +198,23 @@ def MakeExtrasString(args):
3394 arg_list.append('--log-level')
3395 arg_list.append('{}'.format(args.log_level))
3396
3397+<<<<<<< android/scripts/gfxrecon.py
3398+=======
3399+ if args.log_timestamps:
3400+ arg_list.append('--log-timestamps')
3401+
3402+>>>>>>> android/scripts/gfxrecon.py
3403 if args.log_file:
3404 arg_list.append('--log-file')
3405 arg_list.append('{}'.format(args.log_file))
3406
3407+<<<<<<< android/scripts/gfxrecon.py
3408+=======
3409+ if args.debug_messenger_level:
3410+ arg_list.append('--debug-messenger-level')
3411+ arg_list.append('{}'.format(args.debug_messenger_level))
3412+
3413+>>>>>>> android/scripts/gfxrecon.py
3414 if args.pause_frame:
3415 arg_list.append('--pause-frame')
3416 arg_list.append('{}'.format(args.pause_frame))
3417@@ -123,12 +222,26 @@ def MakeExtrasString(args):
3418 if args.paused:
3419 arg_list.append('--paused')
3420
3421+<<<<<<< android/scripts/gfxrecon.py
3422+=======
3423+ if args.cpu_mask:
3424+ arg_list.append('--cpu-mask')
3425+ arg_list.append('{}'.format(args.cpu_mask))
3426+
3427+>>>>>>> android/scripts/gfxrecon.py
3428 if args.screenshot_all:
3429 arg_list.append('--screenshot-all')
3430 elif args.screenshots:
3431 arg_list.append('--screenshots')
3432 arg_list.append('{}'.format(args.screenshots))
3433
3434+<<<<<<< android/scripts/gfxrecon.py
3435+=======
3436+ if args.screenshot_interval:
3437+ arg_list.append('--screenshot-interval')
3438+ arg_list.append('{}'.format(args.screenshot_interval))
3439+
3440+>>>>>>> android/scripts/gfxrecon.py
3441 if args.screenshot_format:
3442 arg_list.append('--screenshot-format')
3443 arg_list.append('{}'.format(args.screenshot_format))
3444@@ -149,6 +262,12 @@ def MakeExtrasString(args):
3445 arg_list.append('--screenshot-scale')
3446 arg_list.append('{}'.format(args.screenshot_scale))
3447
3448+<<<<<<< android/scripts/gfxrecon.py
3449+=======
3450+ if args.capture:
3451+ arg_list.append('--capture')
3452+
3453+>>>>>>> android/scripts/gfxrecon.py
3454 if args.sfa:
3455 arg_list.append('--sfa')
3456
3457@@ -198,6 +317,13 @@ def MakeExtrasString(args):
3458 arg_list.append('--swapchain')
3459 arg_list.append('{}'.format(args.swapchain))
3460
3461+<<<<<<< android/scripts/gfxrecon.py
3462+=======
3463+ if args.present_mode:
3464+ arg_list.append('--present-mode')
3465+ arg_list.append('{}'.format(args.present_mode))
3466+
3467+>>>>>>> android/scripts/gfxrecon.py
3468 if args.offscreen_swapchain_frame_boundary:
3469 arg_list.append('--offscreen-swapchain-frame-boundary')
3470
3471@@ -219,6 +345,46 @@ def MakeExtrasString(args):
3472 if args.wait_before_present:
3473 arg_list.append('--wait-before-present')
3474
3475+<<<<<<< android/scripts/gfxrecon.py
3476+=======
3477+ if args.dump_resources:
3478+ arg_list.append('--dump-resources')
3479+ arg_list.append('{}'.format(args.dump_resources))
3480+
3481+ if args.dump_resources_dir:
3482+ arg_list.append('--dump-resources-dir')
3483+ arg_list.append('{}'.format(args.dump_resources_dir))
3484+
3485+ if args.pbi_all:
3486+ arg_list.append('--pbi-all')
3487+
3488+ if args.pbis:
3489+ arg_list.append('--pbis')
3490+ arg_list.append('{}'.format(args.pbis))
3491+
3492+ if args.pcj:
3493+ arg_list.append('--pcj')
3494+ arg_list.append('{}'.format(args.pcj))
3495+
3496+ if args.save_pipeline_cache:
3497+ arg_list.append('--save-pipeline-cache')
3498+ arg_list.append('{}'.format(args.save_pipeline_cache))
3499+
3500+ if args.load_pipeline_cache:
3501+ arg_list.append('--load-pipeline-cache')
3502+ arg_list.append('{}'.format(args.load_pipeline_cache))
3503+
3504+ if args.add_new_pipeline_caches:
3505+ arg_list.append('--add-new-pipeline-caches')
3506+
3507+ if args.quit_after_frame:
3508+ arg_list.append('--quit-after-frame')
3509+ arg_list.append('{}'.format(args.quit_after_frame))
3510+
3511+ if args.screenshot_ignore_FrameBoundaryANDROID:
3512+ arg_list.append('--screenshot-ignore-FrameBoundaryANDROID')
3513+
3514+>>>>>>> android/scripts/gfxrecon.py
3515 if args.file:
3516 arg_list.append(args.file)
3517 elif not args.version:
3518@@ -233,15 +399,30 @@ def InstallApk(install_args):
3519 sdk = int(subprocess.check_output(shlex.split(adb_sdk_version)).decode())
3520 force_queryable = ' --force-queryable' if sdk >= 30 else ''
3521 cmd = adb_install + force_queryable + ' ' + args.file
3522+<<<<<<< android/scripts/gfxrecon.py
3523 print('Executing:', cmd)
3524 subprocess.check_call(shlex.split(cmd, posix='win' not in sys.platform))
3525
3526 def Replay(replay_args):
3527+=======
3528+
3529+ CheckDeviceSelection()
3530+
3531+ print('Executing:', cmd)
3532+ subprocess.check_call(shlex.split(cmd, posix='win' not in sys.platform))
3533+
3534+def ReplayCommon(replay_args, activity):
3535+>>>>>>> android/scripts/gfxrecon.py
3536 replay_parser = CreateReplayParser()
3537 args = replay_parser.parse_args(replay_args)
3538
3539 extras = MakeExtrasString(args)
3540
3541+<<<<<<< android/scripts/gfxrecon.py
3542+=======
3543+ CheckDeviceSelection()
3544+
3545+>>>>>>> android/scripts/gfxrecon.py
3546 if extras:
3547 if args.push_file:
3548 cmd = ' '.join([adb_push, args.push_file, args.file])
3549@@ -251,13 +432,32 @@ def Replay(replay_args):
3550 print('Executing:', adb_stop)
3551 subprocess.check_call(shlex.split(adb_stop, posix='win' not in sys.platform))
3552
3553+<<<<<<< android/scripts/gfxrecon.py
3554 cmd = ' '.join([adb_start, '--es', '"args"', '"{}"'.format(extras)])
3555 print('Executing:', cmd)
3556+=======
3557+ adb_start = 'adb shell am start -n {} -a {} -c {}'.format(activity, app_action, app_category)
3558+
3559+ print(f'Executing: {adb_start} --es args \'"{extras}"\'')
3560+ cmd = ' '.join([adb_start, '--es', 'args', '"{}"'.format(extras)])
3561+>>>>>>> android/scripts/gfxrecon.py
3562
3563 # Specify posix=False to prevent removal of quotes from adb extras.
3564 subprocess.check_call(shlex.split(cmd, posix=False))
3565
3566+<<<<<<< android/scripts/gfxrecon.py
3567 if __name__ == '__main__':
3568+=======
3569+def Replay(replay_args):
3570+ ReplayCommon(replay_args, app_activity)
3571+
3572+def MultiWinReplay(replay_args):
3573+ ReplayCommon(replay_args, multiwin_app_activity)
3574+
3575+if __name__ == '__main__':
3576+ devices = QueryAvailableDevices()
3577+
3578+>>>>>>> android/scripts/gfxrecon.py
3579 command_parser = CreateCommandParser()
3580 command = command_parser.parse_args()
3581
3582@@ -265,3 +465,8 @@ if __name__ == '__main__':
3583 InstallApk(command.args)
3584 elif command.command == 'replay':
3585 Replay(command.args)
3586+<<<<<<< android/scripts/gfxrecon.py
3587+=======
3588+ elif command.command == 'multiwin-replay':
3589+ MultiWinReplay(command.args)
3590+>>>>>>> android/scripts/gfxrecon.py
3591diff --git a/android/settings.gradle b/android/settings.gradle
3592index 68c1270..b47c2a2 100644
3593--- a/android/settings.gradle
3594+++ b/android/settings.gradle
3595@@ -1,3 +1,15 @@
3596 include ':layer'
3597+<<<<<<< android/settings.gradle
3598 include ':replay'
3599 project(':replay').projectDir = file('tools/replay')
3600+=======
3601+
3602+include ':replay'
3603+project(':replay').projectDir = file('tools/replay')
3604+include ':multi-win-replay'
3605+project(':multi-win-replay').projectDir = file('tools/multi-win-replay')
3606+include ':quest_replay'
3607+project(':quest_replay').projectDir = file('tools/quest_replay')
3608+include ':test_launcher'
3609+project(':test_launcher').projectDir = file('test/test_apps/launcher')
3610+>>>>>>> android/settings.gradle
3611diff --git a/android/test/test_apps/common/CMakeLists.txt b/android/test/test_apps/common/CMakeLists.txt
3612new file mode 100644
3613index 0000000..15fbe9f
3614--- /dev/null
3615+++ b/android/test/test_apps/common/CMakeLists.txt
3616@@ -0,0 +1,69 @@
3617+###############################################################################
3618+# Copyright (c) 2025 LunarG, Inc.
3619+# All rights reserved
3620+#
3621+# Permission is hereby granted, free of charge, to any person obtaining a copy
3622+# of this software and associated documentation files (the "Software"), to
3623+# deal in the Software without restriction, including without limitation the
3624+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
3625+# sell copies of the Software, and to permit persons to whom the Software is
3626+# furnished to do so, subject to the following conditions:
3627+#
3628+# The above copyright notice and this permission notice shall be included in
3629+# all copies or substantial portions of the Software.
3630+#
3631+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
3632+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
3633+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
3634+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
3635+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
3636+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
3637+# IN THE SOFTWARE.
3638+#
3639+# Author: LunarG Team
3640+# Description: CMake script for Android test app base
3641+###############################################################################
3642+
3643+add_library(gfxrecon-testapp-base STATIC ${GFXRECON_SOURCE_DIR}/test/test_apps/common/test_app_base.cpp)
3644+target_include_directories(gfxrecon-testapp-base
3645+ PRIVATE
3646+ ${GFXRECON_SOURCE_DIR}/external)
3647+target_include_directories(gfxrecon-testapp-base
3648+ PUBLIC
3649+ ${GFXRECON_SOURCE_DIR}/test/test_apps/common
3650+ ${GFXRECON_SOURCE_DIR}/test/icd)
3651+
3652+set(FRAMEWORK_DIR ${GFXRECON_ANDROID_DIR}/framework)
3653+set(GFXRECON_ANDROID_TEST_APPS_DIR ${CMAKE_SOURCE_DIR}/..)
3654+add_subdirectory(${FRAMEWORK_DIR}/util ${FRAMEWORK_DIR}/util/build/${ANDROID_ABI})
3655+add_subdirectory(${FRAMEWORK_DIR}/decode ${FRAMEWORK_DIR}/decode/build/${ANDROID_ABI})
3656+add_subdirectory(${FRAMEWORK_DIR}/graphics ${FRAMEWORK_DIR}/graphics/build/${ANDROID_ABI})
3657+add_subdirectory(${FRAMEWORK_DIR}/format ${FRAMEWORK_DIR}/format/build/${ANDROID_ABI})
3658+add_subdirectory(${FRAMEWORK_DIR}/application ${FRAMEWORK_DIR}/application/build/${ANDROID_ABI})
3659+
3660+target_link_libraries(gfxrecon-testapp-base
3661+ PUBLIC
3662+ gfxrecon_util
3663+ gfxrecon_application)
3664+
3665+
3666+macro(common_build_directives TARGET)
3667+endmacro()
3668+
3669+macro(add_test_app TEST_NAME)
3670+ add_subdirectory(${GFXRECON_SOURCE_DIR}/test/test_apps/${TEST_NAME}
3671+ ${GFXRECON_ANDROID_TEST_APPS_DIR}/${TEST_NAME}/build/${ANDROID_ABI})
3672+endmacro()
3673+
3674+add_test_app(acquired-image)
3675+add_test_app(external-memory-fd-export)
3676+add_test_app(external-memory-fd-import)
3677+add_test_app(host-image-copy)
3678+add_test_app(multisample-depth)
3679+add_test_app(pipeline-binaries)
3680+add_test_app(triangle)
3681+add_test_app(triangle-extra-device)
3682+add_test_app(shader-objects)
3683+add_test_app(sparse-resources)
3684+add_test_app(wait-for-present)
3685+add_test_app(ahb)
3686diff --git a/android/test/test_apps/launcher/.gitignore b/android/test/test_apps/launcher/.gitignore
3687new file mode 100644
3688index 0000000..5348b08
3689--- /dev/null
3690+++ b/android/test/test_apps/launcher/.gitignore
3691@@ -0,0 +1,2 @@
3692+/build
3693+src/main/assets
3694diff --git a/android/test/test_apps/launcher/CMakeLists.txt b/android/test/test_apps/launcher/CMakeLists.txt
3695new file mode 100644
3696index 0000000..f57a684
3697--- /dev/null
3698+++ b/android/test/test_apps/launcher/CMakeLists.txt
3699@@ -0,0 +1,70 @@
3700+##############################################################################
3701+# Copyright (c) 2025 LunarG, Inc.
3702+# All rights reserved
3703+#
3704+# Permission is hereby granted, free of charge, to any person obtaining a copy
3705+# of this software and associated documentation files (the "Software"), to
3706+# deal in the Software without restriction, including without limitation the
3707+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
3708+# sell copies of the Software, and to permit persons to whom the Software is
3709+# furnished to do so, subject to the following conditions:
3710+#
3711+# The above copyright notice and this permission notice shall be included in
3712+# all copies or substantial portions of the Software.
3713+#
3714+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
3715+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
3716+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
3717+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
3718+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
3719+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
3720+# IN THE SOFTWARE.
3721+#
3722+# Author: LunarG Team
3723+# Description: CMake script for Test launcher app
3724+###############################################################################
3725+
3726+cmake_minimum_required(VERSION 3.4.1)
3727+
3728+get_filename_component(GFXRECON_SOURCE_DIR ../../../.. ABSOLUTE)
3729+set(GFXRECON_ANDROID_DIR ${GFXRECON_SOURCE_DIR}/android)
3730+include(${GFXRECON_ANDROID_DIR}/framework/cmake-config/PlatformConfig.cmake)
3731+
3732+project(gfxrecon-test-launcher)
3733+
3734+set(GFXRECON_ANDROID_TEST_APPS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/..)
3735+
3736+set(COMMON_DIR ${GFXRECON_ANDROID_TEST_APPS_DIR}/common)
3737+add_subdirectory(${COMMON_DIR} ${COMMON_DIR}/build/${ANDROID_ABI})
3738+
3739+
3740+add_library(${PROJECT_NAME}
3741+ SHARED
3742+ ${GFXRECON_SOURCE_DIR}/test/test_apps/launcher/test_launcher.cpp)
3743+
3744+target_include_directories(${PROJECT_NAME}
3745+ PUBLIC
3746+ ${GFXRECON_SOURCE_DIR}
3747+ ${GFXRECON_SOURCE_DIR}/external/precompiled/android/include
3748+ ${CMAKE_BINARY_DIR})
3749+
3750+set(GFXRECON_TEST_LAUNCHER_LINK_LIBRARIES
3751+ gfxrecon-testapp-acquired-image
3752+ gfxrecon-testapp-host-image-copy
3753+ gfxrecon-testapp-multisample-depth
3754+ gfxrecon-testapp-pipeline-binaries
3755+ gfxrecon-testapp-shader-objects
3756+ gfxrecon-testapp-sparse-resources
3757+ gfxrecon-testapp-triangle
3758+ gfxrecon-testapp-triangle-extra-device
3759+ gfxrecon-testapp-external-memory-fd-export
3760+ gfxrecon-testapp-external-memory-fd-import
3761+ gfxrecon-testapp-wait-for-present
3762+ gfxrecon-testapp-ahb)
3763+
3764+target_link_libraries(${PROJECT_NAME}
3765+ ${GFXRECON_TEST_LAUNCHER_LINK_LIBRARIES})
3766+
3767+target_link_options(${PROJECT_NAME}
3768+ PRIVATE
3769+ LINKER:--version-script=${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.map)
3770diff --git a/android/test/test_apps/launcher/build.gradle b/android/test/test_apps/launcher/build.gradle
3771new file mode 100644
3772index 0000000..d2c8c3c
3773--- /dev/null
3774+++ b/android/test/test_apps/launcher/build.gradle
3775@@ -0,0 +1,55 @@
3776+apply plugin: 'com.android.application'
3777+
3778+android {
3779+ compileSdkVersion 33
3780+ namespace 'com.lunarg.gfxreconstruct.test.test_apps.test_launcher'
3781+ ndkVersion '26.3.11579264'
3782+ defaultConfig {
3783+ applicationId "com.lunarg.gfxreconstruct.test.test_apps.test_launcher"
3784+ minSdkVersion 26
3785+ targetSdkVersion 33
3786+ versionCode 1
3787+ versionName "1.0"
3788+ ndk {
3789+ if (project.hasProperty("armeabi-v7a")) {
3790+ abiFilters 'armeabi-v7a'
3791+ } else if (project.hasProperty("arm64-v8a")) {
3792+ abiFilters 'arm64-v8a'
3793+ } else if (project.hasProperty("x86")) {
3794+ abiFilters 'x86'
3795+ } else if (project.hasProperty("x86_64")) {
3796+ abiFilters 'x86_64'
3797+ } else {
3798+ abiFilters 'arm64-v8a', 'x86_64'
3799+ }
3800+ }
3801+ externalNativeBuild {
3802+ cmake {
3803+ cppFlags "-fexceptions", "-Wno-nullability-completeness"
3804+ arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_STL=c++_static"
3805+ }
3806+ }
3807+ }
3808+ buildTypes {
3809+ release {
3810+ minifyEnabled false
3811+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
3812+ }
3813+ }
3814+ externalNativeBuild {
3815+ cmake {
3816+ path "CMakeLists.txt"
3817+ }
3818+ }
3819+ sourceSets {
3820+ main {
3821+ assets.srcDirs = ['../../../../test/test_apps/res']
3822+ }
3823+ }
3824+}
3825+
3826+dependencies {
3827+ implementation fileTree(dir: 'libs', include: ['*.jar'])
3828+ implementation 'androidx.appcompat:appcompat:1.2.0'
3829+ implementation 'androidx.constraintlayout:constraintlayout:1.1.0'
3830+}
3831diff --git a/android/test/test_apps/launcher/gfxrecon-test-launcher.map b/android/test/test_apps/launcher/gfxrecon-test-launcher.map
3832new file mode 100644
3833index 0000000..a077296
3834--- /dev/null
3835+++ b/android/test/test_apps/launcher/gfxrecon-test-launcher.map
3836@@ -0,0 +1,6 @@
3837+{
3838+ global:
3839+ ANativeActivity_onCreate;
3840+ local:
3841+ *;
3842+};
3843diff --git a/android/test/test_apps/launcher/proguard-rules.pro b/android/test/test_apps/launcher/proguard-rules.pro
3844new file mode 100644
3845index 0000000..f1b4245
3846--- /dev/null
3847+++ b/android/test/test_apps/launcher/proguard-rules.pro
3848@@ -0,0 +1,21 @@
3849+# Add project specific ProGuard rules here.
3850+# You can control the set of applied configuration files using the
3851+# proguardFiles setting in build.gradle.
3852+#
3853+# For more details, see
3854+# http://developer.android.com/guide/developing/tools/proguard.html
3855+
3856+# If your project uses WebView with JS, uncomment the following
3857+# and specify the fully qualified class name to the JavaScript interface
3858+# class:
3859+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
3860+# public *;
3861+#}
3862+
3863+# Uncomment this to preserve the line number information for
3864+# debugging stack traces.
3865+#-keepattributes SourceFile,LineNumberTable
3866+
3867+# If you keep the line number information, uncomment this to
3868+# hide the original source file name.
3869+#-renamesourcefileattribute SourceFile
3870diff --git a/android/test/test_apps/launcher/src/main/AndroidManifest.xml b/android/test/test_apps/launcher/src/main/AndroidManifest.xml
3871new file mode 100644
3872index 0000000..269ba2d
3873--- /dev/null
3874+++ b/android/test/test_apps/launcher/src/main/AndroidManifest.xml
3875@@ -0,0 +1,31 @@
3876+<?xml version="1.0" encoding="utf-8"?>
3877+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
3878+
3879+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
3880+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3881+ <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
3882+
3883+ <!-- This .apk has no Java code itself, so set hasCode to false. -->
3884+ <application
3885+ android:allowBackup="true"
3886+ android:icon="@mipmap/ic_launcher"
3887+ android:label="@string/app_name"
3888+ android:roundIcon="@mipmap/ic_launcher_round"
3889+ android:theme="@style/AppTheme"
3890+ android:supportsRtl="true"
3891+ android:extractNativeLibs="true"
3892+ android:hasCode="false">
3893+ <activity android:name="android.app.NativeActivity"
3894+ android:exported="true"
3895+ android:configChanges="orientation|screenSize|keyboard|keyboardHidden|screenLayout"
3896+ android:screenOrientation="unspecified">
3897+ <meta-data android:name="android.app.lib_name"
3898+ android:value="gfxrecon-test-launcher" />
3899+ <intent-filter>
3900+ <action android:name="android.intent.action.MAIN" />
3901+ <category android:name="android.intent.category.LAUNCHER" />
3902+ </intent-filter>
3903+ </activity>
3904+ </application>
3905+
3906+</manifest>
3907diff --git a/android/test/test_apps/launcher/src/main/res/drawable-v24/ic_launcher_foreground.xml b/android/test/test_apps/launcher/src/main/res/drawable-v24/ic_launcher_foreground.xml
3908new file mode 100644
3909index 0000000..1f6bb29
3910--- /dev/null
3911+++ b/android/test/test_apps/launcher/src/main/res/drawable-v24/ic_launcher_foreground.xml
3912@@ -0,0 +1,34 @@
3913+<vector xmlns:android="http://schemas.android.com/apk/res/android"
3914+ xmlns:aapt="http://schemas.android.com/aapt"
3915+ android:width="108dp"
3916+ android:height="108dp"
3917+ android:viewportWidth="108"
3918+ android:viewportHeight="108">
3919+ <path
3920+ android:fillType="evenOdd"
3921+ android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
3922+ android:strokeWidth="1"
3923+ android:strokeColor="#00000000">
3924+ <aapt:attr name="android:fillColor">
3925+ <gradient
3926+ android:endX="78.5885"
3927+ android:endY="90.9159"
3928+ android:startX="48.7653"
3929+ android:startY="61.0927"
3930+ android:type="linear">
3931+ <item
3932+ android:color="#44000000"
3933+ android:offset="0.0" />
3934+ <item
3935+ android:color="#00000000"
3936+ android:offset="1.0" />
3937+ </gradient>
3938+ </aapt:attr>
3939+ </path>
3940+ <path
3941+ android:fillColor="#FFFFFF"
3942+ android:fillType="nonZero"
3943+ android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
3944+ android:strokeWidth="1"
3945+ android:strokeColor="#00000000" />
3946+</vector>
3947diff --git a/android/test/test_apps/launcher/src/main/res/drawable/ic_launcher_background.xml b/android/test/test_apps/launcher/src/main/res/drawable/ic_launcher_background.xml
3948new file mode 100644
3949index 0000000..0d025f9
3950--- /dev/null
3951+++ b/android/test/test_apps/launcher/src/main/res/drawable/ic_launcher_background.xml
3952@@ -0,0 +1,170 @@
3953+<?xml version="1.0" encoding="utf-8"?>
3954+<vector xmlns:android="http://schemas.android.com/apk/res/android"
3955+ android:width="108dp"
3956+ android:height="108dp"
3957+ android:viewportWidth="108"
3958+ android:viewportHeight="108">
3959+ <path
3960+ android:fillColor="#008577"
3961+ android:pathData="M0,0h108v108h-108z" />
3962+ <path
3963+ android:fillColor="#00000000"
3964+ android:pathData="M9,0L9,108"
3965+ android:strokeWidth="0.8"
3966+ android:strokeColor="#33FFFFFF" />
3967+ <path
3968+ android:fillColor="#00000000"
3969+ android:pathData="M19,0L19,108"
3970+ android:strokeWidth="0.8"
3971+ android:strokeColor="#33FFFFFF" />
3972+ <path
3973+ android:fillColor="#00000000"
3974+ android:pathData="M29,0L29,108"
3975+ android:strokeWidth="0.8"
3976+ android:strokeColor="#33FFFFFF" />
3977+ <path
3978+ android:fillColor="#00000000"
3979+ android:pathData="M39,0L39,108"
3980+ android:strokeWidth="0.8"
3981+ android:strokeColor="#33FFFFFF" />
3982+ <path
3983+ android:fillColor="#00000000"
3984+ android:pathData="M49,0L49,108"
3985+ android:strokeWidth="0.8"
3986+ android:strokeColor="#33FFFFFF" />
3987+ <path
3988+ android:fillColor="#00000000"
3989+ android:pathData="M59,0L59,108"
3990+ android:strokeWidth="0.8"
3991+ android:strokeColor="#33FFFFFF" />
3992+ <path
3993+ android:fillColor="#00000000"
3994+ android:pathData="M69,0L69,108"
3995+ android:strokeWidth="0.8"
3996+ android:strokeColor="#33FFFFFF" />
3997+ <path
3998+ android:fillColor="#00000000"
3999+ android:pathData="M79,0L79,108"
4000+ android:strokeWidth="0.8"
4001+ android:strokeColor="#33FFFFFF" />
4002+ <path
4003+ android:fillColor="#00000000"
4004+ android:pathData="M89,0L89,108"
4005+ android:strokeWidth="0.8"
4006+ android:strokeColor="#33FFFFFF" />
4007+ <path
4008+ android:fillColor="#00000000"
4009+ android:pathData="M99,0L99,108"
4010+ android:strokeWidth="0.8"
4011+ android:strokeColor="#33FFFFFF" />
4012+ <path
4013+ android:fillColor="#00000000"
4014+ android:pathData="M0,9L108,9"
4015+ android:strokeWidth="0.8"
4016+ android:strokeColor="#33FFFFFF" />
4017+ <path
4018+ android:fillColor="#00000000"
4019+ android:pathData="M0,19L108,19"
4020+ android:strokeWidth="0.8"
4021+ android:strokeColor="#33FFFFFF" />
4022+ <path
4023+ android:fillColor="#00000000"
4024+ android:pathData="M0,29L108,29"
4025+ android:strokeWidth="0.8"
4026+ android:strokeColor="#33FFFFFF" />
4027+ <path
4028+ android:fillColor="#00000000"
4029+ android:pathData="M0,39L108,39"
4030+ android:strokeWidth="0.8"
4031+ android:strokeColor="#33FFFFFF" />
4032+ <path
4033+ android:fillColor="#00000000"
4034+ android:pathData="M0,49L108,49"
4035+ android:strokeWidth="0.8"
4036+ android:strokeColor="#33FFFFFF" />
4037+ <path
4038+ android:fillColor="#00000000"
4039+ android:pathData="M0,59L108,59"
4040+ android:strokeWidth="0.8"
4041+ android:strokeColor="#33FFFFFF" />
4042+ <path
4043+ android:fillColor="#00000000"
4044+ android:pathData="M0,69L108,69"
4045+ android:strokeWidth="0.8"
4046+ android:strokeColor="#33FFFFFF" />
4047+ <path
4048+ android:fillColor="#00000000"
4049+ android:pathData="M0,79L108,79"
4050+ android:strokeWidth="0.8"
4051+ android:strokeColor="#33FFFFFF" />
4052+ <path
4053+ android:fillColor="#00000000"
4054+ android:pathData="M0,89L108,89"
4055+ android:strokeWidth="0.8"
4056+ android:strokeColor="#33FFFFFF" />
4057+ <path
4058+ android:fillColor="#00000000"
4059+ android:pathData="M0,99L108,99"
4060+ android:strokeWidth="0.8"
4061+ android:strokeColor="#33FFFFFF" />
4062+ <path
4063+ android:fillColor="#00000000"
4064+ android:pathData="M19,29L89,29"
4065+ android:strokeWidth="0.8"
4066+ android:strokeColor="#33FFFFFF" />
4067+ <path
4068+ android:fillColor="#00000000"
4069+ android:pathData="M19,39L89,39"
4070+ android:strokeWidth="0.8"
4071+ android:strokeColor="#33FFFFFF" />
4072+ <path
4073+ android:fillColor="#00000000"
4074+ android:pathData="M19,49L89,49"
4075+ android:strokeWidth="0.8"
4076+ android:strokeColor="#33FFFFFF" />
4077+ <path
4078+ android:fillColor="#00000000"
4079+ android:pathData="M19,59L89,59"
4080+ android:strokeWidth="0.8"
4081+ android:strokeColor="#33FFFFFF" />
4082+ <path
4083+ android:fillColor="#00000000"
4084+ android:pathData="M19,69L89,69"
4085+ android:strokeWidth="0.8"
4086+ android:strokeColor="#33FFFFFF" />
4087+ <path
4088+ android:fillColor="#00000000"
4089+ android:pathData="M19,79L89,79"
4090+ android:strokeWidth="0.8"
4091+ android:strokeColor="#33FFFFFF" />
4092+ <path
4093+ android:fillColor="#00000000"
4094+ android:pathData="M29,19L29,89"
4095+ android:strokeWidth="0.8"
4096+ android:strokeColor="#33FFFFFF" />
4097+ <path
4098+ android:fillColor="#00000000"
4099+ android:pathData="M39,19L39,89"
4100+ android:strokeWidth="0.8"
4101+ android:strokeColor="#33FFFFFF" />
4102+ <path
4103+ android:fillColor="#00000000"
4104+ android:pathData="M49,19L49,89"
4105+ android:strokeWidth="0.8"
4106+ android:strokeColor="#33FFFFFF" />
4107+ <path
4108+ android:fillColor="#00000000"
4109+ android:pathData="M59,19L59,89"
4110+ android:strokeWidth="0.8"
4111+ android:strokeColor="#33FFFFFF" />
4112+ <path
4113+ android:fillColor="#00000000"
4114+ android:pathData="M69,19L69,89"
4115+ android:strokeWidth="0.8"
4116+ android:strokeColor="#33FFFFFF" />
4117+ <path
4118+ android:fillColor="#00000000"
4119+ android:pathData="M79,19L79,89"
4120+ android:strokeWidth="0.8"
4121+ android:strokeColor="#33FFFFFF" />
4122+</vector>
4123diff --git a/android/test/test_apps/launcher/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/test/test_apps/launcher/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
4124new file mode 100644
4125index 0000000..eca70cf
4126--- /dev/null
4127+++ b/android/test/test_apps/launcher/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
4128@@ -0,0 +1,5 @@
4129+<?xml version="1.0" encoding="utf-8"?>
4130+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
4131+ <background android:drawable="@drawable/ic_launcher_background" />
4132+ <foreground android:drawable="@drawable/ic_launcher_foreground" />
4133+</adaptive-icon>
4134\ No newline at end of file
4135diff --git a/android/test/test_apps/launcher/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/test/test_apps/launcher/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
4136new file mode 100644
4137index 0000000..eca70cf
4138--- /dev/null
4139+++ b/android/test/test_apps/launcher/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
4140@@ -0,0 +1,5 @@
4141+<?xml version="1.0" encoding="utf-8"?>
4142+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
4143+ <background android:drawable="@drawable/ic_launcher_background" />
4144+ <foreground android:drawable="@drawable/ic_launcher_foreground" />
4145+</adaptive-icon>
4146\ No newline at end of file
4147diff --git a/android/test/test_apps/launcher/src/main/res/mipmap-hdpi/ic_launcher.png b/android/test/test_apps/launcher/src/main/res/mipmap-hdpi/ic_launcher.png
4148new file mode 100644
4149index 0000000..898f3ed
4150Binary files /dev/null and b/android/test/test_apps/launcher/src/main/res/mipmap-hdpi/ic_launcher.png differ
4151diff --git a/android/test/test_apps/launcher/src/main/res/mipmap-hdpi/ic_launcher_round.png b/android/test/test_apps/launcher/src/main/res/mipmap-hdpi/ic_launcher_round.png
4152new file mode 100644
4153index 0000000..dffca36
4154Binary files /dev/null and b/android/test/test_apps/launcher/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
4155diff --git a/android/test/test_apps/launcher/src/main/res/mipmap-mdpi/ic_launcher.png b/android/test/test_apps/launcher/src/main/res/mipmap-mdpi/ic_launcher.png
4156new file mode 100644
4157index 0000000..64ba76f
4158Binary files /dev/null and b/android/test/test_apps/launcher/src/main/res/mipmap-mdpi/ic_launcher.png differ
4159diff --git a/android/test/test_apps/launcher/src/main/res/mipmap-mdpi/ic_launcher_round.png b/android/test/test_apps/launcher/src/main/res/mipmap-mdpi/ic_launcher_round.png
4160new file mode 100644
4161index 0000000..dae5e08
4162Binary files /dev/null and b/android/test/test_apps/launcher/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
4163diff --git a/android/test/test_apps/launcher/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/test/test_apps/launcher/src/main/res/mipmap-xhdpi/ic_launcher.png
4164new file mode 100644
4165index 0000000..e5ed465
4166Binary files /dev/null and b/android/test/test_apps/launcher/src/main/res/mipmap-xhdpi/ic_launcher.png differ
4167diff --git a/android/test/test_apps/launcher/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/android/test/test_apps/launcher/src/main/res/mipmap-xhdpi/ic_launcher_round.png
4168new file mode 100644
4169index 0000000..14ed0af
4170Binary files /dev/null and b/android/test/test_apps/launcher/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
4171diff --git a/android/test/test_apps/launcher/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/test/test_apps/launcher/src/main/res/mipmap-xxhdpi/ic_launcher.png
4172new file mode 100644
4173index 0000000..b0907ca
4174Binary files /dev/null and b/android/test/test_apps/launcher/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
4175diff --git a/android/test/test_apps/launcher/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/android/test/test_apps/launcher/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
4176new file mode 100644
4177index 0000000..d8ae031
4178Binary files /dev/null and b/android/test/test_apps/launcher/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
4179diff --git a/android/test/test_apps/launcher/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/test/test_apps/launcher/src/main/res/mipmap-xxxhdpi/ic_launcher.png
4180new file mode 100644
4181index 0000000..2c18de9
4182Binary files /dev/null and b/android/test/test_apps/launcher/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
4183diff --git a/android/test/test_apps/launcher/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/test/test_apps/launcher/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
4184new file mode 100644
4185index 0000000..beed3cd
4186Binary files /dev/null and b/android/test/test_apps/launcher/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
4187diff --git a/android/test/test_apps/launcher/src/main/res/values/colors.xml b/android/test/test_apps/launcher/src/main/res/values/colors.xml
4188new file mode 100644
4189index 0000000..69b2233
4190--- /dev/null
4191+++ b/android/test/test_apps/launcher/src/main/res/values/colors.xml
4192@@ -0,0 +1,6 @@
4193+<?xml version="1.0" encoding="utf-8"?>
4194+<resources>
4195+ <color name="colorPrimary">#008577</color>
4196+ <color name="colorPrimaryDark">#00574B</color>
4197+ <color name="colorAccent">#D81B60</color>
4198+</resources>
4199diff --git a/android/test/test_apps/launcher/src/main/res/values/strings.xml b/android/test/test_apps/launcher/src/main/res/values/strings.xml
4200new file mode 100644
4201index 0000000..523a261
4202--- /dev/null
4203+++ b/android/test/test_apps/launcher/src/main/res/values/strings.xml
4204@@ -0,0 +1,3 @@
4205+<resources>
4206+ <string name="app_name">gfxrecon-testapp-triangle</string>
4207+</resources>
4208diff --git a/android/test/test_apps/launcher/src/main/res/values/styles.xml b/android/test/test_apps/launcher/src/main/res/values/styles.xml
4209new file mode 100644
4210index 0000000..4caddd6
4211--- /dev/null
4212+++ b/android/test/test_apps/launcher/src/main/res/values/styles.xml
4213@@ -0,0 +1,11 @@
4214+<resources>
4215+
4216+ <!-- Base application theme. -->
4217+ <style name="AppTheme" parent="@android:style/Theme.NoTitleBar.Fullscreen">
4218+ <!-- Customize your theme here. -->
4219+ <item name="colorPrimary">@color/colorPrimary</item>
4220+ <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
4221+ <item name="colorAccent">@color/colorAccent</item>
4222+ </style>
4223+
4224+</resources>
4225diff --git a/android/test/test_apps/triangle/.gitignore b/android/test/test_apps/triangle/.gitignore
4226new file mode 100644
4227index 0000000..5348b08
4228--- /dev/null
4229+++ b/android/test/test_apps/triangle/.gitignore
4230@@ -0,0 +1,2 @@
4231+/build
4232+src/main/assets
4233diff --git a/android/test/test_apps/triangle/CMakeLists.txt b/android/test/test_apps/triangle/CMakeLists.txt
4234new file mode 100644
4235index 0000000..5f4902c
4236--- /dev/null
4237+++ b/android/test/test_apps/triangle/CMakeLists.txt
4238@@ -0,0 +1,38 @@
4239+##############################################################################
4240+# Copyright (c) 2025 LunarG, Inc.
4241+# All rights reserved
4242+#
4243+# Permission is hereby granted, free of charge, to any person obtaining a copy
4244+# of this software and associated documentation files (the "Software"), to
4245+# deal in the Software without restriction, including without limitation the
4246+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
4247+# sell copies of the Software, and to permit persons to whom the Software is
4248+# furnished to do so, subject to the following conditions:
4249+#
4250+# The above copyright notice and this permission notice shall be included in
4251+# all copies or substantial portions of the Software.
4252+#
4253+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
4254+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
4255+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
4256+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
4257+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
4258+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
4259+# IN THE SOFTWARE.
4260+#
4261+# Author: LunarG Team
4262+# Description: CMake script for Android triangle test app
4263+###############################################################################
4264+
4265+get_filename_component(GFXRECON_SOURCE_DIR ../../../.. ABSOLUTE)
4266+
4267+set(TRIANGLE_DIR ${GFXRECON_SOURCE_DIR}/test/test_apps/triangle)
4268+add_library(gfxrecon-testapp-triangle
4269+ STATIC
4270+ ${TRIANGLE_DIR}/app.cpp)
4271+
4272+target_include_directories(gfxrecon-testapp-triangle
4273+ PUBLIC
4274+ ${TRIANGLE_DIR}
4275+ ${GFXRECON_SOURCE_DIR}/external/precompiled/android/include
4276+ ${CMAKE_BINARY_DIR})
4277\ No newline at end of file
4278diff --git a/android/tools/multi-win-replay/.gitignore b/android/tools/multi-win-replay/.gitignore
4279new file mode 100644
4280index 0000000..796b96d
4281--- /dev/null
4282+++ b/android/tools/multi-win-replay/.gitignore
4283@@ -0,0 +1 @@
4284+/build
4285diff --git a/android/tools/multi-win-replay/AndroidManifest.xml b/android/tools/multi-win-replay/AndroidManifest.xml
4286new file mode 100644
4287index 0000000..bf64d75
4288--- /dev/null
4289+++ b/android/tools/multi-win-replay/AndroidManifest.xml
4290@@ -0,0 +1,31 @@
4291+<?xml version="1.0" encoding="utf-8"?>
4292+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
4293+
4294+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
4295+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
4296+ <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
4297+
4298+ <!-- This .apk has no Java code itself, so set hasCode to false. -->
4299+ <application
4300+ android:allowBackup="true"
4301+ android:icon="@mipmap/ic_launcher"
4302+ android:label="@string/app_name"
4303+ android:roundIcon="@mipmap/ic_launcher_round"
4304+ android:theme="@style/AppTheme"
4305+ android:supportsRtl="true"
4306+ android:extractNativeLibs="true"
4307+ android:hasCode="true">
4308+ <activity android:name=".ReplayActivity"
4309+ android:exported="true"
4310+ android:configChanges="orientation|screenSize|keyboard|keyboardHidden|screenLayout"
4311+ android:screenOrientation="unspecified">
4312+ <meta-data android:name="android.app.lib_name"
4313+ android:value="gfxrecon-replay" />
4314+ <intent-filter>
4315+ <action android:name="android.intent.action.MAIN" />
4316+ <category android:name="android.intent.category.LAUNCHER" />
4317+ </intent-filter>
4318+ </activity>
4319+ </application>
4320+
4321+</manifest>
4322diff --git a/android/tools/multi-win-replay/CMakeLists.txt b/android/tools/multi-win-replay/CMakeLists.txt
4323new file mode 100644
4324index 0000000..142fdcd
4325--- /dev/null
4326+++ b/android/tools/multi-win-replay/CMakeLists.txt
4327@@ -0,0 +1,50 @@
4328+# For more information about using CMake with Android Studio, read the
4329+# documentation: https://d.android.com/studio/projects/add-native-code.html
4330+
4331+cmake_minimum_required(VERSION 3.4.1)
4332+
4333+project(gfxrecon-replay)
4334+
4335+get_filename_component(GFXRECON_SOURCE_DIR ../../.. ABSOLUTE)
4336+
4337+# because the NDK sets CMAKE_FIND_ROOT_PATH_MODE_* to ONLY, it ignores
4338+# us setting CMAKE_PREFIX_PATH. So just set the package DIR directly.
4339+set(nlohmann_json_DIR "${GFXRECON_SOURCE_DIR}/external/nlohmann-json/share/cmake/nlohmann_json")
4340+find_package(nlohmann_json REQUIRED CONFIG PATHS "${nlohmann_json_DIR}" NO_DEFAULT_PATH)
4341+
4342+include(../../framework/cmake-config/PlatformConfig.cmake)
4343+add_subdirectory(../../framework/util ${PROJECT_SOURCE_DIR}/../../framework/util/build/tools/replay/${ANDROID_ABI})
4344+add_subdirectory(../../framework/graphics ${PROJECT_SOURCE_DIR}/../../framework/graphics/build/tools/replay/${ANDROID_ABI})
4345+add_subdirectory(../../framework/format ${PROJECT_SOURCE_DIR}/../../framework/format/build/tools/replay/${ANDROID_ABI})
4346+add_subdirectory(../../framework/decode ${PROJECT_SOURCE_DIR}/../../framework/decode/build/tools/replay/${ANDROID_ABI})
4347+add_subdirectory(../../framework/encode ${PROJECT_SOURCE_DIR}/../../framework/encode/build/tools/replay/${ANDROID_ABI})
4348+add_subdirectory(../../framework/application-multi-win ${PROJECT_SOURCE_DIR}/../../framework/application/build/tools/replay/${ANDROID_ABI})
4349+
4350+add_library(gfxrecon-replay
4351+ SHARED
4352+ ${GFXRECON_SOURCE_DIR}/tools/tool_settings.h
4353+ ${GFXRECON_SOURCE_DIR}/tools/replay/parse_dump_resources_cli.h
4354+ ${GFXRECON_SOURCE_DIR}/tools/replay/parse_dump_resources_cli.cpp
4355+ ${GFXRECON_SOURCE_DIR}/tools/replay/replay_settings.h
4356+ ${GFXRECON_SOURCE_DIR}/tools/replay/replay_pre_processing.h
4357+ ${GFXRECON_SOURCE_DIR}/tools/replay/recapture_vulkan_entry.cpp
4358+ ${GFXRECON_SOURCE_DIR}/tools/replay/recapture_vulkan_entry.h
4359+ ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_recapture_func_table.h
4360+ ${GFXRECON_SOURCE_DIR}/tools/replay/android_main.cpp)
4361+
4362+target_include_directories(gfxrecon-replay
4363+ PUBLIC
4364+ ${GFXRECON_SOURCE_DIR}/external/precompiled/android/include
4365+ ${GFXRECON_SOURCE_DIR}
4366+ ${CMAKE_BINARY_DIR})
4367+
4368+target_link_libraries(
4369+ gfxrecon-replay
4370+ gfxrecon_application_multiwin
4371+ gfxrecon_decode
4372+ gfxrecon_encode
4373+ gfxrecon_graphics
4374+ gfxrecon_format
4375+ platform_specific)
4376+
4377+message(STATUS "CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}")
4378diff --git a/android/tools/multi-win-replay/build.gradle b/android/tools/multi-win-replay/build.gradle
4379new file mode 100644
4380index 0000000..32b84a1
4381--- /dev/null
4382+++ b/android/tools/multi-win-replay/build.gradle
4383@@ -0,0 +1,61 @@
4384+apply plugin: 'com.android.application'
4385+
4386+android {
4387+ compileSdkVersion 33
4388+ namespace 'com.lunarg.gfxreconstruct.replay'
4389+ ndkVersion '26.3.11579264'
4390+ defaultConfig {
4391+ applicationId "com.lunarg.gfxreconstruct.replay"
4392+ minSdkVersion 26
4393+ targetSdkVersion 33
4394+ versionCode 1
4395+ versionName "1.0"
4396+ ndk {
4397+ if (project.hasProperty("armeabi-v7a")) {
4398+ abiFilters 'armeabi-v7a'
4399+ } else if (project.hasProperty("arm64-v8a")) {
4400+ abiFilters 'arm64-v8a'
4401+ } else if (project.hasProperty("x86")) {
4402+ abiFilters 'x86'
4403+ } else if (project.hasProperty("x86_64")) {
4404+ abiFilters 'x86_64'
4405+ } else {
4406+ abiFilters 'arm64-v8a', 'x86_64'
4407+ }
4408+ }
4409+ externalNativeBuild {
4410+ cmake {
4411+ cppFlags "-fexceptions", "-Wno-nullability-completeness"
4412+ arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_STL=c++_static"
4413+ }
4414+ }
4415+ }
4416+ buildTypes {
4417+ release {
4418+ minifyEnabled false
4419+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
4420+ }
4421+ }
4422+ sourceSets {
4423+ main {
4424+ manifest.srcFile 'AndroidManifest.xml'
4425+ java.srcDirs = ['src']
4426+ res.srcDirs = ['res']
4427+ }
4428+ }
4429+ externalNativeBuild {
4430+ cmake {
4431+ path "CMakeLists.txt"
4432+ }
4433+ }
4434+ androidResources {
4435+ ignoreAssetsPattern "XrLayer_gfxreconstruct.json"
4436+ }
4437+}
4438+
4439+dependencies {
4440+ implementation fileTree(dir: 'libs', include: ['*.jar'])
4441+ implementation 'androidx.appcompat:appcompat:1.2.0'
4442+ implementation 'androidx.constraintlayout:constraintlayout:1.1.0'
4443+ implementation project(':layer')
4444+}
4445diff --git a/android/tools/multi-win-replay/proguard-rules.pro b/android/tools/multi-win-replay/proguard-rules.pro
4446new file mode 100644
4447index 0000000..f1b4245
4448--- /dev/null
4449+++ b/android/tools/multi-win-replay/proguard-rules.pro
4450@@ -0,0 +1,21 @@
4451+# Add project specific ProGuard rules here.
4452+# You can control the set of applied configuration files using the
4453+# proguardFiles setting in build.gradle.
4454+#
4455+# For more details, see
4456+# http://developer.android.com/guide/developing/tools/proguard.html
4457+
4458+# If your project uses WebView with JS, uncomment the following
4459+# and specify the fully qualified class name to the JavaScript interface
4460+# class:
4461+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
4462+# public *;
4463+#}
4464+
4465+# Uncomment this to preserve the line number information for
4466+# debugging stack traces.
4467+#-keepattributes SourceFile,LineNumberTable
4468+
4469+# If you keep the line number information, uncomment this to
4470+# hide the original source file name.
4471+#-renamesourcefileattribute SourceFile
4472diff --git a/android/tools/multi-win-replay/res/drawable-v24/ic_launcher_foreground.xml b/android/tools/multi-win-replay/res/drawable-v24/ic_launcher_foreground.xml
4473new file mode 100644
4474index 0000000..1f6bb29
4475--- /dev/null
4476+++ b/android/tools/multi-win-replay/res/drawable-v24/ic_launcher_foreground.xml
4477@@ -0,0 +1,34 @@
4478+<vector xmlns:android="http://schemas.android.com/apk/res/android"
4479+ xmlns:aapt="http://schemas.android.com/aapt"
4480+ android:width="108dp"
4481+ android:height="108dp"
4482+ android:viewportWidth="108"
4483+ android:viewportHeight="108">
4484+ <path
4485+ android:fillType="evenOdd"
4486+ android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
4487+ android:strokeWidth="1"
4488+ android:strokeColor="#00000000">
4489+ <aapt:attr name="android:fillColor">
4490+ <gradient
4491+ android:endX="78.5885"
4492+ android:endY="90.9159"
4493+ android:startX="48.7653"
4494+ android:startY="61.0927"
4495+ android:type="linear">
4496+ <item
4497+ android:color="#44000000"
4498+ android:offset="0.0" />
4499+ <item
4500+ android:color="#00000000"
4501+ android:offset="1.0" />
4502+ </gradient>
4503+ </aapt:attr>
4504+ </path>
4505+ <path
4506+ android:fillColor="#FFFFFF"
4507+ android:fillType="nonZero"
4508+ android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
4509+ android:strokeWidth="1"
4510+ android:strokeColor="#00000000" />
4511+</vector>
4512diff --git a/android/tools/multi-win-replay/res/drawable/ic_launcher_background.xml b/android/tools/multi-win-replay/res/drawable/ic_launcher_background.xml
4513new file mode 100644
4514index 0000000..0d025f9
4515--- /dev/null
4516+++ b/android/tools/multi-win-replay/res/drawable/ic_launcher_background.xml
4517@@ -0,0 +1,170 @@
4518+<?xml version="1.0" encoding="utf-8"?>
4519+<vector xmlns:android="http://schemas.android.com/apk/res/android"
4520+ android:width="108dp"
4521+ android:height="108dp"
4522+ android:viewportWidth="108"
4523+ android:viewportHeight="108">
4524+ <path
4525+ android:fillColor="#008577"
4526+ android:pathData="M0,0h108v108h-108z" />
4527+ <path
4528+ android:fillColor="#00000000"
4529+ android:pathData="M9,0L9,108"
4530+ android:strokeWidth="0.8"
4531+ android:strokeColor="#33FFFFFF" />
4532+ <path
4533+ android:fillColor="#00000000"
4534+ android:pathData="M19,0L19,108"
4535+ android:strokeWidth="0.8"
4536+ android:strokeColor="#33FFFFFF" />
4537+ <path
4538+ android:fillColor="#00000000"
4539+ android:pathData="M29,0L29,108"
4540+ android:strokeWidth="0.8"
4541+ android:strokeColor="#33FFFFFF" />
4542+ <path
4543+ android:fillColor="#00000000"
4544+ android:pathData="M39,0L39,108"
4545+ android:strokeWidth="0.8"
4546+ android:strokeColor="#33FFFFFF" />
4547+ <path
4548+ android:fillColor="#00000000"
4549+ android:pathData="M49,0L49,108"
4550+ android:strokeWidth="0.8"
4551+ android:strokeColor="#33FFFFFF" />
4552+ <path
4553+ android:fillColor="#00000000"
4554+ android:pathData="M59,0L59,108"
4555+ android:strokeWidth="0.8"
4556+ android:strokeColor="#33FFFFFF" />
4557+ <path
4558+ android:fillColor="#00000000"
4559+ android:pathData="M69,0L69,108"
4560+ android:strokeWidth="0.8"
4561+ android:strokeColor="#33FFFFFF" />
4562+ <path
4563+ android:fillColor="#00000000"
4564+ android:pathData="M79,0L79,108"
4565+ android:strokeWidth="0.8"
4566+ android:strokeColor="#33FFFFFF" />
4567+ <path
4568+ android:fillColor="#00000000"
4569+ android:pathData="M89,0L89,108"
4570+ android:strokeWidth="0.8"
4571+ android:strokeColor="#33FFFFFF" />
4572+ <path
4573+ android:fillColor="#00000000"
4574+ android:pathData="M99,0L99,108"
4575+ android:strokeWidth="0.8"
4576+ android:strokeColor="#33FFFFFF" />
4577+ <path
4578+ android:fillColor="#00000000"
4579+ android:pathData="M0,9L108,9"
4580+ android:strokeWidth="0.8"
4581+ android:strokeColor="#33FFFFFF" />
4582+ <path
4583+ android:fillColor="#00000000"
4584+ android:pathData="M0,19L108,19"
4585+ android:strokeWidth="0.8"
4586+ android:strokeColor="#33FFFFFF" />
4587+ <path
4588+ android:fillColor="#00000000"
4589+ android:pathData="M0,29L108,29"
4590+ android:strokeWidth="0.8"
4591+ android:strokeColor="#33FFFFFF" />
4592+ <path
4593+ android:fillColor="#00000000"
4594+ android:pathData="M0,39L108,39"
4595+ android:strokeWidth="0.8"
4596+ android:strokeColor="#33FFFFFF" />
4597+ <path
4598+ android:fillColor="#00000000"
4599+ android:pathData="M0,49L108,49"
4600+ android:strokeWidth="0.8"
4601+ android:strokeColor="#33FFFFFF" />
4602+ <path
4603+ android:fillColor="#00000000"
4604+ android:pathData="M0,59L108,59"
4605+ android:strokeWidth="0.8"
4606+ android:strokeColor="#33FFFFFF" />
4607+ <path
4608+ android:fillColor="#00000000"
4609+ android:pathData="M0,69L108,69"
4610+ android:strokeWidth="0.8"
4611+ android:strokeColor="#33FFFFFF" />
4612+ <path
4613+ android:fillColor="#00000000"
4614+ android:pathData="M0,79L108,79"
4615+ android:strokeWidth="0.8"
4616+ android:strokeColor="#33FFFFFF" />
4617+ <path
4618+ android:fillColor="#00000000"
4619+ android:pathData="M0,89L108,89"
4620+ android:strokeWidth="0.8"
4621+ android:strokeColor="#33FFFFFF" />
4622+ <path
4623+ android:fillColor="#00000000"
4624+ android:pathData="M0,99L108,99"
4625+ android:strokeWidth="0.8"
4626+ android:strokeColor="#33FFFFFF" />
4627+ <path
4628+ android:fillColor="#00000000"
4629+ android:pathData="M19,29L89,29"
4630+ android:strokeWidth="0.8"
4631+ android:strokeColor="#33FFFFFF" />
4632+ <path
4633+ android:fillColor="#00000000"
4634+ android:pathData="M19,39L89,39"
4635+ android:strokeWidth="0.8"
4636+ android:strokeColor="#33FFFFFF" />
4637+ <path
4638+ android:fillColor="#00000000"
4639+ android:pathData="M19,49L89,49"
4640+ android:strokeWidth="0.8"
4641+ android:strokeColor="#33FFFFFF" />
4642+ <path
4643+ android:fillColor="#00000000"
4644+ android:pathData="M19,59L89,59"
4645+ android:strokeWidth="0.8"
4646+ android:strokeColor="#33FFFFFF" />
4647+ <path
4648+ android:fillColor="#00000000"
4649+ android:pathData="M19,69L89,69"
4650+ android:strokeWidth="0.8"
4651+ android:strokeColor="#33FFFFFF" />
4652+ <path
4653+ android:fillColor="#00000000"
4654+ android:pathData="M19,79L89,79"
4655+ android:strokeWidth="0.8"
4656+ android:strokeColor="#33FFFFFF" />
4657+ <path
4658+ android:fillColor="#00000000"
4659+ android:pathData="M29,19L29,89"
4660+ android:strokeWidth="0.8"
4661+ android:strokeColor="#33FFFFFF" />
4662+ <path
4663+ android:fillColor="#00000000"
4664+ android:pathData="M39,19L39,89"
4665+ android:strokeWidth="0.8"
4666+ android:strokeColor="#33FFFFFF" />
4667+ <path
4668+ android:fillColor="#00000000"
4669+ android:pathData="M49,19L49,89"
4670+ android:strokeWidth="0.8"
4671+ android:strokeColor="#33FFFFFF" />
4672+ <path
4673+ android:fillColor="#00000000"
4674+ android:pathData="M59,19L59,89"
4675+ android:strokeWidth="0.8"
4676+ android:strokeColor="#33FFFFFF" />
4677+ <path
4678+ android:fillColor="#00000000"
4679+ android:pathData="M69,19L69,89"
4680+ android:strokeWidth="0.8"
4681+ android:strokeColor="#33FFFFFF" />
4682+ <path
4683+ android:fillColor="#00000000"
4684+ android:pathData="M79,19L79,89"
4685+ android:strokeWidth="0.8"
4686+ android:strokeColor="#33FFFFFF" />
4687+</vector>
4688diff --git a/android/tools/multi-win-replay/res/mipmap-anydpi-v26/ic_launcher.xml b/android/tools/multi-win-replay/res/mipmap-anydpi-v26/ic_launcher.xml
4689new file mode 100644
4690index 0000000..eca70cf
4691--- /dev/null
4692+++ b/android/tools/multi-win-replay/res/mipmap-anydpi-v26/ic_launcher.xml
4693@@ -0,0 +1,5 @@
4694+<?xml version="1.0" encoding="utf-8"?>
4695+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
4696+ <background android:drawable="@drawable/ic_launcher_background" />
4697+ <foreground android:drawable="@drawable/ic_launcher_foreground" />
4698+</adaptive-icon>
4699\ No newline at end of file
4700diff --git a/android/tools/multi-win-replay/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/tools/multi-win-replay/res/mipmap-anydpi-v26/ic_launcher_round.xml
4701new file mode 100644
4702index 0000000..eca70cf
4703--- /dev/null
4704+++ b/android/tools/multi-win-replay/res/mipmap-anydpi-v26/ic_launcher_round.xml
4705@@ -0,0 +1,5 @@
4706+<?xml version="1.0" encoding="utf-8"?>
4707+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
4708+ <background android:drawable="@drawable/ic_launcher_background" />
4709+ <foreground android:drawable="@drawable/ic_launcher_foreground" />
4710+</adaptive-icon>
4711\ No newline at end of file
4712diff --git a/android/tools/multi-win-replay/res/mipmap-hdpi/ic_launcher.png b/android/tools/multi-win-replay/res/mipmap-hdpi/ic_launcher.png
4713new file mode 100644
4714index 0000000..898f3ed
4715Binary files /dev/null and b/android/tools/multi-win-replay/res/mipmap-hdpi/ic_launcher.png differ
4716diff --git a/android/tools/multi-win-replay/res/mipmap-hdpi/ic_launcher_round.png b/android/tools/multi-win-replay/res/mipmap-hdpi/ic_launcher_round.png
4717new file mode 100644
4718index 0000000..dffca36
4719Binary files /dev/null and b/android/tools/multi-win-replay/res/mipmap-hdpi/ic_launcher_round.png differ
4720diff --git a/android/tools/multi-win-replay/res/mipmap-mdpi/ic_launcher.png b/android/tools/multi-win-replay/res/mipmap-mdpi/ic_launcher.png
4721new file mode 100644
4722index 0000000..64ba76f
4723Binary files /dev/null and b/android/tools/multi-win-replay/res/mipmap-mdpi/ic_launcher.png differ
4724diff --git a/android/tools/multi-win-replay/res/mipmap-mdpi/ic_launcher_round.png b/android/tools/multi-win-replay/res/mipmap-mdpi/ic_launcher_round.png
4725new file mode 100644
4726index 0000000..dae5e08
4727Binary files /dev/null and b/android/tools/multi-win-replay/res/mipmap-mdpi/ic_launcher_round.png differ
4728diff --git a/android/tools/multi-win-replay/res/mipmap-xhdpi/ic_launcher.png b/android/tools/multi-win-replay/res/mipmap-xhdpi/ic_launcher.png
4729new file mode 100644
4730index 0000000..e5ed465
4731Binary files /dev/null and b/android/tools/multi-win-replay/res/mipmap-xhdpi/ic_launcher.png differ
4732diff --git a/android/tools/multi-win-replay/res/mipmap-xhdpi/ic_launcher_round.png b/android/tools/multi-win-replay/res/mipmap-xhdpi/ic_launcher_round.png
4733new file mode 100644
4734index 0000000..14ed0af
4735Binary files /dev/null and b/android/tools/multi-win-replay/res/mipmap-xhdpi/ic_launcher_round.png differ
4736diff --git a/android/tools/multi-win-replay/res/mipmap-xxhdpi/ic_launcher.png b/android/tools/multi-win-replay/res/mipmap-xxhdpi/ic_launcher.png
4737new file mode 100644
4738index 0000000..b0907ca
4739Binary files /dev/null and b/android/tools/multi-win-replay/res/mipmap-xxhdpi/ic_launcher.png differ
4740diff --git a/android/tools/multi-win-replay/res/mipmap-xxhdpi/ic_launcher_round.png b/android/tools/multi-win-replay/res/mipmap-xxhdpi/ic_launcher_round.png
4741new file mode 100644
4742index 0000000..d8ae031
4743Binary files /dev/null and b/android/tools/multi-win-replay/res/mipmap-xxhdpi/ic_launcher_round.png differ
4744diff --git a/android/tools/multi-win-replay/res/mipmap-xxxhdpi/ic_launcher.png b/android/tools/multi-win-replay/res/mipmap-xxxhdpi/ic_launcher.png
4745new file mode 100644
4746index 0000000..2c18de9
4747Binary files /dev/null and b/android/tools/multi-win-replay/res/mipmap-xxxhdpi/ic_launcher.png differ
4748diff --git a/android/tools/multi-win-replay/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/tools/multi-win-replay/res/mipmap-xxxhdpi/ic_launcher_round.png
4749new file mode 100644
4750index 0000000..beed3cd
4751Binary files /dev/null and b/android/tools/multi-win-replay/res/mipmap-xxxhdpi/ic_launcher_round.png differ
4752diff --git a/android/tools/multi-win-replay/res/values-v27/styles.xml b/android/tools/multi-win-replay/res/values-v27/styles.xml
4753new file mode 100644
4754index 0000000..2d9748d
4755--- /dev/null
4756+++ b/android/tools/multi-win-replay/res/values-v27/styles.xml
4757@@ -0,0 +1,12 @@
4758+<?xml version="1.0" encoding="utf-8"?>
4759+<resources>
4760+ <style name="AppTheme" parent="@android:style/Theme.NoTitleBar.Fullscreen">
4761+ <item name="colorPrimary">@color/colorPrimary</item>
4762+ <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
4763+ <item name="colorAccent">@color/colorAccent</item>
4764+
4765+ <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
4766+ <item name="android:windowTranslucentStatus">true</item>
4767+ <item name="android:windowTranslucentNavigation">true</item>
4768+ </style>
4769+</resources>
4770\ No newline at end of file
4771diff --git a/android/tools/multi-win-replay/res/values/colors.xml b/android/tools/multi-win-replay/res/values/colors.xml
4772new file mode 100644
4773index 0000000..69b2233
4774--- /dev/null
4775+++ b/android/tools/multi-win-replay/res/values/colors.xml
4776@@ -0,0 +1,6 @@
4777+<?xml version="1.0" encoding="utf-8"?>
4778+<resources>
4779+ <color name="colorPrimary">#008577</color>
4780+ <color name="colorPrimaryDark">#00574B</color>
4781+ <color name="colorAccent">#D81B60</color>
4782+</resources>
4783diff --git a/android/tools/multi-win-replay/res/values/strings.xml b/android/tools/multi-win-replay/res/values/strings.xml
4784new file mode 100644
4785index 0000000..5a2db75
4786--- /dev/null
4787+++ b/android/tools/multi-win-replay/res/values/strings.xml
4788@@ -0,0 +1,3 @@
4789+<resources>
4790+ <string name="app_name">gfxrecon-replay</string>
4791+</resources>
4792diff --git a/android/tools/multi-win-replay/res/values/styles.xml b/android/tools/multi-win-replay/res/values/styles.xml
4793new file mode 100644
4794index 0000000..4caddd6
4795--- /dev/null
4796+++ b/android/tools/multi-win-replay/res/values/styles.xml
4797@@ -0,0 +1,11 @@
4798+<resources>
4799+
4800+ <!-- Base application theme. -->
4801+ <style name="AppTheme" parent="@android:style/Theme.NoTitleBar.Fullscreen">
4802+ <!-- Customize your theme here. -->
4803+ <item name="colorPrimary">@color/colorPrimary</item>
4804+ <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
4805+ <item name="colorAccent">@color/colorAccent</item>
4806+ </style>
4807+
4808+</resources>
4809diff --git a/android/tools/multi-win-replay/src/main/com/lunarg/gfxreconstruct/replay/ReplayActivity.java b/android/tools/multi-win-replay/src/main/com/lunarg/gfxreconstruct/replay/ReplayActivity.java
4810new file mode 100644
4811index 0000000..93f161b
4812--- /dev/null
4813+++ b/android/tools/multi-win-replay/src/main/com/lunarg/gfxreconstruct/replay/ReplayActivity.java
4814@@ -0,0 +1,143 @@
4815+/*
4816+** Copyright (c) 2025 LunarG, Inc.
4817+** Copyright (c) 2025 Arm Limited and/or its affiliates <open-source-office@arm.com>
4818+**
4819+** Permission is hereby granted, free of charge, to any person obtaining a
4820+** copy of this software and associated documentation files (the "Software"),
4821+** to deal in the Software without restriction, including without limitation
4822+** the rights to use, copy, modify, merge, publish, distribute, sublicense,
4823+** and/or sell copies of the Software, and to permit persons to whom the
4824+** Software is furnished to do so, subject to the following conditions:
4825+**
4826+** The above copyright notice and this permission notice shall be included in
4827+** all copies or substantial portions of the Software.
4828+**
4829+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
4830+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
4831+** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
4832+** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
4833+** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
4834+** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
4835+** DEALINGS IN THE SOFTWARE.
4836+*/
4837+
4838+package com.lunarg.gfxreconstruct.replay;
4839+import java.util.List;
4840+import java.util.ArrayList;
4841+import android.app.NativeActivity;
4842+import android.os.Bundle;
4843+import android.widget.FrameLayout;
4844+import android.view.SurfaceView;
4845+import android.view.SurfaceHolder;
4846+import android.view.ViewGroup.LayoutParams;
4847+import android.view.Surface;
4848+import android.util.Log;
4849+import android.content.Context;
4850+import android.view.View;
4851+
4852+public class ReplayActivity extends NativeActivity
4853+{
4854+ private FrameLayout mFrameLayout;
4855+ private static final String TAG = "gfxrecon";
4856+ private Surface mSurface;
4857+ public native void setSurface(Surface surface);
4858+ private List<VKSurfaceView> mSurfaceviewList = new ArrayList<VKSurfaceView>();
4859+
4860+ @Override protected void onCreate(Bundle savedInstanceState)
4861+ {
4862+ super.onCreate(savedInstanceState);
4863+
4864+ // Create a FrameLayout to hold SurfaceView instances
4865+ mFrameLayout = new FrameLayout(this);
4866+ setContentView(mFrameLayout);
4867+
4868+ System.loadLibrary("gfxrecon-replay");
4869+ }
4870+
4871+ private class VKSurfaceView extends SurfaceView implements SurfaceHolder.Callback
4872+ {
4873+ private int width;
4874+ private int height;
4875+
4876+ public VKSurfaceView(Context context, int w, int h)
4877+ {
4878+ super(context);
4879+
4880+ width = w;
4881+ height = h;
4882+
4883+ SurfaceHolder holder = getHolder();
4884+ holder.addCallback(this);
4885+ }
4886+
4887+ @Override public void surfaceCreated(SurfaceHolder holder)
4888+ {
4889+ mSurface = holder.getSurface();
4890+ Log.i(TAG, "SurfaceHolder.Callback: surfaceCreated:" + mSurface);
4891+ }
4892+
4893+ @Override public void surfaceDestroyed(SurfaceHolder holder)
4894+ {
4895+ Log.i(TAG, "SurfaceHolder.Callback: surfaceDestroyed:" + holder.getSurface());
4896+ }
4897+
4898+ @Override public void surfaceChanged(SurfaceHolder holder, int format, int w, int h)
4899+ {
4900+ Log.i(TAG, "SurfaceHolder.Callback: surfaceChanged:" + holder.getSurface() + " " + w + " " + h);
4901+ }
4902+ }
4903+
4904+ public void addNewView(int width, int height)
4905+ {
4906+ // Create a new SurfaceView
4907+ final Context context = this;
4908+ final int wid = width;
4909+ final int hei = height;
4910+ mSurface = null;
4911+ runOnUiThread(new Runnable() {
4912+ @Override public void run()
4913+ {
4914+ System.loadLibrary("gfxrecon-replay");
4915+ VKSurfaceView newSurfaceView = new VKSurfaceView(context, wid, hei);
4916+ mFrameLayout.addView(newSurfaceView,
4917+ new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
4918+ Log.i(TAG,
4919+ "Create a new surface view:"
4920+ + " width:" + wid + " height:" + hei);
4921+ mSurfaceviewList.add(newSurfaceView);
4922+ }
4923+ });
4924+ while (mSurface == null)
4925+ {
4926+ try
4927+ {
4928+ Thread.sleep(100);
4929+ }
4930+ catch (Exception e)
4931+ {
4932+ Log.w(TAG, "Create new surface failed");
4933+ e.printStackTrace();
4934+ }
4935+ }
4936+ setSurface(mSurface);
4937+ }
4938+
4939+ private void removeOneView(int surface_idx)
4940+ {
4941+ final int sur_idx = surface_idx;
4942+ runOnUiThread(new Runnable() {
4943+ @Override public void run()
4944+ {
4945+ if (mFrameLayout != null)
4946+ {
4947+ Log.i(TAG, "Remove one view");
4948+ mFrameLayout.removeView(mSurfaceviewList.get(sur_idx));
4949+ }
4950+ else
4951+ {
4952+ Log.w(TAG, "View container has been destroyed!");
4953+ }
4954+ }
4955+ });
4956+ }
4957+}
4958diff --git a/android/tools/quest_replay/.gitignore b/android/tools/quest_replay/.gitignore
4959new file mode 100644
4960index 0000000..796b96d
4961--- /dev/null
4962+++ b/android/tools/quest_replay/.gitignore
4963@@ -0,0 +1 @@
4964+/build
4965diff --git a/android/tools/quest_replay/CMakeLists.txt b/android/tools/quest_replay/CMakeLists.txt
4966new file mode 100644
4967index 0000000..0331865
4968--- /dev/null
4969+++ b/android/tools/quest_replay/CMakeLists.txt
4970@@ -0,0 +1,68 @@
4971+cmake_minimum_required(VERSION 3.4.1)
4972+
4973+project(gfxrecon-quest-replay)
4974+
4975+# For more information about using CMake with Android Studio, read the
4976+# documentation: https://d.android.com/studio/projects/add-native-code.html
4977+option(GFXRECON_ENABLE_OPENXR "Enable OpenXR support." ON)
4978+get_filename_component(GFXRECON_SOURCE_DIR ../../.. ABSOLUTE)
4979+
4980+if (GFXRECON_ENABLE_OPENXR)
4981+# Only supported when OpenXr support
4982+
4983+get_filename_component(GFXRECON_SOURCE_DIR ../../.. ABSOLUTE)
4984+include(../../framework/cmake-config/PlatformConfig.cmake)
4985+
4986+cmake_minimum_required(VERSION 3.4.1)
4987+
4988+
4989+# Enable OpenXR support for quest_replay or fail
4990+include("FindOpenXRVersion")
4991+if ((NOT XR_VERSION_MAJOR STREQUAL "") AND (NOT XR_VERSION_MINOR STREQUAL ""))
4992+ message(STATUS "OpenXR support enabled")
4993+ set(OPENXR_SUPPORT_ENABLED TRUE)
4994+else()
4995+ message(FATAL_ERROR "Failed to find OpenXR headers for support. Continuing with it disabled!")
4996+endif()
4997+
4998+add_subdirectory(../../framework/util ${PROJECT_SOURCE_DIR}/../../framework/util/build/tools/quest_replay/${ANDROID_ABI})
4999+add_subdirectory(../../framework/graphics ${PROJECT_SOURCE_DIR}/../../framework/graphics/build/tools/quest_replay/${ANDROID_ABI})
5000+add_subdirectory(../../framework/format ${PROJECT_SOURCE_DIR}/../../framework/format/build/tools/quest_replay/${ANDROID_ABI})
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches