Commit Graph

181 Commits

Author SHA1 Message Date
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 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 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
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
Erik Abair 9d2d8691b5 nv2a: Implement NV097_LAUNCH_TRANSFORM_PROGRAM 2022-06-24 20:41:04 -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 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
Erik Abair 30d3bb53b5 nv2a: Fix clip region at renderscales > 1
Fixes #1054
2022-06-09 20:41:38 -07:00
Erik Abair 8a97cec99f nv2a: Implement z16 float shadow comparison 2022-06-03 13:50:36 -07:00
Erik Abair 84fa8dac3e nv2a: Check for CPU-modifications to textures before reusing 2022-06-03 13:29:38 -07:00
Erik Abair 9f6b9670d6 nv2a: Ignore excess inline array data 2022-05-28 15:08:22 -07:00
Erik Abair 8334f294df nv2a: Do not set surface dirty if writes were disabled 2022-05-28 11:58:27 -07:00
Matt Borgerson 0cdcdde70c nv2a: Emulate floating Z24S8 with fixed Z24S8 2022-05-25 23:51:05 -07:00
Matt Borgerson bb78ad0e2f nv2a: Rename zeta surface map 'int' to 'fixed' 2022-05-25 23:51:05 -07:00
Erik Abair 9fe352c56c nv2a: Migrate surface dbg messages to trace framework 2022-05-24 16:42:23 -07:00
Matt Borgerson 280a1bb6a1 nv2a: Support compressed 2D texture padding 2022-05-24 01:46:38 -07:00
Matt Borgerson 14748d9bbb nv2a: Limit base, max mipmap level 2022-05-24 01:46:38 -07:00
Matt Borgerson 0efef88181 nv2a: Use soft 2D texture decompression 2022-05-24 01:46:38 -07:00
Erik Abair 66b57dca9c
nv2a: Invalidate zeta when constructing non-matching color surface 2022-05-19 18:07:03 -07:00
Erik Abair 397957a36c nv2a: Unbind dirty buffers on invalidate 2022-05-19 17:52:02 -07:00
Erik Abair 9a446a6544 nv2a: Add pitch to surface debug info 2022-05-18 16:52:32 -07:00
Erik Abair e64ffe8091 nv2a: Invalidate GL textures after surface blit 2022-05-18 16:51:51 -07:00
Matt Borgerson 9fafe92b25 nv2a: Don't add clip offset to swizzled surfaces 2022-05-18 16:19:10 -07:00
Matt Borgerson 38a0e46f8c nv2a: Don't bind unsampled textures 2022-05-18 03:40:04 -07:00
Matt Borgerson 2c1012ede4 nv2a: Add SHADOWCTL to shader dirty test 2022-05-17 18:13:35 -07:00
Matt Borgerson a1f34c339a nv2a: Add SHADOWCTL register to store depth func 2022-05-17 18:13:35 -07:00
Erik Abair c33d96127c nv2a: Implement shadow samplers 2022-05-17 17:45:16 -07:00
Erik Abair b9aef0c57c nv2a: Move palette offset behind texture reuse check 2022-05-17 17:32:32 -07:00
Erik Abair b0f20c9bba nv2a: Fix stale texture in surface input and output case 2022-05-17 17:18:15 -07:00
Erik Abair a6cd0c2110 nv2a: Prevent GPU download after blit operation 2022-05-17 16:29:16 -07:00