Commit Graph

29861 Commits

Author SHA1 Message Date
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
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
Erik Abair
8043abc738 nv2a: Add CPU emulation of nv2a vertex shader 2022-06-24 20:34:57 -07:00
Erik Abair
cc21fbea78 nv2a: Stop passing ShaderState by value 2022-06-22 15:59:49 -07:00
Matt Borgerson
bb855d43da nv2a: Reset all draw arrays tracking on expand 2022-06-20 18:54:21 -07:00
Erik Abair
baa7e914fb nv2a: Fix assert in single DrawArray + ArrayElement case 2022-06-20 18:33:18 -07:00
Matt Borgerson
12134404df nv2a: Refactor inline buffer clear, clear on draw flush 2022-06-15 17:30:05 -07:00
Matt Borgerson
84260dfc18 nv2a: Add begin/end sanity debug checks 2022-06-15 17:30:05 -07:00
Matt Borgerson
d8723e047b nv2a: Store primitive mode in vmstate 2022-06-15 17:30:05 -07:00
Matt Borgerson
d6abaca904 nv2a: Minor cleanup 2022-06-15 17:30:05 -07:00
Matt Borgerson
463c815a9b nv2a: Always clear inline vertex buffers on begin 2022-06-15 17:30:05 -07:00
Erik Abair
88409a92bf
nv2a: Fix intermixed use of DRAW_ARRAYS and ARRAY_ELEMENTx
Co-authored-by: Matt Borgerson <contact@mborgerson.com>
2022-06-15 13:13:51 -07:00
Erik Abair
daa2748a2f nv2a: Gracefully ignore draws with no target bindings 2022-06-14 18:35:00 -07:00
Matt Borgerson
191f927517 nv2a: Store zclamp config to registers 2022-06-14 17:52:55 -07:00
Erik Abair
875c0659d6 nv2a: Implement gl_depth_clamp control 2022-06-14 17:05:21 -07:00
Mike Davis
c16db47bab
nv2a: Add RenderDoc support for Windows builds 2022-06-14 14:03:26 -07:00
Erik Abair
30829497d2 nv2a: Assert on unimplemented writable const register path 2022-06-10 16:28:04 -07:00
Erik Abair
5cb31da44b nv2a: Increase DrawArrays buffer size
Fixes #364
2022-06-09 22:28:28 -07:00
Erik Abair
30d3bb53b5 nv2a: Fix clip region at renderscales > 1
Fixes #1054
2022-06-09 20:41:38 -07:00
Erik Abair
176b574403 nv2a: Fix oFog write behavior with non-x destination masks. 2022-06-03 14:38:16 -07:00