summaryrefslogtreecommitdiffstats
path: root/src/video_core/shader/track.cpp (follow)
Commit message (Collapse)AuthorAgeFilesLines
* General: Make use of std::nullopt where applicableLioncash2020-09-221-2/+2
| | | | | | | | 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.
* shader/texture: Join separate image and sampler pairs offlineReinUsesLisp2020-06-051-5/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | 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
* shader/track: Move bindless tracking to a separate functionReinUsesLisp2020-06-051-23/+31
|
* Revert: shader_decode: Fix LD, LDG when track constant buffer.Fernando Sahmkow2020-04-241-14/+6
|
* Merge pull request #3679 from lioncash/trackbunnei2020-04-191-5/+6
|\ | | | | track: Eliminate redundant copies
| * track: Eliminate redundant copiesLioncash2020-04-161-5/+6
| | | | | | | | | | Two variables can be references, while two others can be std::moved. Makes for 4 less atomic reference count increments and decrements.
* | CMakeLists: Specify -Wextra on linux buildsLioncash2020-04-161-3/+4
|/ | | | | | | | | | | Allows reporting more cases where logic errors may exist, such as implicit fallthrough cases, etc. We currently ignore unused parameters, since we currently have many cases where this is intentional (virtual interfaces). While we're at it, we can also tidy up any existing code that causes warnings. This also uncovered a few bugs as well.
* shader/registry: Store graphics and compute metadataReinUsesLisp2020-03-091-6/+3
| | | | | Store information GLSL forces us to provide but it's dynamic state in hardware (workgroup sizes, primitive topology, shared memory size).
* video_core: Rename "const buffer locker" to "registry"ReinUsesLisp2020-03-091-2/+2
|
* gl_shader_cache: Rework shader cache and remove post-specializationsReinUsesLisp2020-03-091-6/+3
| | | | | Instead of pre-specializing shaders and then post-specializing them, drop the later and only "specialize" the shader while decoding it.
* nit: move comment to right place.Nguyen Dac Nam2020-02-291-2/+2
|
* shader_decode: Fix LD, LDG when track constant bufferNguyen Dac Nam2020-02-281-4/+12
|
* shader: Remove curly braces initializers on shared pointersReinUsesLisp2020-02-021-2/+2
|
* Shader_IR: Address feedback.Fernando Sahmkow2020-01-251-5/+4
|
* Shader_IR: Change name of TrackSampler function so it does not confuse with the type.Fernando Sahmkow2020-01-241-5/+7
|
* Shader_IR: Propagate bindless index into the GL compiler.Fernando Sahmkow2020-01-241-3/+26
|
* Shader_IR: Implement initial code for tracking indexed samplers.Fernando Sahmkow2020-01-241-0/+82
|
* shader_ir/memory: Implement patch storesReinUsesLisp2019-12-101-0/+1
|
* Merge pull request #2737 from FernandoS27/track-fixbunnei2019-07-251-2/+2
|\ | | | | Shader_Ir: Correct tracking to track from right to left
| * Shader_Ir: Correct tracking to track from right to leftFernando Sahmkow2019-07-161-2/+2
| |
* | shader_ir: std::move Node instance where applicableLioncash2019-07-171-4/+6
|/ | | | | | | | | These are std::shared_ptr instances underneath the hood, which means copying them isn't as cheap as a regular pointer. Particularly so on weakly-ordered systems. This avoids atomic reference count increments and decrements where they aren't necessary for the core set of operations.
* shader: Allow tracking of indirect buffers without variable offsetReinUsesLisp2019-07-151-10/+15
| | | | | | While changing this code, simplify tracking code to allow returning the base address node, this way callers don't have to manually rebuild it on each invocation.
* shader: Use shared_ptr to store nodes and move initialization to fileReinUsesLisp2019-06-061-9/+9
| | | | | | | | | 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.
* shader/shader_ir: Mark tracking functions as const member functionsLioncash2019-05-191-5/+7
| | | | | These don't actually modify instance state, so they can be marked as const member functions
* shader_ir: Implement immediate register trackingReinUsesLisp2019-03-301-1/+16
|
* shader/track: Resolve variable shadowing warningsLioncash2019-02-251-5/+5
|
* shader/track: Search inside of conditional nodesReinUsesLisp2019-02-031-0/+11
| | | | | | Some games search conditionally use global memory instructions. This allows the heuristic to search inside conditional nodes for the source constant buffer.
* shader_ir: Rename BasicBlock to NodeBlockReinUsesLisp2019-02-031-3/+3
| | | | It's not always used as a basic block. Rename it for consistency.
* shader_decode: Implement LDG and basic cbuf trackingReinUsesLisp2019-01-301-0/+76