Commit graph

233 commits

Author SHA1 Message Date
sunshineinabox
7b480edf86
Merge branch 'master' into MoreDynamicStatesPartOne 2024-07-31 17:17:24 -07:00
sunshineinabox
da11dc1288 Only pass Tesselation state create info if dynamic state is not supported 2024-07-31 17:12:57 -07:00
sunshineinabox
693f268090 Accidental change 2024-07-31 08:18:58 -07:00
sunshineinabox
fb964b514c Do not set patch control points dynamic state if there is no tessalation control shader. Thank you riperiperi 2024-07-31 08:14:26 -07:00
sunshineinabox
1b9e42bdb4 Should not just check for extension. This is more correct. 2024-07-30 18:17:49 -07:00
riperiperi
698e36bbd2
Vulkan: Force topology to PatchList for Tessellation (#7102)
Vulkan spec states that input topology should always be PatchList when a tessellation pipeline is present. The AMD GPU on windows crashes so hard it BSODs the machine if this isn't the case, so it's forced here just in case.

I'm not sure what providing a different topology here would even do, as you'd think it would always be a patch list input.
2024-07-30 21:48:30 -03:00
sunshineinabox
7396c05b35 Resolve crash 2024-07-29 20:32:52 -07:00
riperiperi
ccd330ba0f
Vulkan: Add missing barriers for texture to buffer copy (#7092)
This barrier has always been missing, but it only became apparent when #7012 merged.

I also added some barriers in case the target buffer used here is used by other commands, though right now it isn't.

Fixes a regression where water would turn white on AMD GPUs with the proprietary driver. May fix other issues on this driver.
2024-07-25 16:34:30 -03:00
sunshineinabox
e7a4299400 Minor change 2024-07-23 22:09:56 -07:00
sunshineinabox
ea44670330 Set logicOp and DepthCompareOp only if enabled 2024-07-23 22:03:47 -07:00
sunshineinabox
2cba50a9ed Move TopologyClass conversoin to EnumConversion.cs 2024-07-23 21:54:01 -07:00
sunshineinabox
b66f6ce673 Resolve some validation errors 2024-07-23 20:58:47 -07:00
sunshineinabox
a5052013f3 Fix some conditions 2024-07-23 20:25:23 -07:00
sunshineinabox
7610236816 Resolve merge error 2024-07-19 17:36:29 -07:00
sunshineinabox
afe4d581ee
Merge branch 'master' into MoreDynamicStatesPartOne 2024-07-18 07:32:07 -07:00
riperiperi
1a919e99b2
Vulkan: Defer guest barriers, and improve image barrier timings (#7012)
* More guarantees for buffer correct placement, defer guest requested buffers

* Split RP on indirect barrier rn

* Better handling for feedback loops.

* Qualcomm barriers suck too

* Fix condition

* Remove unused field

* Allow render pass barriers on turnip for now
2024-07-17 20:21:32 -03:00
Isaac Marovitz
344f4f52c1
Remove CommandBufferScoped Dependencies (#6958) 2024-07-16 17:01:06 -03:00
MutantAura
eb212aa91b
misc: Re-order and manually update DriverID to name. (#7027)
* Re-order and update DriverID -> Name.

* Fix whitespace
2024-07-15 19:27:59 -03:00
gdkchan
07435ad844
Use draw clear on Adreno, instead of vkCmdClearAttachments (#7013)
* Use draw clear on Adreno, instead of vkCmdClearAttachments

* Fix GTX TITAN detection
2024-07-10 17:52:45 -03:00
gdkchan
1668ba913f
Force dynamic state update after rasterizer discard disable (#7007) 2024-07-09 23:31:01 -03:00
gdkchan
a830eb666b
Disallow concurrent fence waits on Adreno (#7001)
* Disallow concurrent fence waits on Adreno

* Ensure locks are released if exceptions are thrown
2024-07-07 19:33:28 -03:00
gdkchan
cfc75d7e78
Disable descriptor set template updates for buffer textures on Adreno (#7002)
* Do not use template updates for buffer textures and buffer images

* No need to do it for images

* Simply buffer texture existence check

* Pipeline is now unused on DescriptorSetUpdater
2024-07-07 19:19:55 -03:00
gdkchan
c525d7d9a9
Force Vulkan swapchain re-creation when window size changes (#7003) 2024-07-07 19:02:11 -03:00
sunshineinabox
feb67dede6 Avoid setting depth bias state when not needed. 2024-07-04 23:38:21 -07:00
sunshineinabox
086656b736 Missed changes during merge 2024-07-04 23:03:22 -07:00
sunshineinabox
1d5a449931
Merge branch 'master' into MoreDynamicStatesPartOne 2024-07-04 22:54:17 -07:00
sunshineinabox
1a0a351a15
Resolve some Vulkan validation errors (#6915)
* Fix some validation errors

* Whitespace correction

* Resolve some runtime validation errors.

* Whitespace

* Properly fix usage realted validation error by setting Extended Usage image creation flag.

* Only if supported

* Remove checking extension for features that are core functionality of Vulkan 1.2
2024-06-26 09:21:44 -03:00
sunshineinabox
933c9c89ff Resolve logic op validation error only primitive topology pending 2024-06-03 21:10:13 -07:00
sunshineinabox
266649929f Clean up for some clarity and attempt to resolve some validation errors. 2024-06-02 21:00:18 -07:00
gdkchan
c0f2491eae
Vulkan separate descriptor set fixes (#6895)
* Ensure descriptor sets are only re-used when all command buffers using it have completed

* Fix some SPIR-V capabilities

* Set update after bind flag if we exceed limits

* Simpler fix for Intel

* Format whitespace

* Make struct readonly

* Add barriers for extra set arrays too
2024-06-02 22:40:28 -03:00
sunshineinabox
d7c6474729
GPU: Remove unused dynamic state and pipeline settings (#6796)
* Dynamic state for Depth Bounds should not be passed to PipelineDynamicStateCreateInfo as the command to set them is never called.

Do not pass pointer to viewport and scissor as those dynamic states should be supported on all devices.

Same as above for DepthBias values.

* Code Review Suggestion

* Pipeline derivation is not implemented and is not suggested.

* Depth Bounds are not used.
2024-06-02 22:32:10 -03:00
jhorv
1ecc8fbc3b
New pooled memory types (#6821)
* feat: add new types MemoryOwner and SpanOwner

* use SpanOwner instead of new array allocation

* change for loop condition to `fences.Length` instead of `count` to elide Span boundary checks on `fences`
2024-06-02 22:24:14 -03:00
sunshineinabox
966c5d463c Sleep Deprivation 2024-05-30 07:52:05 -07:00
sunshineinabox
985c648860 Bring up pipeline converter inline with dynamic states. 2024-05-30 07:52:05 -07:00
sunshineinabox
16a4374ae8 Fix whitespace 2024-05-29 10:16:14 -07:00
sunshineinabox
d8d33417e9 Fix oversight with implementing Primitive Topology Dynamic State 2024-05-29 10:14:12 -07:00
sunshineinabox
e6492f8e78 Reduce unneeded state changes 2024-05-29 09:45:56 -07:00
sunshineinabox
5c65880ec0 Whitespaces 2024-05-29 09:16:44 -07:00
sunshineinabox
88786ba29c Missed change 2024-05-29 08:44:08 -07:00
sunshineinabox
efdcce4415 Only enable enable LogicOp dynamic state and logic op if its enabled. 2024-05-29 08:36:24 -07:00
sunshineinabox
424166acd8 Oversight 2024-05-28 13:01:08 -07:00
sunshineinabox
3683ee5c29 Follow namign rules. 2024-05-27 23:25:59 -07:00
sunshineinabox
4a3932ed54 Use dictionary instead for clarity and rework some logic. 2024-05-27 23:11:39 -07:00
sunshineinabox
7ac2cd44d0 Attempt proper VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY implementation 2024-05-27 23:11:39 -07:00
sunshineinabox
4b504243d8 Consolidate some checks 2024-05-27 23:11:39 -07:00
sunshineinabox
1adae7794a Small changes 2024-05-27 23:11:39 -07:00
sunshineinabox
ba56c1d3b3 Missed line 2024-05-27 23:11:39 -07:00
sunshineinabox
f43413f374 Revert Silk.NET to main branch version.
Remove VK_EXT_extended_dynamic_state3 functionality until later PR
2024-05-27 23:11:39 -07:00
sunshineinabox
fb4ef3347a Rebase 2024-05-27 23:11:39 -07:00
sunshineinabox
0000a7ac9c Rebased 2024-05-27 23:11:39 -07:00
sunshineinabox
74a1ab031d Attempt to resolve more validation errors. 2024-05-27 23:11:39 -07:00
sunshineinabox
89dee194d2 Use dynamic state for primitive topology if dynamicPrimitiveTopologyUnrestricted is supported. 2024-05-27 23:11:39 -07:00
sunshineinabox
dcc999c798 Set dirty flag even when value has not changed. 2024-05-27 23:11:39 -07:00
sunshineinabox
7d7b1923aa Resolve
VUID-vkCmdSetPatchControlPointsEXT-None-09422(ERROR / SPEC): msgNum: -1559328192 - Validation Error: [ VUID-vkCmdSetPatchControlPointsEXT-None-09422 ] Object 0: handle = 0x25f0eb40170, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0xa30e8a40 | vkCmdSetPatchControlPointsEXT():   extendedDynamicState2PatchControlPoints or shaderObject feature is not enabled. The Vulkan spec states: At least one of the following must be true: The extendedDynamicState2PatchControlPoints feature is enabled The shaderObject feature is enabled (https://vulkan.lunarg.com/doc/view/1.3.283.0/windows/1.3-extensions/vkspec.html#VUID-vkCmdSetPatchControlPointsEXT-None-09422)
    Objects: 1
        [0] 0x25f0eb40170, type: 6, name: NULL
2024-05-27 23:11:39 -07:00
sunshineinabox
de5cb66caf Resolve below validation error
VUID-vkCmdDraw-logicOp-04878(ERROR / SPEC): msgNum: 282117419 - Validation Error: [ VUID-vkCmdDraw-logicOp-04878 ] Object 0: handle = 0x2db247c7370, type = VK_OBJECT_TYPE_COMMAND_BUFFER; Object 1: handle = 0x81dc7e0000000305, type = VK_OBJECT_TYPE_PIPELINE; | MessageID = 0x10d0c52b | vkCmdDraw():  VK_DYNAMIC_STATE_LOGIC_OP_EXT state not set for this command buffer. The Vulkan spec states: If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled then vkCmdSetLogicOpEXT must have been called in the current command buffer prior to this drawing command and the logicOp must be a valid VkLogicOp value (https://vulkan.lunarg.com/doc/view/1.3.283.0/windows/1.3-extensions/vkspec.html#VUID-vkCmdDraw-logicOp-04878)
    Objects: 2
        [0] 0x2db247c7370, type: 6, name: NULL
        [1] 0x81dc7e0000000305, type: 19, name: NULL
2024-05-27 23:11:39 -07:00
sunshineinabox
76c9c2ac8c Resolve the below validation errors.
VUID-VkPipelineDynamicStateCreateInfo-pDynamicStates-01442(ERROR / SPEC): msgNum: 1313692360 - Validation Error: [ VUID-VkPipelineDynamicStateCreateInfo-pDynamicStates-01442 ] | MessageID = 0x4e4d5ac8 | vkCreateGraphicsPipelines(): pCreateInfos[0].pDynamicState has VK_DYNAMIC_STATE_VIEWPORT at pDynamicStates[0] and pDynamicStates[28]. The Vulkan spec states: Each element of pDynamicStates must be unique (https://vulkan.lunarg.com/doc/view/1.3.283.0/windows/1.3-extensions/vkspec.html#VUID-VkPipelineDynamicStateCreateInfo-pDynamicStates-01442)
    Objects: 0
VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04132(ERROR / SPEC): msgNum: -206448348 - Validation Error: [ VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04132 ] | MessageID = 0xf3b1d924 | vkCreateGraphicsPipelines(): pCreateInfos[0].pDynamicState pDynamicStates[15] is VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and pDynamicStates[28] is VK_DYNAMIC_STATE_VIEWPORT. The Vulkan spec states: If the pipeline requires pre-rasterization shader state, and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT is included in the pDynamicStates array then VK_DYNAMIC_STATE_VIEWPORT must not be present (https://vulkan.lunarg.com/doc/view/1.3.283.0/windows/1.3-extensions/vkspec.html#VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04132)
    Objects: 0

VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04133(ERROR / SPEC): msgNum: -858144982 - Validation Error: [ VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04133 ] | MessageID = 0xccd9bf2a | vkCreateGraphicsPipelines(): pCreateInfos[0].pDynamicState pDynamicStates[16] is VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and pDynamicStates[1] is VK_DYNAMIC_STATE_SCISSOR. The Vulkan spec states: If the pipeline requires pre-rasterization shader state, and VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT is included in the pDynamicStates array then VK_DYNAMIC_STATE_SCISSOR must not be present (https://vulkan.lunarg.com/doc/view/1.3.283.0/windows/1.3-extensions/vkspec.html#VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04133)
    Objects: 0
2024-05-27 23:11:39 -07:00
sunshineinabox
f30a8f1580 Whitespace 2024-05-27 23:11:39 -07:00
sunshineinabox
6c6cd8927a Combine compatibility check. 2024-05-27 23:11:39 -07:00
sunshineinabox
8bb369f37d Missed enabling Dynamic State 2024-05-27 23:11:39 -07:00
sunshineinabox
5d5f482d57 Enable VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT 2024-05-27 23:11:39 -07:00
sunshineinabox
863674768d Some more small changes 2024-05-27 23:11:39 -07:00
sunshineinabox
ab7f379e11 Formatting 2024-05-27 23:11:39 -07:00
sunshineinabox
ecadc6a4f9 Implement VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT 2024-05-27 23:11:39 -07:00
sunshineinabox
3fe159f4dd Small fix 2024-05-27 23:11:39 -07:00
sunshineinabox
d4e4ddca91 Fix formatting 2024-05-27 23:11:39 -07:00
sunshineinabox
2483b1a52a Enable VK_EXT_extended_dynamic_state3 this time without seizures. 2024-05-27 23:11:39 -07:00
sunshineinabox
5bf0937be1 Reverted previous commit as it caused mass seizures, disable for now. 2024-05-27 23:11:39 -07:00
sunshineinabox
0f2ed45f96 Revert "Enable the extension..."
This reverts commit 8bbdaab9a1.
2024-05-27 23:11:39 -07:00
sunshineinabox
404f4be9e7 Enable the extension... 2024-05-27 23:11:39 -07:00
sunshineinabox
fd9b4cc10f More comments and formatting fixes 2024-05-27 23:11:39 -07:00
sunshineinabox
eeecd894b9 Add Some Comments 2024-05-27 23:11:39 -07:00
sunshineinabox
767abfe500 Avoid unncessary state changes? 2024-05-27 23:11:39 -07:00
sunshineinabox
5f2d924bac Misc 2024-05-27 23:11:39 -07:00
sunshineinabox
19db5a0ce2 Implement VK_EXT_extended_dynamic_state3 2024-05-27 23:11:39 -07:00
sunshineinabox
66b6b46716 Use device features to enable to disable LogicOp Extended Dynamic State
Improve index counting
2024-05-27 23:11:39 -07:00
sunshineinabox
0049585a36 Enable if supported. 2024-05-27 23:11:39 -07:00
sunshineinabox
c728a3b6a4 ExtDynamicState2 2024-05-27 23:11:39 -07:00
sunshineinabox
cee5ae5551 Some missed values 2024-05-27 23:11:39 -07:00
sunshineinabox
eaedc3ec9e Use Viewport and Scissor with count.
Topology Dynamic State is not working as intended. Need to add check to set correct Topology class. Circle back to this later. For now revert it.

Some minor fixes.
2024-05-27 23:11:39 -07:00
sunshineinabox
e7fbc9a1be Use Correct namespace 2024-05-27 23:11:39 -07:00
sunshineinabox
506f25054d LineWidth is not supported on MoltenVK 2024-05-27 23:11:39 -07:00
sunshineinabox
1befb5bd8f Check if widelines is supported. 2024-05-27 23:11:39 -07:00
sunshineinabox
5894ef043b No need to by reference 2024-05-27 23:11:38 -07:00
sunshineinabox
07ac4192cd Resolve MoltenVK (future version) warning.
Flags are not set for deriving pipelines so remove unnecessary basePipelineIndex value.
2024-05-27 23:11:38 -07:00
sunshineinabox
24e6105e6f Primitive Topolgy DynamicState maybe causing performance degredation. 2024-05-27 23:11:38 -07:00
sunshineinabox
5f02e28017 More Dynamic States 2024-05-27 23:11:38 -07:00
sunshineinabox
4933888a9d Make StencilOp, FrontFace and CullMode Dynamic States. Also prevent Vertex Input Binding Stride dynamic state from enabling with MoltenVK. 2024-05-27 23:11:38 -07:00
sunshineinabox
e6e5829abf Dynamic state for Depth Bounds should not be passed to PipelineDynamicStateCreateInfo as the command to set them is never called.
Do not pass pointer to viewport and scissor as those dynamic states should be supported on all devices.

Same as above for DepthBias values.
2024-05-27 23:11:38 -07:00
gdkchan
53d096e392
Allow texture arrays to use separate descriptor sets on Vulkan (#6870)
* Report base and extra sets from the backend

* Pass texture set index everywhere

* Key textures using set and binding (rather than just binding)

* Start using extra sets for array textures

* Shader cache version bump

* Separate new commands, some PR feedback

* Introduce new manual descriptor set reservation method that prevents it from being used by something else while owned by an array

* Move bind extra sets logic to new method

* Should only use separate array is MaximumExtraSets is not zero

* Format whitespace
2024-05-26 13:30:19 -03:00
Piplup
c98b7fc702
Workaround bug on logic op with float framebuffer (#6858)
* intel workaround

built on top of the amd workaround

* forgot to update the note

* Logic Change

Enabled workaround for all vendors that aren't nvidia

* Applied Suggestions
2024-05-23 22:57:26 -03:00
gdkchan
e65effcb05
Workaround AMD bug on logic op with float framebuffer (#6852)
* Workaround AMD bug on logic op with float framebuffer

* Format whitespace

* Update comment
2024-05-23 01:05:32 -03:00
riperiperi
eb1ce41b00
GPU: Migrate buffers on GPU project, pre-emptively flush device local mappings (#6794)
* GPU: Migrate buffers on GPU project, pre-emptively flush device local mappings

Essentially retreading #4540, but it's on the GPU project now instead of the backend. This allows us to have a lot more control + knowledge of where the buffer backing has been changed and allows us to pre-emptively flush pages to host memory for quicker readback. It will allow us to do other stuff in the future, but we'll get there when we get there.

Performance greatly improved in Hyrule Warriors: Age of Calamity. Performance notably improved in TOTK (average). Performance for BOTW restored to how it was before #4911, perhaps a bit better.

- Rewrites a bunch of buffer migration stuff. Might want to tighten up how dispose stuff works.
- Fixed an issue where the copy for texture pre-flush would happen _after_ the syncpoint.

TODO: remove a page from pre-flush if it isn't flushed after a certain number of copies.

* Add copy deactivation

* Fix dependent virtual buffers

* Remove logging

* Fix format issues (maybe)

* Vulkan: Remove backing swap

* Add explicit memory access types for most buffers

* Fix typo

* Add device local force expiry, change buffer inheritance behaviour

* General cleanup, OGL fix

* BufferPreFlush comments

* BufferBackingState comments

* Add an extra precaution to BufferMigration

This is very unlikely, but it's important to cover loose ends like this.

* Address some feedback

* Docs
2024-05-19 16:53:37 -03:00
gdkchan
3a3b51893e
Add support for bindless textures from storage buffer on Vulkan (#6721)
* Halve primitive ID when converting quads to triangles

* Shader cache version bump

* Add support for bindless textures from storage buffer on Vulkan
2024-05-14 16:47:16 +02:00
gdkchan
c6f8bfed90
Add support for bindless textures from shader input (vertex buffer) on Vulkan (#6577)
* Add support for bindless textures from shader input (vertex buffer)

* Shader cache version bump

* Format whitespace

* Remove cache entries on pool removal, disable for OpenGL

* PR feedback
2024-04-22 15:05:55 -03:00
Marco Carvalho
99f46e22e2
Do not compare Span<T> to 'null' or 'default' (#6683) 2024-04-19 09:21:21 -03:00
jhorv
268c9aecf8
Texture loading: reduce memory allocations (#6623)
* rebase

* add methods Ryyjinx.Common EmbeddedResources and SteamUtils

* GAL changes - change SetData() methods and ThreadedTexture commands to use IMemoryOwner<byte> instead of SpanOrArray<byte>

* Ryujinx.Graphics.Texture: change texture conversion methods to return IMemoryOwner<byte> and allocate from ByteMemoryPool

* Ryujinx.Graphics.OpenGL: update ITexture and Texture-like types with SetData() methods to take IMemoryOwner<byte> instead of SpanOrArray<byte>

* Ryujinx.Graphics.Vulkan: update ITexture and Texture-like types with SetData() methods to take IMemoryOwner<byte> instead of SpanOrArray<byte>

* Ryujinx.Graphics.Gpu: update ITexture and Texture-like types with SetData() methods to take IMemoryOwner<byte> instead of SpanOrArray<byte>

* Remove now-unused SpanOrArray<T>

* post-rebase cleanup

* PixelConverter: remove unsafe modifier on safe methods, and remove one unnecessary cast

* use ByteMemoryPool.Rent() in GetWritableRegion() impls

* fix formatting, rename `ReadRentedMemory()` to `ReadFileToRentedMemory()``

* Texture.ConvertToHostCompatibleFormat(): dispose of `result` in Astc decode branch
2024-04-14 17:06:14 -03:00
gdkchan
e916662b0f
Account for swapchain image count change after re-creation (#6652) 2024-04-11 17:24:19 -03:00
gdkchan
3e6e0e4afa
Add support for large sampler arrays on Vulkan (#6489)
* Add support for large sampler arrays on Vulkan

* Shader cache version bump

* Format whitespace

* Move DescriptorSetManager to PipelineLayoutCacheEntry to allow different pool sizes per layout

* Handle array textures with different types on the same buffer

* Somewhat better caching system

* Avoid useless buffer data modification checks

* Move redundant bindings update checking to the backend

* Fix an issue where texture arrays would get the same bindings across stages on Vulkan

* Backport some fixes from part 2

* Fix typo

* PR feedback

* Format whitespace

* Add some missing XML docs
2024-04-07 18:25:55 -03:00
gdkchan
3be616207d
Vulkan: Fix swapchain image view leak (#6509) 2024-04-06 13:38:52 -03:00
gdkchan
791bf22109
Vulkan: Skip draws when patches topology is used without a tessellation shader (#6508) 2024-04-06 13:25:51 -03:00