Commit graph

5310 commits

Author SHA1 Message Date
ReinUsesLisp
2c81ad8311 glasm: Initial GLASM compute implementation for testing 2021-07-22 21:51:30 -04:00
ReinUsesLisp
36f1586267 vk_scheduler: Use locks instead of SPSC a queue
This tries to fix a data race where we'd wait forever for the GPU.
2021-07-22 21:51:30 -04:00
ReinUsesLisp
56c47951c5 vk_query_cache: Wait before reading queries 2021-07-22 21:51:30 -04:00
ReinUsesLisp
a515036604 vk_master_semaphore: Use fetch_add to increase master semaphore tick 2021-07-22 21:51:30 -04:00
ReinUsesLisp
bfa47539f6 gl_shader_cache: Remove code unintentionally committed 2021-07-22 21:51:30 -04:00
ReinUsesLisp
bed090807a Move SPIR-V emission functions to their own header 2021-07-22 21:51:30 -04:00
ReinUsesLisp
d621e96d0d shader: Initial OpenGL implementation 2021-07-22 21:51:30 -04:00
ReinUsesLisp
48a17298d7 spirv: Support OpenGL uniform buffers and change bindings 2021-07-22 21:51:29 -04:00
FernandoS27
c49d56c931 shader: Address feedback 2021-07-22 21:51:29 -04:00
FernandoS27
b541f5e5e3 shader: Implement VertexA stage 2021-07-22 21:51:29 -04:00
ReinUsesLisp
f4b82b8dd7 vk_graphics_pipeline: Fix texture buffer descriptors 2021-07-22 21:51:29 -04:00
ReinUsesLisp
53acdda772 vk_scheduler: Allow command submission on worker thread
This changes how Scheduler::Flush works. It queues the current command
buffer to be sent to the GPU but does not do it immediately. The Vulkan
worker thread takes care of that. Users will have to use
Scheduler::Flush + Scheduler::WaitWorker to get the previous behavior.

Scheduler::Finish is unchanged.

To avoid waiting on work never queued, Scheduler::Wait sends the current
command buffer if that's what the caller wants to wait.
2021-07-22 21:51:29 -04:00
ReinUsesLisp
c5425b38c1 vk_compute_pass: Fix -Wshadow warning 2021-07-22 21:51:29 -04:00
ReinUsesLisp
025b20f96a shader: Move pipeline cache logic to separate files
Move code to separate files to be able to reuse it from OpenGL. This
greatly simplifies the pipeline cache logic on Vulkan.

