8ac3a3f45e
Merge pull request #369 from Subv/shader_instr2
...
ShaderGen: Implemented fsetp/kil and predicated instruction execution.
2018-04-20 22:29:39 -04:00
634d9ee18b
Merge pull request #374 from lioncash/noexcept
...
gl_resource_manager: Add missing noexcept specifiers to move constructors and assignment operators
2018-04-20 22:28:47 -04:00
17a0ef1e1e
ShaderGen: Implemented the KIL instruction, which is equivalent to 'discard'.
2018-04-20 21:09:34 -05:00
c3a8ea76f1
ShaderGen: Implemented predicated instruction execution.
...
Each predicated instruction will be wrapped in an `if (predicate) { instruction_body; }` in the GLSL, where `predicate` is one of the predicate boolean variables previously set by fsetp.
2018-04-20 21:09:33 -05:00
0a5e01b710
ShaderGen: Implemented the fsetp instruction.
...
Predicate variables are now added to the generated shader code in the form of 'pX' where X is the predicate id.
These predicate variables are initialized to false on shader startup and are set via the fsetp instructions.
TODO:
* Not all the comparison types are implemented.
* Only the single-predicate version is implemented.
2018-04-20 21:09:33 -05:00
ab71997b2c
gl_resource_manager: Add missing noexcept specifiers to move constructors and assignment operators
...
Standard library containers may use std::move_if_noexcept to perform
move operations. If a move cannot be performed under these
circumstances, then a copy is attempted. Given we only intend for these
types to be move-only this can be somewhat problematic. By defining
these to be noexcept we prevent cases where copies may be attempted.
2018-04-20 20:04:00 -04:00
7db0b8d74f
gl_rasterizer_cache: Make MatchFlags an enum class
...
Prevents implicit conversions and scope pollution.
2018-04-20 19:50:05 -04:00
d03fc77475
ShaderGen: Register id 255 is special and is hardcoded to return 0 (SR_ZERO).
2018-04-20 14:57:40 -05:00
2e0a9f66a0
ShaderGen: Ignore the 'sched' instruction when generating shaders.
...
The 'sched' instruction has a very convoluted encoding, but fortunately it seems to only appear on a fixed interval (once every 4 instructions).
2018-04-20 14:57:40 -05:00
326b044c19
Merge pull request #367 from lioncash/clamp
...
math_util: Remove the Clamp() function
2018-04-20 14:18:03 -04:00
fae2dd0344
math_util: Remove the Clamp() function
...
C++17 adds clamp() to the standard library, so we can remove ours in
favor of it.
2018-04-20 10:14:13 -04:00
701dd649e6
Merge pull request #363 from lioncash/array-size
...
common_funcs: Remove ARRAY_SIZE macro
2018-04-20 09:43:02 -04:00
d9e316e353
common_funcs: Remove ARRAY_SIZE macro
...
C++17 has non-member size() which we can just call where necessary.
2018-04-19 22:36:52 -04:00
3841ec4200
renderer_opengl: Add missing header guards
2018-04-19 21:13:59 -04:00
17ad56c1dc
Merge pull request #356 from lioncash/shader
...
glsl_shader_decompiler: Minor API changes to ShaderWriter
2018-04-19 21:09:25 -04:00
e3b6f6c016
glsl_shader_decompiler: Use std::string_view instead of std::string for AddLine()
...
This function doesn't need to take ownership of the string data being
given to it, considering all we do is append the characters to the
internal string instance.
Instead, use a string view to simply reference the string data without
any potential heap allocation.
Now anything that is a raw const char* won't need to be converted to a
std::string before appending.
2018-04-19 20:12:58 -04:00
412b31ad72
glsl_shader_decompiler: Add AddNewLine() function to ShaderWriter
...
Avoids constructing a std::string just to append a newline character
2018-04-19 20:09:27 -04:00
aa26baa3db
glsl_shader_decompiler: Add char overload for ShaderWriter's AddLine()
...
Avoids constructing a std::string just to append a character.
2018-04-19 20:04:09 -04:00
4ef392906b
glsl_shader_decompiler: Append indentation without constructing a separate std::string
...
The interface of std::string already lets us append N copies of a
character to an existing string.
2018-04-19 19:59:25 -04:00
fe84842137
ShaderGen: Implemented the fmul32i shader instruction.
2018-04-19 13:46:32 -05:00
5367935d35
ShaderGen: Fixed a case where the TEXS instruction would use the same registers for the input and the output.
...
It will now save the coords before writing the outputs in a subscope.
2018-04-19 13:33:17 -05:00
057170928c
GPU: Add support for the DXT23 and DXT45 compressed texture formats.
2018-04-18 20:48:53 -05:00
60e6e8953e
Merge pull request #351 from Subv/tex_formats
...
GPU: Implemented the B5G6R5 format.
2018-04-18 20:20:51 -04:00
2985056340
GPU: Implemented the B5G6R5 format.
2018-04-18 18:16:45 -05:00
ce4f159b1c
gl_shader_gen: Support vertical/horizontal viewport flipping. ( #347 )
...
* gl_shader_gen: Support vertical/horizontal viewport flipping.
* fixup! gl_shader_gen: Support vertical/horizontal viewport flipping.
2018-04-18 16:42:40 -04:00
43d98ca8fe
GLCache: Added boilerplate code to make supporting configurable texture component types.
...
For now only the UNORM type is supported.
2018-04-18 14:17:28 -05:00
5b3fab6766
GLCache: Unify texture and framebuffer formats when converting to OpenGL.
2018-04-18 14:17:28 -05:00
b2c1672e10
GPU: Texture format 8 and framebuffer format 0xD5 are actually ABGR8.
2018-04-18 14:17:27 -05:00
a3e82e8e1f
GLCache: Take into account the texture's block height when caching and unswizzling.
2018-04-18 12:52:53 -05:00
ac09b5a2e9
GLCache: Added a function to convert cached PixelFormats back to texture formats.
...
TODO: The way we handle cached formats must change, framebuffer and texture formats are too different to keep them in the same place.
2018-04-18 12:52:52 -05:00
6b63aaa5b4
GPU: Allow using a configurable block height when unswizzling textures.
2018-04-18 12:52:51 -05:00
c93ea96366
Merge pull request #346 from bunnei/misc-gpu-improvements
...
Misc gpu improvements
2018-04-17 22:17:07 -04:00
71b4a3b9f6
Merge pull request #344 from bunnei/shader-decompiler-p2
...
Shader decompiler changes part 2
2018-04-17 22:10:53 -04:00
7222d9a4c3
gl_rasterizer_cache: Add missing LOG statements.
2018-04-17 21:44:36 -04:00
174cba5c58
renderer_opengl: Implement BlendEquation and BlendFunc.
2018-04-17 18:11:48 -04:00
1f6fe062ca
gl_shader_decompiler: Fix warnings with MarkAsUsed.
2018-04-17 16:36:44 -04:00
ed542a7309
gl_shader_decompiler: Cleanup logging, updating to NGLOG_*.
2018-04-17 16:36:44 -04:00
ef2d5ab0c1
gl_shader_decompiler: Implement several MUFU subops and abs_d.
2018-04-17 16:36:43 -04:00
59f4ff4659
gl_shader_decompiler: Fix swizzle in GetRegister.
2018-04-17 16:36:42 -04:00
5a28dce9eb
gl_shader_decompiler: Implement FMUL/FADD/FFMA immediate instructions.
2018-04-17 16:36:42 -04:00
8d4899d6ea
gl_shader_decompiler: Allow vertex position to be used in fragment shader.
2018-04-17 16:36:40 -04:00
95144cc39c
gl_shader_decompiler: Implement IPA instruction.
2018-04-17 16:36:39 -04:00
8b4443c966
gl_shader_decompiler: Add support for TEXS instruction.
2018-04-17 16:36:38 -04:00
5ba71369ac
gl_shader_decompiler: Use fragment output color for GPR 0-3.
2018-04-17 15:25:54 -04:00
5d529698c9
gl_shader_decompiler: Partially implement MUFU.
2018-04-17 15:25:54 -04:00
2b082e2710
Merge pull request #343 from Subv/tex_wrap_4
...
GPU: Implement some wrap modes
2018-04-17 12:25:24 -04:00
636ad34707
MaxwellToGL: Implemented tex wrap mode 1 (Wrap, GL_REPEAT).
2018-04-17 10:17:18 -05:00
7fc516cc1a
MaxwellToGL: Added a TODO and partial implementation of maxwell wrap mode 4 (Clamp, GL_CLAMP).
...
This clamp mode was removed from OpenGL as of 3.1, we can emulate it by using GL_CLAMP_TO_BORDER to get the border color of the texture, and then manually sampling the edge to mix them in the fragment shader.
2018-04-17 10:16:50 -05:00
77bdc49343
gl_rendering: Use NGLOG* for changed code.
2018-04-16 21:23:28 -04:00
1a1af3fda3
gl_rasterizer: Implement indexed vertex mode.
2018-04-16 21:10:15 -04:00