diff options
Diffstat (limited to 'src')
| -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 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 | /** |