| Age | Commit message (Collapse) | Author |
|
vulkan/wrapper: Remove noexcept from GetSurfaceCapabilitiesKHR()
|
|
Fix compilation on macOS
|
|
Check() can throw an exception if the Vulkan result isn't successful.
We remove the check so that std::terminate isn't outright called and
allows for better debugging (should it ever actually fail).
|
|
There's no need to load contents from the CPU when a clear resets all
the contents of the underlying memory. This is already implemented on
OpenGL and the texture cache.
|
|
Instead of copying to a temporary payload before sending the update task
to the worker thread, insert elements to the payload directly.
|
|
VkDeviceSize
|
|
|
|
Emulate GL_LINEAR/NEAREST minification filters using minLod = 0 and maxLod = 0.25 during sampler creation
|
|
maxwell_to_vk: Reorder filtering modes to start with None, then Nearest, then Linear.
maxwell_to_vk: Logs filter modes under UNREACHABLE_MSG instead of UNIMPLEMENTED_MSG, since any unknown filter modes are invalid and not unimplemented.
maxwell_to_vk: Return VK_SAMPLER_MIPMAP_MODE_NEAREST instead of VK_SAMPLER_MIPMAP_MODE_LINEAR when mipmap_filter is None with the description from the VkSamplerCreateInfo(3) man page.
|
|
buffer_cache: Avoid passing references of shared pointers and misc style changes
|
|
shader/texture: Join separate image and sampler pairs offline
|
|
shader_cache: Implement a generic runtime shader cache
|
|
Instead of using as template argument a shared pointer, use the
underlying type and manage shared pointers explicitly. This can make
removing shared pointers from the cache more easy.
While we are at it, make some misc style changes and general
improvements (like insert_or_assign instead of operator[] + operator=).
|
|
This allows rendering to 3D textures with more than one slice.
Applications are allowed to render to more than one slice of a texture
using gl_Layer from a VTG shader.
This also requires reworking how 3D texture collisions are handled, for
now, this commit allows rendering to slices but not to miplevels. When a
render target attempts to write to a mipmap, we fallback to the previous
implementation (copying or flushing as needed).
- Fixes color correction 3D textures on UE4 games (rainbow effects).
- Allows Xenoblade games to render to 3D textures directly.
|
|
vk_rasterizer: Implement storage texels and atomic image operations
|
|
The rasterizer cache is no longer used. Each cache has its own generic
implementation optimized for the cached data.
|
|
Trivial port the generic shader cache to Vulkan.
|
|
vk_rasterizer: Skip transform feedbacks when extension is unavailable
|
|
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
|
|
Implement atomic operations on images.
On GLSL these are atomicImage* functions (e.g. atomicImageAdd).
|
|
This is the equivalent of an image buffer on OpenGL.
- Used by Octopath Traveler
|
|
- Used by Octopath Traveler
|
|
fixed_pipeline_state,gl_rasterizer: Swap negative viewport checks for front faces
|
|
vk_rasterizer: Implement constant attributes
|
|
shader/other: Implement MEMBAR.CTS
|
|
Avoids calling transform feedback procedures when
VK_EXT_transform_feedback is not available.
|
|
texture_cache: Implement depth stencil texture swizzles
|
|
maxwell_to_vk: Add format B8G8R8A8_SRGB and add Attachable capability for B8G8R8A8_UNORM
|
|
This silences an assertion we were hitting and uses workgroup memory
barriers when the game requests it.
|
|
Stop ignoring image swizzles on depth and stencil images.
This doesn't fix a known issue on Xenoblade Chronicles 2 where an OpenGL
texture changes swizzles twice before being used. A proper fix would be
having a small texture view cache for this like we do on Vulkan.
|
|
The check to flip faces when viewports are negative were a left over
from the old OpenGL code. This is not required on Vulkan where we have
negative viewports.
|
|
shader/other: Implement BAR.SYNC 0x0
|
|
shader_decompiler: Visit source nodes even when they assign to RZ
|
|
Correct a series of crashes and intructions on Async GPU and Vulkan Pipeline
|
|
shader/other: Implement thread comparisons (NV_shader_thread_group)
|
|
Trivially implement this particular case of BAR. Unless games use OpenCL
or CUDA barriers, we shouldn't hit any other case here.
|
|
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
|
|
Some operations like atomicMin were ignored because they returned were
being stored to RZ. This operations have a side effect and it was being
ignored.
|
|
Atomic instructions can be used without returning anything and this is
valid code. Remove the assert.
|
|
Instead of using boost::icl::interval_map for caching, use
boost::intrusive::set. interval_map is intended as a container where the
keys can overlap with one another; we don't need this for caching
buffers and a std::set-like data structure that allows us to search with
lower_bound is enough.
|
|
Add format B8G8R8A8_SRGB and add Attachable capability for B8G8R8A8_UNORM
Used by Bravely Default II
|
|
Match OpenGL's behavior. This can fix or simplify bisecting issues on
Vulkan.
|
|
shader_ir: Add separate instructions for ordered and unordered comparisons and fix NE on GLSL
|
|
Constant attributes (in OpenGL known disabled attributes) are not
supported on Vulkan, even with extensions. To emulate this behavior we
return zero on reads from disabled vertex attributes in shader code.
This has no caching cost because attribute formats are not dynamic state
on Vulkan and we have to store it in the pipeline cache anyway.
- Fixes Animal Crossing: New Horizons terrain borders
|
|
This was a left over from OpenGL when disabled buffers where not properly
emulated. We no longer have to assert this as it is checked in vertex
buffer initialization.
|
|
vk_graphics_pipeline: Implement rasterizer_enable on Vulkan
|
|
|
|
|
|
texture: Implement R8G8UI
|
|
This allows us to use native SPIR-V instructions without having to
manually check for NAN.
|