bunnei
c67bc53d3f
Merge pull request #4575 from lioncash/async
...
async_shaders: Mark getters as const member functions
2020-09-03 11:34:30 -04:00
bunnei
ab46e0986e
Merge pull request #4524 from lioncash/memory-log
...
shader/memory: Amend UNIMPLEMENTED_IF_MSG without a message
2020-08-27 00:16:10 -04:00
Lioncash
e95290cfaf
async_shaders: Mark getters as const member functions
...
While we're at it, we can also mark them as nodiscard.
2020-08-24 01:15:50 -04:00
David
a705bd0ef6
Merge pull request #4443 from ameerj/vk-async-shaders
...
vulkan_renderer: Async shader/graphics pipeline compilation
2020-08-17 15:06:11 +10:00
ameerj
4cb6ad9eaf
Remove unneeded newlines, optional Registry in shader params
...
Addressing feedback from Rodrigo
2020-08-16 16:33:21 -04:00
Ameer J
8374d79c4b
Morph: Update worker allocation comment
...
Co-authored-by: Morph <39850852+Morph1984@users.noreply.github.com>
2020-08-16 12:02:22 -04:00
ameerj
b467d4dbd0
move thread 1/4 count computation into allocate workers method
2020-08-16 12:02:22 -04:00
ameerj
3fa34fa7bf
Address feedback, add shader compile notifier, update setting text
2020-08-16 12:02:22 -04:00
ameerj
5a2879a781
Vk Async Worker directly emplace in cache
2020-08-16 12:02:22 -04:00
ameerj
f029fa19bf
Address feedback. Bruteforce delete duplicates
2020-08-16 12:02:22 -04:00
ameerj
77698ae7d6
Vk Async pipeline compilation
2020-08-16 12:02:22 -04:00
Lioncash
7557cf39f9
shader/memory: Amend UNIMPLEMENTED_IF_MSG without a message
...
We need to provide a message for this variant of the macro, so we can
simply log out the type being used.
2020-08-14 08:38:37 -04:00
Lioncash
a743375791
async_shaders: Resolve -Wpessimizing-move warning
...
Prevents pessimization of the move constructor (which thankfully didn't
actually happen in practice here, given std::thread isn't copyable).
2020-08-14 08:16:50 -04:00
Lioncash
78ddcbe3ba
General: Tidy up clang-format warnings part 2
2020-08-13 14:19:08 -04:00
bunnei
82278bde7e
Merge pull request #4391 from lioncash/nrvo
...
video_core: Allow copy elision to take place where applicable
2020-07-24 06:33:09 -07:00
Rodrigo Locatti
ce9754ffa5
Merge pull request #4361 from ReinUsesLisp/lane-id
...
decode/other: Implement S2R.LaneId
2020-07-21 04:50:45 -03:00
Lioncash
991e4dc0b3
video_core: Allow copy elision to take place where applicable
...
Removes const from some variables that are returned from functions, as
this allows the move assignment/constructors to execute for them.
2020-07-21 00:36:13 -04:00
bunnei
2e4a5d2110
Merge pull request #4324 from ReinUsesLisp/formats
...
video_core: Fix, add and rename pixel formats
2020-07-21 00:13:04 -04:00
David Marcec
578f84cdf4
Fix style issues
2020-07-18 14:24:32 +10:00
David Marcec
bab9531cc6
Remove duplicate config
2020-07-17 14:26:18 +10:00
David Marcec
73118715ca
Use conditional var
2020-07-17 14:26:17 +10:00
David Marcec
a4e811af27
async shaders
2020-07-17 14:24:57 +10:00
ReinUsesLisp
c5391180e6
decode/other: Implement S2R.LaneId
...
This maps to host's thread id.
- Fixes graphical issues on Paper Mario.
2020-07-16 16:09:39 -03:00
ReinUsesLisp
a068ce4c32
video_core: Rearrange pixel format names
...
Normalizes pixel format names to match Vulkan names. Previous to this
commit pixel formats had no convention, leading to confusion and
potential bugs.
2020-07-13 01:44:23 -03:00
bunnei
7048f18d87
Merge pull request #4147 from ReinUsesLisp/hset2-imm
...
shader/half_set: Implement HSET2_IMM
2020-06-26 23:14:56 -04:00
bunnei
12a5f5af5d
Merge pull request #4083 from Morph1984/B10G11R11F
...
decode/image: Implement B10G11R11F
2020-06-24 11:02:38 -04:00
ReinUsesLisp
43e5214413
shader/half_set: Implement HSET2_IMM
...
Add HSET2_IMM. Due to the complexity of the encoding avoid using
BitField unions and read the relevant bits from the code itself.
This is less error prone.
2020-06-22 20:51:18 -03:00
Morph
1e9be249e1
decode/image: Implement B10G11R11F
...
- Used by Kirby Star Allies
2020-06-20 00:28:30 -04:00
MerryMage
ce9c74b4df
memory_util: boost hashes are size_t
...
* boost::hash_value returns a size_t
* boost::hash_combine takes a size_t& argument
2020-06-18 15:47:43 +01:00
ReinUsesLisp
2f28ac0ada
shader/texture: Join separate image and sampler pairs offline
...
Games using D3D idioms can join images and samplers when a shader
executes, instead of baking them into a combined sampler image. This is
also possible on Vulkan.
One approach to this solution would be to use separate samplers on
Vulkan and leave this unimplemented on OpenGL, but we can't do this
because there's no consistent way of determining which constant buffer
holds a sampler and which one an image. We could in theory find the
first bit and if it's in the TIC area, it's an image; but this falls
apart when an image or sampler handle use an index of zero.
The used approach is to track for a LOP.OR operation (this is done at an
IR level, not at an ISA level), track again the constant buffers used as
source and store this pair. Then, outside of shader execution, join
the sample and image pair with a bitwise or operation.
This approach won't work on games that truly use separate samplers in a
meaningful way. For example, pooling textures in a 2D array and
determining at runtime what sampler to use.
This invalidates OpenGL's disk shader cache :)
- Used mostly by D3D ports to Switch
2020-06-05 00:24:51 -03:00
ReinUsesLisp
b435bff43e
shader/track: Move bindless tracking to a separate function
2020-06-04 23:02:55 -03:00
LC
50e8e86908
Merge pull request #4016 from ReinUsesLisp/invocation-info
...
shader/other: Fix hardcoded value in S2R INVOCATION_INFO
2020-06-02 09:47:53 -04:00
ReinUsesLisp
b62b8c8a5d
shader/other: Fix hardcoded value in S2R INVOCATION_INFO
...
Geometry shaders built from Nvidia's compiler check for bits[16:23] to
be less than or equal to 0 with VSETP to default to a "safe" value of
0x8000'0000 (safe from hardware's perspective). To avoid hitting this
path in the shader, return 0x00ff'0000 from S2R INVOCATION_INFO.
This seems to be the maximum number of vertices a geometry shader can
emit in a primitive.
2020-05-30 01:49:14 -03:00
ReinUsesLisp
6e0420fe20
shader/other: Implement MEMBAR.CTS
...
This silences an assertion we were hitting and uses workgroup memory
barriers when the game requests it.
2020-05-27 00:19:45 -03:00
bunnei
cb82125d87
Merge pull request #3981 from ReinUsesLisp/bar
...
shader/other: Implement BAR.SYNC 0x0
2020-05-26 14:40:13 -04:00
bunnei
54a3697cac
Merge pull request #3980 from ReinUsesLisp/red-op
...
shader/memory: Implement non-addition operations in RED
2020-05-26 12:50:41 -04:00
ReinUsesLisp
5db0df833a
shader/other: Implement BAR.SYNC 0x0
...
Trivially implement this particular case of BAR. Unless games use OpenCL
or CUDA barriers, we shouldn't hit any other case here.
2020-05-21 23:20:43 -03:00
ReinUsesLisp
c5d03c7ff1
shader/memory: Implement non-addition operations in RED
...
Trivially implement these instructions. They are used in Astral Chain.
2020-05-21 23:19:46 -03:00
ReinUsesLisp
d4ba9c4fe5
shader/other: Implement thread comparisons (NV_shader_thread_group)
...
Hardware S2R special registers match gl_Thread*MaskNV. We can trivially
implement these using Nvidia's extension on OpenGL or naively stubbing
them with the ARB instructions to match. This might cause issues if the
host device warp size doesn't match Nvidia's. That said, this is
unlikely on proper shaders.
Refer to the attached url for more documentation about these flags.
https://www.khronos.org/registry/OpenGL/extensions/NV/NV_shader_thread_group.txt
2020-05-21 23:18:37 -03:00
ReinUsesLisp
d8598a8717
shader_ir: Separate float-point comparisons in ordered and unordered
...
This allows us to use native SPIR-V instructions without having to
manually check for NAN.
2020-05-09 04:55:15 -03:00
bunnei
33a218bea2
Merge pull request #3693 from ReinUsesLisp/clean-samplers
...
shader/texture: Support multiple unknown sampler properties
2020-05-02 00:45:41 -04:00
bunnei
e043a955f1
Merge pull request #3799 from ReinUsesLisp/iadd-cc
...
shader: Implement P2R CC, IADD Rd.CC and IADD.X
2020-04-30 12:56:36 -04:00
bunnei
e20f3161a3
Merge pull request #3788 from FernandoS27/revert
...
Revert: shader_decode: Fix LD, LDG when track constant buffer.
2020-04-30 12:55:39 -04:00
ReinUsesLisp
8d28a56a6c
shader/arithmetic_integer: Fix tracking issue in temporary
...
This temporary is not needed as we mark Rd.CC + IADD.X as unimplemented.
It caused issues when tracking global buffers.
2020-04-28 17:14:53 -03:00
bunnei
510842d827
Merge pull request #3784 from ReinUsesLisp/shader-memory-util
...
shader/memory_util: Deduplicate code
2020-04-28 12:05:50 -04:00
ReinUsesLisp
9b433b2467
shader/memory_util: Deduplicate code
...
Deduplicate code shared between vk_pipeline_cache and gl_shader_cache as
well as shader decoder code.
While we are at it, fix a bug in gl_shader_cache where compute shaders
had an start offset of a stage shader.
2020-04-26 01:38:51 -03:00
ReinUsesLisp
7442f21c5b
shader/arithmetic_integer: Fix edge case and mark IADD.X Rd.CC as unimplemented
...
IADD.X Rd.CC requires some extra logic that is not currently
implemented. Abort when this is hit.
2020-04-25 22:58:33 -03:00
ReinUsesLisp
45cb8fc72a
shader/arithmetic_integer: Change IAdd to UAdd to avoid signed overflow
...
Signed integer addition overflow might be undefined behavior. It's free
to change operations to UAdd and use unsigned integers to avoid
potential bugs.
2020-04-25 22:57:54 -03:00
ReinUsesLisp
6404cd824b
shader/arithmetic_integer: Implement IADD.X
...
IADD.X takes the carry flag and adds it to the result. This is generally
used to emulate 64-bit operations with 32-bit registers.
2020-04-25 22:56:11 -03:00
ReinUsesLisp
7e8f51273c
shader/arithmetic_integer: Implement CC for IADD
2020-04-25 22:55:26 -03:00