| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
| |
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.
|
|\
| |
| | |
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.
|
|\ \
| | |
| | | |
video_core: Remove unused variables
|
| |/
| |
| |
| | |
Silences several compiler warnings about unused variables.
|
|\ \
| | |
| | | |
renderer_{opengl,vulkan}: Clamp shared memory to host's limit
|
| |/
| |
| |
| |
| | |
This stops shaders from failing to build when the exceed host's shared
memory size limit. An error is logged.
|
|\ \
| | |
| | | |
gl_arb_decompiler: Execute BAR even when inside control flow
|
| |/
| |
| |
| |
| |
| | |
Unlike GLSL, GLASM allows us to call BAR inside control flow.
- Fixes graphical artifacts in Paper Mario.
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
Variables that are marked as const cannot have the move constructor
invoked when returning from a function (the move constructor requires a
non-const variable so it can "steal" the resources from it.
|
| |
|
|
Emit code compatible with NV_gpu_program5.
This should emit code compatible with Fermi, but it wasn't tested on
that architecture. Pascal has some issues not present on Turing GPUs.
|