Commit graph

216 commits

Author SHA1 Message Date
sunshineinabox
09b8095584 Avoid changing feedback loop aspect if extension is not supported prevents failed pipeline compiles (or seemingly incompatible) 2024-09-01 19:21:44 -07:00
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
07f80bdbb7 Resolve some pipeline creation issue when extended dynamic states are not supported 2024-09-01 16:41:36 -07:00
sunshineinabox
3e5b946289
Merge branch 'master' into MoreDynamicStatesPartOne 2024-09-01 14:54:00 -07:00
riperiperi
398fa1c238
Vulkan: Update Silk.NET to 2.21 (#7266)
* Update Silk.NET version

* fix: add MoltenVK resolver workaround

fix: add MoltenVK resolver workaround

* Cleanup

* Readonly ref warnings

* Remove driver id todo
2024-09-01 17:33:11 -03:00
gdkchan
460f9faf4e
Fix NRE when using buffer image array (#7159) 2024-08-21 00:49:17 +01:00
sunshineinabox
674288a71f Avoid creating pipelines for each topology. 2024-08-12 22:09:09 -07:00
sunshineinabox
2d1af4ddb4 Set a default topology state that can be overwritten later if needed. 2024-08-12 20:57:08 -07:00
sunshineinabox
1a43536092 LogicOps 2024-08-11 19:54:52 -07:00
sunshineinabox
49494b5b2d Some more default values 2024-08-10 17:16:48 -07:00
sunshineinabox
d6f05044ea Set stride to 0 if Vertex Input dynamic state is enabled 2024-08-10 16:49:05 -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
6aa30b24ba Actually change what is being passed to HwCapabilities instead of just disabling the feature. 2024-08-06 08:15:17 -07:00
sunshineinabox
53ca3b53b6 Exclude Patch Control Points dynamic state at this time 2024-08-05 23:18:28 -07:00
sunshineinabox
482b960740 More changes to be inline with spec 2024-08-04 20:53:54 -07:00
sunshineinabox
af9de85a1b Origin of crash? 2024-08-04 20:34:49 -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
jhorv
59ddb26628
replace ByteMemoryPool usage in Ryujinx.Graphics (#7129)
* chore: replace `ByteMemoryPool` usage with `MemoryOwner<byte>`

* refactor: `PixelConverter.ConvertR4G4ToR4G4B4A4()` - rename old `outputSpan` to `outputSpanUInt16`, reuse same output `Span<byte>` as newly-freed name `outputSpan`

* eliminate temporary buffer allocations

* chore, perf: use MemoryOwner<byte> instead of IMemoryOwner<byte>
2024-08-03 19:50:53 +01:00
sunshineinabox
59ef2ac799 Accidental change 2024-08-02 18:17:28 -07:00
sunshineinabox
ce450dc08e Invert logic to only set flags dirty if those are supported. 2024-08-02 07:27:44 -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
9b02fd6dc0 Conver to TopologyClass from Vulkan Topology 2024-08-01 08:19:11 -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
38c9ec925c Whitespace fix 2024-07-31 18:22:29 -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
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