aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/renderer_opengl
AgeCommit message (Collapse)Author
2020-10-28video_core: Enforce -Wredundant-move and -Wpessimizing-moveReinUsesLisp
Silence three warnings and make them errors to avoid introducing more in the future.
2020-10-20gl_arb_decompiler: Implement robust buffer operationsReinUsesLisp
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.
2020-10-02video_core: Enforce -Wunused-variable and -Wunused-but-set-variableReinUsesLisp
2020-09-23Merge pull request #4674 from ReinUsesLisp/timeline-semaphoresbunnei
renderer_vulkan: Make unconditional use of VK_KHR_timeline_semaphore
2020-09-22General: Make use of std::nullopt where applicableLioncash
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.
2020-09-20renderer_opengl: Remove emulated mailbox presentationReinUsesLisp
Emulated mailbox presentation was causing performance issues on Nvidia's OpenGL driver. Remove it.
2020-09-19renderer_vulkan: Make unconditional use of VK_KHR_timeline_semaphoreReinUsesLisp
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.
2020-09-16video_core: Enforce -Werror=switchReinUsesLisp
This forces us to fix all -Wswitch warnings in video_core.
2020-09-06video_core: Remove all Core::System references in rendererReinUsesLisp
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.
2020-08-26Merge pull request #4569 from ReinUsesLisp/glsl-cmakebunnei
video_core/host_shaders: Add CMake integration for string shaders
2020-08-24Merge pull request #4542 from ReinUsesLisp/gpu-init-basebunnei
video_core: Initialize renderer with a GPU
2020-08-23gl_texture_cache: Take std::string by reference in DecorateViewName()Lioncash
LabelGLObject takes a string_view, so we don't need to make copies of the std::string.
2020-08-23video_core/fence_manager: Remove unnecessary includesLioncash
Avoids pulling in unnecessary things that can cause rebuilds when they aren't required.
2020-08-23video_core/host_shaders: Add CMake integration for string shadersReinUsesLisp
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.
2020-08-23gl_shader_util: Use std::string_view instead of star pointerReinUsesLisp
This allows us passing any type of string and hinting the length of the string to the OpenGL driver.
2020-08-22video_core: Initialize renderer with a GPUReinUsesLisp
Add an extra step in GPU initialization to be able to initialize render backends with a valid GPU instance.
2020-08-21Merge pull request #4521 from lioncash/optionalcachebunnei
gl_shader_disk_cache: Make use of std::nullopt where applicable
2020-08-18common/telemetry: Migrate namespace into the Common namespaceLioncash
Migrates the Telemetry namespace into the Common namespace to make the code consistent with the rest of our common code.
2020-08-17Merge pull request #4535 from lioncash/fileutilbunnei
common/fileutil: Convert namespace to Common::FS
2020-08-16move thread 1/4 count computation into allocate workers methodameerj
2020-08-16common/fileutil: Convert namespace to Common::FSLioncash
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.
2020-08-15common/compression: Roll back std::span changesLioncash
Seems like all compilers don't support std::span yet.
2020-08-15Merge pull request #4416 from lioncash/spanbunnei
lz4_compression/zstd_compression: Make use of std::span in interfaces
2020-08-14gl_shader_disk_cache: Make use of std::nullopt where applicableLioncash
Allows the compiler to avoid unnecessarily zeroing out the internal buffer of std::optional on some implementations.
2020-08-12gl_shader_cache: Use std::max() for determining num_workersMorph
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.
2020-07-28renderer_opengl: Use 1/4 of all threads for async shader compilationMorph
2020-07-25zstd_compression: Make use of std::span in interfacesLioncash
Allows condensing the data and size parameters into a single argument.
2020-07-24Merge pull request #4391 from lioncash/nrvobunnei
video_core: Allow copy elision to take place where applicable
2020-07-23Merge pull request #4394 from lioncash/unused6bunnei
video_core: Remove unused variables
2020-07-21Merge pull request #4359 from ReinUsesLisp/clamp-sharedRodrigo Locatti
renderer_{opengl,vulkan}: Clamp shared memory to host's limit
2020-07-21Merge pull request #4360 from ReinUsesLisp/glasm-barRodrigo Locatti
gl_arb_decompiler: Execute BAR even when inside control flow
2020-07-21video_core: Remove unused variablesLioncash
Silences several compiler warnings about unused variables.
2020-07-21video_core: Allow copy elision to take place where applicableLioncash
Removes const from some variables that are returned from functions, as this allows the move assignment/constructors to execute for them.
2020-07-21Merge pull request #4324 from ReinUsesLisp/formatsbunnei
video_core: Fix, add and rename pixel formats
2020-07-18gl_arb_decompiler: Use NV_shader_buffer_{load,store} on assembly shadersReinUsesLisp
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.
2020-07-17Drop max workers from 8->2 for testingDavid Marcec
2020-07-17Rebase for per game settingsDavid Marcec
2020-07-17async shadersDavid Marcec
2020-07-16gl_arb_decompiler: Execute BAR even when inside control flowReinUsesLisp
Unlike GLSL, GLASM allows us to call BAR inside control flow. - Fixes graphical artifacts in Paper Mario.
2020-07-16renderer_{opengl,vulkan}: Clamp shared memory to host's limitReinUsesLisp
This stops shaders from failing to build when the exceed host's shared memory size limit. An error is logged.
2020-07-13video_core: Rearrange pixel format namesReinUsesLisp
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-13video_core: Fix DXT4 and RGB565ReinUsesLisp
2020-07-13video_core: Fix B5G6R5_UNORM render target formatReinUsesLisp
2020-07-13video_core: Fix B5G6R5UReinUsesLisp
2020-07-13video_core: Implement RGBA32_SINT render targetReinUsesLisp
2020-07-13video_core: Implement RGBA32_SINT render targetReinUsesLisp
2020-07-13video_core: Implement RGBA16_SINT render targetReinUsesLisp
2020-07-13video_core: Implement RGBA8_SINT render targetReinUsesLisp
2020-07-13video_core: Implement RG32_SINT render targetReinUsesLisp
2020-07-13video_core: Implement RG8_SINT render target and fix RG8_UINTReinUsesLisp