Merge pull request #1662 from FreddyFunk/CopySurface-Optimization
gl_rasterizer_cache: CopySurface optimization
This commit is contained in:
		
						commit
						3bd503d59c
					
				@ -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…
	
		Reference in New Issue
	
	Block a user