summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar bunnei2018-11-05 15:28:48 -0500
committerGravatar GitHub2018-11-05 15:28:48 -0500
commitcdb19e71fee3545eb4a05d020f58e33ab5df68e1 (patch)
tree7539ebd7ac4fd5724abeead173060f996079de85 /src
parentMerge pull request #1633 from ogniK5377/reload-input (diff)
parentImplement Cube Arrays (diff)
downloadyuzu-cdb19e71fee3545eb4a05d020f58e33ab5df68e1.tar.gz
yuzu-cdb19e71fee3545eb4a05d020f58e33ab5df68e1.tar.xz
yuzu-cdb19e71fee3545eb4a05d020f58e33ab5df68e1.zip
Merge pull request #1616 from FernandoS27/cube-array
Implement Cube Arrays
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer_cache.cpp14
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer_cache.h2
-rw-r--r--src/video_core/surface.cpp3
-rw-r--r--src/video_core/surface.h1
4 files changed, 20 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
index 0e11557c4..dcbf009c0 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
@@ -126,6 +126,13 @@ std::size_t SurfaceParams::InnerMemorySize(bool force_gl, bool layer_only,
126 params.target = SurfaceTarget::Texture2D; 126 params.target = SurfaceTarget::Texture2D;
127 } 127 }
128 break; 128 break;
129 case SurfaceTarget::TextureCubeArray:
130 params.depth = config.tic.Depth() * 6;
131 if (!entry.IsArray()) {
132 ASSERT(params.depth == 6);
133 params.target = SurfaceTarget::TextureCubemap;
134 }
135 break;
129 default: 136 default:
130 LOG_CRITICAL(HW_GPU, "Unknown depth for target={}", static_cast<u32>(params.target)); 137 LOG_CRITICAL(HW_GPU, "Unknown depth for target={}", static_cast<u32>(params.target));
131 UNREACHABLE(); 138 UNREACHABLE();
@@ -334,6 +341,8 @@ static GLenum SurfaceTargetToGL(SurfaceTarget target) {
334 return GL_TEXTURE_2D_ARRAY; 341 return GL_TEXTURE_2D_ARRAY;
335 case SurfaceTarget::TextureCubemap: 342 case SurfaceTarget::TextureCubemap:
336 return GL_TEXTURE_CUBE_MAP; 343 return GL_TEXTURE_CUBE_MAP;
344 case SurfaceTarget::TextureCubeArray:
345 return GL_TEXTURE_CUBE_MAP_ARRAY_ARB;
337 } 346 }
338 LOG_CRITICAL(Render_OpenGL, "Unimplemented texture target={}", static_cast<u32>(target)); 347 LOG_CRITICAL(Render_OpenGL, "Unimplemented texture target={}", static_cast<u32>(target));
339 UNREACHABLE(); 348 UNREACHABLE();
@@ -761,6 +770,7 @@ static void CopySurface(const Surface& src_surface, const Surface& dst_surface,
761 break; 770 break;
762 case SurfaceTarget::Texture3D: 771 case SurfaceTarget::Texture3D:
763 case SurfaceTarget::Texture2DArray: 772 case SurfaceTarget::Texture2DArray:
773 case SurfaceTarget::TextureCubeArray:
764 glTextureSubImage3D(dst_surface->Texture().handle, 0, 0, 0, 0, width, height, 774 glTextureSubImage3D(dst_surface->Texture().handle, 0, 0, 0, 0, width, height,
765 static_cast<GLsizei>(dst_params.depth), dest_format.format, 775 static_cast<GLsizei>(dst_params.depth), dest_format.format,
766 dest_format.type, nullptr); 776 dest_format.type, nullptr);
@@ -813,6 +823,7 @@ CachedSurface::CachedSurface(const SurfaceParams& params)
813 break; 823 break;
814 case SurfaceTarget::Texture3D: 824 case SurfaceTarget::Texture3D:
815 case SurfaceTarget::Texture2DArray: 825 case SurfaceTarget::Texture2DArray:
826 case SurfaceTarget::TextureCubeArray:
816 glTexStorage3D(SurfaceTargetToGL(params.target), params.max_mip_level, 827 glTexStorage3D(SurfaceTargetToGL(params.target), params.max_mip_level,
817 format_tuple.internal_format, rect.GetWidth(), rect.GetHeight(), 828 format_tuple.internal_format, rect.GetWidth(), rect.GetHeight(),
818 params.depth); 829 params.depth);
@@ -1065,6 +1076,7 @@ void CachedSurface::UploadGLMipmapTexture(u32 mip_map, GLuint read_fb_handle,
1065 &gl_buffer[mip_map][buffer_offset]); 1076 &gl_buffer[mip_map][buffer_offset]);
1066 break; 1077 break;
1067 case SurfaceTarget::Texture2DArray: 1078 case SurfaceTarget::Texture2DArray:
1079 case SurfaceTarget::TextureCubeArray:
1068 glCompressedTexImage3D(SurfaceTargetToGL(params.target), mip_map, tuple.internal_format, 1080 glCompressedTexImage3D(SurfaceTargetToGL(params.target), mip_map, tuple.internal_format,
1069 static_cast<GLsizei>(params.MipWidth(mip_map)), 1081 static_cast<GLsizei>(params.MipWidth(mip_map)),
1070 static_cast<GLsizei>(params.MipHeight(mip_map)), 1082 static_cast<GLsizei>(params.MipHeight(mip_map)),
@@ -1114,6 +1126,7 @@ void CachedSurface::UploadGLMipmapTexture(u32 mip_map, GLuint read_fb_handle,
1114 tuple.format, tuple.type, &gl_buffer[mip_map][buffer_offset]); 1126 tuple.format, tuple.type, &gl_buffer[mip_map][buffer_offset]);
1115 break; 1127 break;
1116 case SurfaceTarget::Texture2DArray: 1128 case SurfaceTarget::Texture2DArray:
1129 case SurfaceTarget::TextureCubeArray:
1117 glTexSubImage3D(SurfaceTargetToGL(params.target), mip_map, x0, y0, 0, 1130 glTexSubImage3D(SurfaceTargetToGL(params.target), mip_map, x0, y0, 0,
1118 static_cast<GLsizei>(rect.GetWidth()), 1131 static_cast<GLsizei>(rect.GetWidth()),
1119 static_cast<GLsizei>(rect.GetHeight()), params.depth, tuple.format, 1132 static_cast<GLsizei>(rect.GetHeight()), params.depth, tuple.format,
@@ -1316,6 +1329,7 @@ Surface RasterizerCacheOpenGL::RecreateSurface(const Surface& old_surface,
1316 break; 1329 break;
1317 case SurfaceTarget::TextureCubemap: 1330 case SurfaceTarget::TextureCubemap:
1318 case SurfaceTarget::Texture3D: 1331 case SurfaceTarget::Texture3D:
1332 case SurfaceTarget::TextureCubeArray:
1319 AccurateCopySurface(old_surface, new_surface); 1333 AccurateCopySurface(old_surface, new_surface);
1320 break; 1334 break;
1321 default: 1335 default:
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.h b/src/video_core/renderer_opengl/gl_rasterizer_cache.h
index 46ad37897..c0b6bc4e6 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer_cache.h
+++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.h
@@ -49,6 +49,8 @@ struct SurfaceParams {
49 return "Texture2DArray"; 49 return "Texture2DArray";
50 case SurfaceTarget::TextureCubemap: 50 case SurfaceTarget::TextureCubemap:
51 return "TextureCubemap"; 51 return "TextureCubemap";
52 case SurfaceTarget::TextureCubeArray:
53 return "TextureCubeArray";
52 default: 54 default:
53 LOG_CRITICAL(HW_GPU, "Unimplemented surface_target={}", static_cast<u32>(target)); 55 LOG_CRITICAL(HW_GPU, "Unimplemented surface_target={}", static_cast<u32>(target));
54 UNREACHABLE(); 56 UNREACHABLE();
diff --git a/src/video_core/surface.cpp b/src/video_core/surface.cpp
index e284a4604..051ad3964 100644
--- a/src/video_core/surface.cpp
+++ b/src/video_core/surface.cpp
@@ -19,6 +19,8 @@ SurfaceTarget SurfaceTargetFromTextureType(Tegra::Texture::TextureType texture_t
19 return SurfaceTarget::Texture3D; 19 return SurfaceTarget::Texture3D;
20 case Tegra::Texture::TextureType::TextureCubemap: 20 case Tegra::Texture::TextureType::TextureCubemap:
21 return SurfaceTarget::TextureCubemap; 21 return SurfaceTarget::TextureCubemap;
22 case Tegra::Texture::TextureType::TextureCubeArray:
23 return SurfaceTarget::TextureCubeArray;
22 case Tegra::Texture::TextureType::Texture1DArray: 24 case Tegra::Texture::TextureType::Texture1DArray:
23 return SurfaceTarget::Texture1DArray; 25 return SurfaceTarget::Texture1DArray;
24 case Tegra::Texture::TextureType::Texture2DArray: 26 case Tegra::Texture::TextureType::Texture2DArray:
@@ -39,6 +41,7 @@ bool SurfaceTargetIsLayered(SurfaceTarget target) {
39 case SurfaceTarget::Texture1DArray: 41 case SurfaceTarget::Texture1DArray:
40 case SurfaceTarget::Texture2DArray: 42 case SurfaceTarget::Texture2DArray:
41 case SurfaceTarget::TextureCubemap: 43 case SurfaceTarget::TextureCubemap:
44 case SurfaceTarget::TextureCubeArray:
42 return true; 45 return true;
43 default: 46 default:
44 LOG_CRITICAL(HW_GPU, "Unimplemented surface_target={}", static_cast<u32>(target)); 47 LOG_CRITICAL(HW_GPU, "Unimplemented surface_target={}", static_cast<u32>(target));
diff --git a/src/video_core/surface.h b/src/video_core/surface.h
index 0ef7849a4..dfdb8d122 100644
--- a/src/video_core/surface.h
+++ b/src/video_core/surface.h
@@ -120,6 +120,7 @@ enum class SurfaceTarget {
120 Texture1DArray, 120 Texture1DArray,
121 Texture2DArray, 121 Texture2DArray,
122 TextureCubemap, 122 TextureCubemap,
123 TextureCubeArray,
123}; 124};
124 125
125/** 126/**