Commit Graph

16662 Commits

Author SHA1 Message Date
ReinUsesLisp ffdaa42529 glasm: Declare NV_shader_thread_group when needed 2021-07-22 21:51:31 -04:00
ReinUsesLisp f132d214a1 vk_update_descriptor: Properly initialize payload on the update descriptor queue 2021-07-22 21:51:31 -04:00
ReinUsesLisp 03f6d424ce glasm: Rework control flow introducing a syntax list
This commit regresses VertexA shaders, their transformation pass has to
be adapted to the new control flow.
2021-07-22 21:51:31 -04:00
ameerj 8a556b49cf glasm: Implement Storage atomics
StorageAtomicExchangeU64 is failing test seemingly due to failure storing 64-bit
result into the register
2021-07-22 21:51:31 -04:00
ReinUsesLisp 8331e533f4 glasm: Ensure reg alloc order across compilers on GLASM
Use a struct constructor to serialize register allocation arguments to
ensure registers are allocated in the same order regardless of the
compiler used.

The A and B functions can be called in any order when passed as
arguments to "foo":

  foo(A(), B())

But the order is guaranteed for curly-braced constructor calls in
classes:

  Foo{A(), B()}

Use this to get consistent behavior.
2021-07-22 21:51:31 -04:00
ReinUsesLisp d9a11b2388 glasm: Enable unintentionally disabled register aliasing on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp 3e7dbc81f5 glasm: Review all GLASM insts to be aware of register aliasing 2021-07-22 21:51:31 -04:00
ReinUsesLisp 7273fcab95 glasm: Implement shuffle and vote instructions on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp 3e0e8c952d glasm: Add MUFU instructions to GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp 8a77a1426b glasm: Implement IAbs64 and INeg64 on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp cef625a9b2 shader: Add floating-point rounding to I2F 2021-07-22 21:51:31 -04:00
ReinUsesLisp 00a7d4add9 glasm: Properly clamp Fp64 on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp cfff5bad59 glasm: Fix register allocation when moving immediate on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp c5055cade9 glasm: Implement SelectU64 on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp 56b7f92b56 glasm: Fix clamps so the min value has priority on NAN on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp b5b5006016 glasm: Fix moving U64 immediates to registers in GLASM 2021-07-22 21:51:31 -04:00
ameerj 55801889e1 glasm: Implement storage atomic ops 2021-07-22 21:51:31 -04:00
ReinUsesLisp cbac486530 glasm: Add conversion instructions to GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp db3a10b384 glasm: Add fp min/max insts and fix store for fp64 on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp 763b4a8b16 glasm: Add logical instructions on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp 1f320a9d79 glasm: Remove duplicated Fp64 pack instructions on GLASM 2021-07-22 21:51:30 -04:00
ReinUsesLisp 06bd9acf07 glasm: Remove unnecesary new white space on Clamp GLASM 2021-07-22 21:51:30 -04:00
ReinUsesLisp 45be6d11cc glasm: Add floating-point comparisons on GLASM 2021-07-22 21:51:30 -04:00
ameerj fd6393cb14 emit_glasm: Implement more integer alu ops 2021-07-22 21:51:30 -04:00
ameerj c13b6d8f86 glasm: Reimplement bitwise ops and BFI/BFE 2021-07-22 21:51:30 -04:00
ReinUsesLisp fc009ca296 glasm: Initial GLASM fp64 support 2021-07-22 21:51:30 -04:00
ReinUsesLisp 8de3f88656 glasm: Implement GLASM fp16 packing and move bitwise insns 2021-07-22 21:51:30 -04:00
ReinUsesLisp de15d41257 glasm: Remove unused functions left from rebase 2021-07-22 21:51:30 -04:00
ReinUsesLisp 7101c374c7 glasm: Specify namespace when using FormatTo 2021-07-22 21:51:30 -04:00
ReinUsesLisp 8d20355a93 glasm: Implement more GLASM composite instructions 2021-07-22 21:51:30 -04:00
ReinUsesLisp d5c0c34383 vk_pipeline_cache: Enable int8 and int16 types on Vulkan 2021-07-22 21:51:30 -04:00
ReinUsesLisp 04ed27a997 glasm: Make GLASM aware of types 2021-07-22 21:51:30 -04:00
ameerj 94ee083286 glasm: Use CMP.S for Select32
also fixes ADD and SUB to use U modifier
2021-07-22 21:51:30 -04:00
ameerj b27f30fa2e glasm: Implement more logical ops 2021-07-22 21:51:30 -04:00
ameerj 779ff6918b glasm: Implement BFI, BFE
Along with implementations of common instructions along the way
2021-07-22 21:51:30 -04:00
ReinUsesLisp 9d7312e780 glasm: Use BitField instead of C bitfields 2021-07-22 21:51:30 -04:00
ReinUsesLisp fdd87ffdb7 glasm: Remove unused argument in identity instructions on GLASM 2021-07-22 21:51:30 -04:00
ReinUsesLisp 33a769ea26 gl_rasterizer: Flush L2 caches before glFlush on GLASM 2021-07-22 21:51:30 -04:00
ReinUsesLisp 826796b51f glasm: Initial GLASM compute implementation for testing 2021-07-22 21:51:30 -04:00
ReinUsesLisp 6c0a696179 glasm: Implement basic GLASM instructions 2021-07-22 21:51:30 -04:00
ReinUsesLisp 03f17ebc43 glasm: Changes to GLASM register allocator and emit context 2021-07-22 21:51:30 -04:00
ReinUsesLisp 99ae172ef2 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 3fca53bce8 vk_query_cache: Wait before reading queries 2021-07-22 21:51:30 -04:00
ReinUsesLisp dbe29b8bb6 vk_master_semaphore: Use fetch_add to increase master semaphore tick 2021-07-22 21:51:30 -04:00
ReinUsesLisp d9b9c10f32 glasm: Add GLASM backend infrastructure 2021-07-22 21:51:30 -04:00
ameerj a739b6933e shader: ISET.X implementation 2021-07-22 21:51:30 -04:00
ReinUsesLisp 947a36e79e gl_shader_cache: Remove code unintentionally committed 2021-07-22 21:51:30 -04:00
ReinUsesLisp 75adb54e79 shader: Fixup SPIR-V emit header namespaces 2021-07-22 21:51:30 -04:00
ReinUsesLisp 055db41f19 Move SPIR-V emission functions to their own header 2021-07-22 21:51:30 -04:00
FernandoS27 007a11014c shader: Optimize NVN Fallthrough 2021-07-22 21:51:30 -04:00
FernandoS27 fb20effc51 shader: Stub SR_AFFINITY 2021-07-22 21:51:30 -04:00
ameerj 455872a4af shader: Implement Int32 SUATOM/SURED 2021-07-22 21:51:30 -04:00
ReinUsesLisp 5ca5988c63 shader: Initial OpenGL implementation 2021-07-22 21:51:30 -04:00
ReinUsesLisp 5ad12292a6 spirv: Be aware of NAN unaware drivers 2021-07-22 21:51:30 -04:00
ReinUsesLisp 21a5bd332c spirv: Add SSBO read fallbacks when no aliasing is available 2021-07-22 21:51:29 -04:00
ReinUsesLisp 1922cbb84c spirv: Add OpKill fallback to demote 2021-07-22 21:51:29 -04:00
ReinUsesLisp d2e6291c0e spirv: Do not enable ShaderLayer
This is enabled by an extension instead of the capability.
2021-07-22 21:51:29 -04:00
ReinUsesLisp b2fe282ad3 spirv: Enable DemoteToHelperInvocationEXT only when supported 2021-07-22 21:51:29 -04:00
ReinUsesLisp 2ee532c9bc spirv: Use OriginLowerLeft when requested 2021-07-22 21:51:29 -04:00
ReinUsesLisp f6c09c27b1 spirv: Only add image operands mask when needed 2021-07-22 21:51:29 -04:00
ReinUsesLisp 59668831b7 spirv: Workaround image unsigned offset bug
Workaround bug on Nvidia's OpenGL SPIR-V compiler when using unsigned
texture offsets.
2021-07-22 21:51:29 -04:00
ReinUsesLisp 4a76786740 spirv: Add int8 and int16 capabilities only when supported 2021-07-22 21:51:29 -04:00
ReinUsesLisp 8accb076ee spirv: Add integer clamping workarounds
Workaround more bugs on Nvidia's OpenGL SPIR-V compiler.
2021-07-22 21:51:29 -04:00
ReinUsesLisp 55ff0ab463 spirv: Implement int8 and int16 conversion fallbacks 2021-07-22 21:51:29 -04:00
ReinUsesLisp 884a937022 spirv: Support OpenGL uniform buffers and change bindings 2021-07-22 21:51:29 -04:00
ReinUsesLisp 2bdce72c92 spirv: Desambiguate descriptor names
Worksaround a bug on Nvidia's OpenGL SPIR-V compiler where names are
used for name matching.
2021-07-22 21:51:29 -04:00
ReinUsesLisp bfb08e709c shader: Add OpenGL shader profile options 2021-07-22 21:51:29 -04:00
ReinUsesLisp 4c5f8d123d shader: Remove shader util 2021-07-22 21:51:29 -04:00
FernandoS27 6aff9b4476 shader: Address feedback 2021-07-22 21:51:29 -04:00
FernandoS27 a2fac91c47 shader: Implement VertexA stage 2021-07-22 21:51:29 -04:00
FernandoS27 cb0587f841 shader: Implement delegation of Exit to dispatcher on CFG 2021-07-22 21:51:29 -04:00
ReinUsesLisp 806c5a3739 vk_graphics_pipeline: Fix texture buffer descriptors 2021-07-22 21:51:29 -04:00
ameerj 031e91e7e5 shader: Fix IADD3.CC 2021-07-22 21:51:29 -04:00
ReinUsesLisp b62b8f2e84 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 eb7ef12b95 vk_compute_pass: Fix -Wshadow warning 2021-07-22 21:51:29 -04:00
ReinUsesLisp ed6c131c92 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 fd502a4d43 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 896a4fe9b5 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 a3b025c6a4 vk_graphics_pipeline: Generate specialized pipeline config functions and improve code 2021-07-22 21:51:29 -04:00
ReinUsesLisp 565d922014 shader: Accelerate pipeline transitions and use dirty flags for shaders 2021-07-22 21:51:29 -04:00
ameerj 90ff800962 shader: Fix BFE s32 undefined check
Our unit tests were hitting this exception.
2021-07-22 21:51:29 -04:00
ReinUsesLisp ecd481a0ca vk_compute_pipeline: Fix index comparison oversight on compute texture buffers 2021-07-22 21:51:29 -04:00
ReinUsesLisp 1f54f1ff26 shader: Fix error checking in bitfieldExtract and implement bitfieldInsert folding 2021-07-22 21:51:29 -04:00
ReinUsesLisp d835906b9f vulkan_device: Require shaderClipDistance and shaderCullDistance features 2021-07-22 21:51:29 -04:00
ReinUsesLisp 1f47476089 vk_graphics_pipeline: Guard against non-tessellation pipelines using patches 2021-07-22 21:51:29 -04:00
ReinUsesLisp e37ec2790d shader: Fix storage type when reading patches on tess control 2021-07-22 21:51:29 -04:00
ReinUsesLisp c8b0377a67 shader: Fix VMNMX selector B 2021-07-22 21:51:29 -04:00
Rodrigo Locatti 72b10edd15 shader: Fix bugs and build issues on GCC 2021-07-22 21:51:29 -04:00
ReinUsesLisp fa439cb6df shader: Fix render targets with null attachments 2021-07-22 21:51:29 -04:00
ReinUsesLisp 763adf56a6 shader: Increase the maximum number of storage buffers
Compute shaders spill uniform buffers on storage buffers, increasing the
expected number.
2021-07-22 21:51:29 -04:00
ReinUsesLisp 1d861a6e90 shader: Remove identity removal pass for better build times 2021-07-22 21:51:29 -04:00
ReinUsesLisp 4eec191801 shader: Add more strict validation the pass 2021-07-22 21:51:29 -04:00
ReinUsesLisp 21d50bd9bd shader: Fix forward referencing identity instructions when inserting phi 2021-07-22 21:51:29 -04:00
ReinUsesLisp 3c80ebf1e2 shader: Remove invalidated blocks in dead code elimination pass 2021-07-22 21:51:29 -04:00
ReinUsesLisp 12d7acf707 shader: Add missing UndoUse case for GetSparseFromOp 2021-07-22 21:51:29 -04:00
ReinUsesLisp 9b691a28d8 shader: Require dual source blending 2021-07-22 21:51:29 -04:00
ReinUsesLisp 04e042d3b3 shader: Simplify code in opcodes.h to fix Intellisense
Avoid using std::array to fix Intellisense not properly compiling this
code and disabling itself on all files that include it.

While we are at it, change the code to use u8 instead of size_t for the
number of instructions in an opcode.
2021-07-22 21:51:29 -04:00
ReinUsesLisp 052317e748 shader: Implement indexed textures 2021-07-22 21:51:28 -04:00
ameerj 3089fb1e2a shader: Refactor atomic_operations_global_memory 2021-07-22 21:51:28 -04:00
ameerj 8202ace3e9 shader: add missing include guard in half_floating_point_helper.h 2021-07-22 21:51:28 -04:00