Просмотр исходного кода

texture_cache: eliminate accelerated depth->color/color->depth copies due to driver instability.

Fernando Sahmkow 7 лет назад
Родитель
Сommit
b01f9c8a70

+ 0 - 1
src/video_core/renderer_opengl/gl_device.cpp

@@ -28,7 +28,6 @@ Device::Device() {
     max_varyings = GetInteger<u32>(GL_MAX_VARYING_VECTORS);
     max_varyings = GetInteger<u32>(GL_MAX_VARYING_VECTORS);
     has_variable_aoffi = TestVariableAoffi();
     has_variable_aoffi = TestVariableAoffi();
     has_component_indexing_bug = TestComponentIndexingBug();
     has_component_indexing_bug = TestComponentIndexingBug();
-    is_turing_plus = GLAD_GL_NV_mesh_shader;
 }
 }
 
 
 Device::Device(std::nullptr_t) {
 Device::Device(std::nullptr_t) {

+ 0 - 5
src/video_core/renderer_opengl/gl_device.h

@@ -34,10 +34,6 @@ public:
         return has_component_indexing_bug;
         return has_component_indexing_bug;
     }
     }
 
 
-    bool IsTuringGPU() const {
-        return is_turing_plus;
-    }
-
 private:
 private:
     static bool TestVariableAoffi();
     static bool TestVariableAoffi();
     static bool TestComponentIndexingBug();
     static bool TestComponentIndexingBug();
@@ -47,7 +43,6 @@ private:
     u32 max_varyings{};
     u32 max_varyings{};
     bool has_variable_aoffi{};
     bool has_variable_aoffi{};
     bool has_component_indexing_bug{};
     bool has_component_indexing_bug{};
-    bool is_turing_plus{};
 };
 };
 
 
 } // namespace OpenGL
 } // namespace OpenGL

+ 5 - 8
src/video_core/renderer_opengl/gl_texture_cache.cpp

@@ -439,7 +439,6 @@ TextureCacheOpenGL::TextureCacheOpenGL(Core::System& system,
                                        VideoCore::RasterizerInterface& rasterizer,
                                        VideoCore::RasterizerInterface& rasterizer,
                                        const Device& device)
                                        const Device& device)
     : TextureCacheBase{system, rasterizer} {
     : TextureCacheBase{system, rasterizer} {
-    support_info.depth_color_image_copies = !device.IsTuringGPU();
     src_framebuffer.Create();
     src_framebuffer.Create();
     dst_framebuffer.Create();
     dst_framebuffer.Create();
 }
 }
@@ -452,13 +451,11 @@ Surface TextureCacheOpenGL::CreateSurface(GPUVAddr gpu_addr, const SurfaceParams
 
 
 void TextureCacheOpenGL::ImageCopy(Surface& src_surface, Surface& dst_surface,
 void TextureCacheOpenGL::ImageCopy(Surface& src_surface, Surface& dst_surface,
                                    const VideoCommon::CopyParams& copy_params) {
                                    const VideoCommon::CopyParams& copy_params) {
-    if (!support_info.depth_color_image_copies) {
-        const auto& src_params = src_surface->GetSurfaceParams();
-        const auto& dst_params = dst_surface->GetSurfaceParams();
-        if (src_params.type != dst_params.type) {
-            // A fallback is needed
-            return;
-        }
+    const auto& src_params = src_surface->GetSurfaceParams();
+    const auto& dst_params = dst_surface->GetSurfaceParams();
+    if (src_params.type != dst_params.type) {
+        // A fallback is needed
+        return;
     }
     }
     const auto src_handle = src_surface->GetTexture();
     const auto src_handle = src_surface->GetTexture();
     const auto src_target = src_surface->GetTarget();
     const auto src_target = src_surface->GetTarget();

+ 1 - 8
src/video_core/texture_cache/texture_cache.h

@@ -218,12 +218,6 @@ public:
     }
     }
 
 
 protected:
 protected:
-    // This structure is used for communicating with the backend, on which behaviors
-    // it supports and what not, to avoid assuming certain things about hardware.
-    // The backend is RESPONSIBLE for filling this settings on creation.
-    struct Support {
-        bool depth_color_image_copies;
-    } support_info;
 
 
     TextureCache(Core::System& system, VideoCore::RasterizerInterface& rasterizer)
     TextureCache(Core::System& system, VideoCore::RasterizerInterface& rasterizer)
         : system{system}, rasterizer{rasterizer} {
         : system{system}, rasterizer{rasterizer} {
@@ -389,8 +383,7 @@ private:
         const auto gpu_addr = current_surface->GetGpuAddr();
         const auto gpu_addr = current_surface->GetGpuAddr();
         TSurface new_surface = GetUncachedSurface(gpu_addr, params);
         TSurface new_surface = GetUncachedSurface(gpu_addr, params);
         const auto& cr_params = current_surface->GetSurfaceParams();
         const auto& cr_params = current_surface->GetSurfaceParams();
-        if (cr_params.type != params.type && (!support_info.depth_color_image_copies ||
-                                              cr_params.component_type != params.component_type)) {
+        if (cr_params.type != params.type || (cr_params.component_type != params.component_type)) {
             BufferCopy(current_surface, new_surface);
             BufferCopy(current_surface, new_surface);
         } else {
         } else {
             std::vector<CopyParams> bricks = current_surface->BreakDown(params);
             std::vector<CopyParams> bricks = current_surface->BreakDown(params);