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

@ -50,12 +50,14 @@ namespace Ryujinx.Graphics.OpenGL.Image
internalFormat = (SizedInternalFormat)format.PixelInternalFormat;
}
int levels = Info.GetLevelsClamped();
switch (Info.Target)
{
case Target.Texture1D:
GL.TexStorage1D(
TextureTarget1d.Texture1D,
Info.Levels,
levels,
internalFormat,
Info.Width);
break;
@ -63,7 +65,7 @@ namespace Ryujinx.Graphics.OpenGL.Image
case Target.Texture1DArray:
GL.TexStorage2D(
TextureTarget2d.Texture1DArray,
Info.Levels,
levels,
internalFormat,
Info.Width,
Info.Height);
@ -72,7 +74,7 @@ namespace Ryujinx.Graphics.OpenGL.Image
case Target.Texture2D:
GL.TexStorage2D(
TextureTarget2d.Texture2D,
Info.Levels,
levels,
internalFormat,
Info.Width,
Info.Height);
@ -81,7 +83,7 @@ namespace Ryujinx.Graphics.OpenGL.Image
case Target.Texture2DArray:
GL.TexStorage3D(
TextureTarget3d.Texture2DArray,
Info.Levels,
levels,
internalFormat,
Info.Width,
Info.Height,
@ -112,7 +114,7 @@ namespace Ryujinx.Graphics.OpenGL.Image
case Target.Texture3D:
GL.TexStorage3D(
TextureTarget3d.Texture3D,
Info.Levels,
levels,
internalFormat,
Info.Width,
Info.Height,
@ -122,7 +124,7 @@ namespace Ryujinx.Graphics.OpenGL.Image
case Target.Cubemap:
GL.TexStorage2D(
TextureTarget2d.TextureCubeMap,
Info.Levels,
levels,
internalFormat,
Info.Width,
Info.Height);
@ -131,7 +133,7 @@ namespace Ryujinx.Graphics.OpenGL.Image
case Target.CubemapArray:
GL.TexStorage3D(
(TextureTarget3d)All.TextureCubeMapArray,
Info.Levels,
levels,
internalFormat,
Info.Width,
Info.Height,