Parcourir la source

texture_cache return invalid buffer on deactivated color_mask

Fernando Sahmkow il y a 7 ans
Parent
commit
d65a4af895

+ 4 - 2
src/video_core/renderer_opengl/gl_rasterizer.cpp

@@ -370,10 +370,12 @@ void RasterizerOpenGL::SetupCachedFramebuffer(const FramebufferCacheKey& fbkey,
         return;
 
     if (fbkey.is_single_buffer) {
-        if (fbkey.color_attachments[0] != GL_NONE) {
+        if (fbkey.color_attachments[0] != GL_NONE && fbkey.colors[0]) {
             fbkey.colors[0]->Attach(fbkey.color_attachments[0]);
+            glDrawBuffer(fbkey.color_attachments[0]);
+        } else {
+            glDrawBuffer(GL_NONE);
         }
-        glDrawBuffer(fbkey.color_attachments[0]);
     } else {
         for (std::size_t index = 0; index < Maxwell::NumRenderTargets; ++index) {
             if (fbkey.colors[index]) {

+ 5 - 0
src/video_core/texture_cache/texture_cache.h

@@ -133,6 +133,11 @@ public:
             return {};
         }
 
+        if (regs.color_mask[index].raw != 0) {
+            SetEmptyColorBuffer(index);
+            return {};
+        }
+
         const auto& config{regs.rt[index]};
         const auto gpu_addr{config.Address()};
         if (!gpu_addr) {