kd-11
59b1c324a9
rsx: Properly implement immediate mode rendering
...
- Treat the draw commands as being consumed on-the-fly with ATTR0 as provoking attribute
- Analysing streams sent to RSX and the results implies they are consumed fully inline.
This only makes sense if a provoking attribute is present. The 'static' register is truly the immediate register for the draw.
2021-11-15 18:14:15 +03:00
kd-11
1f627caa81
rsx: Clear some leaking register state between runs
2021-11-15 18:14:15 +03:00
kd-11
9aafd8c09f
rsx: Avoid get_system_time for simple draw ordering
2021-09-28 17:43:15 +03:00
kd-11
705693ecf8
rsx: Fixup image-in data length calculations
2021-08-17 23:10:42 +03:00
Eladash
107641626a
rsx: Implement crash-proofing for image_in dst/src formats
2021-08-17 16:40:41 +03:00
Eladash
83624e1f68
rsx: Implement crash-proofing for src/dst image_in address
2021-08-17 16:40:41 +03:00
Eladash
2ce164be09
rsx: Implement crash-proofing for 308A_COLOR dst address
2021-08-17 16:40:41 +03:00
kd-11
194bfc54d1
rsx: Implement dynamic vertex offset updates
...
- Vertex offsets can be updated mid-draw to dynamically render different meshes without breaking up draws
2021-06-30 10:07:33 +03:00
kd-11
2c7c1c501d
rsx: Implement support for extended vertex programs
...
- Some games are kinda pushing it with RSX register space and spilling VP data into adjacent unused space.
2021-06-28 10:52:05 +03:00
kd-11
c3415bcff2
rsx: Fixup for byte order when passing data via vertex registers that are not inline arrays (register vertex data and push buffers)
2021-06-14 23:20:35 +03:00
kd-11
d3ff67ffb5
rsx: Pass vertex attributes streamed via register write in PS3-correct format
...
- TODO: Optimize this, we can avoid the double bswap in FIFO and then in attribute push
Not very important since nobody is doing register push in high-performance path.
2021-06-14 10:24:03 +03:00
kd-11
b085284c55
rsx: Ignore write-to-self via blit engine.
2021-05-09 13:07:47 +03:00
Megamouse
a16d8ba3ea
More random changes
2021-04-11 14:01:51 +03:00
Nekotekina
b3fb6d7d18
Add and fix -Wredundant-decls (GCC)
2021-03-23 22:48:57 +03:00
Nekotekina
87af905018
Enable -Wunused-parameter
2021-03-06 18:07:08 +03:00
Nekotekina
ea5e837bd6
fixed_typemap.hpp: return reference
2021-03-02 16:08:14 +03:00
Nekotekina
038148bf06
Fix almost all GCC warnings
2021-02-17 22:59:04 +03:00
Eladash
f43260bd58
Atomic waiting refactoring ( #9208 )
...
* Use atomic waitables instead instead of global thread wait as often as possible.
* Add ::is_stopped() and and ::is_paued() which can be used in atomic loops and with atomic wait. (constexpr cpu flags test functions)
* Fix notification bug of sys_spu_thread_group_exit/terminate. (old bug, enhanced by #9117 )
* Function time statistics at Emu.Stop() restored. (instead of current "X syscall failed with 0x00000000 : 0")
2021-02-13 17:50:07 +03:00
Eladash
0652870204
New RSX Debugger
2021-01-28 17:40:26 +03:00
Eladash
dbecf0fa50
Introducing RSX debugger entry (main debugger)
2021-01-19 22:55:12 +03:00
Nekotekina
fb29933d3d
Add usz alias for std::size_t
2020-12-18 12:23:53 +03:00
Nekotekina
36c8654fb8
Remove HERE macro
...
Some cleanup.
Add location to some functions.
2020-12-10 12:30:22 +03:00
Nekotekina
e055d16b2c
Replace verify() with ensure() with auto src location.
...
Expression ensure(x) returns x.
Using comma operator removed.
2020-12-09 15:43:38 +03:00
Nekotekina
eb66302907
atomic.hpp: replace std::atomic with atomic_t
...
Dual dependency is nothing good.
2020-12-07 17:13:12 +03:00
kd-11
3a0b3a85a5
rsx: Separate program environment state from program ucode state
...
- Allows for conservative texture uploads
- Allows to update a program object without running full ucode analysis for no reason
2020-12-07 00:45:27 +03:00
RipleyTom
af8c661a64
Remove BOM markers
2020-12-06 15:30:12 +03:00
kd-11
67f48ce21c
rsx: Fix uncaught depth-func changes
...
- Depth func of always or never usually disqualifies depth testing.
Invalidate contested surfaces when depth func is changed.
2020-11-30 00:46:36 +03:00
Nekotekina
21ec32b465
vm: implement g_shmem for range locks
...
Renamed from g_shareable. Contains pointers instead of bits.
Used in range locks to prevent any "collision" between memory.
2020-11-08 16:43:15 +03:00
Eladash
b5014d56ab
rsx: Fix transform contants load
2020-10-31 02:08:03 +03:00
Nekotekina
13de773486
Remove some vm::reservation_lock instances
2020-10-27 17:56:19 +03:00
kd-11
18ca3ed449
rsx: Block-level reservation access
2020-10-25 20:21:04 +03:00
Nekotekina
492ed27495
RSX: fix rsx::nv406e::semaphore_release partially
...
Properly release reservation (non-TSX path).
At least update and notify reservation (TSX).
2020-10-15 20:58:59 +03:00
Nekotekina
dcff8c2637
Fix remaining vm::reservation_lock usages (for now)
...
Optimization can be restored later.
2020-10-13 12:04:59 +03:00
Nekotekina
346a1d4433
vm: rewrite reservation bits
...
Implement classic unique/shared locking concept.
Implement vm::reservation_light_op.
2020-10-10 13:58:48 +03:00
kd-11
6380e67af9
rsx: Fix depth clipping
...
- Fix special case where n=f making (f-n) = 0
- Dynamically update depth range by setting dirty bits
- Fix depth bounds when n=f and bounds test is disabled
2020-09-08 15:33:08 +03:00
Eladash
73d23eb6e6
SPU: Implement Accurate DMA ( #8822 )
2020-09-02 23:58:29 +02:00
kd-11
628cb1c779
rsx: Validate blend factors according to hardware testing
2020-06-23 12:15:02 +03:00
kd-11
a14e0a0104
rsx: Validate stencil op to match realhw behavior
2020-06-23 12:15:02 +03:00
kd-11
f3637cdfdb
rsx: Fix surface options hint mechanism
...
- Silly typo
2020-06-23 12:15:02 +03:00
kd-11
3663a8ab4d
rsx: Improve surface options invalidation
2020-06-14 20:13:12 +03:00
kd-11
650152e05f
rsx: Fix fragment state updates
...
- Fix copypasta for POLYGON_STIPPLE_PATTERN vs SET_POLYGON_STIPPLE method binding
- Use proper enums for ROP_control bits to avoid confusion
2020-06-03 22:05:33 +03:00
kd-11
1677618c75
rsx: Implement stippled rendering
2020-05-30 14:47:10 +03:00
xddxd
f56b362769
rsx: Copypasta fix ( #8289 )
2020-05-25 20:07:11 +01:00
kd-11
bd41a108d8
nv3089: Account for subpixel addressing
...
- Those strange offsets noted in some games seem to match to subpixel addressing.
For example, when scaling down by a factor of 4, a pixel offset of 2 will end up inside pixel 0 of the output
2020-05-24 11:31:37 +03:00
Eladash
377e2ce3e8
rsx: Write 4-byte long data to all semaphores ( #8246 )
...
* rsx: Write 4-byte long data to all semaphores
2020-05-17 17:48:35 +03:00
Eladash
8a0425570c
rsx: Fix data written to RSX semaphores and the initial data of them ( #8235 )
2020-05-16 09:55:56 +01:00
Eladash
e407018bb5
rsx: Write ref+get atomically
...
May contribute to better FIFO synchronization in some cases.
2020-04-11 21:21:15 +03:00
Eladash
36fd1d0f0d
rsx: Optimize transform constants load methods ( #7992 )
2020-04-09 15:53:43 +03:00
Eladash
3f48450408
sys_rsx: Minor atomicity fixes
2020-04-07 20:43:28 +03:00
Megamouse
b1fdbc7fcc
Move some format functions
2020-04-06 20:59:58 +02:00
Eladash
72d1efa383
rsx: Batch transform contants load methods
2020-04-05 15:21:56 +03:00
Eladash
72c0aed4c1
rsx: Reset vertex program/constants at each boot
2020-04-02 20:42:12 +03:00
Eladash
c2c5005278
rsx: Fix and improve fp program data invalidation
2020-04-02 20:42:12 +03:00
Eladash
2ed370093e
rsx: Get rid of invalid_command_interrupt_raised
2020-04-02 20:42:12 +03:00
Eladash
d97e9f7b4a
rsx: Batch vertex program load methods
2020-04-02 20:42:12 +03:00
Eladash
4215499b7f
rsx: Fix typo in NV4097_SET_TRANSFORM_PROGRAM range
2020-03-28 11:07:34 +03:00
Eladash
158e34faca
rsx: Reset all method registers at rsx_state::init()
2020-03-25 17:51:59 +03:00
Eladash
768b4f8c65
rsx: Improve NV308A_COLOR
...
* Fix NV308A_COLOR methods range.
* Batch NV308A_COLOR methods execution together.
* Fix termination of bind_range<> in rsx methods binding.
2020-03-25 17:51:59 +03:00
Eladash
377e06a4a2
rsx: Fix unknown Blend equation
2020-03-15 09:53:15 +03:00
Eladash
c04abac630
rsx capture: Fix exceptions handler, fix tiny race condition on capture new capture
2020-03-12 21:36:43 +01:00
Eladash
636ed4a48b
HLE cellGcmSys: Avoid calling sys_rsx syscalls in rsx code
2020-03-09 16:07:14 +03:00
Nekotekina Aux1
250736ece5
Fix warnings in emucore
2020-03-04 21:23:34 +03:00
Nekotekina
7069e7265f
RSX: move g_dma_manager to g_fxo
2020-02-23 13:12:50 +03:00
Nekotekina
92e3eaf3ff
Fix signed-unsigned comparisons and mark warning as error (part 2).
2020-02-19 22:54:58 +03:00
Eladash
df8d0cde4a
RSX/SPU: Accurate reservation access
2020-02-19 18:11:30 +00:00
Megamouse
fe75311be2
move config structs to own files and clean up some headers
2020-02-17 15:08:17 +03:00
Eladash
07f300a14e
rsx: ZCULL typo fix
2020-02-14 17:11:26 +03:00
Eladash
bdab26ec09
rsx: rewrite io mappings
...
Along with some with fixes to cellGcmSys HLE.
2020-02-10 21:39:39 +00:00
Eladash
b7043ce000
Make rsx::get_address report caller location
2020-02-08 22:18:56 +03:00
kd-11
c64935f9dd
rsx: Clean up graphics state notifications and add notification for change in point size
...
- Adds a backend notification when point size changes.
- Refactors all those separate notifiers into one reusable template.
2020-02-08 18:13:05 +03:00
Nekotekina
c0f80cfe7a
Use attributes for LIKELY/UNLIKELY
...
Remove LIKELY/UNLIKELY macro.
2020-02-05 10:42:34 +03:00
Nekotekina
15391f45d0
Modernize RSX logging (rsx_log variable)
2020-02-01 11:52:22 +03:00
kd-11
adcc3e9c4b
rsx: Optionally sync on texture read semaphore
...
- Some games use texture semaphore for zcull sync which is rather bizzare.
However, it works on realhw as the depth test happens before fragment shader completion
- Due to the high performance penalty incurred by this act, this
behavior is only enabled by the "strict rendering mode" option.
2020-01-21 22:21:51 +03:00
Eladash
85695c8bac
rsx: FIFO wake-up pause control
2020-01-15 19:54:23 +03:00
kd-11
7786681954
rsx: Improve MTRSX synchronization
...
- Properly synchronize DMA transfers when handling RSX pipeline
barriers. Texture read barrier is used to signify completion of DMA
routines and is often used to signal that Cell can overwrite vertex
data!
2020-01-03 10:35:53 +03:00
kd-11
5be7f08965
rsx: Restructure ZCULL report retirement
...
- Prefer lazy retire model. Sync commands are sent out and the reports will be
retired when they are available without forcing.
- To make this work with conditional rendering, hardware support is
required where the backend will automatically determine visibility by
itself during rendering.
2019-12-29 13:49:46 +03:00
kd-11
8dfea032f2
rsx: Remove deprecated do_method path that has been superceded by c++ inheritance for many years
2019-12-29 13:49:46 +03:00
Eladash
6a926daee7
rsx: Delay FIFO recovery point creation if is in in_begin_end scope ( #7080 )
2019-12-12 15:38:56 +03:00
Eladash
7260af032e
rsx: Ignore or recover from unknown primitives
...
This also fixes a bug when recovering FIFO or creating such recovery point inside in_begin_end == true scope.
2019-12-11 00:11:12 +03:00
Nekotekina
377e7d2a73
C-style cast cleanup VI
2019-12-04 17:56:22 +03:00
kd-11
2a8f2c64d2
rsx: Implement report transfer deferring
...
- Allow delaying report flushes triggered by image_in or buffer_notify
- When the report is ready, all the delayed transfers will automatically
be done.
- TODO: Make this configurable?
2019-11-04 18:48:41 +03:00
Emmanuel Gil Peyrot
69e9ee26f6
rsx: Make input_is_swizzled a template parameter
...
This lowers the relative cost of this function from ~2.25% to ~1.80% on
gcc 9 which I found quite surprising, some of it probably gets inlined
better in the callers, but I haven’t been able to isolate which parts.
2019-10-28 13:28:51 +03:00
Eladash
5de0005f5a
rsx: Report full method range on invalid methods
...
Also report full command on fifo desync event for the first time
2019-10-21 15:31:45 +03:00
eladash
730e9cde84
sys_rsx: Improve allocations and error checks
...
* allow sys_rsx_device_map to be called twice: in this case the DEVICE address retrived from the previous call returned
* Add ENOMEM checks for sys_rsx_memory_allocate and sys_rsx_context_allocate
* add EINVAL check for sys_rsx_context_allocate if memory handle is not found
* Separate sys_rsx_device_map allocation from sys_rsx_context_allocate's
* Implement sys_rsx_memory_free; used by cellGcmInit upon failure
* Added context_id checks
* Throw if sys_rsx_context_allocate was called twice.
2019-10-21 15:31:45 +03:00
Eladash
397007cf8b
rsx: Fix FIFO_DRAW_BARRIER substituation
2019-10-11 12:34:53 +03:00
Eladash
9242f16560
rsx: Improve FIFO recovery from flip
2019-10-10 19:34:23 +03:00
Eladash
06017cb14e
rsx: Recover from invalid writes to CELL_GCM_NV4097_SET_INDEX_ARRAY_DMA
...
Also: Trigger a FIFO recovery when encountering an invalid method.
2019-10-10 19:34:23 +03:00
Eladash
2eaf5df60b
rsx: Register some more methods
2019-10-10 19:34:23 +03:00
Eladash
0b2fa6ffdc
rsx: Flush FIFO GET before smeaphore_acquire
2019-09-30 17:30:15 +03:00
Nekotekina
bd1a24b894
Tidy endianness support (se_t) implementation
...
Move se_t and se_storage to util/endian.hpp
Use single template instead of two specializations.
Add minor optimization for MSVC.
Remove v128 dependency.
Try to enable intrinsics for unaligned data.
Fix minor bug in u16/u32/u64 specializations.
2019-09-28 15:39:50 +03:00
kd-11
7fdb4976d8
rsx: Remove log spam for cond render
2019-09-12 14:08:21 +03:00
kd-11
f8617500b5
rsx/methods: Warnings cleanup
2019-09-01 18:59:50 +03:00
kd-11
2962e05f26
rsx: Implement per-RTT color masks
...
- Also refactors and simplifies some common code in surface store and rsx core
2019-08-27 21:59:02 +03:00
Eladash
7fda07eb5b
rsx: UB fix (signed vs unsigned mismatch)
2019-08-13 20:48:50 +01:00
Eladash
519fe9309e
rsx: Fix nv0039::buffer_notify
2019-08-13 20:48:50 +01:00
Eladash
527b1bb071
rsx: Fix overlapping transfer of nv3089::image_in when out_pitch != in_pitch
...
or out_pitch != out_bpp * out_w
2019-08-13 20:48:50 +01:00
kd-11
8866a3d6a9
rsx: Cleanup for blit engine fixes
2019-08-10 16:45:02 +01:00
kd-11
033836d88c
rsx: Minor fixup for nv3089::image_in
...
- Typo scale_x->scale_y
- Remove convoluted temp buffer creation and just use vector instead
2019-08-08 15:48:22 +03:00
kd-11
f0bd0b5a7c
rsx: Conditional render sync optimization
...
- ZCULL queue was updated to one-per-cb but the conditional render sync hint was not updated.
- Do not unconditionally flush the queue unless the upcoming ref is contained in the active CB.
- This avoids spamming queue flush, which frees up resources and improves performance
2019-07-30 21:13:42 +03:00
Eladash
fcc75c8b0f
rsx: Write atomically semaphore updates and fix zcull timestamp
2019-07-26 21:27:55 +03:00