texture_cache: eliminate accelerated depth->color/color->depth copies due to driver instability.
This commit is contained in:
		 Fernando Sahmkow
					Fernando Sahmkow
				
			
				
					committed by
					
						 ReinUsesLisp
						ReinUsesLisp
					
				
			
			
				
	
			
			
			 ReinUsesLisp
						ReinUsesLisp
					
				
			
						parent
						
							561ce29c98
						
					
				
				
					commit
					b01f9c8a70
				
			| @@ -28,7 +28,6 @@ Device::Device() { | ||||
|     max_varyings = GetInteger<u32>(GL_MAX_VARYING_VECTORS); | ||||
|     has_variable_aoffi = TestVariableAoffi(); | ||||
|     has_component_indexing_bug = TestComponentIndexingBug(); | ||||
|     is_turing_plus = GLAD_GL_NV_mesh_shader; | ||||
| } | ||||
|  | ||||
| Device::Device(std::nullptr_t) { | ||||
|   | ||||
| @@ -34,10 +34,6 @@ public: | ||||
|         return has_component_indexing_bug; | ||||
|     } | ||||
|  | ||||
|     bool IsTuringGPU() const { | ||||
|         return is_turing_plus; | ||||
|     } | ||||
|  | ||||
| private: | ||||
|     static bool TestVariableAoffi(); | ||||
|     static bool TestComponentIndexingBug(); | ||||
| @@ -47,7 +43,6 @@ private: | ||||
|     u32 max_varyings{}; | ||||
|     bool has_variable_aoffi{}; | ||||
|     bool has_component_indexing_bug{}; | ||||
|     bool is_turing_plus{}; | ||||
| }; | ||||
|  | ||||
| } // namespace OpenGL | ||||
|   | ||||
| @@ -439,7 +439,6 @@ TextureCacheOpenGL::TextureCacheOpenGL(Core::System& system, | ||||
|                                        VideoCore::RasterizerInterface& rasterizer, | ||||
|                                        const Device& device) | ||||
|     : TextureCacheBase{system, rasterizer} { | ||||
|     support_info.depth_color_image_copies = !device.IsTuringGPU(); | ||||
|     src_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, | ||||
|                                    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_target = src_surface->GetTarget(); | ||||
|   | ||||
| @@ -218,12 +218,6 @@ public: | ||||
|     } | ||||
|  | ||||
| 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) | ||||
|         : system{system}, rasterizer{rasterizer} { | ||||
| @@ -389,8 +383,7 @@ private: | ||||
|         const auto gpu_addr = current_surface->GetGpuAddr(); | ||||
|         TSurface new_surface = GetUncachedSurface(gpu_addr, params); | ||||
|         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); | ||||
|         } else { | ||||
|             std::vector<CopyParams> bricks = current_surface->BreakDown(params); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user