aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/renderer_opengl
AgeCommit message (Collapse)Author
2019-06-21Merge pull request #2579 from ReinUsesLisp/fix-aoffi-testbunnei
gl_device: Fix TestVariableAoffi test
2019-06-19Merge pull request #2591 from lioncash/recordbunnei
core: Remove unused CiTrace source files
2019-06-18core: Remove unused CiTrace source filesLioncash
These source files have been unused for the entire lifecycle of the project. They're a hold-over from Citra and only add to the build time of the project, so they can be removed. There's also likely no way this would ever work in yuzu in its current form without revamping quite a bit of it, given how different the GPU on the Switch is compared to the 3DS.
2019-06-17Merge pull request #2562 from ReinUsesLisp/split-cbuf-uploadbunnei
video_core/engines: Move ConstBufferInfo out of Maxwell3D
2019-06-15Merge pull request #2538 from ReinUsesLisp/ssy-pbkZach Hilman
shader: Split SSY and PBK stack
2019-06-11gl_device: Fix TestVariableAoffi testReinUsesLisp
This test is intended to be invalid GLSL, but it was being invalid in two points instead of one. The intention is to use a non-immediate parameter in a textureOffset like function. The problem is that this shader was being compiled as a separable shader object and the text was writting to gl_Position without a redeclaration, being invalid GLSL. Address that issue by using a user-defined output attribute.
2019-06-07gl_rasterizer: Remove unused parameters in descriptor uploadsReinUsesLisp
2019-06-07video_core/engines: Move ConstBufferInfo out of Maxwell3DReinUsesLisp
2019-06-07Merge pull request #2514 from ReinUsesLisp/opengl-compatZach Hilman
video_core: Drop OpenGL core in favor of OpenGL compatibility
2019-06-07shader: Split SSY and PBK stackReinUsesLisp
Hardware testing revealed that SSY and PBK push to a different stack, allowing code like this: SSY label1; PBK label2; SYNC; label1: PBK; label2: EXIT;
2019-06-05shader: Use shared_ptr to store nodes and move initialization to fileReinUsesLisp
Instead of having a vector of unique_ptr stored in a vector and returning star pointers to this, use shared_ptr. While changing initialization code, move it to a separate file when possible. This is a first step to allow code analysis and node generation beyond the ShaderIR class.
2019-06-05Merge pull request #2540 from ReinUsesLisp/remove-guest-positionbunnei
gl_shader_decompiler: Remove guest "position" varying
2019-06-05Merge pull request #2512 from ReinUsesLisp/comp-indexingbunnei
gl_shader_decompiler: Pessimize uniform buffer access on AMD's prorpietary driver
2019-06-03gl_shader_decompiler: Remove guest "position" varyingReinUsesLisp
"position" was being written but not read anywhere besides geometry shaders, where it had the same value as gl_Position. This commit replaces "position" with gl_Position, reducing the complexity of our code and the emitted GLSL code.
2019-05-30gl_shader_cache: Store a system class and drop global accessorsReinUsesLisp
2019-05-30gl_shader_cache: Add commentaries explaining the intention in shaders creationReinUsesLisp
2019-05-30gl_shader_cache: Flip if condition in GetStageProgram to reduce indentationReinUsesLisp
2019-05-30gl_buffer_cache: Remove unused ReserveMemory methodReinUsesLisp
2019-05-30maxwell_to_gl: Use GL_CLAMP to emulate Clamp wrap modeReinUsesLisp
2019-05-30gl_rasterizer: Move alpha testing to the OpenGL pipelineReinUsesLisp
Removes the alpha testing code from each fragment shader invocation.
2019-05-30gl_rasterizer: Use GL_QUADS to emulate quads renderingReinUsesLisp
2019-05-29Merge pull request #2446 from ReinUsesLisp/tidbunnei
shader: Implement S2R Tid{XYZ} and CtaId{XYZ}
2019-05-27gl_device: Add commentary to AOFFI unit test source codeReinUsesLisp
The intention behind this commit is to hint someone inspecting an apitrace dump to ignore this ill-formed GLSL code.
2019-05-27gl_shader_gen: Always declare extensions after the version declarationReinUsesLisp
This addresses a bug on geometry shaders where code was being written before all #extension declarations were done. Ref to #2523
2019-05-24renderer_opengl/utils: Use a std::string_view with LabelGLObject()Lioncash
Uses a std::string_view instead of a std::string, given the pointed to string isn't modified and is only used in a formatting operation. This is nice because a few usages directly supply a string literal to the function, allowing these usages to otherwise not heap allocate, unlike the std::string overloads. While we're at it, we can combine the address formatting into a single formatting call.
2019-05-24Merge pull request #2358 from ReinUsesLisp/parallel-shaderbunnei
gl_shader_cache: Use shared contexts to build shaders in parallel at boot
2019-05-24gl_shader_decompiler: Use an if based cbuf indexing for broken driversReinUsesLisp
The following code is broken on AMD's proprietary GLSL compiler: ```glsl uint idx = ...; vec4 values = ...; float some_value = values[idx & 3]; ``` It index the wrong components, to fix this the following pessimized code is emitted when that bug is present: ```glsl uint idx = ...; vec4 values = ...; float some_value; if ((idx & 3) == 0) some_value = values.x; if ((idx & 3) == 1) some_value = values.y; if ((idx & 3) == 2) some_value = values.z; if ((idx & 3) == 3) some_value = values.w; ```
2019-05-24gl_device: Add test to detect broken component indexingReinUsesLisp
Component indexing on AMD's proprietary driver is broken. This commit adds a test to detect when we are on a driver that can't successfully manage component indexing. It dispatches a dummy draw with just one vertex shader that writes to an indexed SSBO from the GPU with data sent through uniforms, it then reads that data from the CPU and compares the expected output.
2019-05-21renderer_opengl/gl_shader_decompiler: Remove redundant name specification in ↵Lioncash
format string This accidentally slipped through a rebase.
2019-05-20gl_shader_cache: Fix clang strict standard build issuesReinUsesLisp
2019-05-20gl_shader_cache: Use shared contexts to build shaders in parallelReinUsesLisp
2019-05-20shader: Implement S2R Tid{XYZ} and CtaId{XYZ}ReinUsesLisp
2019-05-20gl_shader_decompiler: Make GetSwizzle constexprReinUsesLisp
2019-05-20gl_shader_decompiler: Tidy up minor remaining cases of unnecessary ↵Lioncash
std::string concatenation
2019-05-20gl_shader_decompiler: Replace individual overloads with the fmt-based oneLioncash
Gets rid of the need to special-case brace handling depending on the overload used, and makes it consistent across the board with how fmt handles them. Strings with compile-time deducible strings are directly forwarded to std::string's constructor, so we don't need to worry about the performance difference here, as it'll be identical.
2019-05-20gl_shader_decompiler: Utilize fmt overload of AddLine() where applicableLioncash
2019-05-19gl_shader_decompiler: Add AddLine() overload that forwards to fmtLioncash
In a lot of places throughout the decompiler, string concatenation via operator+ is used quite heavily. This is usually fine, when not heavily used, but when used extensively, can be a problem. operator+ creates an entirely new heap allocated temporary string and given we perform expressions like: std::string thing = a + b + c + d; this ends up with a lot of unnecessary temporary strings being created and discarded, which kind of thrashes the heap more than we need to. Given we utilize fmt in some AddLine calls, we can make this a part of the ShaderWriter's API. We can make an overload that simply acts as a passthrough to fmt. This way, whenever things need to be appended to a string, the operation can be done via a single string formatting operation instead of discarding numerous temporary strings. This also has the benefit of making the strings themselves look nicer and makes it easier to spot errors in them.
2019-05-19Merge pull request #2441 from ReinUsesLisp/al2pbunnei
shader: Implement AL2P and ALD.PHYS
2019-05-19Merge pull request #2495 from lioncash/cacheHexagon12
gl_shader_disk_cache: Minor cleanup
2019-05-19Merge pull request #2480 from ReinUsesLisp/fix-quadsHexagon12
gl_rasterizer: Pass the right number of array quad vertices count
2019-05-19Merge pull request #2483 from ReinUsesLisp/fix-point-sizeHexagon12
gl_rasterizer: Limit OpenGL point size to a minimum of 1
2019-05-19Merge pull request #2484 from ReinUsesLisp/triangle-fanSebastian Valle
maxwell_to_gl: Add TriangleFan primitive topology
2019-05-19gl_shader_gen: std::move objects where applicableLioncash
Avoids performing copies into the pair being returned. Instead, we can just move the resources into the pair, avoiding the need to make copies of both the std::string and ShaderEntries struct.
2019-05-19gl_shader_disk_cache: in-class initialize virtual file offset of ↵Lioncash
ShaderDiskCacheOpenGL Given the offset is assigned a fixed value in the constructor, we can just assign it directly and get rid of the need to write the name of the variable again in the constructor initializer list.
2019-05-19gl_shader_disk_cache: Default ShaderDiskCacheOpenGL's destructor in the cpp fileLioncash
Given the disk shader cache contains non-trivial types, we should default it in the cpp file in order to prevent inlining of the complex destruction logic.
2019-05-19gl_shader_disk_cache: Make hash specializations noexceptLioncash
The standard library expects hash specializations that don't throw exceptions. Make this explicit in the type to allow selection of better code paths if possible in implementations.
2019-05-19gl_shader_disk_cache: Remove redundant code string construction in ↵Lioncash
LoadDecompiledEntry() We don't need to load the code into a vector and then construct a string over the data. We can just create a string with the necessary size ahead of time, and read the data directly into it, getting rid of an unnecessary heap allocation.
2019-05-19gl_shader_disk_cache: Make variable non-const in decompiled entry caseLioncash
std::move does nothing when applied to a const variable. Resources can't be moved if the object is immutable. With this change, we don't end up making several unnecessary heap allocations and copies.
2019-05-19gl_shader_disk_cache: Special-case boolean handlingLioncash
Booleans don't have a guaranteed size, but we still want to have them integrate into the disk cache system without needing to actually use a different type. We can do this by supplying non-template overloads for the bool type. Non-template overloads always have precedence during function resolution, so this is safe to provide. This gets rid of the need to smatter ternary conditionals, as well as the need to use u8 types to store the value in.
2019-05-18gl_rasterizer: Limit OpenGL point size to a minimum of 1ReinUsesLisp