Commit graph

73 commits

Author SHA1 Message Date
sunshineinabox
3f900e6fa0 Resolve missed changes 2024-09-01 18:47:06 -07:00
sunshineinabox
6464f97973
Merge branch 'master' into MoreDynamicStatesPartOne 2024-09-01 18:43:34 -07:00
sunshineinabox
2298362e7f Resolve remaining pipeline creation errors when extended pipeline states extension not supported 2024-09-01 18:17:19 -07:00
riperiperi
ca59c3f499
Vulkan: Feedback loop detection and barriers (#7226)
* Vulkan: Feedback loop improvements

This PR allows the Vulkan backend to detect attachment feedback loops. These are currently used in the following ways:

- Partial use of VK_EXT_attachment_feedback_loop_layout
  - All renderable textures have AttachmentFeedbackLoopBitExt
  - Compile pipelines with Color/DepthStencil feedback loop flags when present
- Support using FragmentBarrier for feedback loops (fixes regressions from https://github.com/Ryujinx/Ryujinx/pull/7012 )

TODO:
- AMD GPUs may need layout transitions for it to properly allow textures to be used in feedback loops.
- Use dynamic state for feedback loops. The background pipeline will always miss since feedback loop state isn't known on the GPU project.
- How is the barrier dependency flag used? (DXVK just ignores it, there's no vulkan validation...)
- Improve subpass dependencies to fix validation errors

* Mark field readonly

* Add feedback loop dynamic state

* fix: add MoltenVK resolver workaround

fix: add MoltenVK resolver workaround

* Formatting

* Fix more complaints

* RADV dcc workaround

* Use dynamic state properly, cleanup.

* Use aspects flags in more places
2024-09-01 21:28:16 -03:00
sunshineinabox
49494b5b2d Some more default values 2024-08-10 17:16:48 -07:00
sunshineinabox
42c47e408d If dynamic states are enabled use default values for calculation uuid 2024-08-10 16:35:30 -07:00
sunshineinabox
af31a14c77 Spec states it CAN be null 2024-08-06 23:24:34 -07:00
sunshineinabox
482b960740 More changes to be inline with spec 2024-08-04 20:53:54 -07:00
sunshineinabox
f15b6c85f6 According to spec there is no need to do this as it should automatically be not set when not needed 2024-08-04 16:16:27 -07:00
sunshineinabox
c53f58a4a9 Resolve issue with primitive toplogy
Primitive Restart Enable should depend on Extended dynamic state 2 extension not 1

Resolve Primitive restart enable

Fix MoltenVK crash
2024-08-03 23:24:49 -07:00
sunshineinabox
3b398adbe6 Refactor PipelineUid and pack TopologyClass
Remove basepipelineindex as its extraneous
2024-08-03 19:22:46 -07:00
sunshineinabox
023f3ed44f Resolve build errors 2024-08-01 19:21:32 -07:00
sunshineinabox
fa801ba472 Match other code in project 2024-08-01 19:17:59 -07:00
sunshineinabox
adc7528b54 Why cast when you don't need to cast 2024-07-31 18:56:06 -07:00
sunshineinabox
1bcc9c029a Remove redundant logic, just use max possible dynamic states 2024-07-31 18:51:44 -07:00
sunshineinabox
3f7a3ac558 Adapt changes from #7102 for dynamic states 2024-07-31 18:18:46 -07:00
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
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
sunshineinabox
a5052013f3 Fix some conditions 2024-07-23 20:25:23 -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
933c9c89ff Resolve logic op validation error only primitive topology pending 2024-06-03 21:10:13 -07: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
sunshineinabox
966c5d463c Sleep Deprivation 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
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
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
0000a7ac9c Rebased 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
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
ecadc6a4f9 Implement VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT 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