summaryrefslogtreecommitdiffstats
path: root/src/video_core/shader/decode.cpp (follow)
Commit message (Collapse)AuthorAgeFilesLines
* gl_shader_decompiler: Implement AST decompilingFernando Sahmkow2019-10-051-2/+68
|
* shader_ir: Declare Manager and pass it to appropiate programs.Fernando Sahmkow2019-10-051-25/+3
|
* shader_ir: Implement VOTEReinUsesLisp2019-08-211-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.
* video_core/shader/decode: Prevent sign-conversion warningsLioncash2019-07-191-2/+2
| | | | Makes it explicit that the conversions here are intentional.
* shader_ir: std::move Node instance where applicableLioncash2019-07-171-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.
* shader_ir: Add comments on missing instruction.Fernando Sahmkow2019-07-091-2/+5
| | | | Also shows Nvidia's address space on comments.
* shader_ir: limit explorastion to best known program size.Fernando Sahmkow2019-07-091-1/+1
|
* shader_ir: Correct parsing of scheduling instructions and correct sizingFernando Sahmkow2019-07-091-1/+1
|
* shader_ir: Correct max sizingFernando Sahmkow2019-07-091-1/+1
|
* shader_ir: Remove unnecessary constructors and use optional for ScanFlow resultFernando Sahmkow2019-07-091-5/+5
|
* shader_ir: Corrections, documenting and asserting control_flowFernando Sahmkow2019-07-091-5/+5
|
* shader_ir: Unify blocks in decompiled shaders.Fernando Sahmkow2019-07-091-8/+27
|
* shader_ir: Decompile Flow StackFernando Sahmkow2019-07-091-0/+46
|
* shader_ir: propagate shader size to the IRFernando Sahmkow2019-07-091-3/+3
|
* shader_ir: Remove the old scanner.Fernando Sahmkow2019-07-091-66/+0
|
* shader_ir: Implement a new shader scannerFernando Sahmkow2019-07-091-16/+23
|
* shader: Decode SUST and implement backing image functionalityReinUsesLisp2019-06-211-0/+1
|
* shader: Use shared_ptr to store nodes and move initialization to fileReinUsesLisp2019-06-061-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.
* video_core: Silent -Wswitch warningsReinUsesLisp2019-04-181-1/+3
|
* shader/decode: Split memory and texture instructions decodingReinUsesLisp2019-02-261-0/+1
|
* shader_ir: Rename BasicBlock to NodeBlockReinUsesLisp2019-02-031-30/+29
| | | | It's not always used as a basic block. Rename it for consistency.
* shader_ir: Pass decoded nodes as a whole instead of per basic blocksReinUsesLisp2019-02-031-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.
* shader/decode: Avoid a pessimizing std::move within DecodeRange()Lioncash2019-01-281-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.
* shader_ir: Pass to decoder functions basic block's codeReinUsesLisp2019-01-151-32/+33
|
* shader_decode: Implement VMAD and VSETPReinUsesLisp2019-01-151-0/+1
|
* video_core: Address feedbackReinUsesLisp2019-01-151-0/+4
|
* shader_ir: Fixup file inclusions and clang-formatReinUsesLisp2019-01-151-0/+1
|
* shader_ir: Initial implementationReinUsesLisp2019-01-151-0/+199