Просмотр исходного кода

gl_texture_cache: Round format conversion PBO to next power of 2

ameerj 4 лет назад
Родитель
Сommit
f7e155d8b9
1 измененных файлов с 5 добавлено и 1 удалено
  1. 5 1
      src/video_core/renderer_opengl/gl_texture_cache.cpp

+ 5 - 1
src/video_core/renderer_opengl/gl_texture_cache.cpp

@@ -396,6 +396,10 @@ OGLTexture MakeImage(const VideoCommon::ImageInfo& info, GLenum gl_internal_form
     UNREACHABLE_MSG("Invalid image format={}", format);
     return GL_R32UI;
 }
+
+[[nodiscard]] u32 NextPow2(u32 value) {
+    return 1U << (32U - std::countl_zero(value - 1U));
+}
 } // Anonymous namespace
 
 ImageBufferMap::~ImageBufferMap() {
@@ -1304,7 +1308,7 @@ void FormatConversionPass::ConvertImage(Image& dst_image, Image& src_image,
         const u32 copy_size = region.width * region.height * region.depth * img_bpp;
         if (pbo_size < copy_size) {
             intermediate_pbo.Create();
-            pbo_size = copy_size;
+            pbo_size = NextPow2(copy_size);
             glNamedBufferData(intermediate_pbo.handle, pbo_size, nullptr, GL_STREAM_COPY);
         }
         // Copy from source to PBO