summaryrefslogtreecommitdiffstats
path: root/src/video_core/shader/decode.cpp (unfollow)
Commit message (Collapse)AuthorFilesLines
2019-10-05gl_shader_decompiler: Implement AST decompilingFernando Sahmkow1-2/+68
2019-10-05shader_ir: Declare Manager and pass it to appropiate programs.Fernando Sahmkow1-25/+3
2019-08-21shader_ir: Implement VOTEReinUsesLisp1-0/+1
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-19video_core/shader/decode: Prevent sign-conversion warningsLioncash1-2/+2
Makes it explicit that the conversions here are intentional.
2019-07-17shader_ir: std::move Node instance where applicableLioncash1-4/+4
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 Sahmkow1-2/+5
Also shows Nvidia's address space on comments.
2019-07-09shader_ir: limit explorastion to best known program size.Fernando Sahmkow1-1/+1
2019-07-09shader_ir: Correct parsing of scheduling instructions and correct sizingFernando Sahmkow1-1/+1
2019-07-09shader_ir: Correct max sizingFernando Sahmkow1-1/+1
2019-07-09shader_ir: Remove unnecessary constructors and use optional for ScanFlow resultFernando Sahmkow1-5/+5
2019-07-09shader_ir: Corrections, documenting and asserting control_flowFernando Sahmkow1-5/+5
2019-07-09shader_ir: Unify blocks in decompiled shaders.Fernando Sahmkow1-8/+27
2019-07-09shader_ir: Decompile Flow StackFernando Sahmkow1-0/+46
2019-07-09shader_ir: propagate shader size to the IRFernando Sahmkow1-3/+3
2019-07-09shader_ir: Remove the old scanner.Fernando Sahmkow1-66/+0
2019-07-09shader_ir: Implement a new shader scannerFernando Sahmkow1-16/+23
2019-06-21shader: Decode SUST and implement backing image functionalityReinUsesLisp1-0/+1
2019-06-06shader: Use shared_ptr to store nodes and move initialization to fileReinUsesLisp1-0/+1
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 warningsReinUsesLisp1-1/+3
2019-02-26shader/decode: Split memory and texture instructions decodingReinUsesLisp1-0/+1
2019-02-03shader_ir: Rename BasicBlock to NodeBlockReinUsesLisp1-30/+29
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 blocksReinUsesLisp1-6/+9
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()Lioncash1-1/+1
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 codeReinUsesLisp1-32/+33
2019-01-15shader_decode: Implement VMAD and VSETPReinUsesLisp1-0/+1
2019-01-15video_core: Address feedbackReinUsesLisp1-0/+4
2019-01-15shader_ir: Fixup file inclusions and clang-formatReinUsesLisp1-0/+1
2019-01-15shader_ir: Initial implementationReinUsesLisp1-0/+199