Commit Graph

873 Commits

Author SHA1 Message Date
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)
![HW results](https://github.com/abaire/nxdk_pgraph_tests_golden_results/wiki/Results-Texgen#objectlinearpng)

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