diff --git a/src/video_core/renderer_opengl/gl_texture_runtime.cpp b/src/video_core/renderer_opengl/gl_texture_runtime.cpp index 6b2b7fc8a..abee3de44 100644 --- a/src/video_core/renderer_opengl/gl_texture_runtime.cpp +++ b/src/video_core/renderer_opengl/gl_texture_runtime.cpp @@ -77,7 +77,9 @@ TextureRuntime::TextureRuntime(Driver& driver) StagingData TextureRuntime::FindStaging(u32 size, bool upload) { if (!upload) { - ASSERT_MSG(download_buffer.size() <= size, "Download buffer to small"); + if (size > download_buffer.size()) { + download_buffer.resize(size); + } return StagingData{ .size = size, .mapped = std::span{download_buffer.data(), size}, diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp index 67baf6b56..c8170a9cd 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp +++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp @@ -714,7 +714,7 @@ void RendererVulkan::DrawSingleScreen(u32 screen_id, float x, float y, float w, draw_info.i_resolution = Common::Vec4f{width * scale_factor, height * scale_factor, 1.0f / (width * scale_factor), 1.0f / (height * scale_factor)}; - draw_info.o_resolution = Common::Vec4f{h, w, 1.0f / h, 1.0f / w}; + draw_info.o_resolution = Common::Vec4f{w, h, 1.0f / h, 1.0f / w}; draw_info.screen_id_l = screen_id; scheduler.Record([this, offset = offset, info = draw_info](vk::CommandBuffer cmdbuf) { @@ -841,7 +841,8 @@ void RendererVulkan::DrawScreens(Frame* frame, const Layout::FramebufferLayout& if (layout.top_screen_enabled) { if (layout.is_rotated) { if (render_3d == Settings::StereoRenderOption::Off) { - DrawSingleScreenRotated(0, top_screen.left, top_screen.top, top_screen.GetWidth(), + int eye = static_cast(Settings::values.mono_render_option.GetValue()); + DrawSingleScreenRotated(eye, top_screen.left, top_screen.top, top_screen.GetWidth(), top_screen.GetHeight()); } else if (render_3d == Settings::StereoRenderOption::SideBySide) { DrawSingleScreenRotated(0, (float)top_screen.left / 2, (float)top_screen.top, @@ -867,7 +868,8 @@ void RendererVulkan::DrawScreens(Frame* frame, const Layout::FramebufferLayout& } } else { if (render_3d == Settings::StereoRenderOption::Off) { - DrawSingleScreen(0, (float)top_screen.left, (float)top_screen.top, + int eye = static_cast(Settings::values.mono_render_option.GetValue()); + DrawSingleScreen(eye, (float)top_screen.left, (float)top_screen.top, (float)top_screen.GetWidth(), (float)top_screen.GetHeight()); } else if (render_3d == Settings::StereoRenderOption::SideBySide) { DrawSingleScreen(0, (float)top_screen.left / 2, (float)top_screen.top, diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 0869642dd..a0772bfde 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -267,7 +267,6 @@ void RasterizerVulkan::SetupVertexArray(u32 vs_input_size, u32 vs_input_index_mi buffer_offset += Common::AlignUp(aligned_stride * vertex_num, 4); } - binding_offsets[layout.binding_count] = array_offset + buffer_offset; stream_buffer.Commit(buffer_offset); // Assign the rest of the attributes to the last binding @@ -276,9 +275,6 @@ void RasterizerVulkan::SetupVertexArray(u32 vs_input_size, u32 vs_input_index_mi // Bind the generated bindings scheduler.Record([this, binding_count = layout.binding_count, vertex_offsets = binding_offsets](vk::CommandBuffer cmdbuf) { - for (auto& offset : vertex_offsets) { - ASSERT_MSG(offset != 0x8000000, "Bad offset"); - } cmdbuf.bindVertexBuffers(0, binding_count, vertex_buffers.data(), vertex_offsets.data()); }); } @@ -289,6 +285,7 @@ void RasterizerVulkan::SetupFixedAttribs() { VertexLayout& layout = pipeline_info.vertex_layout; auto [fixed_ptr, fixed_offset, _] = stream_buffer.Map(16 * sizeof(Common::Vec4f), 0); + binding_offsets[layout.binding_count] = fixed_offset; // Reserve the last binding for fixed and default attributes // Place the default attrib at offset zero for easy access