Repository: xenia-project/xenia Branch: master Commit: 95a5c3ee250f Files: 1494 Total size: 25.2 MB Directory structure: gitextract_uybvm70e/ ├── .appveyor.yml ├── .clang-format ├── .drone.star ├── .gdbinit ├── .gitattributes ├── .github/ │ ├── CONTRIBUTING.md │ └── ISSUE_TEMPLATE/ │ ├── bug_report.yaml │ └── config.yml ├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── android/ │ └── android_studio_project/ │ ├── .gitignore │ ├── app/ │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── jp/ │ │ │ └── xenia/ │ │ │ ├── XeniaRuntimeException.java │ │ │ └── emulator/ │ │ │ ├── GpuTraceViewerActivity.java │ │ │ ├── LauncherActivity.java │ │ │ ├── WindowDemoActivity.java │ │ │ ├── WindowSurfaceView.java │ │ │ └── WindowedAppActivity.java │ │ └── res/ │ │ ├── drawable/ │ │ │ └── ic_launcher_background.xml │ │ ├── drawable-v24/ │ │ │ └── ic_launcher_foreground.xml │ │ ├── layout/ │ │ │ ├── activity_gpu_trace_viewer.xml │ │ │ ├── activity_launcher.xml │ │ │ └── activity_window_demo.xml │ │ ├── mipmap-anydpi-v26/ │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ └── values/ │ │ └── strings.xml │ ├── build.gradle │ ├── gradle/ │ │ └── wrapper/ │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradle.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── assets/ │ └── icon/ │ └── LICENSE ├── docs/ │ ├── building.md │ ├── cpu.md │ ├── cpu_todo.md │ ├── gpu.md │ ├── instruction_tracing.md │ ├── kernel.md │ ├── ppc/ │ │ └── vmx128.txt │ └── style_guide.md ├── premake5.lua ├── src/ │ └── xenia/ │ ├── app/ │ │ ├── discord/ │ │ │ ├── discord_presence.cc │ │ │ ├── discord_presence.h │ │ │ └── premake5.lua │ │ ├── emulator_window.cc │ │ ├── emulator_window.h │ │ ├── main_resources.rc │ │ ├── premake5.lua │ │ └── xenia_main.cc │ ├── apu/ │ │ ├── apu_flags.cc │ │ ├── apu_flags.h │ │ ├── audio_driver.cc │ │ ├── audio_driver.h │ │ ├── audio_system.cc │ │ ├── audio_system.h │ │ ├── conversion.h │ │ ├── debug_visualizers.natvis │ │ ├── nop/ │ │ │ ├── nop_apu_flags.cc │ │ │ ├── nop_apu_flags.h │ │ │ ├── nop_audio_system.cc │ │ │ ├── nop_audio_system.h │ │ │ └── premake5.lua │ │ ├── premake5.lua │ │ ├── sdl/ │ │ │ ├── premake5.lua │ │ │ ├── sdl_audio_driver.cc │ │ │ ├── sdl_audio_driver.h │ │ │ ├── sdl_audio_system.cc │ │ │ └── sdl_audio_system.h │ │ ├── xaudio2/ │ │ │ ├── premake5.lua │ │ │ ├── xaudio2_api.h │ │ │ ├── xaudio2_apu_flags.cc │ │ │ ├── xaudio2_apu_flags.h │ │ │ ├── xaudio2_audio_driver.cc │ │ │ ├── xaudio2_audio_driver.h │ │ │ ├── xaudio2_audio_system.cc │ │ │ └── xaudio2_audio_system.h │ │ ├── xma_context.cc │ │ ├── xma_context.h │ │ ├── xma_decoder.cc │ │ ├── xma_decoder.h │ │ ├── xma_helpers.h │ │ ├── xma_register_file.cc │ │ ├── xma_register_file.h │ │ └── xma_register_table.inc │ ├── base/ │ │ ├── README.md │ │ ├── app_win32.manifest │ │ ├── arena.cc │ │ ├── arena.h │ │ ├── assert.h │ │ ├── atomic.h │ │ ├── bit_map.cc │ │ ├── bit_map.h │ │ ├── bit_range.h │ │ ├── bit_stream.cc │ │ ├── bit_stream.h │ │ ├── byte_order.h │ │ ├── byte_stream.cc │ │ ├── byte_stream.h │ │ ├── chrono.h │ │ ├── chrono_steady_cast.h │ │ ├── clock.cc │ │ ├── clock.h │ │ ├── clock_posix.cc │ │ ├── clock_win.cc │ │ ├── clock_x64.cc │ │ ├── console.h │ │ ├── console_app_main.h │ │ ├── console_app_main_android.cc │ │ ├── console_app_main_posix.cc │ │ ├── console_app_main_win.cc │ │ ├── console_posix.cc │ │ ├── console_win.cc │ │ ├── cvar.cc │ │ ├── cvar.h │ │ ├── cvar_android.cc │ │ ├── debug_visualizers.natvis │ │ ├── debugging.h │ │ ├── debugging_mac.cc │ │ ├── debugging_posix.cc │ │ ├── debugging_win.cc │ │ ├── delegate.h │ │ ├── exception_handler.cc │ │ ├── exception_handler.h │ │ ├── exception_handler_posix.cc │ │ ├── exception_handler_win.cc │ │ ├── filesystem.cc │ │ ├── filesystem.h │ │ ├── filesystem_android.cc │ │ ├── filesystem_posix.cc │ │ ├── filesystem_wildcard.cc │ │ ├── filesystem_wildcard.h │ │ ├── filesystem_win.cc │ │ ├── fuzzy.cc │ │ ├── fuzzy.h │ │ ├── hash.h │ │ ├── host_thread_context.cc │ │ ├── host_thread_context.h │ │ ├── literals.h │ │ ├── logging.cc │ │ ├── logging.h │ │ ├── main_android.cc │ │ ├── main_android.h │ │ ├── main_init_android.cc │ │ ├── main_init_posix.cc │ │ ├── main_init_win.cc │ │ ├── main_win.cc │ │ ├── main_win.h │ │ ├── mapped_memory.h │ │ ├── mapped_memory_posix.cc │ │ ├── mapped_memory_win.cc │ │ ├── math.h │ │ ├── memory.cc │ │ ├── memory.h │ │ ├── memory_posix.cc │ │ ├── memory_win.cc │ │ ├── mutex.cc │ │ ├── mutex.h │ │ ├── platform.h │ │ ├── platform_linux.h │ │ ├── platform_win.h │ │ ├── premake5.lua │ │ ├── profiling.cc │ │ ├── profiling.h │ │ ├── reset_scope.h │ │ ├── ring_buffer.cc │ │ ├── ring_buffer.h │ │ ├── socket.h │ │ ├── socket_win.cc │ │ ├── string.cc │ │ ├── string.h │ │ ├── string_buffer.cc │ │ ├── string_buffer.h │ │ ├── string_key.h │ │ ├── string_util.h │ │ ├── system.h │ │ ├── system_android.cc │ │ ├── system_gnulinux.cc │ │ ├── system_win.cc │ │ ├── testing/ │ │ │ ├── chrono_test.cc │ │ │ ├── memory_test.cc │ │ │ ├── premake5.lua │ │ │ ├── threading_test.cc │ │ │ └── utf8_test.cc │ │ ├── threading.cc │ │ ├── threading.h │ │ ├── threading_mac.cc │ │ ├── threading_posix.cc │ │ ├── threading_timer_queue.cc │ │ ├── threading_timer_queue.h │ │ ├── threading_win.cc │ │ ├── type_pool.h │ │ ├── utf8.cc │ │ ├── utf8.h │ │ ├── vec128.cc │ │ ├── vec128.h │ │ └── xxhash.h │ ├── config.cc │ ├── config.h │ ├── cpp.hint │ ├── cpu/ │ │ ├── backend/ │ │ │ ├── assembler.cc │ │ │ ├── assembler.h │ │ │ ├── backend.cc │ │ │ ├── backend.h │ │ │ ├── code_cache.h │ │ │ ├── machine_info.h │ │ │ ├── null_backend.cc │ │ │ ├── null_backend.h │ │ │ └── x64/ │ │ │ ├── premake5.lua │ │ │ ├── x64_assembler.cc │ │ │ ├── x64_assembler.h │ │ │ ├── x64_backend.cc │ │ │ ├── x64_backend.h │ │ │ ├── x64_code_cache.cc │ │ │ ├── x64_code_cache.h │ │ │ ├── x64_code_cache_posix.cc │ │ │ ├── x64_code_cache_win.cc │ │ │ ├── x64_emitter.cc │ │ │ ├── x64_emitter.h │ │ │ ├── x64_function.cc │ │ │ ├── x64_function.h │ │ │ ├── x64_op.h │ │ │ ├── x64_seq_control.cc │ │ │ ├── x64_seq_memory.cc │ │ │ ├── x64_seq_vector.cc │ │ │ ├── x64_sequences.cc │ │ │ ├── x64_sequences.h │ │ │ ├── x64_stack_layout.h │ │ │ ├── x64_tracers.cc │ │ │ ├── x64_tracers.h │ │ │ └── x64_util.h │ │ ├── breakpoint.cc │ │ ├── breakpoint.h │ │ ├── compiler/ │ │ │ ├── compiler.cc │ │ │ ├── compiler.h │ │ │ ├── compiler_pass.cc │ │ │ ├── compiler_pass.h │ │ │ ├── compiler_passes.h │ │ │ └── passes/ │ │ │ ├── conditional_group_pass.cc │ │ │ ├── conditional_group_pass.h │ │ │ ├── conditional_group_subpass.cc │ │ │ ├── conditional_group_subpass.h │ │ │ ├── constant_propagation_pass.cc │ │ │ ├── constant_propagation_pass.h │ │ │ ├── context_promotion_pass.cc │ │ │ ├── context_promotion_pass.h │ │ │ ├── control_flow_analysis_pass.cc │ │ │ ├── control_flow_analysis_pass.h │ │ │ ├── control_flow_simplification_pass.cc │ │ │ ├── control_flow_simplification_pass.h │ │ │ ├── data_flow_analysis_pass.cc │ │ │ ├── data_flow_analysis_pass.h │ │ │ ├── dead_code_elimination_pass.cc │ │ │ ├── dead_code_elimination_pass.h │ │ │ ├── finalization_pass.cc │ │ │ ├── finalization_pass.h │ │ │ ├── memory_sequence_combination_pass.cc │ │ │ ├── memory_sequence_combination_pass.h │ │ │ ├── register_allocation_pass.cc │ │ │ ├── register_allocation_pass.h │ │ │ ├── simplification_pass.cc │ │ │ ├── simplification_pass.h │ │ │ ├── validation_pass.cc │ │ │ ├── validation_pass.h │ │ │ ├── value_reduction_pass.cc │ │ │ └── value_reduction_pass.h │ │ ├── cpu_flags.cc │ │ ├── cpu_flags.h │ │ ├── debug_listener.h │ │ ├── elf_module.cc │ │ ├── elf_module.h │ │ ├── entry_table.cc │ │ ├── entry_table.h │ │ ├── export_resolver.cc │ │ ├── export_resolver.h │ │ ├── function.cc │ │ ├── function.h │ │ ├── function_debug_info.cc │ │ ├── function_debug_info.h │ │ ├── function_trace_data.h │ │ ├── hir/ │ │ │ ├── block.cc │ │ │ ├── block.h │ │ │ ├── hir_builder.cc │ │ │ ├── hir_builder.h │ │ │ ├── instr.cc │ │ │ ├── instr.h │ │ │ ├── label.h │ │ │ ├── opcodes.cc │ │ │ ├── opcodes.h │ │ │ ├── opcodes.inl │ │ │ ├── value.cc │ │ │ └── value.h │ │ ├── lzx.cc │ │ ├── lzx.h │ │ ├── mmio_handler.cc │ │ ├── mmio_handler.h │ │ ├── module.cc │ │ ├── module.h │ │ ├── ppc/ │ │ │ ├── ppc_context.cc │ │ │ ├── ppc_context.h │ │ │ ├── ppc_decode_data.h │ │ │ ├── ppc_emit-private.h │ │ │ ├── ppc_emit.h │ │ │ ├── ppc_emit_altivec.cc │ │ │ ├── ppc_emit_alu.cc │ │ │ ├── ppc_emit_control.cc │ │ │ ├── ppc_emit_fpu.cc │ │ │ ├── ppc_emit_memory.cc │ │ │ ├── ppc_frontend.cc │ │ │ ├── ppc_frontend.h │ │ │ ├── ppc_hir_builder.cc │ │ │ ├── ppc_hir_builder.h │ │ │ ├── ppc_instr.h │ │ │ ├── ppc_opcode.h │ │ │ ├── ppc_opcode_disasm.cc │ │ │ ├── ppc_opcode_disasm.h │ │ │ ├── ppc_opcode_disasm_gen.cc │ │ │ ├── ppc_opcode_info.cc │ │ │ ├── ppc_opcode_info.h │ │ │ ├── ppc_opcode_lookup_gen.cc │ │ │ ├── ppc_opcode_table_gen.cc │ │ │ ├── ppc_scanner.cc │ │ │ ├── ppc_scanner.h │ │ │ ├── ppc_translator.cc │ │ │ ├── ppc_translator.h │ │ │ └── testing/ │ │ │ ├── README.md │ │ │ ├── instr_add.s │ │ │ ├── instr_addc.s │ │ │ ├── instr_adde.s │ │ │ ├── instr_addic.s │ │ │ ├── instr_addis.s │ │ │ ├── instr_addme.s │ │ │ ├── instr_addze.s │ │ │ ├── instr_and.s │ │ │ ├── instr_andc.s │ │ │ ├── instr_andi.s │ │ │ ├── instr_andis.s │ │ │ ├── instr_cmp.s │ │ │ ├── instr_cmpi.s │ │ │ ├── instr_cmpl.s │ │ │ ├── instr_cmpli.s │ │ │ ├── instr_cntlzd.s │ │ │ ├── instr_cntlzw.s │ │ │ ├── instr_divd.s │ │ │ ├── instr_divdu.s │ │ │ ├── instr_divw.s │ │ │ ├── instr_divwu.s │ │ │ ├── instr_eqv.s │ │ │ ├── instr_extsb.s │ │ │ ├── instr_extsh.s │ │ │ ├── instr_extsw.s │ │ │ ├── instr_fabs.s │ │ │ ├── instr_fadd.s │ │ │ ├── instr_fctixz.s │ │ │ ├── instr_fmadd.s │ │ │ ├── instr_fmadds.s │ │ │ ├── instr_fmul.s │ │ │ ├── instr_fnabs.s │ │ │ ├── instr_frsqrte.s │ │ │ ├── instr_fsel.s │ │ │ ├── instr_fsqrt.s │ │ │ ├── instr_lvexx.s │ │ │ ├── instr_lvl.s │ │ │ ├── instr_lvr.s │ │ │ ├── instr_lvsl.s │ │ │ ├── instr_lvsr.s │ │ │ ├── instr_mulhd.s │ │ │ ├── instr_mulhdu.s │ │ │ ├── instr_mulhw.s │ │ │ ├── instr_mulhwu.s │ │ │ ├── instr_mulld.s │ │ │ ├── instr_mulli.s │ │ │ ├── instr_mullw.s │ │ │ ├── instr_neg.s │ │ │ ├── instr_nor.s │ │ │ ├── instr_ori.s │ │ │ ├── instr_rldicl.s │ │ │ ├── instr_rldicr.s │ │ │ ├── instr_rlwimi.s │ │ │ ├── instr_rlwinm.s │ │ │ ├── instr_rlwnm.s │ │ │ ├── instr_sld.s │ │ │ ├── instr_slw.s │ │ │ ├── instr_srad.s │ │ │ ├── instr_sradi.s │ │ │ ├── instr_sraw.s │ │ │ ├── instr_srawi.s │ │ │ ├── instr_srd.s │ │ │ ├── instr_srw.s │ │ │ ├── instr_stvew.s │ │ │ ├── instr_stvl.s │ │ │ ├── instr_stvr.s │ │ │ ├── instr_subf.s │ │ │ ├── instr_subfc.s │ │ │ ├── instr_subfe.s │ │ │ ├── instr_subfic.s │ │ │ ├── instr_subfme.s │ │ │ ├── instr_subfze.s │ │ │ ├── instr_td.s │ │ │ ├── instr_tdi.s │ │ │ ├── instr_tw.s │ │ │ ├── instr_twi.s │ │ │ ├── instr_vaddfp.s │ │ │ ├── instr_vaddfp128.s │ │ │ ├── instr_vaddshs.s │ │ │ ├── instr_vadduhm.s │ │ │ ├── instr_vand.s │ │ │ ├── instr_vand128.s │ │ │ ├── instr_vandc.s │ │ │ ├── instr_vandc128.s │ │ │ ├── instr_vavgsh.s │ │ │ ├── instr_vavguh.s │ │ │ ├── instr_vcfsx.s │ │ │ ├── instr_vcmpxxfp.s │ │ │ ├── instr_vcmpxxfp128.s │ │ │ ├── instr_vctsxs.s │ │ │ ├── instr_vctuxs.s │ │ │ ├── instr_vexptefp.s │ │ │ ├── instr_vmaddfp.s │ │ │ ├── instr_vmaxfp.s │ │ │ ├── instr_vmaxfp128.s │ │ │ ├── instr_vmaxsh.s │ │ │ ├── instr_vmaxuh.s │ │ │ ├── instr_vminfp.s │ │ │ ├── instr_vminfp128.s │ │ │ ├── instr_vminsh.s │ │ │ ├── instr_vminuh.s │ │ │ ├── instr_vmrghb.s │ │ │ ├── instr_vmrghh.s │ │ │ ├── instr_vmrghw.s │ │ │ ├── instr_vmrglb.s │ │ │ ├── instr_vmrglh.s │ │ │ ├── instr_vmrglw.s │ │ │ ├── instr_vmsum3fp128.s │ │ │ ├── instr_vmsum4fp128.s │ │ │ ├── instr_vor.s │ │ │ ├── instr_vor128.s │ │ │ ├── instr_vperm.s │ │ │ ├── instr_vpermwi128.s │ │ │ ├── instr_vpkd3d128.s │ │ │ ├── instr_vpkpx.s │ │ │ ├── instr_vpkshss.s │ │ │ ├── instr_vpkshss128.s │ │ │ ├── instr_vpkshus.s │ │ │ ├── instr_vpkshus128.s │ │ │ ├── instr_vpkswss.s │ │ │ ├── instr_vpkswss128.s │ │ │ ├── instr_vpkswus.s │ │ │ ├── instr_vpkswus128.s │ │ │ ├── instr_vpkuhum.s │ │ │ ├── instr_vpkuhum128.s │ │ │ ├── instr_vpkuhus.s │ │ │ ├── instr_vpkuhus128.s │ │ │ ├── instr_vpkuwum.s │ │ │ ├── instr_vpkuwum128.s │ │ │ ├── instr_vpkuwus.s │ │ │ ├── instr_vpkuwus128.s │ │ │ ├── instr_vrfin.s │ │ │ ├── instr_vrlh.s │ │ │ ├── instr_vrlimi128.s │ │ │ ├── instr_vsel.s │ │ │ ├── instr_vsl.s │ │ │ ├── instr_vslb.s │ │ │ ├── instr_vsldoi.s │ │ │ ├── instr_vslh.s │ │ │ ├── instr_vslo.s │ │ │ ├── instr_vslw.s │ │ │ ├── instr_vspltb.s │ │ │ ├── instr_vsplth.s │ │ │ ├── instr_vspltisb.s │ │ │ ├── instr_vspltish.s │ │ │ ├── instr_vspltisw.s │ │ │ ├── instr_vspltw.s │ │ │ ├── instr_vsr.s │ │ │ ├── instr_vsrah.s │ │ │ ├── instr_vsrh.s │ │ │ ├── instr_vsro.s │ │ │ ├── instr_vsubfp.s │ │ │ ├── instr_vsubfp128.s │ │ │ ├── instr_vsubshs.s │ │ │ ├── instr_vsubuhm.s │ │ │ ├── instr_vupkd3d128.s │ │ │ ├── instr_vupkhsb.s │ │ │ ├── instr_vupkhsb128.s │ │ │ ├── instr_vupkhsh.s │ │ │ ├── instr_vupklsb.s │ │ │ ├── instr_vupklsb128.s │ │ │ ├── instr_vupklsh.s │ │ │ ├── instr_vxor.s │ │ │ ├── instr_vxor128.s │ │ │ ├── ppc_testing_main.cc │ │ │ ├── ppc_testing_native_main.cc │ │ │ ├── ppc_testing_native_thunks.s │ │ │ ├── premake5.lua │ │ │ ├── seq_branch_carry.s │ │ │ └── seq_jumptable_constants.s │ │ ├── premake5.lua │ │ ├── processor.cc │ │ ├── processor.h │ │ ├── raw_module.cc │ │ ├── raw_module.h │ │ ├── stack_walker.h │ │ ├── stack_walker_posix.cc │ │ ├── stack_walker_win.cc │ │ ├── symbol.h │ │ ├── test_module.cc │ │ ├── test_module.h │ │ ├── testing/ │ │ │ ├── add_test.cc │ │ │ ├── byte_swap_test.cc │ │ │ ├── extract_test.cc │ │ │ ├── insert_test.cc │ │ │ ├── load_vector_shl_shr_test.cc │ │ │ ├── pack_test.cc │ │ │ ├── permute_test.cc │ │ │ ├── premake5.lua │ │ │ ├── sandbox_main.cc │ │ │ ├── sha_test.cc │ │ │ ├── shl_test.cc │ │ │ ├── shr_test.cc │ │ │ ├── swizzle_test.cc │ │ │ ├── unpack_test.cc │ │ │ ├── util.h │ │ │ ├── vector_add_test.cc │ │ │ ├── vector_max_test.cc │ │ │ ├── vector_min_test.cc │ │ │ ├── vector_rotate_left_test.cc │ │ │ ├── vector_sha_test.cc │ │ │ ├── vector_shl_test.cc │ │ │ └── vector_shr_test.cc │ │ ├── thread.cc │ │ ├── thread.h │ │ ├── thread_debug_info.h │ │ ├── thread_state.cc │ │ ├── thread_state.h │ │ ├── xex_module.cc │ │ └── xex_module.h │ ├── debug/ │ │ └── ui/ │ │ ├── debug_window.cc │ │ ├── debug_window.h │ │ └── premake5.lua │ ├── emulator.cc │ ├── emulator.h │ ├── gpu/ │ │ ├── command_processor.cc │ │ ├── command_processor.h │ │ ├── d3d12/ │ │ │ ├── d3d12_command_processor.cc │ │ │ ├── d3d12_command_processor.h │ │ │ ├── d3d12_graphics_system.cc │ │ │ ├── d3d12_graphics_system.h │ │ │ ├── d3d12_primitive_processor.cc │ │ │ ├── d3d12_primitive_processor.h │ │ │ ├── d3d12_render_target_cache.cc │ │ │ ├── d3d12_render_target_cache.h │ │ │ ├── d3d12_shader.cc │ │ │ ├── d3d12_shader.h │ │ │ ├── d3d12_shared_memory.cc │ │ │ ├── d3d12_shared_memory.h │ │ │ ├── d3d12_texture_cache.cc │ │ │ ├── d3d12_texture_cache.h │ │ │ ├── d3d12_trace_dump_main.cc │ │ │ ├── d3d12_trace_viewer_main.cc │ │ │ ├── deferred_command_list.cc │ │ │ ├── deferred_command_list.h │ │ │ ├── pipeline_cache.cc │ │ │ ├── pipeline_cache.h │ │ │ └── premake5.lua │ │ ├── draw_extent_estimator.cc │ │ ├── draw_extent_estimator.h │ │ ├── draw_util.cc │ │ ├── draw_util.h │ │ ├── dxbc.h │ │ ├── dxbc_shader.cc │ │ ├── dxbc_shader.h │ │ ├── dxbc_shader_translator.cc │ │ ├── dxbc_shader_translator.h │ │ ├── dxbc_shader_translator_alu.cc │ │ ├── dxbc_shader_translator_fetch.cc │ │ ├── dxbc_shader_translator_memexport.cc │ │ ├── dxbc_shader_translator_om.cc │ │ ├── gpu_flags.cc │ │ ├── gpu_flags.h │ │ ├── graphics_system.cc │ │ ├── graphics_system.h │ │ ├── null/ │ │ │ ├── null_command_processor.cc │ │ │ ├── null_command_processor.h │ │ │ ├── null_graphics_system.cc │ │ │ ├── null_graphics_system.h │ │ │ └── premake5.lua │ │ ├── packet_disassembler.cc │ │ ├── packet_disassembler.h │ │ ├── premake5.lua │ │ ├── primitive_processor.cc │ │ ├── primitive_processor.h │ │ ├── register_file.cc │ │ ├── register_file.h │ │ ├── register_table.inc │ │ ├── registers.cc │ │ ├── registers.h │ │ ├── render_target_cache.cc │ │ ├── render_target_cache.h │ │ ├── sampler_info.cc │ │ ├── sampler_info.h │ │ ├── shader.cc │ │ ├── shader.h │ │ ├── shader_compiler_main.cc │ │ ├── shader_interpreter.cc │ │ ├── shader_interpreter.h │ │ ├── shader_translator.cc │ │ ├── shader_translator.h │ │ ├── shader_translator_disasm.cc │ │ ├── shaders/ │ │ │ ├── adaptive_quad.hs.hlsl │ │ │ ├── adaptive_triangle.hs.hlsl │ │ │ ├── apply_gamma_pwl.cs.xesl │ │ │ ├── apply_gamma_pwl.ps.xesl │ │ │ ├── apply_gamma_pwl.xesli │ │ │ ├── apply_gamma_pwl_fxaa_luma.cs.xesl │ │ │ ├── apply_gamma_pwl_fxaa_luma.ps.xesl │ │ │ ├── apply_gamma_table.cs.xesl │ │ │ ├── apply_gamma_table.ps.xesl │ │ │ ├── apply_gamma_table.xesli │ │ │ ├── apply_gamma_table_fxaa_luma.cs.xesl │ │ │ ├── apply_gamma_table_fxaa_luma.ps.xesl │ │ │ ├── bytecode/ │ │ │ │ ├── .clang-format │ │ │ │ ├── d3d12_5_1/ │ │ │ │ │ ├── adaptive_quad_hs.h │ │ │ │ │ ├── adaptive_triangle_hs.h │ │ │ │ │ ├── apply_gamma_pwl_cs.h │ │ │ │ │ ├── apply_gamma_pwl_fxaa_luma_cs.h │ │ │ │ │ ├── apply_gamma_pwl_fxaa_luma_ps.h │ │ │ │ │ ├── apply_gamma_pwl_ps.h │ │ │ │ │ ├── apply_gamma_table_cs.h │ │ │ │ │ ├── apply_gamma_table_fxaa_luma_cs.h │ │ │ │ │ ├── apply_gamma_table_fxaa_luma_ps.h │ │ │ │ │ ├── apply_gamma_table_ps.h │ │ │ │ │ ├── clear_uint2_ps.h │ │ │ │ │ ├── continuous_quad_1cp_hs.h │ │ │ │ │ ├── continuous_quad_4cp_hs.h │ │ │ │ │ ├── continuous_triangle_1cp_hs.h │ │ │ │ │ ├── continuous_triangle_3cp_hs.h │ │ │ │ │ ├── discrete_quad_1cp_hs.h │ │ │ │ │ ├── discrete_quad_4cp_hs.h │ │ │ │ │ ├── discrete_triangle_1cp_hs.h │ │ │ │ │ ├── discrete_triangle_3cp_hs.h │ │ │ │ │ ├── float24_round_ps.h │ │ │ │ │ ├── float24_truncate_ps.h │ │ │ │ │ ├── fullscreen_cw_vs.h │ │ │ │ │ ├── fxaa_cs.h │ │ │ │ │ ├── fxaa_extreme_cs.h │ │ │ │ │ ├── host_depth_store_1xmsaa_cs.h │ │ │ │ │ ├── host_depth_store_2xmsaa_cs.h │ │ │ │ │ ├── host_depth_store_4xmsaa_cs.h │ │ │ │ │ ├── passthrough_position_xy_vs.h │ │ │ │ │ ├── resolve_clear_32bpp_cs.h │ │ │ │ │ ├── resolve_clear_32bpp_scaled_cs.h │ │ │ │ │ ├── resolve_clear_64bpp_cs.h │ │ │ │ │ ├── resolve_clear_64bpp_scaled_cs.h │ │ │ │ │ ├── resolve_fast_32bpp_1x2xmsaa_cs.h │ │ │ │ │ ├── resolve_fast_32bpp_1x2xmsaa_scaled_cs.h │ │ │ │ │ ├── resolve_fast_32bpp_4xmsaa_cs.h │ │ │ │ │ ├── resolve_fast_32bpp_4xmsaa_scaled_cs.h │ │ │ │ │ ├── resolve_fast_64bpp_1x2xmsaa_cs.h │ │ │ │ │ ├── resolve_fast_64bpp_1x2xmsaa_scaled_cs.h │ │ │ │ │ ├── resolve_fast_64bpp_4xmsaa_cs.h │ │ │ │ │ ├── resolve_fast_64bpp_4xmsaa_scaled_cs.h │ │ │ │ │ ├── resolve_full_128bpp_cs.h │ │ │ │ │ ├── resolve_full_128bpp_scaled_cs.h │ │ │ │ │ ├── resolve_full_16bpp_cs.h │ │ │ │ │ ├── resolve_full_16bpp_scaled_cs.h │ │ │ │ │ ├── resolve_full_32bpp_cs.h │ │ │ │ │ ├── resolve_full_32bpp_scaled_cs.h │ │ │ │ │ ├── resolve_full_64bpp_cs.h │ │ │ │ │ ├── resolve_full_64bpp_scaled_cs.h │ │ │ │ │ ├── resolve_full_8bpp_cs.h │ │ │ │ │ ├── resolve_full_8bpp_scaled_cs.h │ │ │ │ │ ├── tessellation_adaptive_vs.h │ │ │ │ │ ├── tessellation_indexed_vs.h │ │ │ │ │ ├── texture_load_128bpb_cs.h │ │ │ │ │ ├── texture_load_128bpb_scaled_cs.h │ │ │ │ │ ├── texture_load_16bpb_cs.h │ │ │ │ │ ├── texture_load_16bpb_scaled_cs.h │ │ │ │ │ ├── texture_load_32bpb_cs.h │ │ │ │ │ ├── texture_load_32bpb_scaled_cs.h │ │ │ │ │ ├── texture_load_64bpb_cs.h │ │ │ │ │ ├── texture_load_64bpb_scaled_cs.h │ │ │ │ │ ├── texture_load_8bpb_cs.h │ │ │ │ │ ├── texture_load_8bpb_scaled_cs.h │ │ │ │ │ ├── texture_load_bgrg8_rgb8_cs.h │ │ │ │ │ ├── texture_load_bgrg8_rgbg8_cs.h │ │ │ │ │ ├── texture_load_ctx1_cs.h │ │ │ │ │ ├── texture_load_depth_float_cs.h │ │ │ │ │ ├── texture_load_depth_float_scaled_cs.h │ │ │ │ │ ├── texture_load_depth_unorm_cs.h │ │ │ │ │ ├── texture_load_depth_unorm_scaled_cs.h │ │ │ │ │ ├── texture_load_dxn_rg8_cs.h │ │ │ │ │ ├── texture_load_dxt1_rgba8_cs.h │ │ │ │ │ ├── texture_load_dxt3_rgba8_cs.h │ │ │ │ │ ├── texture_load_dxt3a_cs.h │ │ │ │ │ ├── texture_load_dxt3aas1111_argb4_cs.h │ │ │ │ │ ├── texture_load_dxt3aas1111_bgra4_cs.h │ │ │ │ │ ├── texture_load_dxt5_rgba8_cs.h │ │ │ │ │ ├── texture_load_dxt5a_r8_cs.h │ │ │ │ │ ├── texture_load_gbgr8_grgb8_cs.h │ │ │ │ │ ├── texture_load_gbgr8_rgb8_cs.h │ │ │ │ │ ├── texture_load_r10g11b11_rgba16_cs.h │ │ │ │ │ ├── texture_load_r10g11b11_rgba16_scaled_cs.h │ │ │ │ │ ├── texture_load_r10g11b11_rgba16_snorm_cs.h │ │ │ │ │ ├── texture_load_r10g11b11_rgba16_snorm_scaled_cs.h │ │ │ │ │ ├── texture_load_r11g11b10_rgba16_cs.h │ │ │ │ │ ├── texture_load_r11g11b10_rgba16_scaled_cs.h │ │ │ │ │ ├── texture_load_r11g11b10_rgba16_snorm_cs.h │ │ │ │ │ ├── texture_load_r11g11b10_rgba16_snorm_scaled_cs.h │ │ │ │ │ ├── texture_load_r16_snorm_float_cs.h │ │ │ │ │ ├── texture_load_r16_snorm_float_scaled_cs.h │ │ │ │ │ ├── texture_load_r16_unorm_float_cs.h │ │ │ │ │ ├── texture_load_r16_unorm_float_scaled_cs.h │ │ │ │ │ ├── texture_load_r4g4b4a4_a4r4g4b4_cs.h │ │ │ │ │ ├── texture_load_r4g4b4a4_a4r4g4b4_scaled_cs.h │ │ │ │ │ ├── texture_load_r4g4b4a4_b4g4r4a4_cs.h │ │ │ │ │ ├── texture_load_r4g4b4a4_b4g4r4a4_scaled_cs.h │ │ │ │ │ ├── texture_load_r5g5b5a1_b5g5r5a1_cs.h │ │ │ │ │ ├── texture_load_r5g5b5a1_b5g5r5a1_scaled_cs.h │ │ │ │ │ ├── texture_load_r5g5b6_b5g6r5_swizzle_rbga_cs.h │ │ │ │ │ ├── texture_load_r5g5b6_b5g6r5_swizzle_rbga_scaled_cs.h │ │ │ │ │ ├── texture_load_r5g6b5_b5g6r5_cs.h │ │ │ │ │ ├── texture_load_r5g6b5_b5g6r5_scaled_cs.h │ │ │ │ │ ├── texture_load_rg16_snorm_float_cs.h │ │ │ │ │ ├── texture_load_rg16_snorm_float_scaled_cs.h │ │ │ │ │ ├── texture_load_rg16_unorm_float_cs.h │ │ │ │ │ ├── texture_load_rg16_unorm_float_scaled_cs.h │ │ │ │ │ ├── texture_load_rgba16_snorm_float_cs.h │ │ │ │ │ ├── texture_load_rgba16_snorm_float_scaled_cs.h │ │ │ │ │ ├── texture_load_rgba16_unorm_float_cs.h │ │ │ │ │ └── texture_load_rgba16_unorm_float_scaled_cs.h │ │ │ │ └── vulkan_spirv/ │ │ │ │ ├── apply_gamma_pwl_cs.h │ │ │ │ ├── apply_gamma_pwl_fxaa_luma_cs.h │ │ │ │ ├── apply_gamma_pwl_fxaa_luma_ps.h │ │ │ │ ├── apply_gamma_pwl_ps.h │ │ │ │ ├── apply_gamma_table_cs.h │ │ │ │ ├── apply_gamma_table_fxaa_luma_cs.h │ │ │ │ ├── apply_gamma_table_fxaa_luma_ps.h │ │ │ │ ├── apply_gamma_table_ps.h │ │ │ │ ├── fullscreen_cw_vs.h │ │ │ │ ├── host_depth_store_1xmsaa_cs.h │ │ │ │ ├── host_depth_store_2xmsaa_cs.h │ │ │ │ ├── host_depth_store_4xmsaa_cs.h │ │ │ │ ├── passthrough_position_xy_vs.h │ │ │ │ ├── resolve_clear_32bpp_cs.h │ │ │ │ ├── resolve_clear_32bpp_scaled_cs.h │ │ │ │ ├── resolve_clear_64bpp_cs.h │ │ │ │ ├── resolve_clear_64bpp_scaled_cs.h │ │ │ │ ├── resolve_fast_32bpp_1x2xmsaa_cs.h │ │ │ │ ├── resolve_fast_32bpp_1x2xmsaa_scaled_cs.h │ │ │ │ ├── resolve_fast_32bpp_4xmsaa_cs.h │ │ │ │ ├── resolve_fast_32bpp_4xmsaa_scaled_cs.h │ │ │ │ ├── resolve_fast_64bpp_1x2xmsaa_cs.h │ │ │ │ ├── resolve_fast_64bpp_1x2xmsaa_scaled_cs.h │ │ │ │ ├── resolve_fast_64bpp_4xmsaa_cs.h │ │ │ │ ├── resolve_fast_64bpp_4xmsaa_scaled_cs.h │ │ │ │ ├── resolve_full_128bpp_cs.h │ │ │ │ ├── resolve_full_128bpp_scaled_cs.h │ │ │ │ ├── resolve_full_16bpp_cs.h │ │ │ │ ├── resolve_full_16bpp_scaled_cs.h │ │ │ │ ├── resolve_full_32bpp_cs.h │ │ │ │ ├── resolve_full_32bpp_scaled_cs.h │ │ │ │ ├── resolve_full_64bpp_cs.h │ │ │ │ ├── resolve_full_64bpp_scaled_cs.h │ │ │ │ ├── resolve_full_8bpp_cs.h │ │ │ │ ├── resolve_full_8bpp_scaled_cs.h │ │ │ │ ├── texture_load_128bpb_cs.h │ │ │ │ ├── texture_load_128bpb_scaled_cs.h │ │ │ │ ├── texture_load_16bpb_cs.h │ │ │ │ ├── texture_load_16bpb_scaled_cs.h │ │ │ │ ├── texture_load_32bpb_cs.h │ │ │ │ ├── texture_load_32bpb_scaled_cs.h │ │ │ │ ├── texture_load_64bpb_cs.h │ │ │ │ ├── texture_load_64bpb_scaled_cs.h │ │ │ │ ├── texture_load_8bpb_cs.h │ │ │ │ ├── texture_load_8bpb_scaled_cs.h │ │ │ │ ├── texture_load_bgrg8_rgb8_cs.h │ │ │ │ ├── texture_load_bgrg8_rgbg8_cs.h │ │ │ │ ├── texture_load_ctx1_cs.h │ │ │ │ ├── texture_load_depth_float_cs.h │ │ │ │ ├── texture_load_depth_float_scaled_cs.h │ │ │ │ ├── texture_load_depth_unorm_cs.h │ │ │ │ ├── texture_load_depth_unorm_scaled_cs.h │ │ │ │ ├── texture_load_dxn_rg8_cs.h │ │ │ │ ├── texture_load_dxt1_rgba8_cs.h │ │ │ │ ├── texture_load_dxt3_rgba8_cs.h │ │ │ │ ├── texture_load_dxt3a_cs.h │ │ │ │ ├── texture_load_dxt3aas1111_argb4_cs.h │ │ │ │ ├── texture_load_dxt3aas1111_bgra4_cs.h │ │ │ │ ├── texture_load_dxt5_rgba8_cs.h │ │ │ │ ├── texture_load_dxt5a_r8_cs.h │ │ │ │ ├── texture_load_gbgr8_grgb8_cs.h │ │ │ │ ├── texture_load_gbgr8_rgb8_cs.h │ │ │ │ ├── texture_load_r10g11b11_rgba16_cs.h │ │ │ │ ├── texture_load_r10g11b11_rgba16_scaled_cs.h │ │ │ │ ├── texture_load_r10g11b11_rgba16_snorm_cs.h │ │ │ │ ├── texture_load_r10g11b11_rgba16_snorm_scaled_cs.h │ │ │ │ ├── texture_load_r11g11b10_rgba16_cs.h │ │ │ │ ├── texture_load_r11g11b10_rgba16_scaled_cs.h │ │ │ │ ├── texture_load_r11g11b10_rgba16_snorm_cs.h │ │ │ │ ├── texture_load_r11g11b10_rgba16_snorm_scaled_cs.h │ │ │ │ ├── texture_load_r16_snorm_float_cs.h │ │ │ │ ├── texture_load_r16_snorm_float_scaled_cs.h │ │ │ │ ├── texture_load_r16_unorm_float_cs.h │ │ │ │ ├── texture_load_r16_unorm_float_scaled_cs.h │ │ │ │ ├── texture_load_r4g4b4a4_a4r4g4b4_cs.h │ │ │ │ ├── texture_load_r4g4b4a4_a4r4g4b4_scaled_cs.h │ │ │ │ ├── texture_load_r4g4b4a4_b4g4r4a4_cs.h │ │ │ │ ├── texture_load_r4g4b4a4_b4g4r4a4_scaled_cs.h │ │ │ │ ├── texture_load_r5g5b5a1_b5g5r5a1_cs.h │ │ │ │ ├── texture_load_r5g5b5a1_b5g5r5a1_scaled_cs.h │ │ │ │ ├── texture_load_r5g5b6_b5g6r5_swizzle_rbga_cs.h │ │ │ │ ├── texture_load_r5g5b6_b5g6r5_swizzle_rbga_scaled_cs.h │ │ │ │ ├── texture_load_r5g6b5_b5g6r5_cs.h │ │ │ │ ├── texture_load_r5g6b5_b5g6r5_scaled_cs.h │ │ │ │ ├── texture_load_rg16_snorm_float_cs.h │ │ │ │ ├── texture_load_rg16_snorm_float_scaled_cs.h │ │ │ │ ├── texture_load_rg16_unorm_float_cs.h │ │ │ │ ├── texture_load_rg16_unorm_float_scaled_cs.h │ │ │ │ ├── texture_load_rgba16_snorm_float_cs.h │ │ │ │ ├── texture_load_rgba16_snorm_float_scaled_cs.h │ │ │ │ ├── texture_load_rgba16_unorm_float_cs.h │ │ │ │ └── texture_load_rgba16_unorm_float_scaled_cs.h │ │ │ ├── clear_uint2.ps.hlsl │ │ │ ├── continuous_quad.hlsli │ │ │ ├── continuous_quad_1cp.hs.hlsl │ │ │ ├── continuous_quad_4cp.hs.hlsl │ │ │ ├── continuous_triangle.hlsli │ │ │ ├── continuous_triangle_1cp.hs.hlsl │ │ │ ├── continuous_triangle_3cp.hs.hlsl │ │ │ ├── discrete_quad.hlsli │ │ │ ├── discrete_quad_1cp.hs.hlsl │ │ │ ├── discrete_quad_4cp.hs.hlsl │ │ │ ├── discrete_triangle.hlsli │ │ │ ├── discrete_triangle_1cp.hs.hlsl │ │ │ ├── discrete_triangle_3cp.hs.hlsl │ │ │ ├── edram.xesli │ │ │ ├── endian.xesli │ │ │ ├── float24_round.ps.hlsl │ │ │ ├── float24_truncate.ps.hlsl │ │ │ ├── fullscreen_cw.vs.xesl │ │ │ ├── fxaa.cs.hlsl │ │ │ ├── fxaa.hlsli │ │ │ ├── fxaa_extreme.cs.hlsl │ │ │ ├── host_depth_store.xesli │ │ │ ├── host_depth_store_1xmsaa.cs.xesl │ │ │ ├── host_depth_store_2xmsaa.cs.xesl │ │ │ ├── host_depth_store_4xmsaa.cs.xesl │ │ │ ├── passthrough_position_xy.vs.xesl │ │ │ ├── pixel_formats.xesli │ │ │ ├── resolve.xesli │ │ │ ├── resolve_clear_32bpp.cs.xesl │ │ │ ├── resolve_clear_32bpp.xesli │ │ │ ├── resolve_clear_32bpp_scaled.cs.xesl │ │ │ ├── resolve_clear_64bpp.cs.xesl │ │ │ ├── resolve_clear_64bpp.xesli │ │ │ ├── resolve_clear_64bpp_scaled.cs.xesl │ │ │ ├── resolve_fast_32bpp_1x2xmsaa.cs.xesl │ │ │ ├── resolve_fast_32bpp_1x2xmsaa.xesli │ │ │ ├── resolve_fast_32bpp_1x2xmsaa_scaled.cs.xesl │ │ │ ├── resolve_fast_32bpp_4xmsaa.cs.xesl │ │ │ ├── resolve_fast_32bpp_4xmsaa.xesli │ │ │ ├── resolve_fast_32bpp_4xmsaa_scaled.cs.xesl │ │ │ ├── resolve_fast_64bpp_1x2xmsaa.cs.xesl │ │ │ ├── resolve_fast_64bpp_1x2xmsaa.xesli │ │ │ ├── resolve_fast_64bpp_1x2xmsaa_scaled.cs.xesl │ │ │ ├── resolve_fast_64bpp_4xmsaa.cs.xesl │ │ │ ├── resolve_fast_64bpp_4xmsaa.xesli │ │ │ ├── resolve_fast_64bpp_4xmsaa_scaled.cs.xesl │ │ │ ├── resolve_full_128bpp.cs.xesl │ │ │ ├── resolve_full_128bpp.xesli │ │ │ ├── resolve_full_128bpp_scaled.cs.xesl │ │ │ ├── resolve_full_16bpp.cs.xesl │ │ │ ├── resolve_full_16bpp.xesli │ │ │ ├── resolve_full_16bpp_scaled.cs.xesl │ │ │ ├── resolve_full_32bpp.cs.xesl │ │ │ ├── resolve_full_32bpp.xesli │ │ │ ├── resolve_full_32bpp_scaled.cs.xesl │ │ │ ├── resolve_full_64bpp.cs.xesl │ │ │ ├── resolve_full_64bpp.xesli │ │ │ ├── resolve_full_64bpp_scaled.cs.xesl │ │ │ ├── resolve_full_8bpp.cs.xesl │ │ │ ├── resolve_full_8bpp.xesli │ │ │ ├── resolve_full_8bpp_scaled.cs.xesl │ │ │ ├── tessellation_adaptive.vs.hlsl │ │ │ ├── tessellation_indexed.vs.hlsl │ │ │ ├── texture_address.xesli │ │ │ ├── texture_load.xesli │ │ │ ├── texture_load_128bpb.cs.xesl │ │ │ ├── texture_load_128bpb.xesli │ │ │ ├── texture_load_128bpb_scaled.cs.xesl │ │ │ ├── texture_load_16bpb.cs.xesl │ │ │ ├── texture_load_16bpb.xesli │ │ │ ├── texture_load_16bpb_scaled.cs.xesl │ │ │ ├── texture_load_32bpb.cs.xesl │ │ │ ├── texture_load_32bpb.xesli │ │ │ ├── texture_load_32bpb_64bpb.xesli │ │ │ ├── texture_load_32bpb_scaled.cs.xesl │ │ │ ├── texture_load_64bpb.cs.xesl │ │ │ ├── texture_load_64bpb.xesli │ │ │ ├── texture_load_64bpb_scaled.cs.xesl │ │ │ ├── texture_load_8bpb.cs.xesl │ │ │ ├── texture_load_8bpb.xesli │ │ │ ├── texture_load_8bpb_scaled.cs.xesl │ │ │ ├── texture_load_bgrg8_rgb8.cs.xesl │ │ │ ├── texture_load_bgrg8_rgbg8.cs.xesl │ │ │ ├── texture_load_ctx1.cs.xesl │ │ │ ├── texture_load_depth_float.cs.xesl │ │ │ ├── texture_load_depth_float_scaled.cs.xesl │ │ │ ├── texture_load_depth_unorm.cs.xesl │ │ │ ├── texture_load_depth_unorm_scaled.cs.xesl │ │ │ ├── texture_load_dxn_rg8.cs.xesl │ │ │ ├── texture_load_dxt1_rgba8.cs.xesl │ │ │ ├── texture_load_dxt3_rgba8.cs.xesl │ │ │ ├── texture_load_dxt3a.cs.xesl │ │ │ ├── texture_load_dxt3aas1111.xesli │ │ │ ├── texture_load_dxt3aas1111_argb4.cs.xesl │ │ │ ├── texture_load_dxt3aas1111_bgra4.cs.xesl │ │ │ ├── texture_load_dxt5_rgba8.cs.xesl │ │ │ ├── texture_load_dxt5a_r8.cs.xesl │ │ │ ├── texture_load_gbgr8_grgb8.cs.xesl │ │ │ ├── texture_load_gbgr8_rgb8.cs.xesl │ │ │ ├── texture_load_r10g11b11_rgba16.cs.xesl │ │ │ ├── texture_load_r10g11b11_rgba16_scaled.cs.xesl │ │ │ ├── texture_load_r10g11b11_rgba16_snorm.cs.xesl │ │ │ ├── texture_load_r10g11b11_rgba16_snorm_scaled.cs.xesl │ │ │ ├── texture_load_r11g11b10_rgba16.cs.xesl │ │ │ ├── texture_load_r11g11b10_rgba16_scaled.cs.xesl │ │ │ ├── texture_load_r11g11b10_rgba16_snorm.cs.xesl │ │ │ ├── texture_load_r11g11b10_rgba16_snorm_scaled.cs.xesl │ │ │ ├── texture_load_r16_snorm_float.cs.xesl │ │ │ ├── texture_load_r16_snorm_float_scaled.cs.xesl │ │ │ ├── texture_load_r16_unorm_float.cs.xesl │ │ │ ├── texture_load_r16_unorm_float_scaled.cs.xesl │ │ │ ├── texture_load_r4g4b4a4_a4r4g4b4.cs.xesl │ │ │ ├── texture_load_r4g4b4a4_a4r4g4b4_scaled.cs.xesl │ │ │ ├── texture_load_r4g4b4a4_b4g4r4a4.cs.xesl │ │ │ ├── texture_load_r4g4b4a4_b4g4r4a4_scaled.cs.xesl │ │ │ ├── texture_load_r5g5b5a1_b5g5r5a1.cs.xesl │ │ │ ├── texture_load_r5g5b5a1_b5g5r5a1_scaled.cs.xesl │ │ │ ├── texture_load_r5g5b6_b5g6r5_swizzle_rbga.cs.xesl │ │ │ ├── texture_load_r5g5b6_b5g6r5_swizzle_rbga_scaled.cs.xesl │ │ │ ├── texture_load_r5g6b5_b5g6r5.cs.xesl │ │ │ ├── texture_load_r5g6b5_b5g6r5_scaled.cs.xesl │ │ │ ├── texture_load_rg16_snorm_float.cs.xesl │ │ │ ├── texture_load_rg16_snorm_float_scaled.cs.xesl │ │ │ ├── texture_load_rg16_unorm_float.cs.xesl │ │ │ ├── texture_load_rg16_unorm_float_scaled.cs.xesl │ │ │ ├── texture_load_rgba16_snorm_float.cs.xesl │ │ │ ├── texture_load_rgba16_snorm_float_scaled.cs.xesl │ │ │ ├── texture_load_rgba16_unorm_float.cs.xesl │ │ │ ├── texture_load_rgba16_unorm_float_scaled.cs.xesl │ │ │ └── xenos_draw.hlsli │ │ ├── shared_memory.cc │ │ ├── shared_memory.h │ │ ├── spirv_builder.cc │ │ ├── spirv_builder.h │ │ ├── spirv_shader.cc │ │ ├── spirv_shader.h │ │ ├── spirv_shader_translator.cc │ │ ├── spirv_shader_translator.h │ │ ├── spirv_shader_translator_alu.cc │ │ ├── spirv_shader_translator_fetch.cc │ │ ├── spirv_shader_translator_memexport.cc │ │ ├── spirv_shader_translator_rb.cc │ │ ├── texture_address.h │ │ ├── texture_cache.cc │ │ ├── texture_cache.h │ │ ├── texture_dump.cc │ │ ├── texture_extent.cc │ │ ├── texture_info.cc │ │ ├── texture_info.h │ │ ├── texture_info_formats.cc │ │ ├── texture_util.cc │ │ ├── texture_util.h │ │ ├── trace_dump.cc │ │ ├── trace_dump.h │ │ ├── trace_player.cc │ │ ├── trace_player.h │ │ ├── trace_protocol.h │ │ ├── trace_reader.cc │ │ ├── trace_reader.h │ │ ├── trace_viewer.cc │ │ ├── trace_viewer.h │ │ ├── trace_writer.cc │ │ ├── trace_writer.h │ │ ├── ucode.cc │ │ ├── ucode.h │ │ ├── vulkan/ │ │ │ ├── deferred_command_buffer.cc │ │ │ ├── deferred_command_buffer.h │ │ │ ├── premake5.lua │ │ │ ├── vulkan_command_processor.cc │ │ │ ├── vulkan_command_processor.h │ │ │ ├── vulkan_graphics_system.cc │ │ │ ├── vulkan_graphics_system.h │ │ │ ├── vulkan_pipeline_cache.cc │ │ │ ├── vulkan_pipeline_cache.h │ │ │ ├── vulkan_primitive_processor.cc │ │ │ ├── vulkan_primitive_processor.h │ │ │ ├── vulkan_render_target_cache.cc │ │ │ ├── vulkan_render_target_cache.h │ │ │ ├── vulkan_shader.cc │ │ │ ├── vulkan_shader.h │ │ │ ├── vulkan_shared_memory.cc │ │ │ ├── vulkan_shared_memory.h │ │ │ ├── vulkan_texture_cache.cc │ │ │ ├── vulkan_texture_cache.h │ │ │ ├── vulkan_trace_dump_main.cc │ │ │ └── vulkan_trace_viewer_main.cc │ │ ├── xenos.cc │ │ └── xenos.h │ ├── helper/ │ │ └── sdl/ │ │ ├── premake5.lua │ │ ├── sdl_helper.cc │ │ └── sdl_helper.h │ ├── hid/ │ │ ├── hid_demo.cc │ │ ├── hid_flags.cc │ │ ├── hid_flags.h │ │ ├── input.h │ │ ├── input_driver.h │ │ ├── input_system.cc │ │ ├── input_system.h │ │ ├── nop/ │ │ │ ├── nop_hid.cc │ │ │ ├── nop_hid.h │ │ │ ├── nop_input_driver.cc │ │ │ ├── nop_input_driver.h │ │ │ └── premake5.lua │ │ ├── premake5.lua │ │ ├── sdl/ │ │ │ ├── premake5.lua │ │ │ ├── sdl_hid.cc │ │ │ ├── sdl_hid.h │ │ │ ├── sdl_input_driver.cc │ │ │ └── sdl_input_driver.h │ │ ├── winkey/ │ │ │ ├── premake5.lua │ │ │ ├── winkey_binding_table.inc │ │ │ ├── winkey_hid.cc │ │ │ ├── winkey_hid.h │ │ │ ├── winkey_input_driver.cc │ │ │ └── winkey_input_driver.h │ │ └── xinput/ │ │ ├── premake5.lua │ │ ├── xinput_hid.cc │ │ ├── xinput_hid.h │ │ ├── xinput_input_driver.cc │ │ └── xinput_input_driver.h │ ├── kernel/ │ │ ├── debug_visualizers.natvis │ │ ├── info/ │ │ │ ├── file.h │ │ │ └── volume.h │ │ ├── kernel_flags.cc │ │ ├── kernel_flags.h │ │ ├── kernel_module.cc │ │ ├── kernel_module.h │ │ ├── kernel_state.cc │ │ ├── kernel_state.h │ │ ├── premake5.lua │ │ ├── user_module.cc │ │ ├── user_module.h │ │ ├── util/ │ │ │ ├── export_table_post.inc │ │ │ ├── export_table_pre.inc │ │ │ ├── gameinfo_utils.cc │ │ │ ├── gameinfo_utils.h │ │ │ ├── native_list.cc │ │ │ ├── native_list.h │ │ │ ├── object_table.cc │ │ │ ├── object_table.h │ │ │ ├── ordinal_table_post.inc │ │ │ ├── ordinal_table_pre.inc │ │ │ ├── shim_utils.cc │ │ │ ├── shim_utils.h │ │ │ ├── xdbf_utils.cc │ │ │ ├── xdbf_utils.h │ │ │ └── xex2_info.h │ │ ├── xam/ │ │ │ ├── app_manager.cc │ │ │ ├── app_manager.h │ │ │ ├── apps/ │ │ │ │ ├── xam_app.cc │ │ │ │ ├── xam_app.h │ │ │ │ ├── xgi_app.cc │ │ │ │ ├── xgi_app.h │ │ │ │ ├── xlivebase_app.cc │ │ │ │ ├── xlivebase_app.h │ │ │ │ ├── xmp_app.cc │ │ │ │ └── xmp_app.h │ │ │ ├── content_manager.cc │ │ │ ├── content_manager.h │ │ │ ├── user_profile.cc │ │ │ ├── user_profile.h │ │ │ ├── xam_avatar.cc │ │ │ ├── xam_content.cc │ │ │ ├── xam_content_aggregate.cc │ │ │ ├── xam_content_device.cc │ │ │ ├── xam_content_device.h │ │ │ ├── xam_enum.cc │ │ │ ├── xam_info.cc │ │ │ ├── xam_input.cc │ │ │ ├── xam_locale.cc │ │ │ ├── xam_module.cc │ │ │ ├── xam_module.h │ │ │ ├── xam_module_export_groups.inc │ │ │ ├── xam_msg.cc │ │ │ ├── xam_net.cc │ │ │ ├── xam_notify.cc │ │ │ ├── xam_nui.cc │ │ │ ├── xam_ordinals.h │ │ │ ├── xam_party.cc │ │ │ ├── xam_private.h │ │ │ ├── xam_table.inc │ │ │ ├── xam_task.cc │ │ │ ├── xam_ui.cc │ │ │ ├── xam_user.cc │ │ │ ├── xam_video.cc │ │ │ └── xam_voice.cc │ │ ├── xbdm/ │ │ │ ├── xbdm_misc.cc │ │ │ ├── xbdm_module.cc │ │ │ ├── xbdm_module.h │ │ │ ├── xbdm_module_export_groups.inc │ │ │ ├── xbdm_ordinals.h │ │ │ ├── xbdm_private.h │ │ │ └── xbdm_table.inc │ │ ├── xboxkrnl/ │ │ │ ├── cert_monitor.cc │ │ │ ├── cert_monitor.h │ │ │ ├── debug_monitor.cc │ │ │ ├── debug_monitor.h │ │ │ ├── xboxkrnl_audio.cc │ │ │ ├── xboxkrnl_audio_xma.cc │ │ │ ├── xboxkrnl_crypt.cc │ │ │ ├── xboxkrnl_debug.cc │ │ │ ├── xboxkrnl_error.cc │ │ │ ├── xboxkrnl_error.h │ │ │ ├── xboxkrnl_hal.cc │ │ │ ├── xboxkrnl_hid.cc │ │ │ ├── xboxkrnl_io.cc │ │ │ ├── xboxkrnl_io_info.cc │ │ │ ├── xboxkrnl_memory.cc │ │ │ ├── xboxkrnl_misc.cc │ │ │ ├── xboxkrnl_module.cc │ │ │ ├── xboxkrnl_module.h │ │ │ ├── xboxkrnl_module_export_groups.inc │ │ │ ├── xboxkrnl_modules.cc │ │ │ ├── xboxkrnl_ob.cc │ │ │ ├── xboxkrnl_ordinals.h │ │ │ ├── xboxkrnl_private.h │ │ │ ├── xboxkrnl_rtl.cc │ │ │ ├── xboxkrnl_rtl.h │ │ │ ├── xboxkrnl_strings.cc │ │ │ ├── xboxkrnl_table.inc │ │ │ ├── xboxkrnl_threading.cc │ │ │ ├── xboxkrnl_threading.h │ │ │ ├── xboxkrnl_usbcam.cc │ │ │ ├── xboxkrnl_video.cc │ │ │ ├── xboxkrnl_video.h │ │ │ └── xboxkrnl_xconfig.cc │ │ ├── xenumerator.cc │ │ ├── xenumerator.h │ │ ├── xevent.cc │ │ ├── xevent.h │ │ ├── xfile.cc │ │ ├── xfile.h │ │ ├── xiocompletion.cc │ │ ├── xiocompletion.h │ │ ├── xmodule.cc │ │ ├── xmodule.h │ │ ├── xmutant.cc │ │ ├── xmutant.h │ │ ├── xnotifylistener.cc │ │ ├── xnotifylistener.h │ │ ├── xobject.cc │ │ ├── xobject.h │ │ ├── xsemaphore.cc │ │ ├── xsemaphore.h │ │ ├── xsocket.cc │ │ ├── xsocket.h │ │ ├── xsymboliclink.cc │ │ ├── xsymboliclink.h │ │ ├── xthread.cc │ │ ├── xthread.h │ │ ├── xtimer.cc │ │ └── xtimer.h │ ├── memory.cc │ ├── memory.h │ ├── premake5.lua │ ├── tools/ │ │ └── api-scanner/ │ │ ├── README.md │ │ ├── api_scanner_loader.cc │ │ ├── api_scanner_loader.h │ │ └── api_scanner_main.cc │ ├── ui/ │ │ ├── d3d12/ │ │ │ ├── d3d12_api.h │ │ │ ├── d3d12_cpu_descriptor_pool.cc │ │ │ ├── d3d12_cpu_descriptor_pool.h │ │ │ ├── d3d12_descriptor_heap_pool.cc │ │ │ ├── d3d12_descriptor_heap_pool.h │ │ │ ├── d3d12_gpu_completion_timeline.cc │ │ │ ├── d3d12_gpu_completion_timeline.h │ │ │ ├── d3d12_immediate_drawer.cc │ │ │ ├── d3d12_immediate_drawer.h │ │ │ ├── d3d12_presenter.cc │ │ │ ├── d3d12_presenter.h │ │ │ ├── d3d12_provider.cc │ │ │ ├── d3d12_provider.h │ │ │ ├── d3d12_upload_buffer_pool.cc │ │ │ ├── d3d12_upload_buffer_pool.h │ │ │ ├── d3d12_util.cc │ │ │ ├── d3d12_util.h │ │ │ ├── d3d12_window_demo.cc │ │ │ └── premake5.lua │ │ ├── dxgi_include_win.h │ │ ├── file_picker.h │ │ ├── file_picker_android.cc │ │ ├── file_picker_gtk.cc │ │ ├── file_picker_win.cc │ │ ├── gpu_completion_timeline.h │ │ ├── graphics_provider.h │ │ ├── graphics_upload_buffer_pool.cc │ │ ├── graphics_upload_buffer_pool.h │ │ ├── graphics_util.cc │ │ ├── graphics_util.h │ │ ├── imgui_dialog.cc │ │ ├── imgui_dialog.h │ │ ├── imgui_drawer.cc │ │ ├── imgui_drawer.h │ │ ├── immediate_drawer.cc │ │ ├── immediate_drawer.h │ │ ├── menu_item.cc │ │ ├── menu_item.h │ │ ├── microprofile_drawer.cc │ │ ├── microprofile_drawer.h │ │ ├── premake5.lua │ │ ├── presenter.cc │ │ ├── presenter.h │ │ ├── renderdoc_api.cc │ │ ├── renderdoc_api.h │ │ ├── shaders/ │ │ │ ├── amd_language.xesli │ │ │ ├── bytecode/ │ │ │ │ ├── .clang-format │ │ │ │ ├── d3d12_5_1/ │ │ │ │ │ ├── guest_output_bilinear_dither_ps.h │ │ │ │ │ ├── guest_output_bilinear_ps.h │ │ │ │ │ ├── guest_output_ffx_cas_resample_dither_ps.h │ │ │ │ │ ├── guest_output_ffx_cas_resample_ps.h │ │ │ │ │ ├── guest_output_ffx_cas_sharpen_dither_ps.h │ │ │ │ │ ├── guest_output_ffx_cas_sharpen_ps.h │ │ │ │ │ ├── guest_output_ffx_fsr_easu_ps.h │ │ │ │ │ ├── guest_output_ffx_fsr_rcas_dither_ps.h │ │ │ │ │ ├── guest_output_ffx_fsr_rcas_ps.h │ │ │ │ │ ├── guest_output_triangle_strip_rect_vs.h │ │ │ │ │ ├── immediate_ps.h │ │ │ │ │ └── immediate_vs.h │ │ │ │ └── vulkan_spirv/ │ │ │ │ ├── guest_output_bilinear_dither_ps.h │ │ │ │ ├── guest_output_bilinear_ps.h │ │ │ │ ├── guest_output_ffx_cas_resample_dither_ps.h │ │ │ │ ├── guest_output_ffx_cas_resample_ps.h │ │ │ │ ├── guest_output_ffx_cas_sharpen_dither_ps.h │ │ │ │ ├── guest_output_ffx_cas_sharpen_ps.h │ │ │ │ ├── guest_output_ffx_fsr_easu_ps.h │ │ │ │ ├── guest_output_ffx_fsr_rcas_dither_ps.h │ │ │ │ ├── guest_output_ffx_fsr_rcas_ps.h │ │ │ │ ├── guest_output_triangle_strip_rect_vs.h │ │ │ │ ├── immediate_ps.h │ │ │ │ └── immediate_vs.h │ │ │ ├── dither_8bpc.xesli │ │ │ ├── guest_output_bilinear.ps.xesl │ │ │ ├── guest_output_bilinear.xesli │ │ │ ├── guest_output_bilinear_dither.ps.xesl │ │ │ ├── guest_output_ffx_cas_resample.ps.xesl │ │ │ ├── guest_output_ffx_cas_resample.xesli │ │ │ ├── guest_output_ffx_cas_resample_dither.ps.xesl │ │ │ ├── guest_output_ffx_cas_sharpen.ps.xesl │ │ │ ├── guest_output_ffx_cas_sharpen.xesli │ │ │ ├── guest_output_ffx_cas_sharpen_dither.ps.xesl │ │ │ ├── guest_output_ffx_fsr_easu.ps.xesl │ │ │ ├── guest_output_ffx_fsr_rcas.ps.xesl │ │ │ ├── guest_output_ffx_fsr_rcas.xesli │ │ │ ├── guest_output_ffx_fsr_rcas_dither.ps.xesl │ │ │ ├── guest_output_triangle_strip_rect.vs.xesl │ │ │ ├── immediate.ps.xesl │ │ │ ├── immediate.vs.xesl │ │ │ ├── noise.xesli │ │ │ └── xesl.xesli │ │ ├── surface.h │ │ ├── surface_android.cc │ │ ├── surface_android.h │ │ ├── surface_gnulinux.cc │ │ ├── surface_gnulinux.h │ │ ├── surface_win.cc │ │ ├── surface_win.h │ │ ├── ui_drawer.h │ │ ├── ui_event.h │ │ ├── virtual_key.h │ │ ├── vulkan/ │ │ │ ├── functions/ │ │ │ │ ├── device_1_0.inc │ │ │ │ ├── device_1_1_khr_bind_memory2.inc │ │ │ │ ├── device_1_1_khr_get_memory_requirements2.inc │ │ │ │ ├── device_1_3_khr_maintenance4.inc │ │ │ │ ├── device_khr_swapchain.inc │ │ │ │ ├── instance_1_0.inc │ │ │ │ ├── instance_1_1_khr_get_physical_device_properties2.inc │ │ │ │ ├── instance_ext_debug_utils.inc │ │ │ │ ├── instance_khr_android_surface.inc │ │ │ │ ├── instance_khr_surface.inc │ │ │ │ ├── instance_khr_win32_surface.inc │ │ │ │ └── instance_khr_xcb_surface.inc │ │ │ ├── linked_type_descriptor_set_allocator.cc │ │ │ ├── linked_type_descriptor_set_allocator.h │ │ │ ├── premake5.lua │ │ │ ├── single_layout_descriptor_set_pool.cc │ │ │ ├── single_layout_descriptor_set_pool.h │ │ │ ├── spirv_tools_context.cc │ │ │ ├── spirv_tools_context.h │ │ │ ├── ui_samplers.cc │ │ │ ├── ui_samplers.h │ │ │ ├── vulkan_api.h │ │ │ ├── vulkan_device.cc │ │ │ ├── vulkan_device.h │ │ │ ├── vulkan_gpu_completion_timeline.cc │ │ │ ├── vulkan_gpu_completion_timeline.h │ │ │ ├── vulkan_immediate_drawer.cc │ │ │ ├── vulkan_immediate_drawer.h │ │ │ ├── vulkan_instance.cc │ │ │ ├── vulkan_instance.h │ │ │ ├── vulkan_mem_alloc.cc │ │ │ ├── vulkan_mem_alloc.h │ │ │ ├── vulkan_presenter.cc │ │ │ ├── vulkan_presenter.h │ │ │ ├── vulkan_provider.cc │ │ │ ├── vulkan_provider.h │ │ │ ├── vulkan_upload_buffer_pool.cc │ │ │ ├── vulkan_upload_buffer_pool.h │ │ │ ├── vulkan_util.cc │ │ │ ├── vulkan_util.h │ │ │ └── vulkan_window_demo.cc │ │ ├── window.cc │ │ ├── window.h │ │ ├── window_android.cc │ │ ├── window_android.h │ │ ├── window_demo.cc │ │ ├── window_demo.h │ │ ├── window_gtk.cc │ │ ├── window_gtk.h │ │ ├── window_listener.h │ │ ├── window_win.cc │ │ ├── window_win.h │ │ ├── windowed_app.cc │ │ ├── windowed_app.h │ │ ├── windowed_app_context.cc │ │ ├── windowed_app_context.h │ │ ├── windowed_app_context_android.cc │ │ ├── windowed_app_context_android.h │ │ ├── windowed_app_context_gtk.cc │ │ ├── windowed_app_context_gtk.h │ │ ├── windowed_app_context_win.cc │ │ ├── windowed_app_context_win.h │ │ ├── windowed_app_main_android.cc │ │ ├── windowed_app_main_posix.cc │ │ └── windowed_app_main_win.cc │ ├── vfs/ │ │ ├── device.cc │ │ ├── device.h │ │ ├── devices/ │ │ │ ├── disc_image_device.cc │ │ │ ├── disc_image_device.h │ │ │ ├── disc_image_entry.cc │ │ │ ├── disc_image_entry.h │ │ │ ├── disc_image_file.cc │ │ │ ├── disc_image_file.h │ │ │ ├── host_path_device.cc │ │ │ ├── host_path_device.h │ │ │ ├── host_path_entry.cc │ │ │ ├── host_path_entry.h │ │ │ ├── host_path_file.cc │ │ │ ├── host_path_file.h │ │ │ ├── null_device.cc │ │ │ ├── null_device.h │ │ │ ├── null_entry.cc │ │ │ ├── null_entry.h │ │ │ ├── null_file.cc │ │ │ ├── null_file.h │ │ │ ├── stfs_container_device.cc │ │ │ ├── stfs_container_device.h │ │ │ ├── stfs_container_entry.cc │ │ │ ├── stfs_container_entry.h │ │ │ ├── stfs_container_file.cc │ │ │ ├── stfs_container_file.h │ │ │ └── stfs_xbox.h │ │ ├── entry.cc │ │ ├── entry.h │ │ ├── file.h │ │ ├── premake5.lua │ │ ├── testing/ │ │ │ ├── premake5.lua │ │ │ └── vfs_test.cc │ │ ├── vfs_dump.cc │ │ ├── virtual_file_system.cc │ │ └── virtual_file_system.h │ └── xbox.h ├── third_party/ │ ├── .clang-format │ ├── SDL2-static.lua │ ├── SDL2.lua │ ├── aes_128.lua │ ├── binutils/ │ │ ├── README.md │ │ └── build.sh │ ├── capstone.lua │ ├── clang-format/ │ │ ├── LICENSE.TXT │ │ ├── clang-format-bbedit.applescript │ │ ├── clang-format-diff.py │ │ ├── clang-format-sublime.py │ │ ├── clang-format.el │ │ ├── clang-format.py │ │ └── git-clang-format │ ├── cpptoml.lua │ ├── crypto/ │ │ ├── TinySHA1.hpp │ │ ├── des/ │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── des.cpp │ │ │ ├── des.h │ │ │ ├── des3.h │ │ │ ├── des_data.h │ │ │ ├── des_key.h │ │ │ ├── des_lookup.h │ │ │ └── descbc.h │ │ ├── rc4.c │ │ ├── rc4.h │ │ ├── rijndael-alg-fst.c │ │ ├── rijndael-alg-fst.h │ │ ├── sha256.cpp │ │ └── sha256.h │ ├── cxxopts.lua │ ├── discord-rpc.lua │ ├── dxbc/ │ │ ├── DXBCChecksum.cpp │ │ └── DXBCChecksum.h │ ├── dxbc.lua │ ├── fmt.lua │ ├── fxaa/ │ │ ├── FXAA3_11.h │ │ └── LICENSE │ ├── glslang-spirv.lua │ ├── google-styleguide/ │ │ └── cpplint/ │ │ ├── README │ │ └── cpplint.py │ ├── half/ │ │ ├── ChangeLog.txt │ │ ├── LICENSE.txt │ │ ├── README.txt │ │ └── include/ │ │ └── half.hpp │ ├── imgui.lua │ ├── llvm/ │ │ ├── LICENSE.txt │ │ ├── dummy.cc │ │ └── include/ │ │ └── llvm/ │ │ ├── ADT/ │ │ │ └── BitVector.h │ │ └── Support/ │ │ ├── Compiler.h │ │ ├── MathExtras.h │ │ └── type_traits.h │ ├── microprofile/ │ │ ├── README.md │ │ ├── microprofile.h │ │ ├── microprofiledraw.h │ │ ├── microprofilehtml.h │ │ └── microprofileui.h │ ├── mspack/ │ │ ├── COPYING.LIB │ │ ├── config.h │ │ ├── logging.cc │ │ ├── lzx.h │ │ ├── lzxd.c │ │ ├── mspack.h │ │ ├── readbits.h │ │ ├── readhuff.h │ │ ├── system.c │ │ └── system.h │ ├── mspack.lua │ ├── pe/ │ │ └── pe_image.h │ ├── renderdoc/ │ │ └── renderdoc_app.h │ ├── snappy.lua │ ├── stb/ │ │ ├── stb_image.h │ │ └── stb_image_write.h │ └── xxhash.lua ├── tools/ │ ├── build/ │ │ ├── premake │ │ ├── premake5.lua │ │ ├── scripts/ │ │ │ ├── build_paths.lua │ │ │ ├── force_compile_as_c.lua │ │ │ ├── force_compile_as_cc.lua │ │ │ ├── pkg_config.lua │ │ │ ├── platform_files.lua │ │ │ ├── single_library.lua │ │ │ ├── test_suite.lua │ │ │ └── util.lua │ │ └── src/ │ │ └── test_suite_main.cc │ ├── diff.py │ ├── generate_map.idc │ ├── gpu-trace-diff │ ├── ppc-instructions.xml │ ├── ppc-table-gen │ ├── shader-playground/ │ │ ├── App.config │ │ ├── Editor.Designer.cs │ │ ├── Editor.cs │ │ ├── Editor.resx │ │ ├── Program.cs │ │ ├── README.md │ │ ├── shader-playground.csproj │ │ └── shader-playground.sln │ ├── vswhere/ │ │ └── LICENSE.txt │ └── xenosci/ │ └── local_runner.py ├── xb.bat ├── xb.ps1 ├── xenia-build └── xeniarc ================================================ FILE CONTENTS ================================================ ================================================ FILE: .appveyor.yml ================================================ version: 1.0.{build}-{branch} branches: except: - gh-pages skip_tags: true skip_commits: files: - .drone.star - .github/** - android/** - docs/** - src/**/*_posix.* - src/**/*_linux.* - src/**/*_gnulinux.* - src/**/*_x11.* - src/**/*_gtk.* - src/**/*_android.* - src/**/*_mac.* - LICENSE - README.md skip_branch_with_pr: true pull_requests: do_not_increment_build_number: true os: Visual Studio 2019 init: - ps: | If (-Not $env:APPVEYOR_PULL_REQUEST_NUMBER) { $env:is_not_pr = "true" } If (-Not $env:APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED) { $env:APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED = " " } install: - | vcpkg integrate remove xb setup platform: Windows configuration: [Release, Checked] build_script: - xb build --config=%CONFIGURATION% --target=src\xenia-app --target=tests\xenia-base-tests --target=tests\xenia-cpu-ppc-tests --target=src\xenia-vfs-dump after_build: - | IF NOT "%CONFIGURATION%"=="Checked" SET "ARCHIVE_SUFFIX=%APPVEYOR_REPO_BRANCH%" IF NOT "%CONFIGURATION%"=="Checked" SET "ARCHIVE_SWITCHES=--" IF "%CONFIGURATION%"=="Checked" SET "ARCHIVE_SUFFIX=%APPVEYOR_REPO_BRANCH%_FOR-DEVS-ONLY" IF "%CONFIGURATION%"=="Checked" SET "ARCHIVE_SWITCHES="-pI know what I am doing." --" 7z a xenia_%ARCHIVE_SUFFIX%.zip %ARCHIVE_SWITCHES% LICENSE "%APPVEYOR_BUILD_FOLDER%\build\bin\%PLATFORM%\%CONFIGURATION%\xenia.exe" "%APPVEYOR_BUILD_FOLDER%\build\bin\%PLATFORM%\%CONFIGURATION%\xenia.pdb" 7z a xenia-vfs-dump_%ARCHIVE_SUFFIX%.zip %ARCHIVE_SWITCHES% LICENSE "%APPVEYOR_BUILD_FOLDER%\build\bin\%PLATFORM%\%CONFIGURATION%\xenia-vfs-dump.exe" "%APPVEYOR_BUILD_FOLDER%\build\bin\%PLATFORM%\%CONFIGURATION%\xenia-vfs-dump.pdb" before_test: - xb gentests test_script: - xb test --config=%CONFIGURATION% --no_build artifacts: - path: '*.zip' - path: xenia-cpu-ppc-test.log deploy: - provider: Environment name: xenia-master release: xenia-$(appveyor_repo_branch)-v$(appveyor_build_version) artifact: '*.zip' draft: false prerelease: true on: branch: master configuration: release appveyor_repo_tag: true is_not_pr: true - provider: GitHub name: xenia-master repository: xenia-project/release-builds-windows auth_token: secure: /8he47z1WnPN7LcCTe5T5KMxxX0SmqFj9QMpeWEa3aZ64kMsfupOT/jKakqTM8af tag: v$(appveyor_build_version) release: v$(appveyor_build_version) description: | Windows release build for https://github.com/xenia-project/xenia/commit/$(APPVEYOR_REPO_COMMIT). $(APPVEYOR_REPO_COMMIT_MESSAGE) $(APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED) draft: false prerelease: false on: branch: master configuration: release is_not_pr: true ================================================ FILE: .clang-format ================================================ --- BasedOnStyle: Google DerivePointerAlignment: false PointerAlignment: Left SortIncludes: true # Regroup causes unnecessary noise due to clang-format bug. IncludeBlocks: Preserve --- Language: Java DisableFormat: true SortIncludes: false ================================================ FILE: .drone.star ================================================ def main(ctx): return [ pipeline_lint(), pipeline_linux_desktop('x86_64-linux-clang', image_linux_x86_64(), 'amd64', 'clang', True), pipeline_linux_desktop('x86_64-linux-gcc', image_linux_x86_64(), 'amd64', 'gcc', False), # GCC release linking is really slow pipeline_android('x86_64-android', image_linux_x86_64(), 'amd64', 'Android-x86_64'), pipeline_android('aarch64-android', image_linux_x86_64(), 'amd64', 'Android-ARM64'), ] def image_linux_x86_64(): return 'xeniaproject/buildenv:2022-07-15' def volume_build(toolchain, path='/drone/src/build'): return { 'name': 'build-' + toolchain, 'path': path, } def command_cc(cc): # set CC, CXX, ... return 'export $(cat /{}.env | sed \'s/#.*//g\' | xargs)'.format(cc) def command_ndk_build(platform, configuration, target): return '$ANDROID_NDK_ROOT/build/ndk-build NDK_PROJECT_PATH:=./bin/{configuration} NDK_APPLICATION_MK:=./xenia.Application.mk PREMAKE_ANDROIDNDK_PLATFORMS:={platform} PREMAKE_ANDROIDNDK_CONFIGURATIONS:={configuration} -j$(nproc) {target}'.format(platform=platform, configuration=configuration, target=target) def xenia_base_tests_filters(): # https://github.com/xenia-project/xenia/issues/2036 return 'exclude:"Wait on Timer" exclude:"Wait on Multiple Timers" exclude:"HighResolutionTimer"' # Run lint in a separate pipeline so that it will try building even if lint fails def pipeline_lint(): return { 'kind': 'pipeline', 'type': 'docker', 'name': 'lint', 'steps': [ { 'name': 'lint', 'image': image_linux_x86_64(), 'commands': [ 'clang-format --version', './xenia-build lint --all', ], }, ], } def pipeline_linux_desktop(name, image, arch, cc, build_release_all): return { 'kind': 'pipeline', 'type': 'docker', 'name': name, 'platform': { 'os': 'linux', 'arch': arch, }, # These volumes will be mounted at the build directory, allowing to # run different premake toolchains from the same source tree 'volumes': [ { 'name': 'build-premake', 'temp': {}, }, { 'name': 'build-cmake', 'temp': {}, }, ], 'steps': [ # # Setup the source tree # { 'name': 'clone-submodules', 'image': image, 'commands': [ 'pwd', # May miss recursive submodules (but faster than xb setup) 'git submodule update --init --depth 1 -j $(nproc)', ], }, # # Setup the two build systems # # Native premake Makefiles for production { 'name': 'toolchain-premake', 'image': image, 'volumes': [volume_build('premake')], 'commands': [ command_cc(cc), '$CXX --version', 'python3 --version', './xenia-build premake --cc={}'.format(cc), ], 'depends_on': ['clone-submodules'], }, # Development toolchain { 'name': 'toolchain-cmake', 'image': image, 'volumes': [volume_build('cmake')], 'commands': [ command_cc(cc), ''' ./xenia-build premake --cc={} --devenv=cmake cd build for c in Debug Release do mkdir cmake-$c cmake -S . -B cmake-$c -G Ninja -DCMAKE_BUILD_TYPE=$c done '''.format(cc), ], # Premake itself needs to be build first: 'depends_on': ['toolchain-premake'], }, # # Building # { 'name': 'build-premake-debug-tests', 'image': image, 'volumes': [volume_build('premake')], 'commands': [ command_cc(cc), './xenia-build build --no_premake -j$(nproc) --config=Debug --target=xenia-base-tests', ], 'depends_on': ['toolchain-premake'], }, { 'name': 'build-premake-debug-all', 'image': image, 'volumes': [volume_build('premake')], 'commands': [ command_cc(cc), './xenia-build build --no_premake -j$(nproc) --config=Debug', ], 'depends_on': ['build-premake-debug-tests'], }, { 'name': 'build-premake-release-tests', 'image': image, 'volumes': [volume_build('premake')], 'commands': [ command_cc(cc), './xenia-build build --no_premake -j$(nproc) --config=Release --target=xenia-base-tests', ], 'depends_on': ['toolchain-premake'], }, ] + ([ { 'name': 'build-premake-release-all', 'image': image, 'volumes': [volume_build('premake')], 'commands': [ command_cc(cc), './xenia-build build --no_premake -j$(nproc) --config=Release', ], 'depends_on': ['build-premake-release-tests'], }, ] if build_release_all else []) + [ { 'name': 'build-cmake-debug-all', 'image': image, 'volumes': [volume_build('cmake')], 'commands': [ command_cc(cc), 'cd build/cmake-Debug', 'cmake --build . -j$(nproc)', ], 'depends_on': ['toolchain-cmake'], }, { 'name': 'build-cmake-release-tests', 'image': image, 'volumes': [volume_build('cmake')], 'commands': [ command_cc(cc), 'cd build/cmake-Release', 'cmake --build . -j$(nproc) --target xenia-base-tests', ], 'depends_on': ['toolchain-cmake'], }, ] + ([ { 'name': 'build-cmake-release-all', 'image': image, 'volumes': [volume_build('cmake')], 'commands': [ command_cc(cc), 'cd build/cmake-Release', 'cmake --build . -j$(nproc)', ], 'depends_on': ['build-cmake-release-tests'], }, ] if build_release_all else []) + [ # # Tests # { 'name': 'test-premake-debug-valgrind', 'image': image, 'volumes': [volume_build('premake')], 'commands': [ 'valgrind --error-exitcode=99 ./build/bin/Linux/Debug/xenia-base-tests --durations yes ' + xenia_base_tests_filters(), ], 'depends_on': ['build-premake-debug-tests'], }, { 'name': 'test-premake-release', 'image': image, 'volumes': [volume_build('premake')], 'commands': [ './build/bin/Linux/Release/xenia-base-tests --success --durations yes ' + xenia_base_tests_filters(), ], 'depends_on': ['build-premake-release-tests'], }, { 'name': 'test-cmake-release', 'image': image, 'volumes': [volume_build('cmake')], 'commands': [ './build/bin/Linux/Release/xenia-base-tests --success --durations yes ' + xenia_base_tests_filters(), ], 'depends_on': ['build-cmake-release-tests'], }, # # Stat # { 'name': 'stat', 'image': image, 'volumes': [ volume_build('premake', '/build-premake'), volume_build('cmake', '/build-cmake'), ], 'commands': [ ''' header() { SEP='============================================================' echo echo $SEP echo $@ echo $SEP } for v in premake cmake do for c in Debug Release do header $v $c p=/build-$v/bin/Linux/$c ls -la $p sha256sum $p/* done done ''' ], 'depends_on': [ 'build-premake-debug-all', 'build-cmake-debug-all', ] + ([ 'build-premake-release-all', 'build-cmake-release-all', ] if build_release_all else [ 'build-premake-release-tests', 'build-cmake-release-tests', ]), }, ], } def pipeline_android(name, image, arch, platform): return { 'kind': 'pipeline', 'type': 'docker', 'name': name, 'platform': { 'os': 'linux', 'arch': arch, }, 'steps': [ # # Setup the source tree # { 'name': 'clone-submodules', 'image': image, 'commands': [ 'pwd', # May miss recursive submodules (but faster than xb setup) 'git submodule update --init --depth 1 -j $(nproc)', ], }, # # Build premake and generate NDK makefiles # # NDK Makefiles { 'name': 'toolchain', 'image': image, 'commands': [ 'c++ --version', 'python3 --version', './xenia-build premake --target_os android', ], 'depends_on': ['clone-submodules'], }, # # Building # { 'name': 'build-debug', 'image': image, 'commands': [ 'cd build', command_ndk_build(platform, 'Debug', 'all'), ], 'depends_on': ['toolchain'], }, { 'name': 'build-release', 'image': image, 'commands': [ 'cd build', command_ndk_build(platform, 'Release', 'all'), ], 'depends_on': ['toolchain'], }, # # Stat # { 'name': 'stat', 'image': image, 'commands': [ ''' header() { SEP='============================================================' echo echo $SEP echo $@ echo $SEP } for c in Debug Release do header $c p=build/bin/$c/obj/local/* ls -la $p sha256sum $p/* || true done ''' ], 'depends_on': [ 'build-debug', 'build-release', ], }, ], } ================================================ FILE: .gdbinit ================================================ # Ignore HighResolutionTimer custom event handle SIG34 nostop noprint # Ignore PosixTimer custom event handle SIG35 nostop noprint # Ignore PosixThread exit event handle SIG32 nostop noprint # Ignore PosixThread suspend event handle SIG36 nostop noprint # Ignore PosixThread user callback event handle SIG37 nostop noprint ================================================ FILE: .gitattributes ================================================ * text=auto whitespace=blank-at-eol,tab-in-indent,trailing-space,tabwidth=2 *.bat text eol=crlf *.sh text eol=lf *.sln text eol=crlf -whitespace *.csproj text eol=crlf -whitespace merge=union *.vcxproj text eol=crlf -whitespace merge=union *.props text eol=crlf -whitespace merge=union src/**/shaders/bytecode/** linguist-generated=true ================================================ FILE: .github/CONTRIBUTING.md ================================================ # Content Guidelines The issue tracker is exclusively for filing and discussing bugs, feature requests, and tracking work items. It is not for technical support or general discussion. Avoid discussing any illegal activity, such as downloading games. **Repeated misuses will result in a permanent project ban.** ## Information Sourcing All information in xenia has been derived from reverse engineering legally-owned games, hardware, and tools made public by Microsoft (such as the XNA Game Studio tooling), scouring documentation made public by Microsoft (such as slide decks and other presentations at conferences), and information from code made public by 3rd party companies (like the Valve SDKs). The official Microsoft Xbox Development Kits (XDKs) are not to be used for any information added to the project. The contributors do not want the XDKs, nor do they want any information derived from them. The challenge of the project is what makes it fun! Poisoning the codebase with code obtained by shady means could result in the project being terminated, so just don't do it. **Posting any information directly from an XDK will result in a project ban.** # Contributing Code ## Style Guide Please read over [style_guide.md](../docs/style_guide.md) before sending pull requests and ensure your code is clean as the buildbot (or I) will make you to fix it :) [style_guide.md](../docs/style_guide.md) has information about using `xb format` and various IDE auto formatting tools so that you can avoid having to clean things up later, so be sure to check it out. Basically: run `xb format` before you add a commit and you won't have a problem. ## Referencing Sources In code interacting with guest interfaces or protocols, where applicable, please leave comments describing how the information included in it was obtained. For code based on analysis of the response of the original Xbox 360 hardware or software, please provide reproduction information, such as an outline of the algorithm executed, arguments and results of function calls or processor instructions involved, GPU or XMA commands and state register changes. Having traceable sources helps solve multiple issues: * The legality of the submitted code can be verified easily. * Additional analysis based on reproduction steps from prior research can be done to discover more details or to research the behavior of other related features. * The accuracy and completeness of the information can be evaluated. Knowing whether something is ground truth about the console's behavior or an approximation (for example, based on similar functionality in Windows, the Qualcomm Adreno 200 GPU, AMD's desktop GPU architectures; the Direct3D 11.3 functional specification, which may be used as a generic fallback when no information specific to the Xenos or Direct3D 9 is available) may help avoid redoing work that has already been done if the findings are accurate, or making potentially wrong conclusions about related functionality if there's no certainty about the correctness of the information. In addition, it's useful to describe how complete the implementation of a feature is — such as edge cases checked and covered. If you are unsure if your code accurately reflects the behavior of the console, or you have deliberately made deviations due to the lack of prerequisites for an accurate implementation or for performance reasons (in case of the latter, it's recommended to provide both options, selectable with a configuration variable), or you just want more research to be done in the future, please leave a TODO comment in the format provided in [style_guide.md](../docs/style_guide.md). If you have verified your code by checking the correctness of the behavior of a game, **do not** refer to it by its title trademark. To avoid unnecessary dependencies on third parties, instead, use the hexadecimal title ID number displayed in the title bar beside the name of the game. It's also recommended to avoid using proper names of game content if they can be replaced with easily understandable pointers not including them, such as "first mission", "protagonist", "enemy aircraft". Do not leave any hard-coded references to specific games, even in title ID form, in any part of the user interface, including the configuration file. If you want to provide an example of a game where changing a configuration variable may have a noticeable effect, use a code comment near the declaration of the variable rather than its description string. Any game identifiers referenced in the user interface must be obtained only from information provided by the user such as game data files. Also, do not put any conditionals based on hard-coded identifiers of games — the task of the project is researching the Xbox 360 console itself and documenting its behavior by creating open implementations of its interfaces. Game-specific hacks provide no help in achieving that, instead only complicating research by introducing incorrect state and hiding the symptoms of actual issues. While temporary workarounds, though discouraged, may be added in cases when progress would be blocked otherwise in other areas, they must be expressed and reasoned in terms of the common interface rather than logic internal to a specific game. ## Clean Git History Tools such as `git bisect` are used on the repository regularly to check for and identify regressions. Such tools require a clean git history to function properly. Incoming pull requests must follow good git rules, the most basic of which is that individual commits add functionality in somewhat working form and fully compile and run on their own. Small pull requests with a single commit are best and multiple commits in a pull request are allowed only if they are kept clean. If not clean, you will be asked to rebase your pulls (and if you don't know what that means, avoid getting into that situation ;). Example of a bad commit history: * Adding audio callback, random file loading, networking, etc. (+2000 lines) * Whoops. * Fixing build break. * Fixing lint errors. * Adding audio callback, second attempt. * ... Histories like this make it extremely difficult to check out any individual commit and know that the repository is in a good state. Rebasing, cherry-picking, or splitting your commits into separate branches will help keep things clean and easy. # License All xenia code is licensed under the 3-clause BSD license as detailed in [LICENSE](../LICENSE). Code under `third_party/` is licensed under its original license. Incoming code in pull requests are subject to the xenia [LICENSE](../LICENSE). Once code comes into the codebase it is very difficult to ever fully remove so copyright is ascribed to the project to prevent future disputes such as what occurred in [Dolphin](https://dolphin-emu.org/blog/2015/05/25/relicensing-dolphin/). That said: xenia will never be sold, never be made closed source, and never change to a fundamentally incompatible license. Any `third_party/` code added will be reviewed for conformance with the license. In general, GPL code is forbidden unless it is used exclusively for development-time tooling (like compiling). LGPL code is strongly discouraged as it complicates building. ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.yaml ================================================ name: Bug report description: Template for bug reports. labels: bug body: - id: disclaimer type: markdown attributes: value: | Try to create a very concise title that's straight to the point. **THIS IS NOT A SUPPORT FORUM!** For support, first read the wiki: https://github.com/xenia-project/xenia/wiki If your question wasn't answered there or you need help, proceed to #help in the Discord server: https://discord.gg/Q9mxZf9 DO NOT CREATE ISSUES ABOUT SPECIFIC GAMES IN THIS REPOSITORY! A game specific issue would be e.g. "Game X crashes after you hit a character a certain way" A Xenia issue would be e.g. "Kernel export NtDoSomething does nothing" For specific games, visit https://github.com/xenia-project/game-compatibility#game-compatibility - id: validation type: checkboxes attributes: label: Validation options: - label: I've read the [FAQ](https://github.com/xenia-project/xenia/wiki/FAQ). required: true - label: The Xenia build used is from the master branch (not MLBS/AlexVS/Canary/pull requests, etc.) required: true - label: This issue isn't for tech support (help with Xenia). required: true - label: If this issue occurs in a specific game, I've done analysis to locate the faulty subsystem of the emulator and a potential reason in it. required: true - label: I've checked if this issue hasn't already been reported. required: true - label: 'My device meets the minimum requirements: https://github.com/xenia-project/xenia/wiki/Quickstart#system-requirements' required: true - label: '(If building) I have read the building doc: https://github.com/xenia-project/xenia/blob/master/docs/building.md' - id: problem type: textarea attributes: label: Describe what's going wrong validations: required: true - id: what-should-happen type: textarea attributes: label: Describe what should happen validations: required: true - id: callstack type: textarea attributes: label: If applicable, provide a callstack here, especially for crashes - id: logfile type: textarea attributes: label: If applicable, upload a logfile and link it here ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ contact_links: - name: Xenia Discord server url: https://discord.gg/Q9mxZf9 about: Tech support for Xenia belongs here. ================================================ FILE: .gitignore ================================================ # ============================================================================== # Misc system junk # ============================================================================== .DS_Store ._* .Spotlight-V100 .Trashes .com.apple.* Thumbs.db Desktop.ini .svn # Microprofile settings .microprofilepreset.* # ============================================================================== # Projects/IDE files # ============================================================================== *~ # Sublime Text *.sublime-project *.sublime-workspace # VIM .*.sw[a-z] *.un~ Session.vim # TextMate *.tmproj *.tmproject tmtags # Eclipse .project .metadata # WebStorm .idea # VS .vs *.user *.sdf *.opensdf *.suo bin/ obj/ # VSCode .vscode # ============================================================================== # Temp generated code # ============================================================================== *.py[co] .coverage *.o *.aps # ============================================================================== # Logs and dumps # ============================================================================== npm-debug.log private/ *.trace imgui.ini *.log # ============================================================================== # Build system output # ============================================================================== # npm/node .lock-wscript node_modules/ node_modules/**/build/ node_modules/.bin/ # coverage/etc /scratch/ /build/ # ============================================================================== # Local-only paths # ============================================================================== .vagrant /attic/ /content/ /third_party/binutils/binutils-2.24.tar.gz /third_party/binutils/bin/ /third_party/binutils/powerpc-none-elf/ /third_party/binutils/share/ /third_party/binutils/binutils* /third_party/vasm/ /tools/shader-playground/*.dll ================================================ FILE: .gitmodules ================================================ [submodule "third_party/xbyak"] path = third_party/xbyak url = https://github.com/xenia-project/xbyak.git [submodule "third_party/imgui"] path = third_party/imgui url = https://github.com/ocornut/imgui.git [submodule "third_party/binutils-ppc-cygwin"] path = third_party/binutils-ppc-cygwin url = https://github.com/benvanik/binutils-ppc-cygwin.git [submodule "third_party/catch"] path = third_party/catch url = https://github.com/catchorg/Catch2.git [submodule "third_party/premake-core"] path = third_party/premake-core url = https://github.com/xenia-project/premake-core.git [submodule "third_party/snappy"] path = third_party/snappy url = https://github.com/xenia-project/snappy.git [submodule "third_party/premake-export-compile-commands"] path = third_party/premake-export-compile-commands url = https://github.com/xenia-project/premake-export-compile-commands.git [submodule "third_party/discord-rpc"] path = third_party/discord-rpc url = https://github.com/discordapp/discord-rpc.git [submodule "third_party/rapidjson"] path = third_party/rapidjson url = https://github.com/Tencent/rapidjson.git [submodule "third_party/aes_128"] path = third_party/aes_128 url = https://github.com/openluopworld/aes_128.git [submodule "third_party/capstone"] path = third_party/capstone url = https://github.com/xenia-project/capstone.git [submodule "third_party/cpptoml"] path = third_party/cpptoml url = https://github.com/skystrife/cpptoml.git [submodule "third_party/cxxopts"] path = third_party/cxxopts url = https://github.com/jarro2783/cxxopts.git [submodule "third_party/SDL2"] path = third_party/SDL2 url = https://github.com/libsdl-org/SDL.git [submodule "third_party/utfcpp"] path = third_party/utfcpp url = https://github.com/xenia-project/utfcpp.git [submodule "third_party/fmt"] path = third_party/fmt url = https://github.com/fmtlib/fmt.git [submodule "third_party/disruptorplus"] path = third_party/disruptorplus url = https://github.com/xenia-project/disruptorplus.git [submodule "third_party/DirectXShaderCompiler"] path = third_party/DirectXShaderCompiler url = https://github.com/microsoft/DirectXShaderCompiler.git [submodule "third_party/premake-cmake"] path = third_party/premake-cmake url = https://github.com/JoelLinn/premake-cmake.git [submodule "third_party/date"] path = third_party/date url = https://github.com/HowardHinnant/date.git [submodule "third_party/xxhash"] path = third_party/xxhash url = https://github.com/Cyan4973/xxHash.git [submodule "third_party/FFmpeg"] path = third_party/FFmpeg url = https://github.com/xenia-project/FFmpeg.git [submodule "third_party/premake-androidndk"] path = third_party/premake-androidndk url = https://github.com/Triang3l/premake-androidndk.git [submodule "third_party/FidelityFX-CAS"] path = third_party/FidelityFX-CAS url = https://github.com/GPUOpen-Effects/FidelityFX-CAS.git [submodule "third_party/FidelityFX-FSR"] path = third_party/FidelityFX-FSR url = https://github.com/GPUOpen-Effects/FidelityFX-FSR.git [submodule "third_party/Vulkan-Headers"] path = third_party/Vulkan-Headers url = https://github.com/KhronosGroup/Vulkan-Headers.git [submodule "third_party/glslang"] path = third_party/glslang url = https://github.com/KhronosGroup/glslang.git [submodule "third_party/SPIRV-Tools"] path = third_party/SPIRV-Tools url = https://github.com/KhronosGroup/SPIRV-Tools.git [submodule "third_party/VulkanMemoryAllocator"] path = third_party/VulkanMemoryAllocator url = https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git [submodule "third_party/DirectX-Headers"] path = third_party/DirectX-Headers url = https://github.com/microsoft/DirectX-Headers.git ================================================ FILE: LICENSE ================================================ Copyright (c) 2015, Ben Vanik. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BEN VANIK BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================ FILE: README.md ================================================

