summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_texture_cache.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2020-02-24 16:14:50 +0100
committerGitHub <noreply@github.com>2020-02-24 16:14:50 +0100
commite22ad52cdb18842a12037e8b85d7be854b95206c (patch)
treef60ec07ce5a4e6f56a1c9c5e18884de52de81334 /src/video_core/renderer_opengl/gl_texture_cache.cpp
parentMerge pull request #3424 from ReinUsesLisp/spirv-layer (diff)
parenttexture_cache: Implement layered framebuffer attachments (diff)
downloadyuzu-e22ad52cdb18842a12037e8b85d7be854b95206c.tar
yuzu-e22ad52cdb18842a12037e8b85d7be854b95206c.tar.gz
yuzu-e22ad52cdb18842a12037e8b85d7be854b95206c.tar.bz2
yuzu-e22ad52cdb18842a12037e8b85d7be854b95206c.tar.lz
yuzu-e22ad52cdb18842a12037e8b85d7be854b95206c.tar.xz
yuzu-e22ad52cdb18842a12037e8b85d7be854b95206c.tar.zst
yuzu-e22ad52cdb18842a12037e8b85d7be854b95206c.zip
Diffstat (limited to 'src/video_core/renderer_opengl/gl_texture_cache.cpp')
-rw-r--r--src/video_core/renderer_opengl/gl_texture_cache.cpp28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp
index 5c1ae1418..c4c0bd226 100644
--- a/src/video_core/renderer_opengl/gl_texture_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp
@@ -405,24 +405,36 @@ CachedSurfaceView::CachedSurfaceView(CachedSurface& surface, const ViewParams& p
CachedSurfaceView::~CachedSurfaceView() = default;
void CachedSurfaceView::Attach(GLenum attachment, GLenum target) const {
- ASSERT(params.num_layers == 1 && params.num_levels == 1);
+ ASSERT(params.num_levels == 1);
- const auto& owner_params = surface.GetSurfaceParams();
+ const GLuint texture = surface.GetTexture();
+ if (params.num_layers > 1) {
+ // Layered framebuffer attachments
+ UNIMPLEMENTED_IF(params.base_layer != 0);
+
+ switch (params.target) {
+ case SurfaceTarget::Texture2DArray:
+ glFramebufferTexture(target, attachment, texture, params.base_level);
+ break;
+ default:
+ UNIMPLEMENTED();
+ }
+ return;
+ }
- switch (owner_params.target) {
+ const GLenum view_target = surface.GetTarget();
+ switch (surface.GetSurfaceParams().target) {
case SurfaceTarget::Texture1D:
- glFramebufferTexture1D(target, attachment, surface.GetTarget(), surface.GetTexture(),
- params.base_level);
+ glFramebufferTexture1D(target, attachment, view_target, texture, params.base_level);
break;
case SurfaceTarget::Texture2D:
- glFramebufferTexture2D(target, attachment, surface.GetTarget(), surface.GetTexture(),
- params.base_level);
+ glFramebufferTexture2D(target, attachment, view_target, texture, params.base_level);
break;
case SurfaceTarget::Texture1DArray:
case SurfaceTarget::Texture2DArray:
case SurfaceTarget::TextureCubemap:
case SurfaceTarget::TextureCubeArray:
- glFramebufferTextureLayer(target, attachment, surface.GetTexture(), params.base_level,
+ glFramebufferTextureLayer(target, attachment, texture, params.base_level,
params.base_layer);
break;
default: