| Age | Commit message (Collapse) | Author |
|
Silence three warnings and make them errors to avoid introducing more in the future.
|
|
This emulates the behavior we get on GLSL with regular SSBOs with a
pointer + length pair. It aims to be consistent with the crashes we
might get.
Out of bounds stores are ignored. Atomics are ignored and return zero.
Reads return zero.
|
|
|
|
renderer_vulkan: Make unconditional use of VK_KHR_timeline_semaphore
|
|
Allows some implementations to avoid completely zeroing out the internal
buffer of the optional, and instead only set the validity byte within
the structure.
This also makes it consistent how we return empty optionals.
|
|
Emulated mailbox presentation was causing performance issues on
Nvidia's OpenGL driver. Remove it.
|
|
This reworks how host<->device synchronization works on the Vulkan
backend. Instead of "protecting" resources with a fence and signalling
these as free when the fence is known to be signalled by the host GPU,
use timeline semaphores.
Vulkan timeline semaphores allow use to work on a subset of D3D12
fences. As far as we are concerned, timeline semaphores are a value set
by the host or the device that can be waited by either of them.
Taking advantange of this, we can have a monolithically increasing
atomic value for each submission to the graphics queue. Instead of
protecting resources with a fence, we simply store the current logical
tick (the atomic value stored in CPU memory). When we want to know if a
resource is free, it can be compared to the current GPU tick.
This greatly simplifies resource management code and the free status of
resources should have less false negatives.
To workaround bugs in validation layers, when these are attached there's
a thread waiting for timeline semaphores.
|
|
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.
|
|
video_core/host_shaders: Add CMake integration for string shaders
|
|
video_core: Initialize renderer with a GPU
|
|
LabelGLObject takes a string_view, so we don't need to make copies of
the std::string.
|
|
Avoids pulling in unnecessary things that can cause rebuilds when they
aren't required.
|
|
Add the necessary CMake code to copy the contents in a string source
shader (GLSL or GLASM) to a header file then consumed by video_core
files.
This allows editting GLSL in its own files without having to maintain
them in source files.
For now, only OpenGL presentation shaders are moved, but we can add
GLASM presentation shaders and static SPIR-V generation through
glslangValidator in the future.
|
|
This allows us passing any type of string and hinting the length of the
string to the OpenGL driver.
|
|
Add an extra step in GPU initialization to be able to initialize render
backends with a valid GPU instance.
|
|
gl_shader_disk_cache: Make use of std::nullopt where applicable
|
|
Migrates the Telemetry namespace into the Common namespace to make the
code consistent with the rest of our common code.
|
|
common/fileutil: Convert namespace to Common::FS
|
|
|
|
Migrates a remaining common file over to the Common namespace, making it
consistent with the rest of common files.
This also allows for high-traffic FS related code to alias the
filesystem function namespace as
namespace FS = Common::FS;
for more concise typing.
|
|
Seems like all compilers don't support std::span yet.
|
|
lz4_compression/zstd_compression: Make use of std::span in interfaces
|
|
Allows the compiler to avoid unnecessarily zeroing out the internal
buffer of std::optional on some implementations.
|
|
Does not allocate more threads than available in the host system for boot-time shader compilation and always allocates at least 1 thread if hardware_concurrency() returns 0.
|
|
|
|
Allows condensing the data and size parameters into a single argument.
|
|
video_core: Allow copy elision to take place where applicable
|
|
video_core: Remove unused variables
|
|
renderer_{opengl,vulkan}: Clamp shared memory to host's limit
|
|
gl_arb_decompiler: Execute BAR even when inside control flow
|
|
Silences several compiler warnings about unused variables.
|
|
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
|
|
NV_shader_buffer_{load,store} is a 2010 extension that allows GL applications
to use what in Vulkan is known as physical pointers, this is basically C
pointers. On GLASM these is exposed through the LOAD/STORE/ATOM
instructions.
Up until now, assembly shaders were using NV_shader_storage_buffer_object.
These work fine, but have a (probably unintended) limitation that forces
us to have the limit of a single stage for all shader stages. In contrast,
with NV_shader_buffer_{load,store} we can pass GPU addresses to the
shader through local parameters (GLASM equivalent uniform constants, or
push constants on Vulkan). Local parameters have the advantage of being
per stage, allowing us to generate code without worrying about binding
overlaps.
|
|
|
|
|
|
|
|
Unlike GLSL, GLASM allows us to call BAR inside control flow.
- Fixes graphical artifacts in Paper Mario.
|
|
This stops shaders from failing to build when the exceed host's shared
memory size limit. An error is logged.
|
|
Normalizes pixel format names to match Vulkan names. Previous to this
commit pixel formats had no convention, leading to confusion and
potential bugs.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|