summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Lioncash2018-08-08 23:28:01 -0400
committerGravatar Lioncash2018-08-08 23:34:58 -0400
commit434f352eb37fba2a5c80bead61a8c5593785730d (patch)
tree8ea1988115400fdde58094c12aa3f451947a4a66 /src
parentgl_rasterizer_cache: Make pointer const in LoadGLBuffer() (diff)
downloadyuzu-434f352eb37fba2a5c80bead61a8c5593785730d.tar.gz
yuzu-434f352eb37fba2a5c80bead61a8c5593785730d.tar.xz
yuzu-434f352eb37fba2a5c80bead61a8c5593785730d.zip
gl_rasterizer_cache: Use std::vector::assign in LoadGLBuffer() for the non-tiled case
resize() causes the vector to expand and zero out the added members to the vector, however we can avoid this zeroing by using assign(). Given we have the pointer to the data we want to copy, we can calculate the end pointer and directly copy the range of data without the need to perform the resize() beforehand.
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer_cache.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
index ecc84293e..9efb5cea4 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
@@ -451,16 +451,18 @@ void CachedSurface::LoadGLBuffer() {
451 451
452 ASSERT(texture_src_data); 452 ASSERT(texture_src_data);
453 453
454 gl_buffer.resize(params.width * params.height * GetGLBytesPerPixel(params.pixel_format)); 454 const u32 bytes_per_pixel = GetGLBytesPerPixel(params.pixel_format);
455 const u32 copy_size = params.width * params.height * bytes_per_pixel;
455 456
456 MICROPROFILE_SCOPE(OpenGL_SurfaceLoad); 457 MICROPROFILE_SCOPE(OpenGL_SurfaceLoad);
457 458
458 if (!params.is_tiled) { 459 if (!params.is_tiled) {
459 const u32 bytes_per_pixel{params.GetFormatBpp() >> 3}; 460 const u8* const texture_src_data_end = texture_src_data + copy_size;
460 461
461 std::memcpy(gl_buffer.data(), texture_src_data, 462 gl_buffer.assign(texture_src_data, texture_src_data_end);
462 bytes_per_pixel * params.width * params.height);
463 } else { 463 } else {
464 gl_buffer.resize(copy_size);
465
464 morton_to_gl_fns[static_cast<size_t>(params.pixel_format)]( 466 morton_to_gl_fns[static_cast<size_t>(params.pixel_format)](
465 params.width, params.block_height, params.height, gl_buffer.data(), params.addr); 467 params.width, params.block_height, params.height, gl_buffer.data(), params.addr);
466 } 468 }