From d0a0fe898568a861a9a2b3f9ebb470a3a8ad7956 Mon Sep 17 00:00:00 2001 From: yuzubot Date: Tue, 27 Feb 2024 13:05:03 +0000 Subject: "Merge Tagged PR 13122" --- src/video_core/renderer_opengl/gl_rasterizer.cpp | 29 ++++++++++++++---------- 1 file changed, 17 insertions(+), 12 deletions(-) (limited to 'src/video_core/renderer_opengl/gl_rasterizer.cpp') diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 16af8e6bd..d376d86d8 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -370,27 +370,32 @@ void RasterizerOpenGL::DrawTexture() { const auto& sampler = texture_cache.GetGraphicsSampler(draw_texture_state.src_sampler); const auto& texture = texture_cache.GetImageView(draw_texture_state.src_texture); + const auto Scale = [&](auto dim) -> s32 { + return Settings::values.resolution_info.ScaleUp(static_cast(dim)); + }; + + Region2D dst_region = { + Offset2D{.x = Scale(draw_texture_state.dst_x0), .y = Scale(draw_texture_state.dst_y0)}, + Offset2D{.x = Scale(draw_texture_state.dst_x1), .y = Scale(draw_texture_state.dst_y1)}}; + Region2D src_region = { + Offset2D{.x = Scale(draw_texture_state.src_x0), .y = Scale(draw_texture_state.src_y0)}, + Offset2D{.x = Scale(draw_texture_state.src_x1), .y = Scale(draw_texture_state.src_y1)}}; + Extent3D src_size = {static_cast(Scale(texture.size.width)), + static_cast(Scale(texture.size.height)), texture.size.depth}; + if (device.HasDrawTexture()) { state_tracker.BindFramebuffer(texture_cache.GetFramebuffer()->Handle()); - glDrawTextureNV(texture.DefaultHandle(), sampler->Handle(), draw_texture_state.dst_x0, - draw_texture_state.dst_y0, draw_texture_state.dst_x1, - draw_texture_state.dst_y1, 0, + glDrawTextureNV(texture.DefaultHandle(), sampler->Handle(), + static_cast(dst_region.start.x), static_cast(dst_region.start.y), + static_cast(dst_region.end.x), static_cast(dst_region.end.y), 0, draw_texture_state.src_x0 / static_cast(texture.size.width), draw_texture_state.src_y0 / static_cast(texture.size.height), draw_texture_state.src_x1 / static_cast(texture.size.width), draw_texture_state.src_y1 / static_cast(texture.size.height)); } else { - Region2D dst_region = {Offset2D{.x = static_cast(draw_texture_state.dst_x0), - .y = static_cast(draw_texture_state.dst_y0)}, - Offset2D{.x = static_cast(draw_texture_state.dst_x1), - .y = static_cast(draw_texture_state.dst_y1)}}; - Region2D src_region = {Offset2D{.x = static_cast(draw_texture_state.src_x0), - .y = static_cast(draw_texture_state.src_y0)}, - Offset2D{.x = static_cast(draw_texture_state.src_x1), - .y = static_cast(draw_texture_state.src_y1)}}; blit_image.BlitColor(texture_cache.GetFramebuffer()->Handle(), texture.DefaultHandle(), - sampler->Handle(), dst_region, src_region, texture.size); + sampler->Handle(), dst_region, src_region, src_size); state_tracker.InvalidateState(); } -- cgit v1.2.3