Transform feedback state is not yet abstracted and it's still
intrusively stored inside vk_pipeline_cache. It will be moved when
needed on OpenGL.
2021-07-22 21:51:29 -04:00
ReinUsesLisp
ac8835659e vulkan: Defer descriptor set work to the Vulkan thread
Move descriptor lookup and update code to a separate thread. Delaying
this removes work from the main GPU thread and allows creating
descriptor layouts on another thread. This reduces a bit the workload
of the main thread when new pipelines are encountered.
2021-07-22 21:51:29 -04:00
ReinUsesLisp
2f3c3dfc10 vulkan: Rework descriptor allocation algorithm
Create multiple descriptor pools on demand. There are some degrees of
freedom what is considered a compatible pool to avoid wasting large
pools on small descriptors.
2021-07-22 21:51:29 -04:00
ReinUsesLisp
5ed871398b vk_graphics_pipeline: Generate specialized pipeline config functions and improve code 2021-07-22 21:51:29 -04:00
ReinUsesLisp
f4ace63957 shader: Accelerate pipeline transitions and use dirty flags for shaders 2021-07-22 21:51:29 -04:00
ReinUsesLisp
8fda599a31 vk_compute_pipeline: Fix index comparison oversight on compute texture buffers 2021-07-22 21:51:29 -04:00
ReinUsesLisp
0c0ee9d897 vulkan_device: Require shaderClipDistance and shaderCullDistance features 2021-07-22 21:51:29 -04:00
ReinUsesLisp
5b1b06f11e vk_graphics_pipeline: Guard against non-tessellation pipelines using patches 2021-07-22 21:51:29 -04:00
Rodrigo Locatti
2dc86372c7 shader: Fix bugs and build issues on GCC 2021-07-22 21:51:29 -04:00
ReinUsesLisp
7a1f296cda shader: Fix render targets with null attachments 2021-07-22 21:51:29 -04:00
ReinUsesLisp
0ace34575c shader: Require dual source blending 2021-07-22 21:51:29 -04:00
ReinUsesLisp
d10cf55353 shader: Implement indexed textures 2021-07-22 21:51:28 -04:00
ReinUsesLisp
050e81500c shader: Move microinstruction header to the value header 2021-07-22 21:51:28 -04:00
ReinUsesLisp
dd860b684c shader: Implement D3D samplers 2021-07-22 21:51:28 -04:00
FernandoS27
f18a6dd1bd shader: Implement SR_Y_DIRECTION 2021-07-22 21:51:28 -04:00
ReinUsesLisp
95815a3883 shader: Implement PIXLD.MY_INDEX 2021-07-22 21:51:28 -04:00
ReinUsesLisp
e3514bcd6b spirv: Implement ViewportMask with NV_viewport_array2 2021-07-22 21:51:28 -04:00
ReinUsesLisp
183855e396 shader: Implement tessellation shaders, polygon mode and invocation id 2021-07-22 21:51:27 -04:00
lat9nq
7ae3ea6bee vk_pipeline_cache: Silence GCC warnings
Silences `-Werror=missing-field-initializers` due to missing
initializers.
2021-07-22 21:51:27 -04:00
ReinUsesLisp
416e1b7441 spirv: Implement image buffers 2021-07-22 21:51:27 -04:00
ameerj
6c512f4bff spirv: Implement alpha test 2021-07-22 21:51:27 -04:00
ReinUsesLisp
b126987c59 shader: Implement transform feedbacks and define file format 2021-07-22 21:51:27 -04:00
ReinUsesLisp
a83579b50a shader: Implement early Z tests 2021-07-22 21:51:27 -04:00
ReinUsesLisp
fa75b9b062 spirv: Rework storage buffers and shader memory 2021-07-22 21:51:27 -04:00
ReinUsesLisp
f263760c5a shader: Implement geometry shaders 2021-07-22 21:51:27 -04:00
ReinUsesLisp
a33014022e pipeline_helper: Simplify descriptor objects initialization 2021-07-22 21:51:27 -04:00
ameerj
3db2b3effa shader: Implement ATOM/S and RED 2021-07-22 21:51:27 -04:00
ReinUsesLisp
479ca00071 nsight_aftermath_tracker: Report used shaders to Nsight Aftermath 2021-07-22 21:51:27 -04:00
ReinUsesLisp
ab543f1821 spirv: Guard against typeless image reads on unsupported devices 2021-07-22 21:51:27 -04:00
ReinUsesLisp
1030b612a3 vk_rasterizer: Request outside render pass execution context for compute 2021-07-22 21:51:27 -04:00
ReinUsesLisp
e5e79648cf pipeline_helper: Add missing [[maybe_unused]] 2021-07-22 21:51:27 -04:00
ReinUsesLisp
7cb2ab3585 shader: Implement SULD and SUST 2021-07-22 21:51:26 -04:00
lat9nq
5bfcafa0a2 shader: Address feedback + clang format 2021-07-22 21:51:26 -04:00
lat9nq
0bb85f6a75 shader_recompiler,video_core: Cleanup some GCC and Clang errors
Mostly fixing unused *, implicit conversion, braced scalar init,
fpermissive, and some others.

Some Clang errors likely remain in video_core, and std::ranges is still
a pertinent issue in shader_recompiler

shader_recompiler: cmake: Force bracket depth to 1024 on Clang
Increases the maximum fold expression depth

thread_worker: Include condition_variable

Don't use list initializers in control flow

Co-authored-by: ReinUsesLisp <reinuseslisp@airmail.cc>
2021-07-22 21:51:26 -04:00
ReinUsesLisp
e9a91bc5cc shader: Interact texture buffers with buffer cache 2021-07-22 21:51:26 -04:00
ReinUsesLisp
1f3eb601ac shader: Implement texture buffers 2021-07-22 21:51:26 -04:00
ReinUsesLisp
bfeeb23ddc vk_pipeline_cache: Fix num of pipeline workers on weird platforms 2021-07-22 21:51:26 -04:00