Xenia - Xbox 360 Emulator

Xenia is an experimental emulator for the Xbox 360. For more information, see the [main Xenia wiki](https://github.com/xenia-project/xenia/wiki). **Interested in supporting the core contributors?** Visit [Xenia Project on Patreon](https://www.patreon.com/xenia_project). Come chat with us about **emulator-related topics** on [Discord](https://discord.gg/Q9mxZf9). For developer chat join `#dev` but stay on topic. Lurking is not only fine, but encouraged! Please check the [FAQ](https://github.com/xenia-project/xenia/wiki/FAQ) page before asking questions. We've got jobs/lives/etc, so don't expect instant answers. Discussing illegal activities will get you banned. ## Status Buildbot | Status | Releases -------- | ------ | -------- [Windows](https://ci.appveyor.com/project/benvanik/xenia/branch/master) | [![Build status](https://ci.appveyor.com/api/projects/status/ftqiy86kdfawyx3a/branch/master?svg=true)](https://ci.appveyor.com/project/benvanik/xenia/branch/master) | [Latest](https://github.com/xenia-project/release-builds-windows/releases/latest) ◦ [All](https://github.com/xenia-project/release-builds-windows/releases) [Linux](https://cloud.drone.io/xenia-project/xenia) | [![Build status](https://cloud.drone.io/api/badges/xenia-project/xenia/status.svg)](https://cloud.drone.io/xenia-project/xenia) Quite a few real games run. Quite a few don't. See the [Game compatibility list](https://github.com/xenia-project/game-compatibility/issues) for currently tracked games, and feel free to contribute your own updates, screenshots, and information there following the [existing conventions](https://github.com/xenia-project/game-compatibility/blob/master/README.md). ## Disclaimer The goal of this project is to experiment, research, and educate on the topic of emulation of modern devices and operating systems. **It is not for enabling illegal activity**. All information is obtained via reverse engineering of legally purchased devices and games and information made public on the internet (you'd be surprised what's indexed on Google...). ## Quickstart See the [Quickstart](https://github.com/xenia-project/xenia/wiki/Quickstart) page. ## Building See [building.md](docs/building.md) for setup and information about the `xb` script. When writing code, check the [style guide](docs/style_guide.md) and be sure to run clang-format! ## Contributors Wanted! Have some spare time, know advanced C++, and want to write an emulator? Contribute! There's a ton of work that needs to be done, a lot of which is wide open greenfield fun. **For general rules and guidelines please see [CONTRIBUTING.md](.github/CONTRIBUTING.md).** Fixes and optimizations are always welcome (please!), but in addition to that there are some major work areas still untouched: * Help work through [missing functionality/bugs in games](https://github.com/xenia-project/xenia/labels/compat) * Reduce the size of Xenia's [huge log files](https://github.com/xenia-project/xenia/issues/1526) * Skilled with Linux? A strong contributor is needed to [help with porting](https://github.com/xenia-project/xenia/labels/platform-linux) See more projects [good for contributors](https://github.com/xenia-project/xenia/labels/good%20first%20issue). It's a good idea to ask on Discord and check the issues page before beginning work on something. ## FAQ See the [frequently asked questions](https://github.com/xenia-project/xenia/wiki/FAQ) page. ================================================ FILE: android/android_studio_project/.gitignore ================================================ *.iml .gradle /local.properties /.idea/caches /.idea/libraries /.idea/modules.xml /.idea/workspace.xml /.idea/navEditor.xml /.idea/assetWizardSettings.xml .DS_Store /build /captures .externalNativeBuild .cxx local.properties ================================================ FILE: android/android_studio_project/app/.gitignore ================================================ /build ================================================ FILE: android/android_studio_project/app/build.gradle ================================================ plugins { id 'com.android.application' } android { compileSdkVersion 33 ndkVersion '25.0.8775105' defaultConfig { applicationId 'jp.xenia.emulator' // 24 (7.0) - Vulkan. minSdkVersion 24 targetSdkVersion 33 versionCode 1 versionName 'Prototype' externalNativeBuild { ndkBuild { arguments 'NDK_APPLICATION_MK:=../../../build/xenia.Application.mk', 'PREMAKE_ANDROIDNDK_PLATFORMS:=Android-ARM64', 'PREMAKE_ANDROIDNDK_PLATFORMS+=Android-x86_64', // ndk.jobs doesn't work as of Gradle 7.1.0. "-j${Runtime.runtime.availableProcessors()}", // Work around "Bad file descriptor" on Windows on NDK r22+. '--output-sync=none' // For the app, don't build the executables designed for running from a terminal. // To build the executables, run ndk-build manually. targets 'xenia-app' } } ndk { abiFilters 'arm64-v8a', 'x86_64' stl 'c++_static' } } buildTypes { release { externalNativeBuild { ndkBuild { arguments 'PREMAKE_ANDROIDNDK_CONFIGURATIONS:=Release' } } minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } debug { applicationIdSuffix '.debug' debuggable true externalNativeBuild { ndkBuild { arguments 'PREMAKE_ANDROIDNDK_CONFIGURATIONS:=Debug' } } } checked { applicationIdSuffix '.checked' debuggable true externalNativeBuild { ndkBuild { arguments 'PREMAKE_ANDROIDNDK_CONFIGURATIONS:=Checked' } } } } flavorDimensions 'distribution' productFlavors { github { dimension 'distribution' applicationIdSuffix '.github' } googlePlay { dimension 'distribution' // TODO(Triang3l): Provide a signing config for core contributors only. } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } externalNativeBuild { ndkBuild { path file('../../../build/xenia.wks.Android.mk') } } } dependencies { implementation 'org.jetbrains:annotations:15.0' } ================================================ FILE: android/android_studio_project/app/proguard-rules.pro ================================================ # Add project specific ProGuard rules here. # You can control the set of applied configuration files using the # proguardFiles setting in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} # Uncomment this to preserve the line number information for # debugging stack traces. #-keepattributes SourceFile,LineNumberTable # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile ================================================ FILE: android/android_studio_project/app/src/main/AndroidManifest.xml ================================================ ================================================ FILE: android/android_studio_project/app/src/main/java/jp/xenia/XeniaRuntimeException.java ================================================ package jp.xenia; /** * Base class for all unchecked exceptions thrown by the Xenia project components. */ public class XeniaRuntimeException extends RuntimeException { public XeniaRuntimeException() { } public XeniaRuntimeException(final String name) { super(name); } public XeniaRuntimeException(final String name, final Throwable cause) { super(name, cause); } public XeniaRuntimeException(final Exception cause) { super(cause); } } ================================================ FILE: android/android_studio_project/app/src/main/java/jp/xenia/emulator/GpuTraceViewerActivity.java ================================================ package jp.xenia.emulator; import android.os.Bundle; public class GpuTraceViewerActivity extends WindowedAppActivity { @Override protected String getWindowedAppIdentifier() { return "xenia_gpu_vulkan_trace_viewer"; } @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_gpu_trace_viewer); setWindowSurfaceView(findViewById(R.id.gpu_trace_viewer_surface_view)); } } ================================================ FILE: android/android_studio_project/app/src/main/java/jp/xenia/emulator/LauncherActivity.java ================================================ package jp.xenia.emulator; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; public class LauncherActivity extends Activity { private static final int REQUEST_OPEN_GPU_TRACE_VIEWER = 0; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_launcher); } @Override protected void onActivityResult( final int requestCode, final int resultCode, final Intent data) { if (requestCode == REQUEST_OPEN_GPU_TRACE_VIEWER && resultCode == RESULT_OK) { final Uri uri = data.getData(); if (uri != null) { final Intent gpuTraceViewerIntent = new Intent(this, GpuTraceViewerActivity.class); final Bundle gpuTraceViewerLaunchArguments = new Bundle(); gpuTraceViewerLaunchArguments.putString("target_trace_file", uri.toString()); gpuTraceViewerIntent.putExtra( WindowedAppActivity.EXTRA_CVARS, gpuTraceViewerLaunchArguments); startActivity(gpuTraceViewerIntent); } } } public void onLaunchGpuTraceViewerClick(final View view) { final Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("application/octet-stream"); startActivityForResult(intent, REQUEST_OPEN_GPU_TRACE_VIEWER); } public void onLaunchWindowDemoClick(final View view) { startActivity(new Intent(this, WindowDemoActivity.class)); } } ================================================ FILE: android/android_studio_project/app/src/main/java/jp/xenia/emulator/WindowDemoActivity.java ================================================ package jp.xenia.emulator; import android.os.Bundle; public class WindowDemoActivity extends WindowedAppActivity { @Override protected String getWindowedAppIdentifier() { return "xenia_ui_window_vulkan_demo"; } @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_window_demo); setWindowSurfaceView(findViewById(R.id.window_demo_surface_view)); } } ================================================ FILE: android/android_studio_project/app/src/main/java/jp/xenia/emulator/WindowSurfaceView.java ================================================ package jp.xenia.emulator; import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.view.SurfaceView; public class WindowSurfaceView extends SurfaceView { public WindowSurfaceView(final Context context) { super(context); // Native drawing is invoked from onDraw. setWillNotDraw(false); } public WindowSurfaceView(final Context context, final AttributeSet attrs) { super(context, attrs); setWillNotDraw(false); } public WindowSurfaceView( final Context context, final AttributeSet attrs, final int defStyleAttr) { super(context, attrs, defStyleAttr); setWillNotDraw(false); } public WindowSurfaceView( final Context context, final AttributeSet attrs, final int defStyleAttr, final int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); setWillNotDraw(false); } @Override protected void onDraw(final Canvas canvas) { final Context context = getContext(); if (!(context instanceof WindowedAppActivity)) { return; } final WindowedAppActivity activity = (WindowedAppActivity) context; activity.onWindowSurfaceDraw(false); } } ================================================ FILE: android/android_studio_project/app/src/main/java/jp/xenia/emulator/WindowedAppActivity.java ================================================ package jp.xenia.emulator; import android.annotation.SuppressLint; import android.app.Activity; import android.content.res.AssetManager; import android.os.Bundle; import android.view.MotionEvent; import android.view.Surface; import android.view.SurfaceHolder; import android.view.View; import org.jetbrains.annotations.Nullable; import jp.xenia.XeniaRuntimeException; public abstract class WindowedAppActivity extends Activity { // The EXTRA_CVARS value literal is also used in the native code. /** * Name of the Bundle intent extra containing Xenia config variable launch arguments. */ public static final String EXTRA_CVARS = "jp.xenia.emulator.WindowedAppActivity.EXTRA_CVARS"; static { System.loadLibrary("xenia-app"); } private final WindowSurfaceListener mWindowSurfaceListener = new WindowSurfaceListener(); // May be 0 while destroying (mainly while the superclass is). private long mAppContext = 0; @Nullable private WindowSurfaceView mWindowSurfaceView = null; private native long initializeWindowedAppOnCreate( String windowedAppIdentifier, AssetManager assetManager); private native void onDestroyNative(long appContext); private native void onWindowSurfaceLayoutChange( long appContext, int left, int top, int right, int bottom); private native boolean onWindowSurfaceMotionEvent(long appContext, MotionEvent event); private native void onWindowSurfaceChanged(long appContext, Surface windowSurface); private native void paintWindow(long appContext, boolean forcePaint); protected abstract String getWindowedAppIdentifier(); protected void setWindowSurfaceView(@Nullable final WindowSurfaceView windowSurfaceView) { if (mWindowSurfaceView == windowSurfaceView) { return; } // Detach from the old surface. if (mWindowSurfaceView != null) { mWindowSurfaceView.getHolder().removeCallback(mWindowSurfaceListener); mWindowSurfaceView.setOnTouchListener(null); mWindowSurfaceView.setOnGenericMotionListener(null); mWindowSurfaceView.removeOnLayoutChangeListener(mWindowSurfaceListener); mWindowSurfaceView = null; if (mAppContext != 0) { onWindowSurfaceChanged(mAppContext, null); } } if (windowSurfaceView == null) { return; } mWindowSurfaceView = windowSurfaceView; // FIXME(Triang3l): This doesn't work if the layout has already been performed. mWindowSurfaceView.addOnLayoutChangeListener(mWindowSurfaceListener); mWindowSurfaceView.setOnGenericMotionListener(mWindowSurfaceListener); mWindowSurfaceView.setOnTouchListener(mWindowSurfaceListener); final SurfaceHolder windowSurfaceHolder = mWindowSurfaceView.getHolder(); windowSurfaceHolder.addCallback(mWindowSurfaceListener); // If setting after the creation of the surface. if (mAppContext != 0) { final Surface windowSurface = windowSurfaceHolder.getSurface(); if (windowSurface != null) { onWindowSurfaceChanged(mAppContext, windowSurface); } } } public void onWindowSurfaceDraw(final boolean forcePaint) { if (mAppContext == 0) { return; } paintWindow(mAppContext, forcePaint); } // Used from the native WindowedAppContext. May be called from non-UI threads. @SuppressWarnings("UnusedDeclaration") protected void postInvalidateWindowSurface() { if (mWindowSurfaceView == null) { return; } mWindowSurfaceView.postInvalidate(); } @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); final String windowedAppIdentifier = getWindowedAppIdentifier(); mAppContext = initializeWindowedAppOnCreate(windowedAppIdentifier, getAssets()); if (mAppContext == 0) { finish(); throw new XeniaRuntimeException( "Error initializing the windowed app " + windowedAppIdentifier); } } @Override protected void onDestroy() { setWindowSurfaceView(null); if (mAppContext != 0) { onDestroyNative(mAppContext); } mAppContext = 0; super.onDestroy(); } private class WindowSurfaceListener implements View.OnGenericMotionListener, View.OnLayoutChangeListener, View.OnTouchListener, SurfaceHolder.Callback2 { @Override public void onLayoutChange( final View v, final int left, final int top, final int right, final int bottom, final int oldLeft, final int oldTop, final int oldRight, final int oldBottom) { if (mAppContext != 0) { onWindowSurfaceLayoutChange(mAppContext, left, top, right, bottom); } } @Override public boolean onGenericMotion(final View view, final MotionEvent event) { if (mAppContext == 0) { return false; } return onWindowSurfaceMotionEvent(mAppContext, event); } @SuppressLint("ClickableViewAccessibility") @Override public boolean onTouch(final View view, final MotionEvent event) { if (mAppContext == 0) { return false; } return onWindowSurfaceMotionEvent(mAppContext, event); } @Override public void surfaceCreated(final SurfaceHolder holder) { if (mAppContext == 0) { return; } onWindowSurfaceChanged(mAppContext, holder.getSurface()); } @Override public void surfaceChanged( final SurfaceHolder holder, final int format, final int width, final int height) { if (mAppContext == 0) { return; } onWindowSurfaceChanged(mAppContext, holder.getSurface()); } @Override public void surfaceDestroyed(final SurfaceHolder holder) { if (mAppContext == 0) { return; } onWindowSurfaceChanged(mAppContext, null); } @Override public void surfaceRedrawNeeded(final SurfaceHolder holder) { onWindowSurfaceDraw(true); } } } ================================================ FILE: android/android_studio_project/app/src/main/res/drawable/ic_launcher_background.xml ================================================ ================================================ FILE: android/android_studio_project/app/src/main/res/drawable-v24/ic_launcher_foreground.xml ================================================ ================================================ FILE: android/android_studio_project/app/src/main/res/layout/activity_gpu_trace_viewer.xml ================================================ ================================================ FILE: android/android_studio_project/app/src/main/res/layout/activity_launcher.xml ================================================