Support copy of slices to 3D textures, remove old 3D render target layered render support, do not delete textures with existing views created from them

This commit is contained in:
gdk 2019-10-30 20:45:01 -03:00 committed by Thog
parent 3bcc395253
commit d786d8d2b9
9 changed files with 131 additions and 160 deletions

View file

@ -29,16 +29,6 @@ namespace Ryujinx.Graphics.OpenGL
0);
}
public void AttachColor(int index, TextureView color, int layer)
{
GL.FramebufferTextureLayer(
FramebufferTarget.Framebuffer,
FramebufferAttachment.ColorAttachment0 + index,
color?.Handle ?? 0,
0,
layer);
}
public void AttachDepthStencil(TextureView depthStencil)
{
// Detach the last depth/stencil buffer if there is any.

View file

@ -697,28 +697,6 @@ namespace Ryujinx.Graphics.OpenGL
}
}
public void SetRenderTargets(ITexture color3D, ITexture depthStencil)
{
EnsureFramebuffer();
TextureView color = (TextureView)color3D;
for (int index = 0; index < color.DepthOrLayers; index++)
{
_framebuffer.AttachColor(index, color, index);
}
TextureView depthStencilView = (TextureView)depthStencil;
_framebuffer.AttachDepthStencil(depthStencilView);
_framebuffer.SetDrawBuffers(color.DepthOrLayers);
_hasDepthBuffer = depthStencil != null && depthStencilView.Format != Format.S8Uint;
UpdateDepthTest();
}
public void SetRenderTargets(ITexture[] colors, ITexture depthStencil)
{
EnsureFramebuffer();

View file

@ -137,11 +137,11 @@ namespace Ryujinx.Graphics.OpenGL
return _parent.GetHashCode();
}
public void CopyTo(ITexture destination)
public void CopyTo(ITexture destination, int firstLayer, int firstLevel)
{
TextureView destinationView = (TextureView)destination;
TextureCopyUnscaled.Copy(this, destinationView, 0, 0);
TextureCopyUnscaled.Copy(this, destinationView, firstLayer, firstLevel);
int width = Math.Min(Width, destinationView.Width);
int height = Math.Min(Height, destinationView.Height);