| Age | Commit message (Collapse) | Author |
|
Fortunately this didn't result in any issues, given the block that code
was falling through to would immediately break.
|
|
The assignment was previously truncating a u64 value to a bool.
|
|
This forces us to fix all -Wswitch warnings in video_core.
|
|
Now that the GPU is initialized when video backends are initialized,
it's no longer needed to query components once the game is running: it
can be done when yuzu is booting.
This allows us to pass components between constructors and in the
process remove all Core::System references in the video backend.
|
|
async_shaders: Mark getters as const member functions
|
|
shader/memory: Amend UNIMPLEMENTED_IF_MSG without a message
|
|
While we're at it, we can also mark them as nodiscard.
|
|
vulkan_renderer: Async shader/graphics pipeline compilation
|
|
Addressing feedback from Rodrigo
|
|
Co-authored-by: Morph <39850852+Morph1984@users.noreply.github.com>
|
|
|
|
|
|
|
|
|
|
|
|
We need to provide a message for this variant of the macro, so we can
simply log out the type being used.
|
|
Prevents pessimization of the move constructor (which thankfully didn't
actually happen in practice here, given std::thread isn't copyable).
|
|
|
|
video_core: Allow copy elision to take place where applicable
|
|
decode/other: Implement S2R.LaneId
|
|
Removes const from some variables that are returned from functions, as
this allows the move assignment/constructors to execute for them.
|
|
video_core: Fix, add and rename pixel formats
|
|
|
|
|
|
|
|
|
|
This maps to host's thread id.
- Fixes graphical issues on Paper Mario.
|
|
Normalizes pixel format names to match Vulkan names. Previous to this
commit pixel formats had no convention, leading to confusion and
potential bugs.
|
|
shader/half_set: Implement HSET2_IMM
|
|
decode/image: Implement B10G11R11F
|
|
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.
|
|
- Used by Kirby Star Allies
|
|
* boost::hash_value returns a size_t
* boost::hash_combine takes a size_t& argument
|
|
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
|
|
|
|
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.
|
|
This silences an assertion we were hitting and uses workgroup memory
barriers when the game requests it.
|
|
shader/other: Implement BAR.SYNC 0x0
|
|
shader/memory: Implement non-addition operations in RED
|
|
Trivially implement this particular case of BAR. Unless games use OpenCL
or CUDA barriers, we shouldn't hit any other case here.
|
|
Trivially implement these instructions. They are used in Astral Chain.
|
|
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
|
|
This allows us to use native SPIR-V instructions without having to
manually check for NAN.
|
|
shader/texture: Support multiple unknown sampler properties
|
|
shader: Implement P2R CC, IADD Rd.CC and IADD.X
|
|
Revert: shader_decode: Fix LD, LDG when track constant buffer.
|
|
This temporary is not needed as we mark Rd.CC + IADD.X as unimplemented.
It caused issues when tracking global buffers.
|
|
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.
|