diff options
Diffstat (limited to '')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | 14 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer_cache.h | 2 | ||||
| -rw-r--r-- | src/video_core/surface.cpp | 3 | ||||
| -rw-r--r-- | src/video_core/surface.h | 1 |
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 f194a7687..752c4ee84 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | |||
| @@ -128,6 +128,13 @@ std::size_t SurfaceParams::InnerMemorySize(bool force_gl, bool layer_only, | |||
| 128 | params.target = SurfaceTarget::Texture2D; | 128 | params.target = SurfaceTarget::Texture2D; |
| 129 | } | 129 | } |
| 130 | break; | 130 | break; |
| 131 | case SurfaceTarget::TextureCubeArray: | ||
| 132 | params.depth = config.tic.Depth() * 6; | ||
| 133 | if (!entry.IsArray()) { | ||
| 134 | ASSERT(params.depth == 6); | ||
| 135 | params.target = SurfaceTarget::TextureCubemap; | ||
| 136 | } | ||
| 137 | break; | ||
| 131 | default: | 138 | default: |
| 132 | LOG_CRITICAL(HW_GPU, "Unknown depth for target={}", static_cast<u32>(params.target)); | 139 | LOG_CRITICAL(HW_GPU, "Unknown depth for target={}", static_cast<u32>(params.target)); |
| 133 | UNREACHABLE(); | 140 | 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(); |
| @@ -754,6 +763,7 @@ static void CopySurface(const Surface& src_surface, const Surface& dst_surface, | |||
| 754 | break; | 763 | break; |
| 755 | case SurfaceTarget::Texture3D: | 764 | case SurfaceTarget::Texture3D: |
| 756 | case SurfaceTarget::Texture2DArray: | 765 | case SurfaceTarget::Texture2DArray: |
| 766 | case SurfaceTarget::TextureCubeArray: | ||
| 757 | glTextureSubImage3D(dst_surface->Texture().handle, 0, 0, 0, 0, width, height, | 767 | glTextureSubImage3D(dst_surface->Texture().handle, 0, 0, 0, 0, width, height, |
| 758 | static_cast<GLsizei>(dst_params.depth), dest_format.format, | 768 | static_cast<GLsizei>(dst_params.depth), dest_format.format, |
| 759 | dest_format.type, nullptr); | 769 | dest_format.type, nullptr); |
| @@ -806,6 +816,7 @@ CachedSurface::CachedSurface(const SurfaceParams& params) | |||
| 806 | break; | 816 | break; |
| 807 | case SurfaceTarget::Texture3D: | 817 | case SurfaceTarget::Texture3D: |
| 808 | case SurfaceTarget::Texture2DArray: | 818 | case SurfaceTarget::Texture2DArray: |
| 819 | case SurfaceTarget::TextureCubeArray: | ||
| 809 | glTexStorage3D(SurfaceTargetToGL(params.target), params.max_mip_level, | 820 | glTexStorage3D(SurfaceTargetToGL(params.target), params.max_mip_level, |
| 810 | format_tuple.internal_format, rect.GetWidth(), rect.GetHeight(), | 821 | format_tuple.internal_format, rect.GetWidth(), rect.GetHeight(), |
| 811 | params.depth); | 822 | params.depth); |
| @@ -1055,6 +1066,7 @@ void CachedSurface::UploadGLMipmapTexture(u32 mip_map, GLuint read_fb_handle, | |||
| 1055 | &gl_buffer[mip_map][buffer_offset]); | 1066 | &gl_buffer[mip_map][buffer_offset]); |
| 1056 | break; | 1067 | break; |
| 1057 | case SurfaceTarget::Texture2DArray: | 1068 | case SurfaceTarget::Texture2DArray: |
| 1069 | case SurfaceTarget::TextureCubeArray: | ||
| 1058 | glCompressedTexImage3D(SurfaceTargetToGL(params.target), mip_map, tuple.internal_format, | 1070 | glCompressedTexImage3D(SurfaceTargetToGL(params.target), mip_map, tuple.internal_format, |
| 1059 | static_cast<GLsizei>(params.MipWidth(mip_map)), | 1071 | static_cast<GLsizei>(params.MipWidth(mip_map)), |
| 1060 | static_cast<GLsizei>(params.MipHeight(mip_map)), | 1072 | static_cast<GLsizei>(params.MipHeight(mip_map)), |
| @@ -1104,6 +1116,7 @@ void CachedSurface::UploadGLMipmapTexture(u32 mip_map, GLuint read_fb_handle, | |||
| 1104 | tuple.format, tuple.type, &gl_buffer[mip_map][buffer_offset]); | 1116 | tuple.format, tuple.type, &gl_buffer[mip_map][buffer_offset]); |
| 1105 | break; | 1117 | break; |
| 1106 | case SurfaceTarget::Texture2DArray: | 1118 | case SurfaceTarget::Texture2DArray: |
| 1119 | case SurfaceTarget::TextureCubeArray: | ||
| 1107 | glTexSubImage3D(SurfaceTargetToGL(params.target), mip_map, x0, y0, 0, | 1120 | glTexSubImage3D(SurfaceTargetToGL(params.target), mip_map, x0, y0, 0, |
| 1108 | static_cast<GLsizei>(rect.GetWidth()), | 1121 | static_cast<GLsizei>(rect.GetWidth()), |
| 1109 | static_cast<GLsizei>(rect.GetHeight()), params.depth, tuple.format, | 1122 | static_cast<GLsizei>(rect.GetHeight()), params.depth, tuple.format, |
| @@ -1306,6 +1319,7 @@ Surface RasterizerCacheOpenGL::RecreateSurface(const Surface& old_surface, | |||
| 1306 | break; | 1319 | break; |
| 1307 | case SurfaceTarget::TextureCubemap: | 1320 | case SurfaceTarget::TextureCubemap: |
| 1308 | case SurfaceTarget::Texture3D: | 1321 | case SurfaceTarget::Texture3D: |
| 1322 | case SurfaceTarget::TextureCubeArray: | ||
| 1309 | AccurateCopySurface(old_surface, new_surface); | 1323 | AccurateCopySurface(old_surface, new_surface); |
| 1310 | break; | 1324 | break; |
| 1311 | default: | 1325 | default: |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.h b/src/video_core/renderer_opengl/gl_rasterizer_cache.h index f255f4419..5a5f2cec0 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 d9a97e30b..e6941b95f 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 3232e437f..25300a193 100644 --- a/src/video_core/surface.h +++ b/src/video_core/surface.h | |||
| @@ -118,6 +118,7 @@ enum class SurfaceTarget { | |||
| 118 | Texture1DArray, | 118 | Texture1DArray, |
| 119 | Texture2DArray, | 119 | Texture2DArray, |
| 120 | TextureCubemap, | 120 | TextureCubemap, |
| 121 | TextureCubeArray, | ||
| 121 | }; | 122 | }; |
| 122 | 123 | ||
| 123 | /** | 124 | /** |