Original Xbox Emulator for Windows, macOS, and Linux (Active Development)
Go to file
coldhex 987c778981 nv2a: implement screen coordinate rounding to 4 bit fractional precision
Xbox triangle rasterization appears to follow the usual top-left rule.
However, since Xemu renders to an OpenGL framebuffer object (FBO) instead
of directly to the default framebuffer, Xemu actually has what could be
called the bottom-left triangle rasterization rule. I'll address that in
another commit.

Also, note that the ProjAdjacentGeometry_0.5625 test in nxdk_pgraph_tests
is very sensitive to floating point rounding errors. For example, the
nxdk_pgraph_tests commit 66b32a0b1feba32a0db7a95d6358e84f7a6246ad changed
the math library which caused the test result to change also on real Xbox
hardware due to floating point rounding error differences in matrix
inverse computation. Apart from the bottom-left rasterization issue, the
differing result between Xbox and the rounding I am proposing here for
Xemu seems to stem from floating point rounding that happens in screen
coordinate calculations before the rounding to 4 bit precision takes place.
Fixing such rounding issues would require carrying all preceding floating
point computations exactly in the same order and with same precision as
Xbox. Note that Xbox Direct3D library seems to add 0.03125 (1/32) to
screen coordinates by default. Likely the idea there was to make floating
point screen coordinates round to the nearest screen coordinates in
4 bit fixed point precision. So the Xbox Direct3D library (and therefore
games) already mitigate against precarious rounding when exactly
half-integer coordinates are used by games. Actually they would use
integer coordinates because it is Direct3D 8, but since nv2a appears to
rasterize at half-integer coordinates like OpenGL, Xbox Direct3D
also adds 0.5 to screen coordinates in addition to 1/32.
2025-05-17 19:26:45 +03:00
.github ci: bump astral-sh/setup-uv from 6.0.0 to 6.0.1 2025-05-05 14:50:27 -07:00
.gitlab/issue_templates .gitlab/issue_templates: Move suggestions into comments 2022-12-15 15:19:24 +01:00
.gitlab-ci.d .gitlab-ci.d/cirrus: Remove the wrong CPU and RAM settings from the macOS job 2024-11-27 09:23:52 +01:00
accel v9.2.1 release 2025-02-15 13:59:10 -07:00
audio audio/pw: Report more accurate error when connecting to PipeWire fails 2024-10-14 17:35:24 +04:00
authz error: Drop superfluous #include "qapi/qmp/qerror.h" 2023-02-23 13:56:14 +01:00
backends backends/cryptodev-vhost-user: Fix local_error leaks 2025-01-17 09:16:01 +03:00
block v9.2.0 release 2025-01-03 22:30:04 -07:00
bsd-user bsd-user: Set TaskState ts_tid for initial threads 2024-11-04 20:26:40 -07:00
chardev v9.2.0 release 2025-01-03 22:30:04 -07:00
common-user common-user/host/ppc: Implement safe-syscall.inc.S 2023-01-23 14:39:48 -10:00
configs v9.2.1 release 2025-02-15 13:59:10 -07:00
contrib contrib/plugins: remove Makefile for contrib/plugins 2024-11-05 09:13:51 +00:00
crypto crypto: fix bogus error benchmarking pbkdf on fast machines 2025-01-22 21:58:16 +03:00
data ui: Trim FontAwesome font to glyphs in use (save 940KiB) 2025-03-06 03:00:45 -07:00
debian control: Add python3-tomli/python3-pip 2025-04-02 12:00:53 -07:00
disas disas/riscv: enable disassembly for compressed sspush/sspopchk 2024-10-31 13:51:24 +10:00
docs docs: Correct release of TCG trace-events removal 2024-12-29 01:57:11 +03:00
dump dump: make range overlap check more readable 2024-07-23 20:30:36 +02:00
ebpf ebpf: improve trace event coverage to all key operations 2024-10-28 14:37:25 +08:00
fpu target/s390x: Fix the floating-point multiply-and-add NaN rules 2024-11-18 10:54:42 +01:00
fsdev * pc: Add a description for the i8042 property 2024-10-04 19:28:37 +01:00
gdb-xml target/i386/gdbstub: Expose orig_ax 2024-10-13 10:05:51 -07:00
gdbstub gdbstub/user-target: fix gdbserver int format (%d -> %x) 2025-02-01 12:21:08 +03:00
host/include target/i386/hvf: fix handling of XSAVE-related CPUID bits 2024-10-31 18:28:32 +01:00
hw nv2a: implement screen coordinate rounding to 4 bit fractional precision 2025-05-17 19:26:45 +03:00
include vmstate: Add VMSTATE_UINT32_SUB_ARRAY_V 2025-04-18 11:58:22 -07:00
io qapi/crypto: Rename QCryptoHashAlgorithm to *Algo, and drop prefix 2024-09-10 14:02:16 +02:00
libdecnumber libdecnumber/dpd/decimal64: Fix compiler warning from Clang 15 2022-11-11 09:13:52 +01:00
licenses scripts/gen-license.py: Drop openssl 2025-03-07 22:12:49 -07:00
linux-headers linux-headers: Update to Linux v6.12-rc5 2024-11-02 15:20:41 +08:00
linux-user linux-user: Fix strace output for s390x mmap() 2024-11-22 14:20:38 -06:00
migration v9.2.1 release 2025-02-15 13:59:10 -07:00
monitor block-backend: per-device throttling of BLOCK_IO_ERROR reports 2024-10-22 17:52:49 +02:00
nbd nbd-server: Silence server warnings on port probes 2024-11-18 09:06:17 -06:00
net v9.2.1 release 2025-02-15 13:59:10 -07:00
pc-bios pc-bios: add missing riscv64 descriptor 2024-12-17 18:06:39 +03:00
plugins plugins: eradicate qemu-plugins.symbols static file 2024-11-25 10:27:45 +00:00
po po: update Italian translation 2024-08-13 19:01:42 +02:00
python python: silence pylint raising-non-exception error 2024-11-25 11:03:14 +01:00
qapi qapi/ui: 'Document' xemu interface 2025-01-06 23:05:53 -07:00
qga qemu-ga: Avoiding freeing line prematurely 2024-11-07 12:28:20 +02:00
qobject qobject: remove return after g_assert_not_reached() 2024-09-24 13:53:35 +02:00
qom qom: allow user-creatable classes to be in modules 2024-10-31 18:28:32 +01:00
replay replay: Remove unused replay_disable_events 2024-10-03 17:26:06 +03:00
roms roms: re-add edk2-basetools target 2024-12-17 14:26:42 +03:00
rust rust/pl011: Fix range checks for device ID accesses 2024-11-25 10:27:47 +00:00
scripts ci: Auto-update subproject wraps periodically 2025-04-26 16:02:21 -07:00
scsi configure, meson: rename targetos to host_os 2023-12-31 09:11:29 +01:00
semihosting semihosting: Restrict to TCG 2024-07-22 09:38:16 +01:00
stats meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
storage-daemon Revert "meson: Propagate gnutls dependency" 2024-07-03 18:41:26 +02:00
stubs stub: Fix build failure with --enable-user --disable-system --enable-tools 2025-01-29 22:23:55 +03:00
subprojects meson: Bump SPIRV-Reflect to vulkan-sdk-1.4.313.0 2025-05-15 07:14:36 -07:00
system v9.2.1 release 2025-02-15 13:59:10 -07:00
target v9.2.1 release 2025-02-15 13:59:10 -07:00
tcg v9.2.1 release 2025-02-15 13:59:10 -07:00
tests tests/mcpx/dsp: Add basic test 2025-03-31 12:40:31 -07:00
thirdparty meson: Move volk, SPIRV-Reflect to main meson.build 2024-12-31 01:37:05 -07:00
tools qemu-vmsr-helper: implement --verbose/-v 2024-07-31 13:15:06 +02:00
trace trace: Don't include trace-root.h in control.c or control-target.c 2024-11-19 14:14:13 +00:00
ubuntu-win64-cross ubuntu-win64-cross: Bump mxe/build-win64-mxe 2025-03-27 17:25:59 -07:00
ui ui: Toggle fullscreen on mouse double click 2025-05-15 09:06:55 -07:00
util util/http: Add simple wrapper functions for libcurl 2025-03-07 22:12:49 -07:00
winpcap-loader meson: Fix loader.c file inclusion 2025-01-06 23:05:53 -07:00
.clang-format nv2a: Add Vulkan renderer 2024-12-31 01:37:05 -07:00
.dir-locals.el Add .dir-locals.el file to configure emacs coding style 2015-10-08 19:46:01 +03:00
.editorconfig .editorconfig: update the automatic mode setting for Emacs 2021-03-10 15:34:11 +00:00
.exrc qemu: add .exrc 2012-09-07 09:02:44 +03:00
.gdbinit .gdbinit: load QEMU sub-commands when gdb starts 2017-06-07 14:38:45 +01:00
.git-blame-ignore-revs metadata: add .git-blame-ignore-revs 2023-04-04 15:56:44 +01:00
.gitattributes rust: patch bilge-impl to allow compilation with 1.63.0 2024-11-05 14:18:16 +01:00
.gitignore .gitignore: Unignore .clang-format 2025-03-27 23:33:40 -07:00
.gitlab-ci.yml docs: Document GitLab custom CI/CD variables 2021-07-29 07:56:01 +02:00
.gitmodules meson: Migrate genconfig submodule to subproject 2025-01-06 23:05:53 -07:00
.gitpublish Add a git-publish configuration file 2018-03-05 09:03:17 +00:00
.mailmap MAINTAINERS: update email addr for Brian Cain 2024-12-03 12:26:24 +01:00
.patchew.yml scripts/checkpatch: roll diff tweaking into checkpatch itself 2021-06-25 10:08:33 +01:00
.readthedocs.yml readthodocs: fully specify a build environment 2024-01-12 13:23:48 +00:00
.travis.yml Revert "Remove the unused sh4eb target" 2024-11-04 14:16:11 +01:00
COPYING COPYING: update from FSF 2008-10-12 17:54:42 +00:00
COPYING.LIB COPYING.LIB: Synchronize the LGPL 2.1 with the version from gnu.org 2019-01-30 11:01:22 +01:00
Info.plist Info.plist: Add NSMicrophoneUsageDescription key 2025-01-15 03:05:35 -07:00
Kconfig build-sys: Add rust feature option 2024-10-07 16:41:58 +02:00
Kconfig.host hw/core: Add Enclave Image Format (EIF) related helpers 2024-10-31 18:28:32 +01:00
LICENSE tcg/LICENSE: Remove out of date claim about TCG subdirectory licensing 2019-11-11 15:11:21 +01:00
MAINTAINERS tests/qtest: drop 'fuzz-' prefix from virtio-balloon test 2024-12-03 12:26:24 +01:00
Makefile Makefile: Ignore distclean before configure error 2025-01-06 23:05:53 -07:00
QEMU_VERSION v9.2.1 release 2025-02-15 13:59:10 -07:00
README.md README: Direct users to the website for more info 2020-02-21 00:45:41 -07:00
README.rst README.rst: add the missing punctuations 2024-07-17 14:04:15 +03:00
block.c v9.2.0 release 2025-01-03 22:30:04 -07:00
blockdev-nbd.c nbd/server: CVE-2024-7409: Avoid use-after-free when closing server 2024-08-26 08:42:42 -05:00
blockdev.c v9.2.0 release 2025-01-03 22:30:04 -07:00
blockjob.c block: remove AioContext locking 2023-12-21 22:49:27 +01:00
build.sh build.sh: Add xemu_version fallback to macOS builds 2025-04-16 11:39:49 -07:00
config_spec.yml ui: Add 720x480 resolution to Window size options 2025-02-15 16:17:58 -07:00
configure meson: Migrate epoxy probe to meson.build 2025-03-22 15:26:12 -07:00
cpu-common.c cpu: ensure we don't call start_exclusive from cpu_exec 2024-11-16 08:42:25 -08:00
cpu-target.c cpu-target: don't set cpu->thread_id to bogus value 2024-06-04 10:02:39 +02:00
event-loop-base.c util/event-loop-base: Introduce options to set the thread pool size 2022-05-09 10:43:23 +01:00
get_deps.py ci: Check DLLs against /mingw64/bin instead of C:\Windows 2020-05-01 04:10:08 -07:00
gitdm.config contrib/gitdm: add group map for AMD 2023-03-22 15:08:26 +00:00
hmp-commands-info.hx hmp-commands-info.hx: Add missing info command for stats subcommand 2024-06-30 19:51:44 +03:00
hmp-commands.hx hmp/migration: Fix "migrate" command's documentation 2024-05-08 09:22:37 -03:00
iothread.c iothread: Simplify expression in qemu_in_iothread() 2024-02-13 10:59:25 +03:00
job-qmp.c qapi job: Elide redundant has_FOO in generated C 2022-12-14 20:04:47 +01:00
job.c block: remove AioContext locking 2023-12-21 22:49:27 +01:00
meson.build mcpx/dsp: Migrate some DPRINTFs to trace events 2025-03-31 12:40:31 -07:00
meson_options.txt meson: Disable fdt 2025-01-09 15:48:27 -07:00
module-common.c all: Clean up includes 2016-02-04 17:41:30 +00:00
os-posix.c os-posix: Expand setrlimit() syscall compatibility 2024-06-30 19:51:44 +03:00
os-win32.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
page-target.c exec: Expose 'target_page.h' API to user emulation 2024-04-26 15:28:11 +02:00
page-vary-common.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
page-vary-target.c exec: Rename target specific page-vary.c -> page-vary-target.c 2023-10-04 11:03:54 -07:00
pythondeps.toml Require meson version 1.5.0 2024-10-07 16:41:57 +02:00
qemu-bridge-helper.c qemu-bridge-helper: relocate path to default ACL 2020-09-30 19:11:36 +02:00
qemu-edid.c qemu-edid: Restrict input parameter -d to avoid division by zero 2022-10-12 13:38:15 +02:00
qemu-img-cmds.hx docs/devel/docs: Document .hx file syntax 2024-01-15 17:12:22 +00:00
qemu-img.c block: remove AioContext locking 2023-12-21 22:49:27 +01:00
qemu-io-cmds.c v9.2.0 release 2025-01-03 22:30:04 -07:00
qemu-io.c block: remove AioContext locking 2023-12-21 22:49:27 +01:00
qemu-keymap.c qemu-keymap: Release local allocation references 2024-10-03 17:26:05 +03:00
qemu-nbd.c nbd/server: Plumb in new args to nbd_client_add() 2024-08-08 15:05:27 -05:00
qemu-options.hx chardev: finalize 'reconnect' deprecation 2024-10-28 14:37:25 +08:00
qemu.nsi license: Simplify GPL-2.0-or-later license descriptions 2024-09-20 10:11:59 +03:00
qemu.sasl sasl: remove comment about obsolete kerberos versions 2021-06-14 13:28:50 +01:00
replication.c replication: move include out of root directory 2021-05-26 14:49:46 +02:00
toml.cpp tomlplusplus: Allow using system library 2022-06-24 22:21:49 -07:00
trace-events system/dma-helpers.c: Move trace events to system/trace-events 2024-11-19 14:14:13 +00:00
version.rc .github: Make all release tags follow v<semver> convention 2022-04-29 22:03:39 -07:00
xemu-version.c nv2a: Add Vulkan renderer 2024-12-31 01:37:05 -07:00
xemu-version.h nv2a: Add Vulkan renderer 2024-12-31 01:37:05 -07:00
xemu-xbe.c xemu-xbe.c: Add memtxattrs 2023-01-23 00:30:40 -07:00
xemu-xbe.h xemu: Update copyright 2021-03-03 03:48:11 -07:00
xemu.metainfo.xml Update metainfo.xml information 2024-03-23 13:58:52 -07:00

README.md

Please visit https://xemu.app for more information.