From 512b990f3efc042f99db5047ab7be400012aa87a Mon Sep 17 00:00:00 2001 From: GPUCode Date: Sat, 29 Apr 2023 13:09:34 +0300 Subject: [PATCH] rasterizer_cache: Don't use float for viewport --- .../rasterizer_cache/framebuffer_base.cpp | 8 ++--- .../rasterizer_cache/framebuffer_base.h | 8 ++--- .../renderer_opengl/gl_rasterizer.cpp | 3 +- .../renderer_opengl/gl_texture_runtime.cpp | 32 ++++++++----------- 4 files changed, 23 insertions(+), 28 deletions(-) diff --git a/src/video_core/rasterizer_cache/framebuffer_base.cpp b/src/video_core/rasterizer_cache/framebuffer_base.cpp index da6e2d909..8f7a5f7c2 100644 --- a/src/video_core/rasterizer_cache/framebuffer_base.cpp +++ b/src/video_core/rasterizer_cache/framebuffer_base.cpp @@ -31,10 +31,10 @@ FramebufferBase::FramebufferBase(const Pica::Regs& regs, const SurfaceBase* colo surfaces_rect.bottom, surfaces_rect.top); // Update viewport - viewport.x = static_cast(surfaces_rect.left + viewport_rect.left * res_scale); - viewport.y = static_cast(surfaces_rect.bottom + viewport_rect.bottom * res_scale); - viewport.width = static_cast(viewport_rect.GetWidth() * res_scale); - viewport.height = static_cast(viewport_rect.GetHeight() * res_scale); + viewport.x = static_cast(surfaces_rect.left) + viewport_rect.left * res_scale; + viewport.y = static_cast(surfaces_rect.bottom) + viewport_rect.bottom * res_scale; + viewport.width = static_cast(viewport_rect.GetWidth() * res_scale); + viewport.height = static_cast(viewport_rect.GetHeight() * res_scale); // Scissor checks are window-, not viewport-relative, which means that if the cached texture // sub-rect changes, the scissor bounds also need to be updated. diff --git a/src/video_core/rasterizer_cache/framebuffer_base.h b/src/video_core/rasterizer_cache/framebuffer_base.h index c13e52956..932bf73a4 100644 --- a/src/video_core/rasterizer_cache/framebuffer_base.h +++ b/src/video_core/rasterizer_cache/framebuffer_base.h @@ -16,10 +16,10 @@ namespace VideoCore { class SurfaceBase; struct ViewportInfo { - f32 x; - f32 y; - f32 width; - f32 height; + s32 x; + s32 y; + s32 width; + s32 height; }; /** diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 6a796bcbc..a34ad34a6 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -389,8 +389,7 @@ bool RasterizerOpenGL::Draw(bool accelerate, bool is_indexed) { const Framebuffer framebuffer = res_cache.GetFramebufferSurfaces(using_color_fb, using_depth_fb); const bool has_color = framebuffer.HasAttachment(SurfaceType::Color); - const bool has_depth_stencil = framebuffer.HasAttachment(SurfaceType::DepthStencil); - if (!has_color && (shadow_rendering || !has_depth_stencil)) { + if (!has_color && shadow_rendering) { return true; } diff --git a/src/video_core/renderer_opengl/gl_texture_runtime.cpp b/src/video_core/renderer_opengl/gl_texture_runtime.cpp index 490e76e37..8e8051a92 100644 --- a/src/video_core/renderer_opengl/gl_texture_runtime.cpp +++ b/src/video_core/renderer_opengl/gl_texture_runtime.cpp @@ -427,15 +427,19 @@ void Surface::UploadCustom(const VideoCore::Material* material, u32 level) { glActiveTexture(GL_TEXTURE0); glPixelStorei(GL_UNPACK_ROW_LENGTH, width); - glBindTexture(GL_TEXTURE_2D, Handle(0)); - if (VideoCore::IsCustomFormatCompressed(custom_format)) { - const GLsizei image_size = static_cast(color->data.size()); - glCompressedTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, width, height, tuple.format, - image_size, color->data.data()); - } else { - glTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, width, height, tuple.format, tuple.type, - color->data.data()); - } + const auto upload = [&](u32 index, VideoCore::CustomTexture* texture) { + glBindTexture(GL_TEXTURE_2D, Handle(index)); + if (VideoCore::IsCustomFormatCompressed(custom_format)) { + const GLsizei image_size = static_cast(texture->data.size()); + glCompressedTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, width, height, tuple.format, + image_size, texture->data.data()); + } else { + glTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, width, height, tuple.format, tuple.type, + texture->data.data()); + } + }; + + upload(0, color); const VideoCore::TextureBlit blit = { .src_rect = filter_rect, @@ -449,15 +453,7 @@ void Surface::UploadCustom(const VideoCore::Material* material, u32 level) { if (!texture) { continue; } - glBindTexture(GL_TEXTURE_2D, Handle(i + 1)); - if (VideoCore::IsCustomFormatCompressed(custom_format)) { - const GLsizei image_size = static_cast(texture->data.size()); - glCompressedTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, width, height, tuple.format, - image_size, texture->data.data()); - } else { - glTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, width, height, tuple.format, tuple.type, - texture->data.data()); - } + upload(i + 1, texture); } glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);