Matt Borgerson
2d73e8aafe
nv2a: Use root-relative paths to reference parent dir headers
2025-03-27 23:33:40 -07:00
Matt Borgerson
0e18d11d90
nv2a: Rename methods.h -> methods.h.inc
2025-03-27 23:33:40 -07:00
Matt Borgerson
a830cc4526
xbox: Disable clang-format for deliberately aligned reg defs
2025-03-27 23:33:40 -07:00
Matt Borgerson
1893b56c38
nv2a/vk: Fix vertex ram buffer dirty bit check
2025-03-19 02:25:33 -07:00
Matt Borgerson
b929d4eced
nv2a: Drop surface compat clip constraint
2025-03-17 14:48:47 -07:00
Matt Borgerson
c3a8b9569f
nv2a: Simplify surface clip to scissor size calculation
2025-03-17 14:48:47 -07:00
Logan Stromberg
860bccb722
nv2a: Fix surface clip to scissor origin
2025-03-17 14:32:40 -07:00
coldhex
02659dd3cc
nv2a: Fix cubemap fourth texture coordinate component handling
...
Xbox hardware ignores fourth texture coordinate component for cubemaps.
2025-03-17 11:37:41 -07:00
wilkovatch
a00820746f
nv2a: Handle texture dimensions not divisible by 4 in S3TC decoder
2025-03-14 18:44:25 -07:00
Matt Borgerson
a143f66ce4
nv2a/psh: Handle 3D textures in PROJECT2D mode
2025-03-10 16:13:09 -07:00
Matt Borgerson
6e3dfb36d8
nv2a/vk: Don't set compressed, swizzled when attribute is uniform
2025-03-10 14:23:43 -07:00
Matt Borgerson
4665515d80
nv2a: Group attributes in pgraph_get_glsl_vtx_header
2025-03-10 12:30:16 -07:00
coldhex
3eb22b6b81
nv2a: Explicit float representation for RCC and vertex shader W range
2025-03-08 14:54:18 -07:00
coldhex
63cb75ce84
nv2a: Fix -0.0 clamping of RCC instruction and vertex shader W-output
...
Xbox rounds -0.0 to the negative range and 0.0 to the positive range. This
commit also restores RCC instruction clamping to be done on the output of
reciprocal calculation (which current Xemu release does) with fix for the
input=Infinity case.
2025-03-08 14:54:18 -07:00
coldhex
8dc6c90e11
nv2a/vk: Drop unnecessary dirty check for NV_PGRAPH_ZCOMPRESSOCCLUDE
...
This was used to enable/disable Vulkan depth clamping, but that was
removed in previous commit.
2025-03-08 14:54:18 -07:00
coldhex
854a001063
nv2a: Fix zero-vector input in fixed function vertex shader
...
If tPosition is a zero-vector, then invViewport matrix had no effect.
Bounding w-coordinate away from zero and infinity must be done before
applying invViewport (which is needed for OpenGL/Vulkan) to emulate
Xbox hardware behaviour properly.
2025-03-08 14:54:18 -07:00
coldhex
798ad30819
nv2a: Perspective-correct interpolation for w-buffering
...
z_perspective is true implies w-buffering and then the w-coordinate stored
in the depth buffer should also be interpolated in a perspective-correct
way. We do this by calculating w and setting gl_FragDepth in the fragment
shader.
Since enabling polygon offset and setting values using glPolygonOffset
won't have any effect when manually setting gl_FragDepth for w-buffering,
we introduce the depthOffset variable to obtain similar behaviour (but the
glPolygonOffset factor-argument is currently not emulated.) (Note that
glPolygonOffset is OpenGL implementation-dependent and it might be good to
use depthOffset for z-buffering as well, but this is not done here and we
still use OpenGL/Vulkan zbias functionality.)
This also implements depth clipping and clamping in the fragment shader.
If triangles are clipped, the shadows of the small rocks in Halo 2 Beaver
Creek map can have flickering horizontal lines. The shadows are drawn on
the ground in another pass with the same models as for the ground, but for
some reason with depth clamping enabled. The flickering happens if Xemu
clips the ground triangles, but the exact same shadow triangles are depth
clamped, so there are small differences in the coordinates. The shadows
are drawn with depth function GL_EQUAL so there is no tolerance for any
differences. Clipping in the fragment shader solves the problem because
the ground and shadow triangles remain exactly the same regardless of
depth clipping/clamping. For some performance gain, it might be a good
idea to cull triangles by depth in the geometry shader, but this is not
implemented here.
In the programmable vertex shader we always multiply position output by w
because this improves numerical stability in subsequent floating point
computations by modern GPUs. This usually means that the perspective
divide done by the vertex program gets undone.
The magic bounding constants 5.42101e-020 and 1.884467e+019 are replaced
by 5.421011e-20 and 1.8446744e19, i.e. more decimals added. This makes the
32-bit floating point numbers represent exactly 2^(-64) and 2^64 (raw bits
0x1f800000 and 0x5f800000) which seem more likely the correct values
although testing with hardware was not done to this precision.
Testing indicates that the same RCC instruction magic constants are also
applied to both fixed function and programmable vertex shader w-coordinate
output. This bounding replaces the special test for w==0.0 and abs(w)==inf
which used to set vtx_inv_w=1.0 (which did not match Xbox hardware
behaviour.)
2025-03-08 14:54:18 -07:00
Erik Abair
f701573d44
nv2a: Use rounded values for alpha testing
2025-03-05 17:12:14 -07:00
coldhex
0427ae8cfc
mcpx: Implement APU multipass voice processing
...
Voice Processor (VP) multipass feature allows configuring lists of voices
that are first mixed (in order) into a designated mixbin which is then used
as a sample source when processing voices with multipass flag set to true
in NV_PAVS_VOICE_CFG_FMT. Setting correct voice order in lists is the
responsibility of the game/application and in practice is handled by the
DirectSound library. The multipass mixbin is hardcoded to 31 in
DirectSound, but hardware would allow other bins.
This implementation also adds additional info to audio debug UI to see what
the source and destination voices involved are. The info is only shown
when DSP processing is off, i.e. "VP Only" (MON_VP) is selected. This is
because storing the voice numbers requires additional digging which is
required for MON_VP anyway and therefore is free. The multipass feature
itself works fine with DSP (i.e. GP and EP) enabled, only the additional
debug info is not shown.
2025-02-15 15:01:29 -07:00
Matt Borgerson
7cb7bb68a9
nv2a: Multiversion [un]swizzle to optimize for common bpp
2025-01-26 18:47:46 -07:00
Matt Borgerson
eae328dc19
nv2a: Move [un]swizzle_rect to swizzle.h
2025-01-26 18:47:46 -07:00
Matt Borgerson
bb5ee6865b
nv2a: Drop osdep.h, add stdbool.h to swizzle.c
2025-01-26 18:47:46 -07:00
NZJenkins
ae4b5c0695
nv2a: Speed up software swizzling
2025-01-26 14:00:35 -07:00
Fred Hallock
191bc40f70
xid: Add Xbox Controller S
2025-01-25 20:48:58 -07:00
Ryzee119
e293f6ba67
input: Add xbox live communicator support
2025-01-15 03:08:14 -07:00
Matt Borgerson
7eba0d3124
nv2a/gl: Update copyright on recently modified files
2025-01-07 17:37:06 -07:00
Matt Borgerson
510c280b05
nv2a/gl: Unify ShaderBinding and ShaderLruNode
2025-01-07 17:35:06 -07:00
Matt Borgerson
5dcbb7ebdb
nvnet: Minor cleanup
2025-01-07 14:28:27 -07:00
Matt Borgerson
6c389194b6
nv2a/psh: Remove unused arguments in string format
2025-01-07 00:52:51 -07:00
Matt Borgerson
d76898f63b
nv2a: Fix variable shadowing complaints
2025-01-07 00:52:51 -07:00
Matt Borgerson
281f42c5e1
mcpx: Fix variable shadowing
2025-01-07 00:52:51 -07:00
Matt Borgerson
85f84be04d
mcpx: Narrow variable def scopes, fix shadowing
2025-01-07 00:52:51 -07:00
Matt Borgerson
57c6d82fa3
nv2a/vk: Simplify debug indent loop to a variable field width format
2025-01-07 00:52:51 -07:00
Matt Borgerson
6ac52147a4
nv2a/psh: Remove function scope variable i, which was being shadowed
2025-01-07 00:52:51 -07:00
Matt Borgerson
3070d6422c
mstring: Remove mstring_append_{int,char}
2025-01-07 00:52:51 -07:00
Matt Borgerson
0e50741c28
ui,xbox: Copyright updates on changed files
2025-01-06 23:06:21 -07:00
Matt Borgerson
34fe7918d3
nvnet: Return `true' instead of `1' when returning a bool
2025-01-06 23:05:53 -07:00
Matt Borgerson
8687b152c9
nvnet: Drop pc.h, add pci_device.h includes
2025-01-06 23:05:53 -07:00
Matt Borgerson
376280a635
xbox: Configure nic
2025-01-06 23:05:53 -07:00
Matt Borgerson
24c24e030d
mc146818rtc: Move Xbox RTC init pattern to reset handler
2025-01-06 23:05:53 -07:00
Matt Borgerson
75ce25c9b5
nv2a: Define DEBUG_NV2A_*=0 ifndef
2025-01-06 23:05:53 -07:00
Matt Borgerson
f4ef9f6309
mcpx: Rename dev to parent_obj, use QOM casts
2025-01-06 23:05:53 -07:00
Matt Borgerson
83e91385b7
smc: Include block_int-io.h
2025-01-06 23:05:53 -07:00
Matt Borgerson
31f615c9e9
xbox_pci: Replace sysbus_add_io with memory_region_add_subregion
2025-01-06 23:05:53 -07:00
Matt Borgerson
68497e96d4
xbox_pci: Use Resettable interface
2025-01-06 23:05:53 -07:00
Matt Borgerson
dcfc47951e
xbox_pci: Use new pci_bus_map_irqs function
2025-01-06 23:05:53 -07:00
Matt Borgerson
7b52d02640
xbox_pci: Drop arg in call to pci_create_simple_multifunction
2025-01-06 23:05:53 -07:00
Matt Borgerson
95b3efb570
xbox_pci: Drop ioapi.h include
2025-01-06 23:05:53 -07:00
Matt Borgerson
db2101dab5
xbox: Update nvnet creation
2025-01-06 23:05:53 -07:00
Matt Borgerson
fbb5ba3fed
xbox: pcspk_init was removed, inline it
2025-01-06 23:05:53 -07:00
Matt Borgerson
0ef5ad787c
xbox: Pass isa_bus to i8257_dma_init
2025-01-06 23:05:53 -07:00
Matt Borgerson
5aa997e89b
xbox: Rename isa_bus_irqs -> isa_bus_register_input_irqs
2025-01-06 23:05:53 -07:00
Matt Borgerson
d38f0e7901
xbox: Rename pcms->bus -> pcms->pcibus
2025-01-06 23:05:53 -07:00
Matt Borgerson
9560677f0a
nv2a: Include hw/pci/pci_device.h header
2025-01-06 23:05:53 -07:00
Matt Borgerson
f45e61afc8
xbox: Use new mc146818 interface, set x86ms->rtc
2025-01-06 23:05:53 -07:00
Matt Borgerson
4239f64dd5
xbox: Update kvm clock header and drop kvmclock_enabled check
2025-01-06 23:05:53 -07:00
Matt Borgerson
a49ee1439f
nvnet: Pass mem_reentrancy_guard to object_get_typename
2025-01-06 23:05:53 -07:00
Matt Borgerson
cab8b9fbc0
nvnet: Use Resettable interface
2025-01-06 23:05:53 -07:00
Matt Borgerson
9327159f7c
nv2a: Use Resettable interface
2025-01-06 23:05:53 -07:00
Matt Borgerson
3106ea97e5
mcpx: Use new bql_[un]lock functions
2025-01-06 23:05:53 -07:00
Matt Borgerson
5cb65d1791
nv2a: Migrate nv2a_get_offsets to new _get_params model
2025-01-06 23:05:53 -07:00
Matt Borgerson
008d848582
mcpx: Use new bql_[un]lock functions
2025-01-06 23:05:53 -07:00
Matt Borgerson
08d4c3611b
mcpx: Update headers
2025-01-06 23:05:53 -07:00
Matt Borgerson
81a6985bb0
mcpx: Use new fifo8_pop_buf api
2025-01-06 23:05:53 -07:00
Matt Borgerson
6cce59135b
mcpx: Use Resettable interface
2025-01-06 23:05:53 -07:00
Matt Borgerson
3b59f9b2f1
lpc47m157: Drop call to serial_set_frequency
2025-01-06 23:05:53 -07:00
Matt Borgerson
824af3978f
meson: Migrate nv2a_vsh_cpu submodule to a subproject
2025-01-02 19:07:25 -07:00
Matt Borgerson
8f478e017a
nv2a/psh: Handle 3D textures in BUMPENVMAP[_LUM] modes
2024-12-31 03:17:52 -07:00
Matt Borgerson
b6d6a4709d
nv2a/gl: Use snake case for line width ranges
2024-12-31 01:37:05 -07:00
Matt Borgerson
e67f19d03b
nv2a/vk,gl: Fix a couple 64b shift/printing bugs
2024-12-31 01:37:05 -07:00
Matt Borgerson
ae3fe91223
nv2a/gl: Rebase line width feature
2024-12-31 01:37:05 -07:00
Matt Borgerson
fb7feb7b1f
nv2a/vk: Fix missing display surface addr in debug marker
2024-12-31 01:37:05 -07:00
Matt Borgerson
4a09eeb121
nv2a/vk: Use unsigned types for clear scissor calculation for now
2024-12-31 01:37:05 -07:00
Matt Borgerson
1e5cae068a
nv2a/vk: Drop unused vertex_buffer_inline field
2024-12-31 01:37:05 -07:00
Matt Borgerson
477d5489ac
nv2a/vk: Copy remapped vert data after pre-draw
2024-12-31 01:37:05 -07:00
Matt Borgerson
28c9f5f6ef
nv2a/vk: Load 16b float depth textures as unorm to match surface w/a
2024-12-31 01:37:05 -07:00
Matt Borgerson
c098b82108
nv2a/vk: VK_CHECK call to vkBindImageMemory
2024-12-31 01:37:05 -07:00
Matt Borgerson
085fb33141
nv2a/vk: Fix external memory handle type on Windows
2024-12-31 01:37:05 -07:00
Matt Borgerson
88835a1019
nv2a/vk,gl: Handle case where pline_offset == 0
2024-12-31 01:37:05 -07:00
Matt Borgerson
58c1daf594
nv2a/vk: Report dirty if no pipeline is bound
2024-12-31 01:37:05 -07:00
Matt Borgerson
8dc3b646a3
nv2a/vk: Move display GL compat after line_offset adjust
2024-12-31 01:37:05 -07:00
Matt Borgerson
7afeda5da0
nv2a/vk: Add regs control_{0,3}, setupraster to shader dirty test
2024-12-31 01:37:05 -07:00
Matt Borgerson
4cd4153937
nv2a/vk: Move reg dirty clear into create_pipeline
2024-12-31 01:37:05 -07:00
Matt Borgerson
de1381c932
nv2a/vk: Drop pipeline merge stat
2024-12-31 01:37:05 -07:00
Matt Borgerson
986b18214c
nv2a/vk: Drop display update early-out
2024-12-31 01:37:05 -07:00
Matt Borgerson
974b2be87a
nv2a/vk: Add command buffer region debug markers
2024-12-31 01:37:05 -07:00
Matt Borgerson
c7f82ab79f
nv2a/gl: Fix bind_shaders dgroup
2024-12-31 01:37:05 -07:00
Matt Borgerson
580c2e9da4
nv2a/vk: Run full dirty texture check
2024-12-31 01:37:05 -07:00
Matt Borgerson
5527e908b7
nv2a/vk: Process pending surface upload just in time for display
2024-12-31 01:37:05 -07:00
Matt Borgerson
e5be3f2714
nv2a/vk: Add missing math.h include
2024-12-31 01:37:05 -07:00
Matt Borgerson
d054b366f8
nv2a/vk: Add pvideo support
2024-12-31 01:37:05 -07:00
Matt Borgerson
f26b8c32d6
n2va/vk: Key textures on sampler state for now
2024-12-31 01:37:05 -07:00
Matt Borgerson
69b5318cb5
nv2a/vk: Fix create_pipeline debug marker inbalance
2024-12-31 01:37:05 -07:00
Matt Borgerson
9ab1f96911
nv2a/vk: Make pgraph_vk_insert_debug_marker format strings
2024-12-31 01:37:05 -07:00
Matt Borgerson
ca42f0f2df
nv2a/vk: Clear in separate renderpass for now
2024-12-31 01:37:05 -07:00
Matt Borgerson
31db8d04b0
nv2a/vk: Ensure queries do not include clears
2024-12-31 01:37:05 -07:00
Matt Borgerson
d47fef9467
nv2a/vk: Fix reports
2024-12-31 01:37:05 -07:00
Matt Borgerson
2f910eeacf
nv2a/vk: Fixup unaligned attribute data in inline buffer
2024-12-31 01:37:05 -07:00
Matt Borgerson
3096f2a9c8
nv2a/vk: Always bind fragment shader in draw pipeline
2024-12-31 01:37:05 -07:00
Matt Borgerson
a2b994d80d
nv2a/vk: Only bind clear fragment shader on partial color clear
2024-12-31 01:37:05 -07:00
Matt Borgerson
76e2b779e3
nv2a/psh: Handle rect tex on project3d
2024-12-31 01:37:05 -07:00
Matt Borgerson
62acb2db7e
nv2a/psh: Drop rect_tex assertion
2024-12-31 01:37:05 -07:00
Matt Borgerson
1c38a0a42b
nv2a/psh: Normalize coords at sample time
2024-12-31 01:37:05 -07:00
Matt Borgerson
ec59148333
nv2a: Normalize unnormalized texture coordinates in shader
2024-12-31 01:37:05 -07:00
Matt Borgerson
20f318f437
nv2a/glsl: Add swizzled attr check
2024-12-31 01:37:05 -07:00
Matt Borgerson
6ba917fed9
nv2a/vk: Fix clear scissor ymin
2024-12-31 01:37:05 -07:00
Matt Borgerson
605605d0da
nv2a/vk: Fix scissor overflow
2024-12-31 01:37:05 -07:00
Matt Borgerson
a3d0131a03
nv2a/vk: Fix mipmap filtering for _LOD0 min filters
2024-12-31 01:37:05 -07:00
Matt Borgerson
bc066fdea9
nv2a/vk: Flush/barrier on texture upload
2024-12-31 01:37:05 -07:00
Matt Borgerson
6171e40c39
nv2a/vk: Minor cleanup
2024-12-31 01:37:05 -07:00
Matt Borgerson
a5877b17f8
nv2a/vk: Fix compute pipeline finalize
2024-12-31 01:37:05 -07:00
Matt Borgerson
5a6b8a14da
nv2a/vk: Only clear stencil on images with stencil aspect
2024-12-31 01:37:05 -07:00
Matt Borgerson
824a378a23
nv2a/vk: Disable memory trimmer for now
2024-12-31 01:37:05 -07:00
Matt Borgerson
9200246c62
nv2a/vk: Make main buffers dedicated
2024-12-31 01:37:05 -07:00
Matt Borgerson
c66bdbe85d
nv2a/vk: Include result code in device/instance creation error messages
2024-12-31 01:37:05 -07:00
Matt Borgerson
894bcf1b58
nv2a/vk: Add texture finalize checks
2024-12-31 01:37:05 -07:00
Matt Borgerson
f68159d1c4
nv2a/vk: Simplify zeta to texture, add barrier
2024-12-31 01:37:05 -07:00
Matt Borgerson
e20a2b15b3
nv2a/vk: Don't release textures until after draw completes
2024-12-31 01:37:05 -07:00
Matt Borgerson
33db2787f7
nv2a/vk: Fixup depth transition stages
2024-12-31 01:37:05 -07:00
Matt Borgerson
f6d70abd04
nv2a: Fix nv2a_dbg_renderdoc_init on Windows
2024-12-31 01:37:05 -07:00
Matt Borgerson
4e75b5e3ce
nv2a/vk: Always use staging image for surface upload
2024-12-31 01:37:05 -07:00
Matt Borgerson
64e8046d1f
nv2a/vk: Specify local_size_{y,z} = 1 in compute shader
2024-12-31 01:37:05 -07:00
Matt Borgerson
dc5a220486
nv2a/vk: Specify set in compute shader layout
2024-12-31 01:37:05 -07:00
Matt Borgerson
9161e3e14a
nv2a/vk: Create surface if one not currently bound
2024-12-31 01:37:05 -07:00
Matt Borgerson
c802468d05
nv2a/vk: Relax invalid surface compat check
2024-12-31 01:37:05 -07:00
Matt Borgerson
1fec4947b6
nv2a/vk: Ensure clear rect never extends beyond surface
2024-12-31 01:37:05 -07:00
Matt Borgerson
c881f8641f
nv2a/vk: Ensure pack buffer offsets meet minStorageBufferOffsetAlignment
2024-12-31 01:37:05 -07:00
Matt Borgerson
374eada8ef
nv2a/vk: Ensure pg->clearing set before pgraph_vk_surface_update
2024-12-31 01:37:05 -07:00
Matt Borgerson
28092ad13b
nv2a/vk: Only include uniform attr definition when necessary
2024-12-31 01:37:05 -07:00
Matt Borgerson
567bc33a70
nv2a/glsl: Fix project2d usampler lookup
2024-12-31 01:37:05 -07:00
Matt Borgerson
017444b8a0
nv2a/glsl: Ensure sampler type matches texture dimensionality
2024-12-31 01:37:05 -07:00
Matt Borgerson
bc46a9303d
nv2a/vk: Add compute pipeline cache, scale workgroups
2024-12-31 01:37:05 -07:00
Matt Borgerson
8e5a77c45d
nv2a/vk: Fix missing scale in d32_sfloat_s8_uint pack
2024-12-31 01:37:05 -07:00
Matt Borgerson
ddc1a388e8
nv2a/vk: Add vertex memory offset fixme
2024-12-31 01:37:05 -07:00
mborgerson
334c6293fe
nv2a/vk: Fix swapped texture filters
2024-12-31 01:37:05 -07:00
mborgerson
ebe3ee155b
nv2a/vk: Fix compute descriptor pool size
2024-12-31 01:37:05 -07:00
Matt Borgerson
36e7cca1e9
nv2a/glsl: Initialize vars
2024-12-31 01:37:05 -07:00
Matt Borgerson
fc803fe375
nv2a/vk: Omit pipeline fragment shader when no color binding
2024-12-31 01:37:05 -07:00
Matt Borgerson
dd3bb50f11
nv2a/vk: Tighten renderpass dependencies
2024-12-31 01:37:05 -07:00
Matt Borgerson
a209df8aa5
nv2a/vk: Tighten a few layout transitions
2024-12-31 01:37:05 -07:00
Matt Borgerson
177dcc7559
nv2a/vk: Clear render_passes on finalization
2024-12-31 01:37:05 -07:00
Matt Borgerson
5119e3a365
nv2a/vk: Change display renderpass loadOp to don't care
2024-12-31 01:37:05 -07:00
Matt Borgerson
a562007f84
nv2a/vk: Enable synchronization validation
2024-12-31 01:37:05 -07:00
Matt Borgerson
c41853a3f3
nv2a/vk: Finish when queue is empty
2024-12-31 01:37:05 -07:00
Matt Borgerson
a2a193b4e3
nv2a/vk: Add assert_on_validation_msg option
2024-12-31 01:37:05 -07:00
Matt Borgerson
6bb96f607b
nv2a/vk: Add debug_shaders option
2024-12-31 01:37:05 -07:00
Matt Borgerson
bb0221af82
nv2a/vk: Target glslang to SPV 1.6
2024-12-31 01:37:05 -07:00
Matt Borgerson
c63cdc18de
nv2a/vk: Fix integer format border color
2024-12-31 01:37:05 -07:00
Matt Borgerson
b9e68a760b
nv2a/vk: Fix shadowmap readback in frag shader
2024-12-31 01:37:05 -07:00
Matt Borgerson
f08d4a89fb
nv2a/vk: Download any dirty surfaces covering vertex buffers
2024-12-31 01:37:05 -07:00
Matt Borgerson
ad0aec9adb
nv2a/vk: Move overlapping surface download logic to function
2024-12-31 01:37:05 -07:00
Matt Borgerson
da1e72a39a
nv2a/vk: Use additional descriptor sets in compute ops
2024-12-31 01:37:05 -07:00
Matt Borgerson
7018f379b3
nv2a/vk: Add debug helper function for inserting markers
2024-12-31 01:37:05 -07:00
Matt Borgerson
49ae576006
n2va/vk: Assert instead of exit() on validation error
2024-12-31 01:37:05 -07:00
Matt Borgerson
bb69e5cd2f
nv2a/vk: Finalize more display state
2024-12-31 01:37:05 -07:00
Matt Borgerson
7b37a94438
nv2a/vk: Finalize, simplify render passes
2024-12-31 01:37:05 -07:00
Matt Borgerson
e8a39d6f45
nv2a/vk: Use correct min,mag texture filters
2024-12-31 01:37:05 -07:00
Matt Borgerson
a80cfc8573
nv2a/vk: Don't call vkCmdBindVertexBuffers if 0 bindings
2024-12-31 01:37:05 -07:00
Matt Borgerson
497bac61c9
nv2a/vk: Ensure border color type matches format type
2024-12-31 01:37:05 -07:00
Matt Borgerson
2bb2084ece
nv2a/vk: Use textureLod in psh_append_shadowmap
2024-12-31 01:37:05 -07:00
Matt Borgerson
b0e3d00a5d
nv2a/vk: Drop fragment shader when only depth attachment is cleared
2024-12-31 01:37:05 -07:00
Matt Borgerson
126a51724b
nv2a/vk: Finalize clear shaders
2024-12-31 01:37:05 -07:00
Matt Borgerson
f35d489203
nv2a/vk: Fix renderer debug messenger registration
2024-12-31 01:37:05 -07:00
Matt Borgerson
3f0a7e514d
nv2a/vk: Fix display dimensions
2024-12-31 01:37:05 -07:00
Matt Borgerson
9c43c0d702
nv2a/vk: Add barrier after compute to staging buffer copy
2024-12-31 01:37:05 -07:00
Matt Borgerson
89db9590f7
nv2a/vk: Flush vertex ram buffer, insert barrier
2024-12-31 01:37:05 -07:00
Matt Borgerson
9ab8549a4e
nv2a/vk: Insert barrier after staging buffer copies
2024-12-31 01:37:05 -07:00
Matt Borgerson
1a57d4ae94
nv2a/vk: Fix finish queue submission semaphore wait stage
2024-12-31 01:37:05 -07:00
Matt Borgerson
84c09c631c
nv2a/vk: Ensure error message is always set on instance failure
2024-12-31 01:37:05 -07:00
Matt Borgerson
0169caadd0
nv2a/vk: Fallback to UBO if maxPushConstantsSize is insufficient
2024-12-31 01:37:05 -07:00
Matt Borgerson
792ed56d58
nv2a: Block renderer finalization on display present
2024-12-31 01:37:05 -07:00
Matt Borgerson
25afb8603d
nv2a: Handle renderer init errors more gracefully
2024-12-31 01:37:05 -07:00
Matt Borgerson
c1bbe39f22
nv2a/gl: Rename some functions for clarity
2024-12-31 01:37:05 -07:00
Matt Borgerson
f3b6d50d99
nv2a: Merge renderer init, init_thread methods
2024-12-31 01:37:05 -07:00
Matt Borgerson
98fa394f84
nv2a: Add note about downloading dirty surfaces during flush
2024-12-31 01:37:05 -07:00
Matt Borgerson
6fd0f175b4
nv2a: Support switching renderers at runtime
2024-12-31 01:37:05 -07:00
Matt Borgerson
7b6b5f396c
nv2a/vk: Release report queue nodes at finalize
2024-12-31 01:37:05 -07:00
Matt Borgerson
3ccea5fa12
nv2a/vk: Release renderer state at finalize
2024-12-31 01:37:05 -07:00
Matt Borgerson
d6e8307950
nv2a/vk: Always provide early_context_init
2024-12-31 01:37:05 -07:00
Matt Borgerson
c4ac083d3d
nv2a/vk: Sync RAM buffer during renderer init
2024-12-31 01:37:05 -07:00
Matt Borgerson
71d00d2208
nv2a/vk: Ensure texture bindings exist before dirty check
2024-12-31 01:37:05 -07:00
Matt Borgerson
4bd0406797
nv2a/gl: Make sure vulkan is not set on ShaderState
2024-12-31 01:37:05 -07:00
Matt Borgerson
cd2278dd62
nv2a/gl: Ensure shader_binding exists before dirty check
2024-12-31 01:37:05 -07:00
Matt Borgerson
84dd112186
nv2a/gl: Improve renderer teardown
2024-12-31 01:37:05 -07:00
Matt Borgerson
c1eb48b62f
nv2a/vk: Fix snode->geometry init
2024-12-31 01:37:05 -07:00
Matt Borgerson
40526389f6
nv2a/vk: Clear bindings before tearing down cache
2024-12-31 01:37:05 -07:00
Matt Borgerson
6403c69326
nv2a/vk: Fix shader cache node init flag
2024-12-31 01:37:05 -07:00
Matt Borgerson
fadaf19cdd
nv2a/vk: Fix GArray free
2024-12-31 01:37:05 -07:00
Matt Borgerson
1973ed7f58
n2va/vk: Drop debug message
2024-12-31 01:37:05 -07:00
Matt Borgerson
27531ec1ca
nv2a: Wrap nv2a_vm_state_change direct renderer calls
2024-12-31 01:37:05 -07:00
Matt Borgerson
093e654725
nv2a: Wrap pfifo direct renderer calls
2024-12-31 01:37:05 -07:00
Matt Borgerson
2800b8d22a
meson: Move VMA options into meson config
2024-12-31 01:37:05 -07:00
Matt Borgerson
2bc8cb3050
nv2a/vk: Remove extraneous VK_NO_PROTOTYPES defn
2024-12-31 01:37:05 -07:00
Matt Borgerson
a5385803db
nv2a: Add Vulkan renderer
2024-12-31 01:37:05 -07:00
Matt Borgerson
212988421f
mcpx: Remove set but not used count variable
2024-12-29 18:42:12 -07:00
Fred Hallock
79441500fe
nv2a: Check supported line width
...
* Added logic to check for the supported line width range before setting the line width to avoid errors.
I also moved the glLineWidth call so that it could be after the call to get the supported line width range for the desired line type.
* Moved the glLineWidth call outside the if/else
* Moved the code to query line GL_SMOOTH_LINE_WIDTH_RANGE and GL_ALIASED_LINE_WIDTH_RANGE to nv2a_gl_context_init(void) so that it's just called while OpenGL is being initialized.
* Removed the lineWidth local variable. It's simpler to just call glLineWidth in the if and else blocks
2024-11-23 11:49:01 +13:00
Fred Hallock
7f5176bc5f
nv2a: Scale line thickness by surface scale factor
2024-11-14 21:48:22 -07:00
Matt Borgerson
a8d8ef5484
nv2a: Drop unused ShaderState field material_alpha
2024-07-22 23:52:43 -07:00
Ryzee119
e7633ed4a5
eeprom: Use sha1 and rc4 util for hashing functions
2024-06-12 17:29:02 -07:00
Matt Borgerson
2be220df98
nv2a: Implement HILO texture modifier
2024-05-21 00:44:29 -07:00
Matt Borgerson
b3fc80b3a8
nv2a: Implement ZCLIP_MIN,MAX with gl_ClipDistance
2023-10-22 00:22:03 -07:00
Matt Borgerson
5fa08d20d6
nv2a: Scale Z by full depth range in inverse viewport transform
2023-10-22 00:22:03 -07:00
Matt Borgerson
d6e5342f89
nvnet: Add unicast and multicast filtering
2023-10-18 01:33:40 -07:00
Matt Borgerson
ccb1211cd6
nvnet: Use HWADDR_PRIx for debug hwaddr printing
2023-10-18 01:33:40 -07:00
Matt Borgerson
de611d611b
nv2a: Left-align surface type in nv2a_pgraph_surface_target trace
2023-07-27 22:23:52 -07:00
Matt Borgerson
5c495db618
nv2a: Add [last_]surface_shape.clip_y to vmstate
2023-07-27 22:09:02 -07:00
Matt Borgerson
8da35b81a8
Merge remote-tracking branch 'origin/master' into sync/qemu-7.2.0
2023-07-15 17:24:01 -07:00
Erik Abair
7bfb7c8537
nv2a: Remove assert on TEXGEN_OBJECT_LINEAR
...
The behavior seems to match HW.
[Test](https://github.com/abaire/nxdk_pgraph_tests/blob/main/src/tests/texgen_tests.cpp#L22 )

Fixes #379
2023-07-09 21:19:43 -07:00
Erik Abair
22aaac801c
nv2a: Compile fix for DEBUG_NV2A enabled
2023-07-08 21:52:41 -07:00
Matt Borgerson
976319b391
Merge remote-tracking branch 'origin/master' into sync/qemu-7.2.0
2023-06-18 01:19:02 -07:00
Matt Borgerson
0ee7502c23
ui: Make aspect ratio config independent, add autodetect
2023-06-18 00:58:39 -07:00
mborgerson
129c48dd6e
ui: Blank screen when VGA SCREEN_OFF is set
2023-06-14 03:36:47 -07:00
Matt Borgerson
bb05a4f181
nv2a: Fix SET_ANTI_ALIASING_CONTROL
...
- Rename from SET_SMOOTHING_CONTROL
- Use correct register
2023-06-11 22:52:32 -07:00
Erik Abair
5cd1e3cbca
nv2a: (Probably partial) handling for `1D7C`
...
Implements handling for the unknown 0x1D7C command in order to match observed
behavior in the MS Dashboard and Tenchu: Return from Darkness.
Setting 1D7C's low bit appears to disable the line and poly smoothing commands.
Fixes #1162
[Test](https://github.com/abaire/nxdk_pgraph_tests/blob/main/src/tests/three_d_primitive_tests.cpp )
[HW Results](https://github.com/abaire/nxdk_pgraph_tests_golden_results/wiki/Results-3D_primitive )
2023-06-11 22:44:13 -07:00
Antonio Abbatangelo
546fe068de
nv2a: Ignore nop draws in SET_BEGIN_END_OP_END
2023-05-17 00:15:47 +08:00
Erik Abair
9723b435fb
nv2a: Make multiplication by 0 match HW behavior.
...
Fixes #1008
The nv2a returns 0 for anything multiplied by zero, including exceptional
values such as Inf and NaN. Desktop GPUs do not enforce this, leading to
conditions where NaNs wipe out calculations and lead to erroneous behavior.
[Test](https://github.com/abaire/nxdk_vsh_tests/blob/main/src/tests/americasarmyshader.cpp )
[HW Results](https://github.com/abaire/nxdk_vsh_tests_golden_results/wiki/Results-AmericasArmyShader )
2023-05-01 13:58:48 -07:00
wutno
065c74a00f
nv2a: Don't manually set NV_PFB_CFG0 reg
2023-03-06 14:02:41 -07:00
Dustin Holden
d8fa50e524
smc: Implement read/write of SMC error code storage
2023-02-14 17:10:40 -07:00
Matt Borgerson
3afd8456d5
xbox.c: Fix null string warning
2023-01-23 00:30:40 -07:00
Matt Borgerson
8e3a1b2b2c
xbox: Drop old pcms->pit_enabled setting
2023-01-23 00:30:40 -07:00
Matt Borgerson
b1a59ba2e9
nv2a: Add missing vga headers
2023-01-23 00:30:40 -07:00
Matt Borgerson
381ac7e72c
nv2a: Pass error_fatal to vga_common_init
2023-01-23 00:30:40 -07:00
Matt Borgerson
b135dd14ea
nv2a, mcpx: Drop minimum_version_id_old from vmsd
2023-01-23 00:30:40 -07:00
Matt Borgerson
a198f22981
include: Drop various qemu-common.h imports
2023-01-23 00:30:40 -07:00
Antonio Abbatangelo
27c99af5e3
nv2a: Set unpack alignment on surface upload
2023-01-05 13:22:18 -07:00
Antonio Abbatangelo
080022833d
nv2a: Cache shaders to disk
2022-09-10 12:52:51 -07:00
Erik Abair
f7b2acbb79
nv2a: Ensure SurfaceBinding.size can always fit surface
...
It is possible to specify a pitch that is smaller than the native size of a
surface (i.e., `pitch < width * bytes_per_pixel`). On hardware this is handled
gracefully, whereas in xemu it will cause buffer overruns when dealing with
swizzling/unswizzling.
Fixes #1152
[Test](https://github.com/abaire/nxdk_pgraph_tests/blob/main/src/tests/surface_pitch_tests.cpp )
[HW Results](https://github.com/abaire/nxdk_pgraph_tests_golden_results/wiki/Results-Surface_pitch )
Note that xemu's swizzling behavior still does not match HW with this change,
it just prevents the test from crashing.
2022-09-09 13:56:53 -07:00
Erik Abair
c2031108c5
nv2a: Cache texture attributes to avoid resetting unnecessarily
2022-07-25 10:44:38 -07:00
Erik Abair
5f306e749e
nv2a: Apply texture parameters when reusing textures
...
Fixes the edge case where a texture is reusable but has modified usage
parameters (e.g., `GL_TEXTURE_WRAP_S`). Prior to this change, texture
parameters would be cached permanently until the texture was recreated.
Fixes #1034
2022-07-25 10:44:38 -07:00
Erik Abair
c83b53e09d
nv2a: Handles depth borders in 3D bordered textures
...
3D textures with texture borders have 4 layers of border on either side of the
content layers in addition to the normal 4 pixel border per layer. This change
handles those extra depth layers in roughly the same way that the per-layer
border texels are handled.
Fixes #1171
[Test](https://github.com/abaire/nxdk_pgraph_tests/blob/main/src/tests/texture_border_tests.cpp )
[HW results](https://github.com/abaire/nxdk_pgraph_tests_golden_results/wiki/Results-Texture_border )
2022-07-25 10:02:15 -07:00
Erik Abair
248fc788c1
nv2a: Ignore pitch check for swizzled textures
2022-07-18 18:03:48 -07:00
Erik Abair
1e221e8da9
nv2a: Fallback to recreating texture on surface size mismatch.
...
There is no requirement that a surface and texture using the same VRAM address
match with respect to size (in particular pitch). This change prevents
incorrect reuse of a surface binding in the event that the texture size does
not match.
Fixes #1127
2022-07-18 11:33:53 -07:00
Erik Abair
ea0a906707
nv2a: Handle value in NV_PVIDEO_STOP writes
...
Interprets the value written to the `NV_PVIDEO_STOP` register in a manner more
consistent with hardware. Specifically, if the low bit of the value is not set,
the PVIDEO overlay should remain active.
Fixes #1049
[Test](https://github.com/abaire/nxdk_pgraph_tests/blob/main/src/tests/pvideo_tests.cpp )
Note that, as this is testing video behavior, this test is interactive and
the value passed to the final SetPvideoStop call needs to be mutated and the
behavior observed.
2022-07-18 11:14:15 -07:00
Erik Abair
f29c2ff42c
nv2a: Handle PVIDEO ds_dx and dt_dy registers
...
ds_dx and dt_dy describe how the PVIDEO content should be scaled to fit the
output area. Each is calculated via `((in - 1) << 20) / (out - 1)`, this
commit calculates the full frame scale (in / out) and applies that when
determining the texture coordinates for the overlay.
2022-07-18 10:59:08 -07:00
Erik Abair
9fd957d950
nv2a: Add hack for NV_PVIDEO_SIZE_IN sentinel
2022-07-18 10:59:08 -07:00
Erik Abair
a675666051
nv2a: Handle SIZE_IN > SIZE_OUT case
...
`NV_PVIDEO_SIZE_IN` is set to 0xFFFFFFFF during initialization and teardown
of the PVIDEO overlay. In some cases this can happen before the overlay is
explicitly stopped, leading to an assert. On hardware SIZE_IN values larger
than SIZE_OUT are capped (content is not scaled).
Fixes #330
[Test](https://github.com/abaire/nxdk_pgraph_tests/blob/main/src/tests/pvideo_tests.cpp )
2022-07-18 10:59:08 -07:00
Erik Abair
8d274e5f9a
nv2a: Match inv_w qualifier to attribute qualifier
...
Calculates both interpolated and flat shaded inv_w so that the appropriate
value may be used when undoing the perspective divide in the pixel shader.
2022-07-13 16:16:38 -07:00
Erik Abair
ae1a140ecb
nv2a: Fix missing flat qualifier for inv_w param
...
`vtx_inv_w` should also be flat, since interpolating it causes incorrect values
for the flat shaded colors.
Fixes #1179
[Test](https://github.com/abaire/nxdk_pgraph_tests/blob/main/src/tests/shade_model_tests.cpp )
[HW results](https://github.com/abaire/nxdk_pgraph_tests_golden_results/wiki/Results-Shade_model )
2022-07-13 16:16:38 -07:00
Erik Abair
4fd15c00f3
mcpx: Print actual error on OpenAudioDevice fail
2022-07-13 13:41:30 -07:00
Erik Abair
6f878ede01
nv2a: Do not force oFog to 1.0
...
This code was added ~7 years ago in
[this commit](97be3f5986
)
From what I can see from the [HW test results](https://github.com/abaire/nxdk_pgraph_tests_golden_results/wiki/Results-Fog_coord_vec4 )
the behavior on nv2a is more subtle than the cited `NV_vertex_program`
documentation.
In practice the register more or less retains its value until it is explicitly
modified.[The test](4cff2b2ebe/src/tests/fog_tests.cpp (L432)
)
renders something with an explicitly set oFog.x, then renders again with a
shader that does not modify oFog.x but references it in the pixel shader. The
value carries over rather than being forced to 1.0.
Interestingly, this test is apparently not hermetic; running the other
vec4_coord test (that explictly set various components of oFog) lead to unusual
behavior where the fogging effect is not uniform across all vertices, despite
never being set. Even more interestingly, re-running the test once it's in this
state will often produce variations as to which vertices are apparently using
a stale/incorrect fog value.
2022-07-05 19:12:03 -07:00
Lynne
6a8a967438
nv2a/psh: fix shader compilation errors
...
dotSTR had an extra bracket at the end, and an incorrect
variable type.
2022-07-02 10:39:44 -07:00
Erik Abair
d06a0c22f1
nv2a: Fix incorrect use of bytes for GL_UNPACK_ROW_LENGTH
...
`GL_UNPACK_ROW_LENGTH` is supposed to set the length in pixels, but the DXT
path is setting it to bytes, causing it to read beyond the end of the texture.
[Reference](https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glPixelStore.xhtml )
Fixes #1002
[Test](https://github.com/abaire/nxdk_pgraph_tests/blob/main/src/tests/texture_format_dxt_tests.cpp )
[HW Results](https://github.com/abaire/nxdk_pgraph_tests_golden_results/wiki/Results-Texture_DXT )
2022-07-01 13:44:20 -07:00
mborgerson
db389b1508
nv2a: Fix missing emit_vertex param
2022-06-25 22:56:11 -07:00
Matt Borgerson
83e16c996d
nv2a: Store shading mode in CONTROL_3
2022-06-25 21:11:30 -07:00
Erik Abair
4132845336
nv2a: Implement SET_SHADE_MODEL
2022-06-25 20:39:55 -07:00
Erik Abair
0d84befb82
nv2a: Implement support for border textures
2022-06-25 18:08:55 -07:00
Matt Borgerson
be8b612186
nv2a: Set C numeric locale before shader gen
2022-06-25 15:34:26 -07:00
Erik Abair
b3abb982e8
nv2a_vsh_cpu: Fix incorrect ilu input handling due to mismerge
2022-06-24 23:47:36 -07:00
Erik Abair
f54b207812
nv2a: Handle invalid w in fixed function pipeline
2022-06-24 22:44:19 -07:00
Erik Abair
9d2d8691b5
nv2a: Implement NV097_LAUNCH_TRANSFORM_PROGRAM
2022-06-24 20:41:04 -07:00