diff options
| author | 2021-03-04 14:14:19 -0500 | |
|---|---|---|
| committer | 2021-03-04 14:14:19 -0500 | |
| commit | 0639244d856f403cc9bdec5ca927df7a61edd1d8 (patch) | |
| tree | a87c6e3142665bfb632001507cf04c973a88e1a6 /src/video_core/host_shaders | |
| parent | Merge pull request #6004 from german77/udprandom (diff) | |
| download | yuzu-0639244d856f403cc9bdec5ca927df7a61edd1d8.tar.gz yuzu-0639244d856f403cc9bdec5ca927df7a61edd1d8.tar.xz yuzu-0639244d856f403cc9bdec5ca927df7a61edd1d8.zip | |
renderer_opengl: Swizzle BGR textures on copy
OpenGL does not natively support BGR internal formats, which causes many BGR textures to render incorrectly, with Red and Blue channels swapped.
This commit aims to address this by swizzling the blue and red channels on texture copies when a BGR format is encountered.
Diffstat (limited to 'src/video_core/host_shaders')
| -rw-r--r-- | src/video_core/host_shaders/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/video_core/host_shaders/opengl_copy_bgra.comp | 15 |
2 files changed, 16 insertions, 0 deletions
diff --git a/src/video_core/host_shaders/CMakeLists.txt b/src/video_core/host_shaders/CMakeLists.txt index 970120acc..3494318ca 100644 --- a/src/video_core/host_shaders/CMakeLists.txt +++ b/src/video_core/host_shaders/CMakeLists.txt | |||
| @@ -5,6 +5,7 @@ set(SHADER_FILES | |||
| 5 | convert_float_to_depth.frag | 5 | convert_float_to_depth.frag |
| 6 | full_screen_triangle.vert | 6 | full_screen_triangle.vert |
| 7 | opengl_copy_bc4.comp | 7 | opengl_copy_bc4.comp |
| 8 | opengl_copy_bgra.comp | ||
| 8 | opengl_present.frag | 9 | opengl_present.frag |
| 9 | opengl_present.vert | 10 | opengl_present.vert |
| 10 | pitch_unswizzle.comp | 11 | pitch_unswizzle.comp |
diff --git a/src/video_core/host_shaders/opengl_copy_bgra.comp b/src/video_core/host_shaders/opengl_copy_bgra.comp new file mode 100644 index 000000000..2571a4abf --- /dev/null +++ b/src/video_core/host_shaders/opengl_copy_bgra.comp | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | // Copyright 2021 yuzu Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #version 430 core | ||
| 6 | |||
| 7 | layout (local_size_x = 4, local_size_y = 4) in; | ||
| 8 | |||
| 9 | layout(binding = 0, rgba8) readonly uniform image2DArray bgr_input; | ||
| 10 | layout(binding = 1, rgba8) writeonly uniform image2DArray bgr_output; | ||
| 11 | |||
| 12 | void main() { | ||
| 13 | vec4 color = imageLoad(bgr_input, ivec3(gl_GlobalInvocationID)); | ||
| 14 | imageStore(bgr_output, ivec3(gl_GlobalInvocationID), color.bgra); | ||
| 15 | } | ||