aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/shader/decode.cpp
AgeCommit message (Collapse)Author
2021-07-22shader: Remove old shader managementReinUsesLisp
2020-12-30video_core: Rewrite the texture cacheReinUsesLisp
The current texture cache has several points that hurt maintainability and performance. It's easy to break unrelated parts of the cache when doing minor changes. The cache can easily forget valuable information about the cached textures by CPU writes or simply by its normal usage.The current texture cache has several points that hurt maintainability and performance. It's easy to break unrelated parts of the cache when doing minor changes. The cache can easily forget valuable information about the cached textures by CPU writes or simply by its normal usage. This commit aims to address those issues.
2020-12-07video_core: Make use of ordered container contains() where applicableLioncash
With C++20, we can use the more concise contains() member function instead of comparing the result of the find() call with the end iterator.
2020-12-05video_core: Resolve more variable shadowing scenarios pt.3Lioncash
Cleans out the rest of the occurrences of variable shadowing and makes any further occurrences of shadowing compiler errors.
2020-05-09shader_ir: Separate float-point comparisons in ordered and unorderedReinUsesLisp
This allows us to use native SPIR-V instructions without having to manually check for NAN.
2020-05-02Merge pull request #3693 from ReinUsesLisp/clean-samplersbunnei
shader/texture: Support multiple unknown sampler properties
2020-04-26shader/memory_util: Deduplicate codeReinUsesLisp
Deduplicate code shared between vk_pipeline_cache and gl_shader_cache as well as shader decoder code. While we are at it, fix a bug in gl_shader_cache where compute shaders had an start offset of a stage shader.
2020-04-23shader_ir: Turn classes into data structuresReinUsesLisp
2020-03-09video_core: Rename "const buffer locker" to "registry"ReinUsesLisp
2020-03-09gl_shader_cache: Rework shader cache and remove post-specializationsReinUsesLisp
Instead of pre-specializing shaders and then post-specializing them, drop the later and only "specialize" the shader while decoding it.
2020-01-25Shader_IR: Address feedback.Fernando Sahmkow
2020-01-24Shader_IR: Corrections, styling and extras.Fernando Sahmkow
2020-01-24Shader_IR: deduce size of indexed samplersFernando Sahmkow
2020-01-24Shader_IR: Address FeedbackFernando Sahmkow
2020-01-24Shader_IR: Address FeedbackFernando Sahmkow
2020-01-24GPU: Implement guest driver profile and deduce texture handler sizes.Fernando Sahmkow
2019-11-08video_core: Silence implicit conversion warningsReinUsesLisp
2019-10-26Shader_IR: Address Feedback.Fernando Sahmkow
2019-10-25gl_shader_decompiler: Move entries to a separate functionReinUsesLisp
2019-10-25Shader_IR: Implement Fast BRX and allow multi-branches in the CFG.Fernando Sahmkow
2019-10-25Shader_Cache: setup connection of ConstBufferLockerFernando Sahmkow
2019-10-04Shader_ir: Address feedbackFernando Sahmkow
2019-10-04Shader_Ir: Refactor Decompilation process and allow multiple decompilation ↵Fernando Sahmkow
modes.
2019-10-04gl_shader_decompiler: Implement AST decompilingFernando Sahmkow
2019-10-04shader_ir: Declare Manager and pass it to appropiate programs.Fernando Sahmkow
2019-08-21shader_ir: Implement VOTEReinUsesLisp
Implement VOTE using Nvidia's intrinsics. Documentation about these can be found here https://developer.nvidia.com/reading-between-threads-shader-intrinsics Instead of using portable ARB instructions I opted to use Nvidia intrinsics because these are the closest we have to how Tegra X1 hardware renders. To stub VOTE on non-Nvidia drivers (including nouveau) this commit simulates a GPU with a warp size of one, returning what is meaningful for the instruction being emulated: * anyThreadNV(value) -> value * allThreadsNV(value) -> value * allThreadsEqualNV(value) -> true ballotARB, also known as "uint64_t(activeThreadsNV())", emits VOTE.ANY Rd, PT, PT; on nouveau's compiler. This doesn't match exactly to Nvidia's code VOTE.ALL Rd, PT, PT; Which is emulated with activeThreadsNV() by this commit. In theory this shouldn't really matter since .ANY, .ALL and .EQ affect the predicates (set to PT on those cases) and not the registers.
2019-07-18video_core/shader/decode: Prevent sign-conversion warningsLioncash
Makes it explicit that the conversions here are intentional.
2019-07-16shader_ir: std::move Node instance where applicableLioncash
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.
2019-07-09shader_ir: Add comments on missing instruction.Fernando Sahmkow
Also shows Nvidia's address space on comments.
2019-07-09shader_ir: limit explorastion to best known program size.Fernando Sahmkow
2019-07-09shader_ir: Correct parsing of scheduling instructions and correct sizingFernando Sahmkow
2019-07-09shader_ir: Correct max sizingFernando Sahmkow
2019-07-09shader_ir: Remove unnecessary constructors and use optional for ScanFlow resultFernando Sahmkow
2019-07-09shader_ir: Corrections, documenting and asserting control_flowFernando Sahmkow
2019-07-09shader_ir: Unify blocks in decompiled shaders.Fernando Sahmkow
2019-07-09shader_ir: Decompile Flow StackFernando Sahmkow
2019-07-09shader_ir: propagate shader size to the IRFernando Sahmkow
2019-07-09shader_ir: Remove the old scanner.Fernando Sahmkow
2019-07-09shader_ir: Implement a new shader scannerFernando Sahmkow
2019-06-20shader: Decode SUST and implement backing image functionalityReinUsesLisp
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-04-18video_core: Silent -Wswitch warningsReinUsesLisp
2019-02-26shader/decode: Split memory and texture instructions decodingReinUsesLisp
2019-02-03shader_ir: Rename BasicBlock to NodeBlockReinUsesLisp
It's not always used as a basic block. Rename it for consistency.
2019-02-03shader_ir: Pass decoded nodes as a whole instead of per basic blocksReinUsesLisp
Some games call LDG at the top of a basic block, making the tracking heuristic to fail. This commit lets the heuristic the decoded nodes as a whole instead of per basic blocks. This may lead to some false positives but allows it the heuristic to track cases it previously couldn't.
2019-01-28shader/decode: Avoid a pessimizing std::move within DecodeRange()Lioncash
std::moveing a local variable in a return statement has the potential to prevent copy elision from occurring, so this can just be converted into a regular return.
2019-01-15shader_ir: Pass to decoder functions basic block's codeReinUsesLisp
2019-01-15shader_decode: Implement VMAD and VSETPReinUsesLisp
2019-01-15video_core: Address feedbackReinUsesLisp
2019-01-15shader_ir: Fixup file inclusions and clang-formatReinUsesLisp