|
|
|
@ -126,6 +126,13 @@ std::size_t SurfaceParams::InnerMemorySize(bool force_gl, bool layer_only,
|
|
|
|
|
params.target = SurfaceTarget::Texture2D;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case SurfaceTarget::TextureCubeArray:
|
|
|
|
|
params.depth = config.tic.Depth() * 6;
|
|
|
|
|
if (!entry.IsArray()) {
|
|
|
|
|
ASSERT(params.depth == 6);
|
|
|
|
|
params.target = SurfaceTarget::TextureCubemap;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
LOG_CRITICAL(HW_GPU, "Unknown depth for target={}", static_cast<u32>(params.target));
|
|
|
|
|
UNREACHABLE();
|
|
|
|
@ -334,6 +341,8 @@ static GLenum SurfaceTargetToGL(SurfaceTarget target) {
|
|
|
|
|
return GL_TEXTURE_2D_ARRAY;
|
|
|
|
|
case SurfaceTarget::TextureCubemap:
|
|
|
|
|
return GL_TEXTURE_CUBE_MAP;
|
|
|
|
|
case SurfaceTarget::TextureCubeArray:
|
|
|
|
|
return GL_TEXTURE_CUBE_MAP_ARRAY_ARB;
|
|
|
|
|
}
|
|
|
|
|
LOG_CRITICAL(Render_OpenGL, "Unimplemented texture target={}", static_cast<u32>(target));
|
|
|
|
|
UNREACHABLE();
|
|
|
|
@ -761,6 +770,7 @@ static void CopySurface(const Surface& src_surface, const Surface& dst_surface,
|
|
|
|
|
break;
|
|
|
|
|
case SurfaceTarget::Texture3D:
|
|
|
|
|
case SurfaceTarget::Texture2DArray:
|
|
|
|
|
case SurfaceTarget::TextureCubeArray:
|
|
|
|
|
glTextureSubImage3D(dst_surface->Texture().handle, 0, 0, 0, 0, width, height,
|
|
|
|
|
static_cast<GLsizei>(dst_params.depth), dest_format.format,
|
|
|
|
|
dest_format.type, nullptr);
|
|
|
|
@ -813,6 +823,7 @@ CachedSurface::CachedSurface(const SurfaceParams& params)
|
|
|
|
|
break;
|
|
|
|
|
case SurfaceTarget::Texture3D:
|
|
|
|
|
case SurfaceTarget::Texture2DArray:
|
|
|
|
|
case SurfaceTarget::TextureCubeArray:
|
|
|
|
|
glTexStorage3D(SurfaceTargetToGL(params.target), params.max_mip_level,
|
|
|
|
|
format_tuple.internal_format, rect.GetWidth(), rect.GetHeight(),
|
|
|
|
|
params.depth);
|
|
|
|
@ -1065,6 +1076,7 @@ void CachedSurface::UploadGLMipmapTexture(u32 mip_map, GLuint read_fb_handle,
|
|
|
|
|
&gl_buffer[mip_map][buffer_offset]);
|
|
|
|
|
break;
|
|
|
|
|
case SurfaceTarget::Texture2DArray:
|
|
|
|
|
case SurfaceTarget::TextureCubeArray:
|
|
|
|
|
glCompressedTexImage3D(SurfaceTargetToGL(params.target), mip_map, tuple.internal_format,
|
|
|
|
|
static_cast<GLsizei>(params.MipWidth(mip_map)),
|
|
|
|
|
static_cast<GLsizei>(params.MipHeight(mip_map)),
|
|
|
|
@ -1114,6 +1126,7 @@ void CachedSurface::UploadGLMipmapTexture(u32 mip_map, GLuint read_fb_handle,
|
|
|
|
|
tuple.format, tuple.type, &gl_buffer[mip_map][buffer_offset]);
|
|
|
|
|
break;
|
|
|
|
|
case SurfaceTarget::Texture2DArray:
|
|
|
|
|
case SurfaceTarget::TextureCubeArray:
|
|
|
|
|
glTexSubImage3D(SurfaceTargetToGL(params.target), mip_map, x0, y0, 0,
|
|
|
|
|
static_cast<GLsizei>(rect.GetWidth()),
|
|
|
|
|
static_cast<GLsizei>(rect.GetHeight()), params.depth, tuple.format,
|
|
|
|
@ -1316,6 +1329,7 @@ Surface RasterizerCacheOpenGL::RecreateSurface(const Surface& old_surface,
|
|
|
|
|
break;
|
|
|
|
|
case SurfaceTarget::TextureCubemap:
|
|
|
|
|
case SurfaceTarget::Texture3D:
|
|
|
|
|
case SurfaceTarget::TextureCubeArray:
|
|
|
|
|
AccurateCopySurface(old_surface, new_surface);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|