mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 08:59:03 -06:00 
			
		
		
		
	Merge pull request #3422 from ReinUsesLisp/buffer-flush
surface_base: Implement texture buffer flushes
This commit is contained in:
		@@ -260,6 +260,13 @@ CachedSurface::~CachedSurface() = default;
 | 
			
		||||
void CachedSurface::DownloadTexture(std::vector<u8>& staging_buffer) {
 | 
			
		||||
    MICROPROFILE_SCOPE(OpenGL_Texture_Download);
 | 
			
		||||
 | 
			
		||||
    if (params.IsBuffer()) {
 | 
			
		||||
        glGetNamedBufferSubData(texture_buffer.handle, 0,
 | 
			
		||||
                                static_cast<GLsizeiptr>(params.GetHostSizeInBytes()),
 | 
			
		||||
                                staging_buffer.data());
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    SCOPE_EXIT({ glPixelStorei(GL_PACK_ROW_LENGTH, 0); });
 | 
			
		||||
 | 
			
		||||
    for (u32 level = 0; level < params.emulated_levels; ++level) {
 | 
			
		||||
 
 | 
			
		||||
@@ -277,6 +277,10 @@ void SurfaceBaseImpl::FlushBuffer(Tegra::MemoryManager& memory_manager,
 | 
			
		||||
            SwizzleFunc(MortonSwizzleMode::LinearToMorton, host_ptr, params,
 | 
			
		||||
                        staging_buffer.data() + host_offset, level);
 | 
			
		||||
        }
 | 
			
		||||
    } else if (params.IsBuffer()) {
 | 
			
		||||
        // Buffers don't have pitch or any fancy layout property. We can just memcpy them to guest
 | 
			
		||||
        // memory.
 | 
			
		||||
        std::memcpy(host_ptr, staging_buffer.data(), guest_memory_size);
 | 
			
		||||
    } else {
 | 
			
		||||
        ASSERT(params.target == SurfaceTarget::Texture2D);
 | 
			
		||||
        ASSERT(params.num_levels == 1);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user