Clamp number of mipmap levels to avoid API errors due to invalid textures (#2808)

This commit is contained in:
gdkchan 2021-11-03 20:58:24 -03:00 committed by GitHub
parent f41687f4c1
commit f78bcb8048
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 40 additions and 12 deletions

View file

@ -48,13 +48,15 @@ namespace Ryujinx.Graphics.OpenGL.Image
pixelInternalFormat = format.PixelInternalFormat;
}
int levels = Info.GetLevelsClamped();
GL.TextureView(
Handle,
target,
_parent.Handle,
pixelInternalFormat,
FirstLevel,
Info.Levels,
levels,
FirstLayer,
Info.GetLayers());
@ -81,7 +83,7 @@ namespace Ryujinx.Graphics.OpenGL.Image
GL.TexParameter(target, TextureParameterName.TextureSwizzleRgba, swizzleRgba);
int maxLevel = Info.Levels - 1;
int maxLevel = levels - 1;
if (maxLevel < 0)
{
@ -122,8 +124,9 @@ namespace Ryujinx.Graphics.OpenGL.Image
public unsafe ReadOnlySpan<byte> GetData()
{
int size = 0;
int levels = Info.GetLevelsClamped();
for (int level = 0; level < Info.Levels; level++)
for (int level = 0; level < levels; level++)
{
size += Info.GetMipSize(level);
}
@ -227,7 +230,9 @@ namespace Ryujinx.Graphics.OpenGL.Image
faces = 6;
}
for (int level = 0; level < Info.Levels; level++)
int levels = Info.GetLevelsClamped();
for (int level = 0; level < levels; level++)
{
for (int face = 0; face < faces; face++)
{
@ -465,10 +470,11 @@ namespace Ryujinx.Graphics.OpenGL.Image
int width = Info.Width;
int height = Info.Height;
int depth = Info.Depth;
int levels = Info.GetLevelsClamped();
int offset = 0;
for (int level = 0; level < Info.Levels; level++)
for (int level = 0; level < levels; level++)
{
int mipSize = Info.GetMipSize(level);