forked from eden-emu/eden
		
	Merge pull request #1662 from FreddyFunk/CopySurface-Optimization
gl_rasterizer_cache: CopySurface optimization
This commit is contained in:
		
						commit
						3bd503d59c
					
				
					 1 changed files with 7 additions and 10 deletions
				
			
		|  | @ -715,18 +715,18 @@ static void FastCopySurface(const Surface& src_surface, const Surface& dst_surfa | |||
| 
 | ||||
| MICROPROFILE_DEFINE(OpenGL_CopySurface, "OpenGL", "CopySurface", MP_RGB(128, 192, 64)); | ||||
| static void CopySurface(const Surface& src_surface, const Surface& dst_surface, | ||||
|                         GLuint copy_pbo_handle, GLenum src_attachment = 0, | ||||
|                         GLenum dst_attachment = 0, std::size_t cubemap_face = 0) { | ||||
|                         const GLuint copy_pbo_handle, const GLenum src_attachment = 0, | ||||
|                         const GLenum dst_attachment = 0, const std::size_t cubemap_face = 0) { | ||||
|     MICROPROFILE_SCOPE(OpenGL_CopySurface); | ||||
|     ASSERT_MSG(dst_attachment == 0, "Unimplemented"); | ||||
| 
 | ||||
|     const auto& src_params{src_surface->GetSurfaceParams()}; | ||||
|     const auto& dst_params{dst_surface->GetSurfaceParams()}; | ||||
| 
 | ||||
|     auto source_format = GetFormatTuple(src_params.pixel_format, src_params.component_type); | ||||
|     auto dest_format = GetFormatTuple(dst_params.pixel_format, dst_params.component_type); | ||||
|     const auto source_format = GetFormatTuple(src_params.pixel_format, src_params.component_type); | ||||
|     const auto dest_format = GetFormatTuple(dst_params.pixel_format, dst_params.component_type); | ||||
| 
 | ||||
|     std::size_t buffer_size = std::max(src_params.size_in_bytes, dst_params.size_in_bytes); | ||||
|     const std::size_t buffer_size = std::max(src_params.size_in_bytes, dst_params.size_in_bytes); | ||||
| 
 | ||||
|     glBindBuffer(GL_PIXEL_PACK_BUFFER, copy_pbo_handle); | ||||
|     glBufferData(GL_PIXEL_PACK_BUFFER, buffer_size, nullptr, GL_STREAM_DRAW_ARB); | ||||
|  | @ -750,13 +750,10 @@ static void CopySurface(const Surface& src_surface, const Surface& dst_surface, | |||
|             LOG_DEBUG(HW_GPU, "Trying to upload extra texture data from the CPU during " | ||||
|                               "reinterpretation but the texture is tiled."); | ||||
|         } | ||||
|         std::size_t remaining_size = dst_params.size_in_bytes - src_params.size_in_bytes; | ||||
|         std::vector<u8> data(remaining_size); | ||||
|         std::memcpy(data.data(), Memory::GetPointer(dst_params.addr + src_params.size_in_bytes), | ||||
|                     data.size()); | ||||
|         const std::size_t remaining_size = dst_params.size_in_bytes - src_params.size_in_bytes; | ||||
| 
 | ||||
|         glBufferSubData(GL_PIXEL_PACK_BUFFER, src_params.size_in_bytes, remaining_size, | ||||
|                         data.data()); | ||||
|                         Memory::GetPointer(dst_params.addr + src_params.size_in_bytes)); | ||||
|     } | ||||
| 
 | ||||
|     glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 bunnei
						bunnei