Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | Correct XMAD mode, psl and high_b on different encodings. | Fernando Sahmkow | 2019-04-08 | 1 | -9/+30 |
| | |||||
* | shader_ir/decode: Silent implicit sign conversion warning | Mat M | 2019-03-31 | 1 | -2/+2 |
| | | | Co-Authored-By: ReinUsesLisp <reinuseslisp@airmail.cc> | ||||
* | shader_ir/decode: Implement AOFFI for TEX and TLD4 | ReinUsesLisp | 2019-03-30 | 2 | -27/+94 |
| | |||||
* | shader_ir: Implement immediate register tracking | ReinUsesLisp | 2019-03-30 | 2 | -1/+19 |
| | |||||
* | shader/decode: Remove extras from MetaTexture | ReinUsesLisp | 2019-02-26 | 2 | -15/+26 |
| | |||||
* | shader/decode: Split memory and texture instructions decoding | ReinUsesLisp | 2019-02-26 | 4 | -493/+527 |
| | |||||
* | shader/track: Resolve variable shadowing warnings | Lioncash | 2019-02-25 | 1 | -5/+5 |
| | |||||
* | Merge pull request #2118 from FernandoS27/ipa-improve | bunnei | 2019-02-25 | 2 | -3/+14 |
|\ | | | | | shader_decompiler: Improve Accuracy of Attribute Interpolation. | ||||
| * | shader_decompiler: Improve Accuracy of Attribute Interpolation. | Fernando Sahmkow | 2019-02-14 | 2 | -3/+14 |
| | | |||||
* | | gl_shader_decompiler: Re-implement TLDS lod | ReinUsesLisp | 2019-02-12 | 1 | -1/+1 |
|/ | |||||
* | Merge pull request #2108 from FernandoS27/fix-cc | bunnei | 2019-02-12 | 1 | -2/+2 |
|\ | | | | | Fix incorrect value for CC bit in IADD | ||||
| * | Fix incorrect value for CC bit in IADD | Fernando Sahmkow | 2019-02-11 | 1 | -2/+2 |
| | | |||||
* | | Merge pull request #2109 from FernandoS27/fix-f2i | bunnei | 2019-02-12 | 1 | -3/+3 |
|\ \ | | | | | | | Corrected F2I None mode to RoundEven. | ||||
| * | | Corrected F2I None mode to RoundEven. | Fernando Sahmkow | 2019-02-11 | 1 | -3/+3 |
| |/ | |||||
* | | shader_ir: Remove F4 prefix to texture operations | ReinUsesLisp | 2019-02-07 | 2 | -14/+13 |
| | | | | | | | | | | | | This was originally included because texture operations returned a vec4. These operations now return a single float and the F4 prefix doesn't mean anything. | ||||
* | | shader_ir: Clean texture management code | ReinUsesLisp | 2019-02-07 | 2 | -101/+63 |
|/ | | | | | | | | | Previous code relied on GLSL parameter order (something that's always ill-formed on an IR design). This approach passes spatial coordiantes through operation nodes and array and depth compare values in the the texture metadata. It still contains an "extra" vector containing generic nodes for bias and component index (for example) which is still a bit ill-formed but it should be better than the previous approach. | ||||
* | Merge pull request #2083 from ReinUsesLisp/shader-ir-cbuf-tracking | bunnei | 2019-02-07 | 29 | -124/+138 |
|\ | | | | | shader/track: Add a more permissive global memory tracking | ||||
| * | shader/track: Search inside of conditional nodes | ReinUsesLisp | 2019-02-03 | 1 | -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 NodeBlock | ReinUsesLisp | 2019-02-03 | 29 | -119/+117 |
| | | | | | | | | 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 blocks | ReinUsesLisp | 2019-02-03 | 27 | -57/+62 |
| | | | | | | | | | | | | | | | | | | 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. | ||||
* | | gl_shader_disk_cache: Save GLSL and entries into the precompiled file | ReinUsesLisp | 2019-02-07 | 1 | -0/+9 |
| | | |||||
* | | Merge pull request #2081 from ReinUsesLisp/lmem-64 | bunnei | 2019-02-05 | 1 | -12/+43 |
|\ \ | | | | | | | shader_ir/memory: Add LD_L 64 bits loads | ||||
| * | | shader_ir/memory: Add ST_L 64 and 128 bits stores | ReinUsesLisp | 2019-02-03 | 1 | -3/+11 |
| | | | |||||
| * | | shader_ir/memory: Add LD_L 128 bits loads | ReinUsesLisp | 2019-02-03 | 1 | -7/+19 |
| | | | |||||
| * | | shader_bytecode: Rename BytesN enums to BitsN | ReinUsesLisp | 2019-02-03 | 1 | -4/+4 |
| | | | |||||
| * | | shader_ir/memory: Add LD_L 64 bits loads | ReinUsesLisp | 2019-02-03 | 1 | -6/+17 |
| |/ | |||||
* | | Merge pull request #2082 from FernandoS27/txq-stl | bunnei | 2019-02-05 | 1 | -6/+9 |
|\ \ | |/ |/| | Fix TXQ not using the component mask. | ||||
| * | Fix TXQ not using the component mask. | Fernando Sahmkow | 2019-02-03 | 1 | -6/+9 |
| | | |||||
* | | shader_ir: Unify constant buffer offset values | ReinUsesLisp | 2019-01-30 | 14 | -22/+24 |
|/ | | | | | | | Constant buffer values on the shader IR were using different offsets if the access direct or indirect. cbuf34 has a non-multiplied offset while cbuf36 does. On shader decoding this commit multiplies it by four on cbuf34 queries. | ||||
* | shader_decode: Implement LDG and basic cbuf tracking | ReinUsesLisp | 2019-01-30 | 3 | -4/+159 |
| | |||||
* | shader/shader_ir: Amend three comment typos | Lioncash | 2019-01-28 | 1 | -3/+3 |
| | | | | | Given we're in the area, these are three trivial typos that can be corrected. | ||||
* | shader/shader_ir: Amend constructor initializer ordering for AbufNode | Lioncash | 2019-01-28 | 1 | -2/+2 |
| | | | | | Orders the class members in the same order that they would actually be initialized in. Gets rid of two compiler warnings. | ||||
* | shader/decode: Avoid a pessimizing std::move within DecodeRange() | Lioncash | 2019-01-28 | 1 | -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: Fixup clang build | ReinUsesLisp | 2019-01-16 | 1 | -4/+6 |
| | |||||
* | shader_decode: Fixup XMAD | ReinUsesLisp | 2019-01-15 | 1 | -1/+1 |
| | |||||
* | shader_ir: Pass to decoder functions basic block's code | ReinUsesLisp | 2019-01-15 | 27 | -82/+83 |
| | |||||
* | shader_decode: Improve zero flag implementation | ReinUsesLisp | 2019-01-15 | 15 | -75/+79 |
| | |||||
* | shader_ir: Remove composite primitives and use temporals instead | ReinUsesLisp | 2019-01-15 | 3 | -175/+187 |
| | |||||
* | shader_decode: Use proper primitive names | ReinUsesLisp | 2019-01-15 | 3 | -15/+13 |
| | |||||
* | shader_decode: Use BitfieldExtract instead of shift + and | ReinUsesLisp | 2019-01-15 | 7 | -48/+30 |
| | |||||
* | shader_ir: Remove Ipa primitive | ReinUsesLisp | 2019-01-15 | 2 | -5/+2 |
| | |||||
* | video_core: Rename glsl_decompiler to gl_shader_decompiler | ReinUsesLisp | 2019-01-15 | 2 | -1631/+0 |
| | |||||
* | shader_ir: Remove RZ and use Register::ZeroIndex instead | ReinUsesLisp | 2019-01-15 | 3 | -12/+16 |
| | |||||
* | shader_decode: Implement TEXS.F16 | ReinUsesLisp | 2019-01-15 | 3 | -15/+57 |
| | |||||
* | shader_decode: Fixup R2P | ReinUsesLisp | 2019-01-15 | 1 | -2/+3 |
| | |||||
* | glsl_decompiler: Fixup TLDS | ReinUsesLisp | 2019-01-15 | 1 | -1/+0 |
| | |||||
* | glsl_decompiler: Fixup geometry shaders | ReinUsesLisp | 2019-01-15 | 1 | -10/+16 |
| | |||||
* | shader_decode: Fixup WriteLogicOperation zero comparison | ReinUsesLisp | 2019-01-15 | 1 | -1/+1 |
| | |||||
* | glsl_decompiler: Fixup permissive member function declarations | ReinUsesLisp | 2019-01-15 | 1 | -133/+133 |
| | |||||
* | shader_decode: Fixup PSET | ReinUsesLisp | 2019-01-15 | 1 | -2/+3 |
| | |||||
* | shader_decode: Fixup clang-format | ReinUsesLisp | 2019-01-15 | 2 | -2/+4 |
| | |||||
* | video_core: Implement IR based geometry shaders | ReinUsesLisp | 2019-01-15 | 3 | -2/+96 |
| | |||||
* | shader_decode: Implement VMAD and VSETP | ReinUsesLisp | 2019-01-15 | 3 | -0/+125 |
| | |||||
* | shader_decode: Implement HSET2 | ReinUsesLisp | 2019-01-15 | 3 | -1/+50 |
| | |||||
* | shader_decode: Rework HSETP2 | ReinUsesLisp | 2019-01-15 | 4 | -47/+57 |
| | |||||
* | shader_decode: Implement R2P | ReinUsesLisp | 2019-01-15 | 1 | -1/+28 |
| | |||||
* | shader_decode: Implement CSETP | ReinUsesLisp | 2019-01-15 | 1 | -14/+37 |
| | |||||
* | shader_decode: Implement PSET | ReinUsesLisp | 2019-01-15 | 1 | -1/+16 |
| | |||||
* | shader_decode: Implement HFMA2 | ReinUsesLisp | 2019-01-15 | 3 | -5/+59 |
| | |||||
* | glsl_decompiler: Remove HNegate inlining | ReinUsesLisp | 2019-01-15 | 1 | -10/+0 |
| | |||||
* | shader_decode: Implement POPC | ReinUsesLisp | 2019-01-15 | 4 | -1/+22 |
| | |||||
* | shader_decode: Implement TLDS (untested) | ReinUsesLisp | 2019-01-15 | 3 | -10/+92 |
| | |||||
* | shader_decode: Update TLD4 reflecting #1862 changes | ReinUsesLisp | 2019-01-15 | 2 | -52/+52 |
| | |||||
* | shader_ir: Fixup TEX and TEXS and partially fix TLD4 decompiling | ReinUsesLisp | 2019-01-15 | 3 | -60/+72 |
| | |||||
* | shader_decode: Fixup FSET | ReinUsesLisp | 2019-01-15 | 1 | -2/+2 |
| | |||||
* | shader_decode: Implement IADD32I | ReinUsesLisp | 2019-01-15 | 1 | -0/+11 |
| | |||||
* | video_core: Return safe values after an assert hits | ReinUsesLisp | 2019-01-15 | 8 | -8/+19 |
| | |||||
* | shader_decode: Implement FFMA | ReinUsesLisp | 2019-01-15 | 1 | -1/+36 |
| | |||||
* | video_core: Address feedback | ReinUsesLisp | 2019-01-15 | 4 | -13/+16 |
| | |||||
* | shader_ir: Fixup file inclusions and clang-format | ReinUsesLisp | 2019-01-15 | 3 | -2/+2 |
| | |||||
* | shader_ir: Move comment node string | Mat M | 2019-01-15 | 1 | -2/+2 |
| | | | Co-Authored-By: ReinUsesLisp <reinuseslisp@airmail.cc> | ||||
* | shader_ir: Address feedback to avoid UB in bit casting | ReinUsesLisp | 2019-01-15 | 1 | -2/+4 |
| | |||||
* | shader_decode: Fixup clang-format | ReinUsesLisp | 2019-01-15 | 2 | -3/+2 |
| | |||||
* | shader_decode: Implement LEA | ReinUsesLisp | 2019-01-15 | 1 | -0/+55 |
| | |||||
* | shader_decode: Implement IADD3 | ReinUsesLisp | 2019-01-15 | 1 | -0/+61 |
| | |||||
* | shader_decode: Implement LOP3 | ReinUsesLisp | 2019-01-15 | 2 | -0/+62 |
| | |||||
* | shader_decode: Implement ST_L | ReinUsesLisp | 2019-01-15 | 1 | -0/+17 |
| | |||||
* | shader_decode: Implement LD_L | ReinUsesLisp | 2019-01-15 | 1 | -0/+18 |
| | |||||
* | shader_decode: Implement HSETP2 | ReinUsesLisp | 2019-01-15 | 1 | -1/+37 |
| | |||||
* | shader_decode: Implement HADD2 and HMUL2 | ReinUsesLisp | 2019-01-15 | 1 | -1/+48 |
| | |||||
* | shader_decode: Implement HADD2_IMM and HMUL2_IMM | ReinUsesLisp | 2019-01-15 | 1 | -1/+28 |
| | |||||
* | shader_decode: Implement MOV_SYS | ReinUsesLisp | 2019-01-15 | 1 | -0/+27 |
| | |||||
* | shader_decode: Implement IMNMX | ReinUsesLisp | 2019-01-15 | 1 | -0/+16 |
| | |||||
* | shader_decode: Implement F2F_C | ReinUsesLisp | 2019-01-15 | 1 | -2/+10 |
| | |||||
* | shader_decode: Implement I2I | ReinUsesLisp | 2019-01-15 | 1 | -0/+26 |
| | |||||
* | shader_decode: Implement BRA internal flag | ReinUsesLisp | 2019-01-15 | 1 | -4/+8 |
| | |||||
* | shader_decode: Implement ISCADD | ReinUsesLisp | 2019-01-15 | 1 | -0/+15 |
| | |||||
* | shader_decode: Implement XMAD | ReinUsesLisp | 2019-01-15 | 1 | -1/+85 |
| | |||||
* | shader_decode: Implement PBK and BRK | ReinUsesLisp | 2019-01-15 | 1 | -1/+22 |
| | |||||
* | shader_decode: Implement LOP | ReinUsesLisp | 2019-01-15 | 1 | -0/+15 |
| | |||||
* | shader_decode: Implement SEL | ReinUsesLisp | 2019-01-15 | 1 | -0/+8 |
| | |||||
* | shader_decode: Implement IADD | ReinUsesLisp | 2019-01-15 | 1 | -1/+28 |
| | |||||
* | shader_decode: Implement ISETP | ReinUsesLisp | 2019-01-15 | 1 | -1/+30 |
| | |||||
* | shader_decode: Implement BFI | ReinUsesLisp | 2019-01-15 | 1 | -1/+22 |
| | |||||
* | shader_decode: Implement ISET | ReinUsesLisp | 2019-01-15 | 1 | -1/+27 |
| | |||||
* | shader_decode: Implement LD_C | ReinUsesLisp | 2019-01-15 | 1 | -0/+31 |
| | |||||
* | shader_decode: Implement SHL | ReinUsesLisp | 2019-01-15 | 1 | -0/+8 |
| | |||||
* | shader_decode: Implement SHR | ReinUsesLisp | 2019-01-15 | 1 | -1/+26 |
| | |||||
* | shader_decode: Implement LOP32I | ReinUsesLisp | 2019-01-15 | 2 | -1/+72 |
| | |||||
* | shader_decode: Implement BFE | ReinUsesLisp | 2019-01-15 | 1 | -1/+25 |
| | |||||
* | shader_decode: Implement FSET | ReinUsesLisp | 2019-01-15 | 1 | -1/+36 |
| | |||||
* | shader_decode: Implement F2I | ReinUsesLisp | 2019-01-15 | 1 | -0/+37 |
| | |||||
* | shader_decode: Implement I2F | ReinUsesLisp | 2019-01-15 | 1 | -0/+23 |
| | |||||
* | shader_decode: Implement F2F | ReinUsesLisp | 2019-01-15 | 1 | -1/+37 |
| | |||||
* | shader_decode: Stub DEPBAR | ReinUsesLisp | 2019-01-15 | 1 | -0/+4 |
| | |||||
* | shader_decode: Implement SSY and SYNC | ReinUsesLisp | 2019-01-15 | 1 | -0/+19 |
| | |||||
* | shader_decode: Implement PSETP | ReinUsesLisp | 2019-01-15 | 1 | -1/+21 |
| | |||||
* | shader_decode: Implement TMML | ReinUsesLisp | 2019-01-15 | 1 | -3/+45 |
| | |||||
* | shader_decode: Implement TEX and TXQ | ReinUsesLisp | 2019-01-15 | 2 | -0/+223 |
| | |||||
* | shader_decode: Implement TEXS (F32) | ReinUsesLisp | 2019-01-15 | 2 | -0/+217 |
| | |||||
* | shader_decode: Implement FSETP | ReinUsesLisp | 2019-01-15 | 1 | -1/+33 |
| | |||||
* | shader_decode: Partially implement BRA | ReinUsesLisp | 2019-01-15 | 1 | -0/+12 |
| | |||||
* | shader_decode: Implement IPA | ReinUsesLisp | 2019-01-15 | 1 | -0/+12 |
| | |||||
* | shader_decode: Implement EXIT | ReinUsesLisp | 2019-01-15 | 1 | -1/+32 |
| | |||||
* | shader_decode: Implement ST_A | ReinUsesLisp | 2019-01-15 | 1 | -0/+30 |
| | |||||
* | shader_decode: Implement LD_A | ReinUsesLisp | 2019-01-15 | 1 | -1/+39 |
| | |||||
* | shader_decode: Implement FADD32I | ReinUsesLisp | 2019-01-15 | 1 | -0/+12 |
| | |||||
* | shader_decode: Implement FMUL32_IMM | ReinUsesLisp | 2019-01-15 | 1 | -0/+10 |
| | |||||
* | shader_decode: Implement MOV32_IMM | ReinUsesLisp | 2019-01-15 | 1 | -1/+9 |
| | |||||
* | shader_decode: Stub RRO_C, RRO_R and RRO_IMM | ReinUsesLisp | 2019-01-15 | 1 | -0/+9 |
| | |||||
* | shader_decode: Implement FMNMX_C, FMNMX_R and FMNMX_IMM | ReinUsesLisp | 2019-01-15 | 1 | -0/+18 |
| | |||||
* | shader_decode: Implement MUFU | ReinUsesLisp | 2019-01-15 | 1 | -0/+29 |
| | |||||
* | shader_decode: Implement FADD_C, FADD_R and FADD_IMM | ReinUsesLisp | 2019-01-15 | 1 | -0/+15 |
| | |||||
* | shader_decode: Implement FMUL_C, FMUL_R and FMUL_IMM | ReinUsesLisp | 2019-01-15 | 1 | -0/+42 |
| | |||||
* | shader_decode: Implement MOV_C and MOV_R | ReinUsesLisp | 2019-01-15 | 1 | -1/+23 |
| | |||||
* | glsl_decompiler: Implementation | ReinUsesLisp | 2019-01-15 | 2 | -0/+1481 |
| | |||||
* | shader_ir: Add condition code helper | ReinUsesLisp | 2019-01-15 | 2 | -0/+13 |
| | |||||
* | shader_ir: Add predicate combiner helper | ReinUsesLisp | 2019-01-15 | 2 | -0/+15 |
| | |||||
* | shader_ir: Add comparison helpers | ReinUsesLisp | 2019-01-15 | 2 | -0/+106 |
| | |||||
* | shader_ir: Add half float helpers | ReinUsesLisp | 2019-01-15 | 2 | -0/+44 |
| | |||||
* | shader_ir: Add integer helpers | ReinUsesLisp | 2019-01-15 | 2 | -0/+40 |
| | |||||
* | shader_ir: Add float helpers | ReinUsesLisp | 2019-01-15 | 2 | -0/+24 |
| | |||||
* | shader_ir: Add setters | ReinUsesLisp | 2019-01-15 | 2 | -0/+24 |
| | |||||
* | shader_ir: Add local memory getters | ReinUsesLisp | 2019-01-15 | 2 | -0/+7 |
| | |||||
* | shader_ir: Add internal flag getters | ReinUsesLisp | 2019-01-15 | 2 | -0/+10 |
| | |||||
* | shader_ir: Add attribute getters | ReinUsesLisp | 2019-01-15 | 2 | -0/+26 |
| | |||||
* | shader_ir: Add constant buffer getters | ReinUsesLisp | 2019-01-15 | 2 | -0/+25 |
| | |||||
* | shader_ir: Add register getter | ReinUsesLisp | 2019-01-15 | 2 | -0/+9 |
| | |||||
* | shader_ir: Add immediate node constructors | ReinUsesLisp | 2019-01-15 | 2 | -1/+34 |
| | |||||
* | shader_ir: Initial implementation | ReinUsesLisp | 2019-01-15 | 28 | -0/+1542 |
| | |||||
* | Remove references to PICA and rasterizers in video_core | James Rowe | 2018-01-13 | 9 | -2453/+0 |
| | |||||
* | Improved performance of FromAttributeBuffer | Huw Pascoe | 2017-09-17 | 1 | -1/+2 |
| | | | | | | | Ternary operator is optimized by the compiler whereas std::min() is meant to return a value. I've noticed a 5%-10% emulation speed increase. | ||||
* | pica/shader/jit: implement SETEMIT and EMIT | wwylele | 2017-08-19 | 2 | -2/+49 |
| | |||||
* | correct constness | wwylele | 2017-08-19 | 2 | -2/+4 |
| | |||||
* | pica/shader/interpreter: implement SETEMIT and EMIT | wwylele | 2017-08-19 | 1 | -0/+16 |
| | |||||
* | pica/shader: extend UnitState for GS | wwylele | 2017-08-19 | 2 | -0/+84 |
| | | | | | Among four shader units in pica, a special unit can be configured to run both VS and GS program. GSUnitState represents this unit, which extends UnitState (which represents the other three normal units) with extra state for primitive emitting. It uses lots of raw pointers to represent internal structure in order to keep it standard layout type for JIT to access. This unit doesn't handle triangle winding (inverting) itself; instead, it calls a WindingSetter handler. This will be explained in the following commits | ||||
* | pica/shader_interpreter: fix off-by-one in LOOP | wwylele | 2017-07-27 | 1 | -1/+1 |
| | |||||
* | Stop using reserved operator names (and/or/xor) with Xbyak | Yuri Kunde Schlesner | 2017-06-17 | 1 | -13/+13 |
| | | | | Also has the Dynarmic upgrade with the same change | ||||
* | Pica: Set program code / swizzle data limit to 4096 | Jannik Vogel | 2017-05-11 | 5 | -13/+16 |
| | | | | | | | | | | | | | One of the later commits will enable writing to GS regs. It turns out that on startup, most games will write 4096 GS program words. The current limit of 1024 would hence result in 3072 (4096 - 1024) error messages: ``` HW.GPU <Error> video_core/shader/shader.cpp:WriteProgramCode:229: Invalid GS program offset 1024 ``` New constants have been introduced to represent these limits. The swizzle data size has also been raised. This matches the given field sizes of [GPUREG_SH_OPDESCS_INDEX](https://3dbrew.org/wiki/GPU/Internal_Registers#GPUREG_SH_OPDESCS_INDEX) and [GPUREG_SH_CODETRANSFER_INDEX](https://www.3dbrew.org/wiki/GPU/Internal_Registers#GPUREG_SH_CODETRANSFER_INDEX) (12 bit = [0; 4095]). | ||||
* | Doxygen: Amend minor issues (#2593) | Mat M | 2017-02-27 | 2 | -2/+4 |
| | | | | | | | | | Corrects a few issues with regards to Doxygen documentation, for example: - Incorrect parameter referencing. - Missing @param tags. - Typos in @param tags. and a few minor other issues. | ||||
* | video_core/shader: Document sanitized MUL operation | Yuri Kunde Schlesner | 2017-02-12 | 1 | -0/+8 |
| | |||||
* | Merge pull request #2550 from yuriks/pica-refactor2 | Yuri Kunde Schlesner | 2017-02-12 | 2 | -2/+4 |
|\ | | | | | Small VideoCore cleanups | ||||
| * | VideoCore: Split regs.h inclusions | Yuri Kunde Schlesner | 2017-02-09 | 2 | -2/+4 |
| | | |||||
* | | video_core: Fix benign out-of-bounds indexing of array (#2553) | Yuri Kunde Schlesner | 2017-02-11 | 1 | -2/+1 |
|/ | | | | | | The resulting pointer wasn't written to unless the index was verified as valid, but that's still UB and triggered debug checks in MSVC. Reported by garrettboast on IRC | ||||
* | VideoCore: Move Regs to its own file | Yuri Kunde Schlesner | 2017-02-04 | 2 | -2/+2 |
| | |||||
* | VideoCore: Split shader regs from Regs struct | Yuri Kunde Schlesner | 2017-02-04 | 4 | -6/+6 |
| | |||||
* | VideoCore: Split rasterizer regs from Regs struct | Yuri Kunde Schlesner | 2017-02-04 | 2 | -13/+13 |
| | |||||
* | Merge pull request #2476 from yuriks/shader-refactor3 | Yuri Kunde Schlesner | 2017-02-04 | 4 | -78/+58 |
|\ | | | | | Oh No! More shader changes! | ||||
| * | VideoCore: Extract swrast-specific data from OutputVertex | Yuri Kunde Schlesner | 2017-01-30 | 2 | -37/+14 |
| | | |||||
| * | VideoCore/Shader: Clean up OutputVertex::FromAttributeBuffer | Yuri Kunde Schlesner | 2017-01-30 | 1 | -9/+14 |
| | | | | | | | | | | | | This also fixes a long-standing but neverthless harmless memory corruption bug, whech the padding of the OutputVertex struct would get corrupted by unused attributes. | ||||
| * | VideoCore: Split shader output writing from semantic loading | Yuri Kunde Schlesner | 2017-01-30 | 2 | -18/+16 |
| | | |||||
| * | VideoCore: Consistently use shader configuration to load attributes | Yuri Kunde Schlesner | 2017-01-30 | 4 | -12/+12 |
| | | |||||
| * | VideoCore: Rename some types to more accurate names | Yuri Kunde Schlesner | 2017-01-30 | 4 | -6/+6 |
| | | |||||
* | | ShaderJIT: add 16 dummy bytes at the bottom of the stack | wwylele | 2017-02-03 | 1 | -2/+5 |
| | | |||||
* | | Common/x64: remove legacy emitter and abi (#2504) | Weiyi Wang | 2017-01-31 | 1 | -1/+0 |
| | | | | | | These are not used any more since we moved shader JIT to xbyak. | ||||
* | | shader_jit_x64_compiler: esi and edi should be persistent (#2500) | Merry | 2017-01-31 | 1 | -0/+2 |
|/ | |||||
* | VideoCore/Shader: Move entry_point to SetupBatch | Yuri Kunde Schlesner | 2017-01-26 | 5 | -22/+23 |
| | |||||
* | VideoCore/Shader: Move per-batch ShaderEngine state into ShaderSetup | Yuri Kunde Schlesner | 2017-01-26 | 5 | -40/+36 |
| | |||||
* | Shader: Remove OutputRegisters struct | Yuri Kunde Schlesner | 2017-01-26 | 3 | -19/+13 |
| | |||||
* | Shader: Initialize conditional_code in interpreter | Yuri Kunde Schlesner | 2017-01-26 | 2 | -3/+3 |
| | | | | | | | This doesn't belong in LoadInputVertex because it also happens for non-VS invocations. Since it's not used by the JIT it seems adequate to initialize it in the interpreter which is the only thing that cares about them. | ||||
* | Shader: Don't read ShaderSetup from global state | Yuri Kunde Schlesner | 2017-01-26 | 1 | -3/+3 |
| | |||||
* | shader_jit_x64: Don't read program from global state | Yuri Kunde Schlesner | 2017-01-26 | 3 | -22/+22 |
| | |||||
* | VideoCore/Shader: Move ProduceDebugInfo to InterpreterEngine | Yuri Kunde Schlesner | 2017-01-26 | 4 | -19/+10 |
| | |||||
* | VideoCore/Shader: Split interpreter and JIT into separate ShaderEngines | Yuri Kunde Schlesner | 2017-01-26 | 6 | -96/+150 |
| | |||||
* | VideoCore/Shader: Rename shader_jit_x64{ => _compiler}.{cpp,h} | Yuri Kunde Schlesner | 2017-01-26 | 3 | -2/+2 |
| | |||||
* | VideoCore/Shader: Split shader uniform state and shader engine | Yuri Kunde Schlesner | 2017-01-26 | 3 | -16/+46 |
| | | | | | Currently there's only a single dummy implementation, which will be split in a following commit. | ||||
* | VideoCore/Shader: Add constness to methods | Yuri Kunde Schlesner | 2017-01-26 | 2 | -4/+4 |
| | |||||
* | VideoCore/Shader: Use only entry_point as ShaderSetup param | Yuri Kunde Schlesner | 2017-01-26 | 2 | -9/+11 |
| | | | | | This removes all implicit dependency of ShaderState on global PICA state. | ||||
* | VideoCore/Shader: Use self instead of g_state.vs in ShaderSetup | Yuri Kunde Schlesner | 2017-01-26 | 2 | -11/+8 |
| | |||||
* | VideoCore/Shader: Extract input vertex loading code into function | Yuri Kunde Schlesner | 2017-01-26 | 2 | -20/+22 |
| | |||||
* | video_core: fix shader.cpp signed / unsigned warning | Kloen | 2017-01-23 | 1 | -2/+2 |
| | |||||
* | Fix some warnings (#2399) | Jonathan Hao | 2017-01-04 | 1 | -2/+0 |
| | |||||
* | VideoCore/Shader: Extract DebugData out from UnitState | Yuri Kunde Schlesner | 2016-12-16 | 7 | -101/+97 |
| | |||||
* | Remove unnecessary cast | Yuri Kunde Schlesner | 2016-12-16 | 1 | -3/+1 |
| | |||||
* | VideoCore/Shader: Extract evaluate_condition lambda to function scope | Yuri Kunde Schlesner | 2016-12-16 | 1 | -26/+24 |
| | |||||
* | VideoCore/Shader: Extract call lambda up a scope and remove unused param | Yuri Kunde Schlesner | 2016-12-16 | 1 | -21/+17 |
| | |||||
* | VideoCore/Shader: Remove dynamic control flow in (Get)UniformOffset | Yuri Kunde Schlesner | 2016-12-16 | 2 | -18/+11 |
| | |||||
* | VideoCore/Shader: Move DebugData to a separate file | Yuri Kunde Schlesner | 2016-12-16 | 3 | -172/+188 |
| | |||||
* | shader_jit_x64: Use LOOPCOUNT_REG as a 64-bit reg when indexing | Yuri Kunde Schlesner | 2016-12-15 | 1 | -1/+1 |
| | |||||
* | VideoCore: Eliminate an unnecessary copy in the drawcall loop | Yuri Kunde Schlesner | 2016-12-15 | 2 | -2/+2 |
| | |||||
* | shader_jit_x64: Use Reg32 for LOOP* registers, eliminating casts | Yuri Kunde Schlesner | 2016-12-15 | 1 | -16/+16 |
| | |||||
* | VideoCore: Convert x64 shader JIT to use Xbyak for assembly | Yuri Kunde Schlesner | 2016-12-15 | 2 | -223/+225 |
| | |||||
* | shader_jit: Fix non-SSE4.1 path where FLR would not truncate | Jannik Vogel | 2016-12-04 | 1 | -1/+1 |
| | |||||
* | shader_jit: Load LOOPCOUNT_REG and LOOPINC 4 bit left-shifted | Jannik Vogel | 2016-12-02 | 1 | -6/+9 |
| | |||||
* | VideoCore: Shader interpreter cleanups | Yuri Kunde Schlesner | 2016-09-30 | 1 | -32/+42 |
| | |||||
* | VideoCore: Fix out-of-bounds read in ShaderSetup::ProduceDebugInfo | Yuri Kunde Schlesner | 2016-09-30 | 1 | -3/+1 |
| | | | | | | As far as I can tell, memset was replaced by a fill without correcting the parameter type, causing an out-of-bounds array read in the Vec4 constructor. | ||||
* | Remove special rules for Windows.h and library includes | Yuri Kunde Schlesner | 2016-09-21 | 1 | -1/+1 |
| | |||||
* | Use negative priorities to avoid special-casing the self-include | Yuri Kunde Schlesner | 2016-09-21 | 3 | -3/+3 |
| | |||||
* | Remove empty newlines in #include blocks. | Emmanuel Gil Peyrot | 2016-09-21 | 5 | -22/+3 |
| | | | | | | | This makes clang-format useful on those. Also add a bunch of forgotten transitive includes, which otherwise prevented compilation. | ||||
* | Manually tweak source formatting and then re-run clang-format | Yuri Kunde Schlesner | 2016-09-19 | 4 | -9/+6 |
| | |||||
* | Sources: Run clang-format on everything. | Emmanuel Gil Peyrot | 2016-09-18 | 6 | -311/+335 |
| | |||||
* | VideoCore: Fix dangling lambda context in shader interpreter | Yuri Kunde Schlesner | 2016-09-16 | 1 | -1/+1 |
| | | | | | | The static meant that after the first execution, these lambda context would be pointing to a random location on the stack. Fixes a random crash when using the interpreter. | ||||
* | Retrieve shader result from new OutputRegisters-type | Jannik Vogel | 2016-05-16 | 3 | -56/+68 |
| | |||||
* | Use new shader-jit signature for interpreter | Jannik Vogel | 2016-05-13 | 3 | -8/+8 |
| | |||||
* | Refactor access to state in shader-jit | Jannik Vogel | 2016-05-13 | 4 | -24/+42 |
| | |||||
* | Move program_counter and call_stack from UnitState to interpreter | Jannik Vogel | 2016-05-12 | 3 | -45/+42 |
| | |||||
* | Move default_attributes into Pica state | Jannik Vogel | 2016-05-12 | 1 | -2/+0 |
| | |||||
* | Merge pull request #1690 from JayFoxRox/tex-type-3 | bunnei | 2016-05-12 | 1 | -1/+2 |
|\ | | | | | Pica: Implement texture type 3 (Projection2D) | ||||
| * | Pica: Add tc0.w to OutputVertex | Jannik Vogel | 2016-05-11 | 1 | -1/+2 |
| | | |||||
* | | Turn ShaderSetup into struct | Jannik Vogel | 2016-05-11 | 2 | -52/+53 |
|/ | |||||
* | Pica: Replace logic in shader.cpp with loop | Jannik Vogel | 2016-05-03 | 1 | -34/+4 |
| | |||||
* | VideoCore: Run include-what-you-use and fix most includes. | Emmanuel Gil Peyrot | 2016-04-30 | 6 | -14/+43 |
| | |||||
* | Merge pull request #1730 from hrydgard/vertex-loader | bunnei | 2016-04-29 | 1 | -1/+1 |
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Remove late accesses to attribute_config * Refactor: Extract VertexLoader from command_processor.cpp. Preparation for a similar concept to Dolphin or PPSSPP. These can be JIT-ed and cached. * Move "&" to their proper place, add missing includes and make some properly relative. * Don't keep base_address in the loader, it doesn't belong there (with it, the loader can't be cached). * Optimize the vertex loader, nearly doubling its speed. * Debugger fix * Move and rename the MemoryAccesses class to MemoryAccessTracker. | ||||
| * | Refactor: Extract VertexLoader from command_processor.cpp. | Henrik Rydgard | 2016-04-28 | 1 | -1/+1 |
| | | | | | | | | Preparation for a similar concept to Dolphin or PPSSPP. These can be JIT-ed and cached. | ||||
* | | Common: Remove section measurement from profiler (#1731) | Yuri Kunde Schlesner | 2016-04-29 | 1 | -3/+0 |
| | | | | | | | | This has been entirely superseded by MicroProfile. The rest of the code can go when a simpler frametime/FPS meter is added to the GUI. | ||||
* | | shader: Shader size is long uint, not uint. | Sam Spilsbury | 2016-04-24 | 1 | -1/+1 |
| | | |||||
* | | shader: Handle non-CALL opcodes with a break | Sam Spilsbury | 2016-04-24 | 1 | -0/+2 |
| | | |||||
* | | shader: Format string must be provided inline and not as a variable | Sam Spilsbury | 2016-04-24 | 1 | -1/+1 |
|/ | |||||
* | shader_jit_x64: Rename RuntimeAssert to Compile_Assert. | bunnei | 2016-04-14 | 2 | -5/+5 |
| | |||||
* | shader_jit_x64.cpp: Rename JitCompiler to JitShader. | bunnei | 2016-04-14 | 3 | -92/+92 |
| | |||||
* | shader_jit_x64: Free memory that's no longer needed after compilation. | bunnei | 2016-04-14 | 1 | -0/+6 |
| | |||||
* | shader_jit_x64: Use a sorted vector instead of a set for keeping track of return addresses. | bunnei | 2016-04-14 | 2 | -5/+8 |
| | |||||
* | shader_jit_x64: Use CALL/RET instead of JMP for subroutines. | bunnei | 2016-04-14 | 1 | -17/+7 |
| | |||||
* | shader_jit_x64: Separate initialization and code generation for readability. | bunnei | 2016-04-14 | 1 | -9/+8 |
| | |||||
* | shader_jit_x64: Get rid of unnecessary last_program_counter variable. | bunnei | 2016-04-14 | 2 | -6/+2 |
| | |||||
* | shader_jit_x64: Execute certain asserts at runtime. | bunnei | 2016-04-14 | 2 | -5/+19 |
| | | | | - This is because we compile the full shader code space, and therefore its common to compile malformed instructions. | ||||
* | shader: Remove unused 'state' argument from 'Setup' function. | bunnei | 2016-04-14 | 2 | -3/+2 |
| | |||||
* | shader_jit_x64: Specify shader main offset at runtime. | bunnei | 2016-04-14 | 3 | -10/+6 |
| | |||||
* | shader_jit_x64: Allocate each program independently and persist for emu session. | bunnei | 2016-04-14 | 3 | -38/+28 |
| | |||||
* | shader_jit_x64: Rewrite flow control to support arbitrary CALL and JMP instructions. | bunnei | 2016-04-14 | 2 | -35/+119 |
| | |||||
* | shader_jit_x64: Fix strict memory aliasing issues. | bunnei | 2016-04-14 | 1 | -1/+3 |
| | |||||
* | Merge pull request #1643 from MerryMage/make_unique | Mathew Maidment | 2016-04-06 | 1 | -1/+0 |
|\ | | | | | Common: Remove Common::make_unique, use std::make_unique | ||||
| * | Common: Remove Common::make_unique, use std::make_unique | MerryMage | 2016-04-05 | 1 | -1/+0 |
| | | |||||
* | | Merge pull request #1508 from JayFoxRox/vs-output-map | bunnei | 2016-03-22 | 1 | -4/+14 |
|\ \ | |/ |/| | Respect vs output map | ||||
| * | Respect vs output map | Jannik Vogel | 2016-03-14 | 1 | -4/+14 |
| | | |||||
* | | Merge pull request #1538 from lioncash/dot | bunnei | 2016-03-20 | 1 | -5/+3 |
|\ \ | | | | | | | shader_interpreter: use std::inner_product for the dot product | ||||
| * | | shader_interpreter: use std::inner_product for the dot product | Lioncash | 2016-03-17 | 1 | -5/+3 |
| | | | | | | | | | | | | Same thing, less code. | ||||
* | | | video_core: Don't cast away const | Lioncash | 2016-03-17 | 1 | -1/+1 |
|/ / | |||||
* | | Merge pull request #1503 from bunnei/clear-jit-cache | bunnei | 2016-03-16 | 3 | -7/+27 |
|\ \ | | | | | | | Clear JIT cache | ||||
| * | | shader_jit_x64: Clear cache after code space fills up. | bunnei | 2016-03-12 | 3 | -2/+19 |
| | | | |||||
| * | | shader_jit_x64: Make assert outputs more useful & cleanup formatting. | bunnei | 2016-03-12 | 1 | -4/+7 |
| | | | |||||
| * | | shader: Update log message to use proper log class. | bunnei | 2016-03-12 | 1 | -1/+1 |
| |/ | |||||
* / | PICA: Fix MAD/MADI encoding | Jannik Vogel | 2016-03-15 | 2 | -29/+33 |
|/ | |||||
* | Common: Get rid of alignment macros | Lioncash | 2016-03-09 | 1 | -4/+4 |
| | | | | | The gl rasterizer already uses alignas, so we may as well move everything over. | ||||
* | Add immediate mode vertex submission | Dwayne Slater | 2016-03-03 | 4 | -2/+22 |
| | |||||
* | pica: Implement decoding of basic fragment lighting components. | bunnei | 2016-02-05 | 2 | -5/+9 |
| | | | | | | | - Diffuse - Distance attenuation - float16/float20 types - Vertex Shader 'view' output | ||||
* | Merge pull request #1367 from yuriks/jit-jmp | bunnei | 2016-01-27 | 2 | -6/+6 |
|\ | | | | | Shader JIT: Fix off-by-one error when compiling JMPs | ||||
| * | Shader JIT: Fix off-by-one error when compiling JMPs | Yuri Kunde Schlesner | 2016-01-24 | 2 | -6/+6 |
| | | | | | | | | | | | | | | There was a mistake in the JMP code which meant that one instruction at the destination would be skipped when the jump was taken. This commit also changes the meaning of the culprit parameter to make it less confusing and avoid similar mistakes in the future. | ||||
* | | Shader: Implement "invert condition" feature of IFU instruction | Yuri Kunde Schlesner | 2016-01-25 | 2 | -2/+5 |
|/ | | | | | | If the bit 0 of the JMPU instruction is set, then the jump condition will be inverted. That is, a jump will happen when the boolean is false instead of when it is true. | ||||
* | video_core: Reorganize headers | Lioncash | 2015-09-11 | 3 | -6/+4 |
| | |||||
* | video_core: Remove unnecessary includes from headers | Lioncash | 2015-09-11 | 1 | -2/+0 |
| | |||||
* | video_core: Remove unused variables | Lioncash | 2015-09-10 | 2 | -2/+0 |
| | |||||
* | Shader JIT: Use SCALE constant from emitter | aroulin | 2015-09-07 | 1 | -4/+4 |
| | |||||
* | Shader: Fix size_t to int casts of register offsets | aroulin | 2015-09-07 | 2 | -15/+21 |
| | |||||
* | Merge pull request #1088 from aroulin/x64-emitter-abi-call | bunnei | 2015-09-02 | 2 | -28/+18 |
|\ | | | | | x64: Proper stack alignment in shader JIT function calls | ||||
| * | x64: Proper stack alignment in shader JIT function calls | aroulin | 2015-09-01 | 2 | -28/+18 |
| | | | | | | | | | | Import Dolphin stack handling and register saving routines Also removes the x86 parts from abi files | ||||
* | | video_core: Fix format specifiers warnings | aroulin | 2015-09-02 | 1 | -1/+2 |
|/ | |||||
* | Shader JIT: Fix SGE/SGEI NaN behavior | aroulin | 2015-08-31 | 1 | -3/+3 |
| | | | | | SGE was incorrectly emulated w.r.t. NaN behavior as the CMPSS SSE instruction was used with NLT | ||||
* | Merge pull request #1065 from yuriks/shader-fp | Yuri Kunde Schlesner | 2015-08-28 | 3 | -56/+87 |
|\ | | | | | Shader FP compliance fixes | ||||
| * | Shader JIT: Tiny micro-optimization in DPH | Yuri Kunde Schlesner | 2015-08-24 | 1 | -4/+4 |
| | | |||||
| * | Shaders: Fix multiplications between 0.0 and inf | Yuri Kunde Schlesner | 2015-08-24 | 2 | -39/+45 |
| | | | | | | | | | | | | | | | | The PICA200 semantics for multiplication are so that when multiplying inf by exactly 0.0, the result is 0.0, instead of NaN, as defined by IEEE. This is relied upon by games. Fixes #1024 (missing OoT interface items) | ||||
| * | Shaders: Explicitly conform to PICA semantics in MAX/MIN | Yuri Kunde Schlesner | 2015-08-24 | 2 | -2/+10 |
| | | |||||
| * | Shader JIT: Add name to second scratch register (XMM4) | Yuri Kunde Schlesner | 2015-08-24 | 1 | -3/+5 |
| | | |||||
| * | Shader JIT: Fix CMP NaN behavior to match hardware | Yuri Kunde Schlesner | 2015-08-24 | 1 | -8/+23 |
| | | |||||
* | | Shader JIT: Fix float to integer rounding in MOVA | aroulin | 2015-08-27 | 1 | -2/+2 |
| | | | | | | | | MOVA converts new address register values from floats to integers using truncation | ||||
* | | Shader JIT: ifdef out reference to ifdef'd out shader_map | archshift | 2015-08-27 | 1 | -0/+2 |
| | | | | | | | | | | shader_map was only defined on x86 architectures, but was cleared on shutdown with no ifdef protection. Ifdef this out so non-x86 architectures can be built. | ||||
* | | Integrate the MicroProfile profiling library | Yuri Kunde Schlesner | 2015-08-25 | 1 | -0/+3 |
| | | | | | | | | | | This brings goodies such as a configurable user interface and multi-threaded timeline view. | ||||
* | | shader_jit: Replace two MDisp usages with MatR | Lioncash | 2015-08-24 | 1 | -2/+2 |
|/ | |||||
* | Merge pull request #1062 from aroulin/shader-rcp-rsq | bunnei | 2015-08-23 | 2 | -10/+10 |
|\ | | | | | Shader: RCP and RSQ computes only the 1st component | ||||
| * | Shader: Use std::sqrt for float instead of sqrt | aroulin | 2015-08-23 | 1 | -1/+1 |
| | | |||||
| * | Shader: RCP and RSQ computes only the 1st component | aroulin | 2015-08-23 | 2 | -10/+10 |
| | | |||||
* | | Shader: implement DPH/DPHI in JIT | aroulin | 2015-08-22 | 2 | -2/+36 |
| | | |||||
* | | Shader: implement DPH/DPHI in interpreter | aroulin | 2015-08-22 | 1 | -1/+8 |
|/ | | | | | Tests revealed that the component with w=1 is SRC1 and not SRC2, it is now fixed on 3dbrew. | ||||
* | Shader: implement SGE, SGEI and SLT in JIT | aroulin | 2015-08-19 | 2 | -15/+36 |
| | |||||
* | Shader: implement SGE, SGEI in interpreter | aroulin | 2015-08-19 | 1 | -0/+14 |
| | |||||
* | Shader: Save caller-saved registers in JIT before a CALL | aroulin | 2015-08-19 | 2 | -0/+33 |
| | |||||
* | Shader: implement EX2 and LG2 in JIT | aroulin | 2015-08-17 | 2 | -2/+22 |
| | |||||
* | Shader: implement EX2 and LG2 in interpreter | aroulin | 2015-08-16 | 1 | -0/+36 |
| | |||||
* | Build fix for Debug configurations. | Tony Wasserka | 2015-08-16 | 1 | -1/+1 |
| | |||||
* | Introduce a shader tracer to allow inspection of input/output values for each processed instruction. | Tony Wasserka | 2015-08-16 | 5 | -37/+322 |
| | |||||
* | citra-qt: Improve shader debugger. | Tony Wasserka | 2015-08-16 | 1 | -6/+0 |
| | | | | Now supports dumping the current shader and recognizes a larger number of output semantics. | ||||
* | Shader: Use a POD struct for registers. | bunnei | 2015-08-16 | 5 | -40/+43 |
| | |||||
* | Rename ARCHITECTURE_X64 definition to ARCHITECTURE_x86_64. | bunnei | 2015-08-16 | 1 | -6/+5 |
| | |||||
* | Common: Cleanup CPU capability detection code. | bunnei | 2015-08-16 | 1 | -5/+5 |
| | |||||
* | Common: Move cpu_detect to x64 directory. | bunnei | 2015-08-16 | 1 | -2/+1 |
| | |||||
* | x64: Refactor to remove fake interfaces and general cleanups. | bunnei | 2015-08-16 | 5 | -144/+22 |
| | |||||
* | JIT: Support negative address offsets. | bunnei | 2015-08-16 | 1 | -26/+25 |
| | |||||
* | Shader: Initial implementation of x86_x64 JIT compiler for Pica vertex shaders. | bunnei | 2015-08-16 | 6 | -2/+924 |
| | | | | | - Config: Add an option for selecting to use shader JIT or interpreter. - Qt: Add a menu option for enabling/disabling the shader JIT. | ||||
* | Common: Added MurmurHash3 hash function for general-purpose use. | bunnei | 2015-08-15 | 1 | -1/+1 |
| | |||||
* | Shader: Define a common interface for running vertex shader programs. | bunnei | 2015-08-15 | 4 | -184/+278 |
| | |||||
* | Shader: Move shader code to its own subdirectory, "shader". | bunnei | 2015-08-15 | 2 | -0/+701 |