Dima
dcc3047ba8
Stub ErrorCommonArg
2022-12-10 14:58:20 +00:00
Dima
68253fe995
Stub mii:e/mii:u
...
Needed for SSBU
2022-12-10 14:58:20 +00:00
Dima
69ee3cfc66
Stub DeleteDirectory
...
Should allow deleting/rewriting saves in some games
2022-12-10 14:58:20 +00:00
Dima
bbd34ae7e7
Validate if entries are not empty before using
...
Should fix saving problem in Baldur's Gate: Dark Alliance II at least
2022-12-10 14:58:20 +00:00
Dima
5f510d84d7
Stub IsVibrationPermitted
2022-12-10 14:58:20 +00:00
Dima
51d1f519af
Stub ListDisplays
2022-12-10 14:58:20 +00:00
Dima
a3866a3129
Stub LibraryAppletShop
2022-12-10 14:58:20 +00:00
Dima
1ebec7db82
Stub GetImageSize and LoadImage
2022-12-10 14:58:20 +00:00
Dima
52c4228ecf
Stub some friends service calls
...
Needed for Diablo 3
2022-12-10 14:58:20 +00:00
Dima
ebcbc5b05b
Validate NpadId for ActivateVibrationDevice
2022-12-10 14:58:20 +00:00
Dima
4bdd033354
Stub SetRecordVolumeMuted
2022-12-10 14:58:20 +00:00
Dima
f6d95aae01
Stub GetCacheStorageSize
2022-12-10 14:58:20 +00:00
Dima
4ab8699cd4
Stub ImportServerPki
2022-12-10 14:58:20 +00:00
Dima
41cf4bb12d
Stub GetLanguageCode
2022-12-10 14:58:20 +00:00
Dima
3e078d54b6
Stub GetIdleTimeDetectionExtension
2022-12-10 14:58:20 +00:00
Dima
2311f777fc
Stub IsCpuOverclockEnabled
2022-12-10 14:58:20 +00:00
Dima
4601c28c28
Stub GetCurrentIpAddress
2022-12-10 14:58:20 +00:00
Dima
18e6a6c53c
Stub DeclareOpenOnlinePlaySession and DeclareCloseOnlinePlaySession
2022-12-10 14:58:20 +00:00
Dima
150c1370c2
Stub some IApplicationFunctions funcs
2022-12-10 14:58:20 +00:00
Dima
a6f3aa3062
Stub TrySelectUserWithoutInteraction and ListQualifiedUsers
2022-12-10 14:58:20 +00:00
Dima
5a9a2861df
Add TitleId TextView in App Dialog
2022-12-10 14:57:46 +00:00
Billy Laws
7c802aea46
Mark vertex buffers as dirty on limit changes
2022-12-03 22:50:56 +00:00
Billy Laws
df19810c6c
Always set vertex stride for unbound buffers
2022-12-03 22:50:56 +00:00
Billy Laws
f4f658e3b7
Fix typo
2022-12-03 22:50:56 +00:00
Billy Laws
45b10ef776
Return whole mapping for shader code when end instrs aren't found
2022-12-03 22:50:56 +00:00
Billy Laws
d849875656
Only unlock GPU channel state on queue wait if it was previously locked
2022-12-03 22:50:56 +00:00
Billy Laws
a5e0a64adc
Switch patch error logs to debug
2022-12-03 22:50:56 +00:00
Billy Laws
af7c54297f
Cache staging buffer used for texture download
2022-12-03 22:50:56 +00:00
Billy Laws
bba07fb101
Update for new hades
2022-12-03 22:50:56 +00:00
Billy Laws
a16383fd4b
Disable compute shaders on mali
...
This will need to be debugged properly at some point but its fine for now.
2022-12-03 22:50:56 +00:00
Billy Laws
137d801843
Skip host1x HW emulation and effectively stub submission
...
This was causing a bunch of logspam and isn't really needed as we will be using a HLE approach.
2022-12-03 22:50:56 +00:00
Billy Laws
579a2d9337
Add dynamic executor slot growth
2022-12-03 22:50:56 +00:00
Billy Laws
60169fce4c
Support 0-sized constant buffers
2022-12-03 22:50:56 +00:00
Billy Laws
b86dd99e1a
Align all SSBOs to 0x40 bytes
...
Required by Adreno GPUs
2022-12-03 22:50:56 +00:00
Billy Laws
bfae292fb0
Make executor slot count setting exponential
2022-12-03 22:50:56 +00:00
Billy Laws
e0ae94be9d
Enable robustness1 Vulkan feature
2022-12-03 22:50:56 +00:00
Billy Laws
bf03f945ee
Implement the Kepler compute engine
...
This can reuse a fair bit of the now-commonised Maxwell 3D code and mostly consists of compute-specific pipeline code which was deemed not suitable for being commonised (e.g. descriptor update code is somewhat duplicated). Of note is how compute lacks any active state at all de to its use of QMDs which bundle up all state into a single object in memory.
2022-12-03 22:50:56 +00:00
Billy Laws
4bc81f007f
Add some convinience helpers to compute engine regs
2022-12-03 22:50:56 +00:00
Billy Laws
4267a6af36
Add support for parsing and compiling compute shaders to the shader manager
2022-12-03 22:50:56 +00:00
Billy Laws
86dab65af4
Commonise maxwell3d state updater
2022-12-03 22:50:56 +00:00
Billy Laws
a0b81d54d6
Use pitch layout for linear RTs
...
More likely to match in the texture cache when being sampled.
2022-12-03 22:50:56 +00:00
Billy Laws
ac85df7b7a
Start transition cache lookup with most recent one
2022-12-03 22:50:56 +00:00
Billy Laws
62c86b7690
Move maxwell3d to common constant buffer code
2022-12-03 22:50:56 +00:00
Billy Laws
8f0a6e78c5
Add Vulkan stride dynamic state and robustness support
...
Fixes the waterfall in SMO by specifying vertex buffer bounds.
2022-12-03 22:50:56 +00:00
Billy Laws
23a7f70a8e
Commonise maxwell3d guest shader caching code
2022-12-03 22:50:56 +00:00
Billy Laws
6f6a312692
Commonise maxwell3d pipeline binding handling code
...
A lot of pipeline code is difficult to commonise due to the inherent difference between compute and graphics pipelines, however the binding layout is shared so we can at least commonise that
2022-12-03 22:50:56 +00:00
Billy Laws
be8cbabd97
Commonise maxwell3d texture code
...
This will be shared with the compute engine implementation.
2022-12-03 22:50:56 +00:00
Billy Laws
61e95c4b2c
Commonise maxwell3d sampler code
...
This will be shared with the compute engine implementation, the only thing of note with this is that the binding register is now passed as a param since it is part of the compute QMD which can't be dirty tracked.
2022-12-03 22:50:56 +00:00
Billy Laws
7f93ec3df6
Commonise maxwell3d interconnect common code for use by other engines
...
The compute engine will require most of this for basic functionality.
2022-12-03 22:50:56 +00:00
Billy Laws
281838fde1
Apply GPU readback hack to both buffers and textures
...
And rename as appropriate.
2022-12-03 22:50:56 +00:00
Billy Laws
eb00dc62f8
Implement support for 36 bit games by using split code/heap mappings
...
Although rtld and IPC prevent TLS/IO and code from being above the 36-bit AS limit, nothing depends the heap being below it. We can take advantage of this by stealing as much AS as possible for code in the lower 36-bits.
2022-12-02 22:10:03 +00:00
Dima
e8e1b910c3
Add possibility to disable audio output
2022-12-02 00:33:28 +01:00
lynxnb
70109f8fbd
Work around invalid values in CNTFRQ_EL0
register
...
Exynos SoCs have a bug where the `CNTFRQ_EL0` register is either set to 0 or contain incoherent values. With this patch, the frequency value is loaded into a static variable and used instead of reading the register. The value will be initialised to the correct value for affected SoCs, while unaffected ones will use the value from the register.
2022-12-02 00:23:28 +01:00
Billy Laws
b2384e83f5
Add prepo:a service
2022-11-25 16:26:00 +00:00
Billy Laws
736216a6f4
Stub OpenPatchDataStorageByCurrentProcess
2022-11-25 16:26:00 +00:00
Billy Laws
44033d7f8d
Adjust CalendarTime year to be relative to 0AD
2022-11-25 16:26:00 +00:00
Billy Laws
2ce2604421
Implement VFS file deletion
2022-11-25 16:26:00 +00:00
Billy Laws
6c968e0357
Fix GetEntryType IPC return type
2022-11-25 16:26:00 +00:00
Billy Laws
7f1667de82
Avoid using trapping for frequently trapped shaders
...
Fall back to hashing for every shader access as that ends up being faster than applying traps for every execution.
2022-11-19 12:49:05 +00:00
Billy Laws
06095918a9
Introduce per-channel sequence number for invalidation tracking
...
For cases like shaders, which may be uploaded through I2M (which no longer causes an execution) we need a way to cause an invalidation on all writes
2022-11-19 12:49:05 +00:00
Billy Laws
97e3f7fd34
Increase max swapchain image count
2022-11-19 12:49:05 +00:00
Billy Laws
c49119f5ef
Fixup depth bounds register arguments
2022-11-19 12:49:05 +00:00
Billy Laws
db3c5c33c4
Clamp depth bounds into 0-1 range
2022-11-19 12:49:05 +00:00
Billy Laws
e1bbd521d9
Fix potential circular queue submission race
...
If a producer thread was waiting for the queue to have free space and the consumer thread hadn't yet acquired the production mutex a deadlock could occur
2022-11-19 12:49:05 +00:00
Billy Laws
13baf2312f
Add a workaround for sampling BGRA textures with a swizzle
2022-11-19 12:49:05 +00:00
Billy Laws
13a96c5aba
Implement a helper shader for partial clears
...
These are not natively supported by Vulkan, so use a helper shader and colorWriteMask for the same behaviour.
2022-11-19 12:49:05 +00:00
Billy Laws
ac0e225114
Use vkCmdBlit for texture copies when formats dont match
2022-11-19 12:49:05 +00:00
Billy Laws
c8fc8f84ec
Fallback to RGBA888 for unsupported swapchain formats as opposed to swizzle
2022-11-19 12:49:05 +00:00
Billy Laws
e0bc0d3a97
Avoid megabuffering buffers larger than the chunk size
2022-11-19 12:49:05 +00:00
Billy Laws
b6f49884b3
Use lower_bound to speedup texture hostMapping lookup
2022-11-19 12:49:05 +00:00
Billy Laws
e7fda28ac6
Skip over textures in cache which have been replaced with a layer/mip match
2022-11-19 12:49:05 +00:00
Billy Laws
88cc696c7f
Only use 2D array depth targets when depth > 1
2022-11-19 12:49:05 +00:00
Billy Laws
7fed971b2d
Take firstIndex into account when calculating index (quad) buffer size
...
Without this we would miss any elements beyond indexCount in the index buffer and they would be filled with random garbage causing vertex bombs
2022-11-19 12:49:05 +00:00
Billy Laws
1f9de17e98
Begin command buffers asynchronously in command executor
...
vkBeginCommandBuffer can take quite some time on adreno, move it to the cycle waiter thread where it won't block GPFIFO.
2022-11-19 12:49:05 +00:00
Billy Laws
4b3e906c22
Update cached buffer execution number when megabuffering
2022-11-19 12:49:05 +00:00
Billy Laws
3ae1e78544
Match mip layers and array layers in texture manager
2022-11-19 12:49:05 +00:00
Billy Laws
d502adb309
Avoid WRW hazard in subpass deps
2022-11-19 12:49:05 +00:00
Billy Laws
e9313cc291
Use view layer count over texture for attachments
2022-11-19 12:49:05 +00:00
Billy Laws
e65ca52d91
Avoid potential buffer copy race
2022-11-19 12:49:05 +00:00
Dima
720cfaafb6
Stub caps:su
2022-11-18 15:35:03 +00:00
Dima
74afca4aab
Stub caps:u
2022-11-18 15:35:03 +00:00
Dima
27ff1ae19b
Stub caps:c
2022-11-18 15:35:03 +00:00
Dima
ffb0546609
Stub caps:a
2022-11-18 15:35:03 +00:00
Dima
1c8736cb56
Stub IsLargeResourceAvailable
2022-11-18 12:52:25 +00:00
Dima
dcd9e4ff61
Stub SetIdleTimeDetectionExtension, SetAlbumImageTakenNotificationEnabled
2022-11-18 12:52:25 +00:00
Dima
60843269de
Stub GetBlockedUserListIds and UpdateUserPresence
2022-11-18 12:52:25 +00:00
Dima
2cdfc7640c
Stub GetPreviousProgramIndex
2022-11-18 12:52:25 +00:00
Dima
360306eb61
Stub GetAddOnContentListChangedEventWithProcessId
2022-11-18 12:52:25 +00:00
Dima
3d475ca122
Stub GetAccountId
2022-11-18 12:52:25 +00:00
Dima
0b452fe36b
Stub GetFriendList
2022-11-18 12:52:25 +00:00
Dima
cc37d2231d
Stub CheckFreeCommunicationPermission and IsFreeCommunicationAvailable
2022-11-18 12:52:25 +00:00
Dima
ec81c97fa9
Stub TryPopFromFriendInvitationStorageChannel
2022-11-18 12:52:25 +00:00
Dima
413f162cf2
Stub some account functions
2022-11-18 12:52:25 +00:00
lynxnb
675e8dbb2e
Move input handling code to a dedicated class
2022-11-17 21:54:15 +01:00
Dima
262ee28611
Stub some bsd functions
...
Co-authored-by: Lunar-Pixel <83507264+Lunar-Pixel@users.noreply.github.com>
2022-11-15 16:24:33 +00:00
Dima
9afa8b881e
Stub nsd:u/nsd:a and sfdnsres services
2022-11-15 16:24:33 +00:00
Billy Laws
01e27bd2dd
Implement ldr:ro LoadModule
2022-11-15 16:23:40 +00:00
Billy Laws
e571066409
Stub ldr:ro IRoInterface
...
Some games initialise this service on startup however don't actually use it. Add a simple stub to allow such games to boot.
2022-11-15 16:23:40 +00:00
Billy Laws
1fc2641746
Stub the web applet
2022-11-13 11:37:18 +00:00
Billy Laws
021f82ef08
Stub ListOpenContextStoredUsers
2022-11-13 11:35:40 +00:00
Billy Laws
e7bab27d85
Fixup nvdrv channel private memory allocation
...
This was incorrectly allocated in words, rather than bytes, meaning that guest allocations could overwrite the private memory and break inline syncpt operations
2022-11-13 11:35:40 +00:00
Billy Laws
8b523fa1f0
Avoid inline syncpt increments sending OOB GpEntries
...
In cases where no wfi is required, the space where the WFI commands would go needs to be zeroed out to avoid the GPU reading uninitialised memory.
2022-11-13 11:35:40 +00:00
Billy Laws
cd0b2636e5
Prevent truncation of big page start in GetVaRegions
2022-11-13 11:35:40 +00:00
Billy Laws
f650f32bf0
Avoid duplicating NvDrv buffer unmap code
2022-11-13 11:35:40 +00:00
Billy Laws
001064b7bf
Fix GraphicsBufferProducer recreation
...
We need to use a shared_ptr to ensure that the present callback doesn't do any UAFs, also unlocks the GBP during presentation as if the queue is full a deadlock could a rise where the present callback wouldn't be able to run due to the (waiting) DequeueBuffer thread holding the lock.
2022-11-13 11:35:40 +00:00
Billy Laws
29e89a3950
Fix crashes when opening non-existent directories
2022-11-13 11:35:40 +00:00
Billy Laws
ec139b3027
Fixup CancelBuffer fence handling
2022-11-13 11:35:40 +00:00
Billy Laws
7f24c7b857
Store KMemory object ptrs in memory class to avoid linear-time unmap
...
This is quite a horrible solution but fixing it properly would require a whole rewrite of how we handle memory.
2022-11-13 11:35:15 +00:00
Billy Laws
388245789f
Restructure ConditionalVariableSignal to avoid potential deadlock
...
Since InsertThread can block for paused threads, we need to ensure we unlock syncWaiterMutex when calling it.
2022-11-09 23:02:26 +05:30
PixelyIon
f4a8328cef
Implement Symbol Hooking
...
Symbol hooking is required for HLE implementations of certain features in the future such as `nvdec` and for more in-depth debugging of games as we can inspect them on a SDK function level which allows us to debug issues far more easily.
2022-11-07 23:56:22 +05:30
PixelyIon
8892eb08e6
Fix MoveRegister
to clear when value is 0
...
The register wouldn't be cleared with a `MOVZ` when a value was zero due to the condition for writing an instruction requiring the `offsetValue` to be non-zero.
2022-11-07 23:56:22 +05:30
Billy Laws
f7ab3abb86
Allow load balancing when waiting on condvars
2022-11-06 20:47:26 +00:00
german77
b6e2fb894c
service: bcat: Stub CreateDeliveryCacheStorageService
2022-11-06 20:39:41 +00:00
Billy Laws
026bb04386
Impl some more texture formats
2022-11-02 17:46:07 +00:00
Billy Laws
133f08ed14
Stash new register value before executing deferred draws/updates
...
Since the register writes technically happen after the draw, issues can occur if they happen before: e.g. skyrim updates ctSelect and disables all RTs after a draw, but this would happen before it previously and crash the driver.
2022-11-02 17:46:07 +00:00
Billy Laws
c50852e546
Implement the draw(...)BeginEnd Maxwell3D draw registers
...
Used by guest Vulkan games and nouveau.
2022-11-02 17:46:07 +00:00
Billy Laws
270ef3e0d2
Implement GPFIFO semaphore acquire operations
2022-11-02 17:46:07 +00:00
Billy Laws
2ce146e28f
Don't crash on the Grp0SetSubDevMask TertOp
...
Used by Vulkan games to set the SLI mask, not applicable to the switch.
2022-11-02 17:46:07 +00:00
Billy Laws
1d83dadefb
Drop size restruction bypass for frequently synced buffers
...
In cases where large buffers are updated every draw this could seriously increase memory usage beyond 3GB in the megabuffer.
2022-11-02 17:46:07 +00:00
Billy Laws
1088ed514c
Introduce texture usage system to ensure RPs are split when necessary
...
Vulkan doesn't allow sampling a texture and using it as an RT in the same RP, by tracking the texture usage status and splitting RPs when this occurs we can avoid such potential sync errors.
2022-11-02 17:46:07 +00:00
Billy Laws
2dd4698441
Adjust texture matching hacks
2022-11-02 17:46:07 +00:00
Billy Laws
4f5c9047ef
Add some additional texture formats used by Vulkan games
2022-11-02 17:46:07 +00:00
Billy Laws
6a830dfac5
Use shader-compiler side {S,U}Scaled format emulation
2022-11-02 17:46:07 +00:00
Billy Laws
579fd04117
Fixup ReadTextureType shader compiler callback
2022-11-02 17:46:07 +00:00
Billy Laws
b04d18eba5
Add support for split mappings to I2M uploads
...
Used by Super Mario Sunshine and other Vulkan games.
2022-11-02 17:46:07 +00:00
Billy Laws
db5e208379
Clear images even when aspects mismatch
2022-11-02 17:46:07 +00:00
Billy Laws
3c8df327f1
Fixup subpass barriers and flags
2022-11-02 17:46:07 +00:00
Billy Laws
5ab80901c6
Drop some debug code
2022-11-02 17:46:07 +00:00
Billy Laws
4de89c8839
GPU NEW MARGEBAC
2022-11-02 17:46:07 +00:00
Billy Laws
7670c83405
Ensure textures are clean before paging them out
2022-11-02 17:46:07 +00:00
Billy Laws
1a2351386d
Add u64 iova ctor
2022-11-02 17:46:07 +00:00
Billy Laws
93d43e0115
Fully fill in swizzle component mappings
...
Avoids the rest being default initialised to identity, which would break the intended effect of them.
2022-11-02 17:46:07 +00:00
Billy Laws
37ff0ab814
Add buffer manager support for accelerated copies
...
These will be sequenced on the GPU/CPU depending on what's optimal and avoid any serialisation
2022-11-02 17:46:07 +00:00
Billy Laws
cac287d9fd
Implement accelerated uploads/copies through buffer manager
...
Previously, both I2M uploads and DMA copies would force GPU serialisation if they happened to hit a trap or were used to copy GPU dirty buffers. By using the buffer manager to implement them on the host GPU we can avoid such slowdowns entiely.
2022-11-02 17:46:07 +00:00
Billy Laws
c5ec484d9a
Avoid redundantly passing executor in ctors when it's already in ChannelCtx
2022-11-02 17:46:07 +00:00
Billy Laws
463394ba72
Pass correct size for XFB buffers
2022-11-02 17:46:07 +00:00
Billy Laws
bd976676f4
Fix SNorm vertex formats
2022-11-02 17:46:07 +00:00
Billy Laws
b74098570f
Zero-out unused XFB varyings before passing to hades
2022-11-02 17:46:07 +00:00
Billy Laws
22f3ba6b93
Mark XFB buffers as GPU dirty
2022-11-02 17:46:07 +00:00
Billy Laws
26aeeaecf5
Add constant buffer GPU write pipeline barrier
2022-11-02 17:46:07 +00:00
Billy Laws
0b5d9308c4
Be more careful about potentially-unneeded GPU->CPU syncs
...
These can be especially expensive so should be avoided as much as possible.
2022-11-02 17:46:07 +00:00
Billy Laws
e6530e2386
Delete graphics_context
...
F
2022-11-02 17:46:07 +00:00
Billy Laws
b24a8465da
Don't require depthClamp
2022-11-02 17:46:07 +00:00
Billy Laws
9055c98e09
Only enable debug/verbose logs in (rel)debug builds
2022-11-02 17:46:07 +00:00
Billy Laws
0ebdbcf0ff
Don't lock stateMutex when updating buffer cycle
2022-11-02 17:46:07 +00:00
Billy Laws
dd360b8f75
Pass correct wait semaphore array size to queue submit
2022-11-02 17:46:07 +00:00
Billy Laws
c78a4b9699
Fixup buffer recreation to avoid deadlock when waiting on srcs
2022-11-02 17:46:07 +00:00
Billy Laws
d236bfe454
Enable depthClamp VK device feature
2022-11-02 17:46:07 +00:00
Billy Laws
95d849e1f6
Check FenceCycle signalled flag immediately before waiting
...
The lock release within the wait for submission means that another thread could end up signalling the cycle and then the VK wait still happen after when the lock has been reacquired.
2022-11-02 17:46:07 +00:00
Billy Laws
1a23b929a7
Avoid chaining cycles in buffer recreation
...
This had a chance of creating circular chains which obviously caused issues, just do a wait instead for now.
2022-11-02 17:46:07 +00:00
Billy Laws
6c0f084aae
Introduce hack to ignore frequently read-back textures
...
Readback can be especially slow on mobile due to the varying load pattern it creates which often prevents the CPU/GPU from clocking up. Since some games perform texture readback but don't actually use it for anything significant implement a hack to skip it and significantly improve performance in such cases.
2022-11-02 17:46:07 +00:00
Billy Laws
e45e7546c8
Redesign buffer megabuffering
...
Due to the frequency at which is is called megabuffering performance is critical to the performance of the entire emulator, especially in high-drawcall-count scenarios. After the view redesign, megabuffering on a per-view level was no longer possible nor desirable, and thus megabuffering was modified to just copy for every usage of a view. This worked great at the time since there were other bottlenecks, however gpu-new has since removed almost all of them and megabuffering is now a major sore point. Fix this by megabuffering small chunks and storing them in a page-table like structure within the buffer, these chunks can be referenced by multiple views and will be smartly invalidated whenever the sequence number or execution number changes to avoid any sequencing issues. In addition to this, to help the case where almost the whole buffer is read every single frame across a set of multiple views, an optimisation to skip the chunked tracking and use one large single megabuffer allocation and one single memcpy has been introduced. This reduces the overall amount of time spent in memcpy since large memcpys are quicker.
2022-11-02 17:46:07 +00:00
Billy Laws
7ea9aa52f5
Speed up reported guest GPU time
...
Avoids triggering DRS in games in cases where it wouldn't actually benefit anything due to being CPU bottlenecked.
2022-11-02 17:46:07 +00:00
Billy Laws
31c2fb7d7a
Fixup IDirectory read
2022-11-02 17:46:07 +00:00
Billy Laws
7491178a9e
Pass base array layer to texture views
2022-11-02 17:46:07 +00:00
Billy Laws
ff57d2fbbf
Enforce stronger format and weaker dimension texture compat checks
...
Rather than using just bpb for format compat, additionally check that the exact component bit layout matches since many games end up reusing RTs for unrelated textures. The texture size requirements have also been weaked to only check the resulting layer size as opposed to width/height - this is somewhat hacky but it gets around the problem of blocklinear alignment.
2022-11-02 17:46:07 +00:00
Billy Laws
14af383238
Only allow submitting swapchainImageCount
images for host present at a time
...
Prevents situations where nothing would otherwise be waiting on the GPU and since presentation no longer blocks too many images would be submitted for presentation.
2022-11-02 17:46:07 +00:00
Billy Laws
bcd96ac77d
Fixup A8R8G8B8 TIC format mapping
...
8-bit formats are inverted in TICs compared to Vulkan
2022-11-02 17:46:07 +00:00
Billy Laws
90466b8830
Implement depth clamp rasterisation state
...
Used in SMO for shadows.
2022-11-02 17:46:07 +00:00
Billy Laws
1cfc4278f9
Disable preserve buffer/texture attachment opt for now
...
Causes several issues and crashes in Pokemon without an obvious cause.
2022-11-02 17:46:07 +00:00
Billy Laws
e483cf9634
Use shader memory mirror when reading guest shaders
...
Avoids triggering any traps that may be present on the region
2022-11-02 17:46:07 +00:00
Billy Laws
f6e4328b5a
Ensure blit src/dst textures are attached as execution cycle dependencies
...
Since they're not in the TIC pool they would otherwise be freed
2022-11-02 17:46:07 +00:00
Billy Laws
77a131df60
Support using in-app renderdoc API to capture individual executions
2022-11-02 17:46:07 +00:00
Billy Laws
576bc6f37e
Add CommandExecutor slot count setting
2022-11-02 17:46:07 +00:00
Billy Laws
1a0819fb76
Use semaphores for presentation engine frame synchronisation
...
Avoids waits on the CPU which can be costly and confuse the scheduler, also reduces latency significantly.
2022-11-02 17:46:07 +00:00
Billy Laws
0670e0e0dc
Support using Vulkan semaphores with fence cycles
...
In some cases like presentation, it may be possible to avoid waiting on the CPU by using a semaphore to indicate GPU completion. Due to the binary nature of Vulkan semaphores this requires a fair bit of code as we need to ensure semaphores are always unsignalled before they are waited on and signalled again. This is achieved with a special kind of chained cycle that can be added even after guest GPFIFO processing for a given cycle, the main cycle's semaphore can be waited and then the cycle for the wait attached to the main cycle and it will be waited on before signalling.
2022-11-02 17:46:07 +00:00
Billy Laws
5b72be88c3
Stub ldn:u service
2022-11-02 17:46:07 +00:00
Billy Laws
77d76ed05a
Batch contiguous GMMU ranges into one
2022-11-02 17:46:07 +00:00
Billy Laws
e52dbf202f
Pass more Maxwell3D registers into interconnect
2022-11-02 17:46:07 +00:00
Billy Laws
83c7ed314e
Setup KThread pthread handle in StartThread
...
Avoids a race with starting the thread and the handle not being set yet
2022-11-02 17:46:07 +00:00
Billy Laws
9784ae23e9
Skip checking affinity before taking load-balance WaitScheduler path
...
The affinity mask may be set after the wait has began
2022-11-02 17:46:07 +00:00
Billy Laws
ad3195e06f
Split out guest texture layer size calcs into a seperate func
2022-11-02 17:46:07 +00:00
Billy Laws
8fa83fdf13
Fix deswizzling non-pow2 block size formats
...
We need to use DivideCeil to avoid rounding off part of the texture.
Fixes texture in Nier Automata: Game of the YoRHa edition.
2022-11-02 17:46:07 +00:00
Billy Laws
27de42f8df
Use surfaceClip as a hint for the underlying rendertarget size
...
TIC sizes may not be aligned to block linear dimensions whereas RT sizes are and then limited by the surface clip. By using this to determine surface size we are more likely to get a match in texture manager for any future usages.
2022-11-02 17:46:07 +00:00
Billy Laws
297597f697
Fix texture manager depth compat comparison
2022-11-02 17:46:07 +00:00
Billy Laws
500f817a28
Synchronize all non-matching textures back to host before recreation
2022-11-02 17:46:07 +00:00
Billy Laws
05581f2230
Remove now redundant buffer/texture/megabuffer manager locks
...
They have been superseeded by the global channel lock
2022-11-02 17:46:07 +00:00
Billy Laws
f5a141a621
Add dirty resource operator*
2022-11-02 17:46:07 +00:00
Billy Laws
b72720e8db
Finish off transform feedback implementation
2022-11-02 17:46:07 +00:00
Billy Laws
36fd885b49
Pack all draw state into a struct to avoid std::function allocations
2022-11-02 17:46:07 +00:00
Billy Laws
b5d0060c3f
Only use scissor for clear rect when enabled
2022-11-02 17:46:07 +00:00
Billy Laws
f93df35e6c
Only set line width when wideLines feature is supported
2022-11-02 17:46:07 +00:00
Billy Laws
4cebdfc8d3
Pass texture and cbuf state into pipeline manager for hades callbacks
2022-11-02 17:46:07 +00:00
Billy Laws
9ce848d4e0
Implement descriptor update batching and push descriptors
...
Batching helps to avoid the need to attach so many objects to the fence cycle, which ends up taking a fair bit of time due to the allocation required.
2022-11-02 17:46:07 +00:00
Billy Laws
62a165b51e
Reformat maxwell3d interconnect codebase
2022-11-02 17:46:07 +00:00
Billy Laws
3766be59e7
Zero out vertex attribute state when disabled to avoid creating redundant pipelines
2022-11-02 17:46:07 +00:00
Billy Laws
751e3356e1
Keep shader trap lock held for the duration of an execution
...
Avoids constant relocking on the GPFIFO thread (~0.5% of total time)
2022-11-02 17:46:07 +00:00
Billy Laws
314a9bccbc
Allow megabuffering readonly SSBOs
2022-11-02 17:46:07 +00:00
Billy Laws
4c2db0ba01
Implement ReadCbufValue and ReadTextureType hades callbacks
...
Used for bindless and BRX instruction emulation.
2022-11-02 17:46:07 +00:00
Billy Laws
2163f8cde6
Implement alpha test pipeline state
2022-11-02 17:46:07 +00:00
Billy Laws
c86ad638c4
Keep track of transform feedback varyings pipeline state
2022-11-02 17:46:07 +00:00
Billy Laws
7ad2d94345
Zero out blend state when disabled to avoid creating redundant pipelines
2022-11-02 17:46:07 +00:00
Billy Laws
4052a93051
Force non-pushdescriptors for blit helper shader
2022-11-02 17:46:07 +00:00
Billy Laws
cb2a8c6d24
Enable wideLines Vulkan feature
2022-11-02 17:46:07 +00:00
Billy Laws
a3369637a9
Don't entirely wipe out per-index TIC cache efter each execution
...
Keep a copy of the old TIC entry and view even after purge caches and use the execution number to check validity instead, if that doesn't match then just memcmp can be used as opposed to a full hash and map lookup.
2022-11-02 17:46:07 +00:00
Billy Laws
98c0cc3e7f
Impl preserve attached buffers/textures to avoid GPFIFO lock thrashing
...
When profiling SMO, it became obvious that the constant locking of textures and buffers in SyncDescriptors took up a large amount of CPU time (3-5%), a precious resource in intensive areas like Metro. This commit implements somewhat of a workaround to avoid constant relocking, if a buffer is frequently attached on the GPU and almost never used on the CPU we can keep the lock held between executions. Of course it's not that simple though, if the guest tries to lock a texture for the first time which has already been locked as preserve on the GPFIFO we need to avoid a deadlock. This is acheived through a combination of two things: first we periodically clear the locked attachments every 2*SlotCount submissions, preventing a complete deadlock on the CPU (just a long wait instead) and meaning that the next time the resource is attached on the GPU it will not be marked for preservation due to having been locked on the guest before; second, we always need to unlock everything when the GPU thread runs out of work, as the perioding clearing will not execute in this case which would otherwise leave the textures locked on the GPFIFO thread forever (if guest was waiting on a lock to submit work). It should be noted that we don't clear preserve attached resources in the latter scenario, only unlock them and then relock when more work is available.
2022-11-02 17:46:07 +00:00
Billy Laws
0e8ccf1e99
Use memory_order_release for new descriptor set allocations
2022-11-02 17:46:07 +00:00
Billy Laws
34db5097da
Avoid using a shared_ptr reference to cycle for command buffer submission
...
Somehow without this we can sometimes get crashes during appending to circular queue
2022-11-02 17:46:07 +00:00
Billy Laws
0428e8c7da
Support forcing regular descriptor sets in VK pipeline cache
2022-11-02 17:46:07 +00:00
Billy Laws
0f394d516b
Lock FenceCycle inbetween waiting on chained cycles and checking signalled
...
Avoids one race where we would end up hogging all the locks of chained cycles and ourself when waiting for submission of previous cycles and prevent any forward progress due to another thread locking one of the chained cycles.
2022-11-02 17:46:07 +00:00
Billy Laws
a015fe753d
Only write npad controllerInfo entry on the HID thread if it is valid
2022-11-02 17:46:07 +00:00
Billy Laws
b5446846f7
Stub IsSixAxisSensorAtRest
2022-11-02 17:46:07 +00:00
Billy Laws
6719572b3b
Keep track of how often textures/buffers are locked on the CPU
...
For the upcoming preserve attachment optimisation, which will keep buffers/textures locked on the GPU between executions, we don't want to preserve any which are frequently locked on the CPU as that would result in lots of needless waiting for a resource to be unlocked by the GPU when it occasionally frees all preserve attachments when it could have been done much sooner. By checking if a resource has ever been locked on the CPU and using that to choose whether we preserve it we can avoid such waiting.
2022-11-02 17:46:07 +00:00
Billy Laws
993ffb56f4
Avoid waiting on texture/buffer fence with trapMutex locked
...
This could cause deadlocks under certain circumstances by preventing the GPFIFO from making any progress while also waiting on it at the same time.
2022-11-02 17:46:07 +00:00
Billy Laws
3e8bd26978
Add a global gm20b channel lock
...
Allowing for parallel execution of channels never really benefitted many games and prevented optimisations such as keeping frequently used resources always locked to avoid the constant overhead of locking on the hot path.
2022-11-02 17:46:07 +00:00
Billy Laws
57a4699bd1
Add IOCTL trace events
2022-11-02 17:46:07 +00:00
Billy Laws
7861968c05
Fix memory::Buffer move constructor
2022-11-02 17:46:07 +00:00
Billy Laws
ef0ae30667
Implement Maxwell3D texture pool management and view creation
...
Ontop of the TIC cache from previous code a simple index based lookup has been added which vastly speeds things up by avoding the need to hash the TIC structure every time.
2022-11-02 17:46:07 +00:00
Billy Laws
5542459c75
Use a SpinLock for guest shader code cache trap mutex
2022-11-02 17:46:07 +00:00
Billy Laws
3e12cde4d5
Make active Vulkan pipeline public
2022-11-02 17:46:07 +00:00
Billy Laws
2556966ec5
Don't attach textures to the active cycle in AttachTexture
2022-11-02 17:46:07 +00:00
Billy Laws
7dc3dde815
Introduce support for waiting for submission to FenceCycle
...
Introducing async record resulted in breaking the assumption that any work submitted through command scheduler would be submitted in order with graphics submits. Since async record now unlocks the texture before it's submitted a seperate mechanism is needed to ensure ordering of submits. This is achieved by building support into fence cycle itself, with a conditional variable that is waited on for submission before any fence waits occur.
2022-11-02 17:46:07 +00:00
Billy Laws
54b85583ae
Fix layout transition in Texture::CopyFrom
2022-11-02 17:46:07 +00:00
Billy Laws
0f7c04ffb4
Use target format bpb when calculating linear mip level size
2022-11-02 17:46:07 +00:00
Billy Laws
849184452c
Add function to check if any guest texture mappings are unmapped
2022-11-02 17:46:07 +00:00
Billy Laws
98cb94ca6c
Bind an empty uniform buffer in place of unbound constant buffers
2022-11-02 17:46:07 +00:00
Billy Laws
55b85d0691
Implement combined image samplers and make descriptor code common between quick/normal updates
2022-11-02 17:46:07 +00:00
Billy Laws
ccf2d59351
Fixup input rate reading from packed pipeline state
2022-11-02 17:46:07 +00:00
Billy Laws
13970a5644
Refresh pipeline cached storage buffer bindings after each execution
2022-11-02 17:46:07 +00:00
Billy Laws
6bb2853ca0
Keep track of combined image samplers for quick bind
2022-11-02 17:46:07 +00:00
Billy Laws
040db37a28
Fix descriptor copies to be one per descriptor type
2022-11-02 17:46:07 +00:00
Billy Laws
d482e0ea98
Fix shader stage iteration to not miss the pixel stage
2022-11-02 17:46:07 +00:00
Billy Laws
0b808cc22b
Use Sint/Uint attribute type in place of Sscaled/Uscaled
...
Scaled formats are not supported by any mobile GPUs.
2022-11-02 17:46:07 +00:00
Billy Laws
92ce220d3a
Ignore constant buffer selector size for updates
...
Clustertruck performs a giant (0x3000 byte) update with a selector size of only 0x500, without this the update would only partially go through
2022-11-02 17:46:07 +00:00
Billy Laws
33f16ca26e
Handle unmapped blocks in CachedMappedBufferView
2022-11-02 17:46:07 +00:00
Billy Laws
5c0e4a839d
Fix SW BC2 decoding pitch
2022-11-02 17:46:07 +00:00
Billy Laws
60863fa162
Make viewports fallback to viewport 0 when their dimensions are invalid
...
OpenGL games use a zero width/height for viewports 1-15 when they're unused
2022-11-02 17:46:07 +00:00
Billy Laws
586f872655
Update indexed quad conversion for new API
2022-11-02 17:46:07 +00:00
Billy Laws
498b4966d3
Avoid crashing on unmapped buffers
...
Just log a warning instead
2022-11-02 17:46:07 +00:00
Billy Laws
9f2b20443b
Implement Maxwell3D draws
2022-11-02 17:46:07 +00:00
Billy Laws
5020478ace
Always rebind pipeline if it has changed from the previous draw
2022-11-02 17:46:07 +00:00
Billy Laws
af1b4ca4f8
Skip clears if attachments are invalid
2022-11-02 17:46:07 +00:00
Billy Laws
01a5e95ce1
Implement non-indexed quad conversion support in new GPU
...
Uses memory::Buffer directly to allow for cleaner recreation and allow for removing host-only buffers from Buffer in the future.
2022-11-02 17:46:07 +00:00
Billy Laws
d42814bdc1
Add callback for when non-Maxwell3D engines alter pipeline state
...
This is required so that Maxwell3D knows to restore all dynamic state before the next draw
2022-11-02 17:46:07 +00:00
Billy Laws
7133c5d6b3
Drop exclusiveSubpass in favour of only ending RPs when attachments change
...
Significantly helps Mali performance by avoiding creating an excessive number of RPs.
2022-11-02 17:46:07 +00:00
Billy Laws
a3f38c0cf7
Add perfetto tracepoints to async record
2022-11-02 17:46:07 +00:00
Billy Laws
6dfef095e8
Up default record slot count to 6
2022-11-02 17:46:07 +00:00
Billy Laws
7d3a117a6f
Use a spinlock for descriptor set allocator
2022-11-02 17:46:07 +00:00
Billy Laws
78ddd03d1f
Mark newly allocated descriptor slots as active
2022-11-02 17:46:07 +00:00
Billy Laws
0867c593be
Support binding pipelines in state updater
2022-11-02 17:46:07 +00:00
Billy Laws
f42a0df72c
Use ctSelect register for colour targets and impl null color attachments
...
Some games have invalid colour attachments sandwiched inbetween valid ones, these need to be skipped in Vulkan with UNUSED_ATTACHMENT
2022-11-02 17:46:07 +00:00
Billy Laws
38aad21d29
Share single flag variable for Maxwell3D batch draw/constant buffer update
...
Slightly cheaper
2022-11-02 17:46:07 +00:00
Billy Laws
bd7eee8e2b
Optimise GPFIFO command processing
...
GPFIFO code is very high throughput due to the sheer number of commands used for rendering. Adjust some types and switch to a if statement with hints to slightly increase processing speed.
2022-11-02 17:46:07 +00:00
Billy Laws
2cdf6c1fe6
Add branch hint attributes to a couple branches
2022-11-02 17:46:07 +00:00
Billy Laws
b310b99bdc
Handle unmapped ranges in TranslateRange
2022-11-02 17:46:07 +00:00
Billy Laws
acfa58ea8c
State uopdater MERGEBACK desC
2022-11-02 17:46:07 +00:00
Billy Laws
68b6b20f78
Bunch of cleanup/bugfixes for initial pipeline desc set impl
...
Cleans up code slightly, fixes keeping track of per-stage descriptor counts and fixes storage buffer caching + more random stuff.
2022-11-02 17:46:07 +00:00
Billy Laws
eb4a9bab11
Mark freshly allocated descriptor slots as active
2022-11-02 17:46:07 +00:00
Billy Laws
f3184cdff1
Reorder active descriptor set slots to end of list
...
Speeds up allocations by significantly reducing the number of needed atomic ops per alloc. Could be optimised further in the future if needed.
2022-11-02 17:46:07 +00:00
Billy Laws
128b68d8b2
Avoid resetting command buffers manually it's implicit
...
Somewhat costly on adreno, and with the one time submit flag the reset is implicit for the next beginCommandBuffers call.
2022-11-02 17:46:07 +00:00