diff options
-rw-r--r-- | src/core/file_sys/disk_filesystem.cpp | 6 | ||||
-rw-r--r-- | src/core/hle/kernel/hle_ipc.cpp | 4 | ||||
-rw-r--r-- | src/core/hle/service/sockets/bsd.cpp | 3 | ||||
-rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 11 |
4 files changed, 15 insertions, 9 deletions
diff --git a/src/core/file_sys/disk_filesystem.cpp b/src/core/file_sys/disk_filesystem.cpp index 8c6f15bb5..d248c2df4 100644 --- a/src/core/file_sys/disk_filesystem.cpp +++ b/src/core/file_sys/disk_filesystem.cpp @@ -58,11 +58,13 @@ ResultVal<std::unique_ptr<StorageBackend>> Disk_FileSystem::OpenFile(const std:: } ResultCode Disk_FileSystem::DeleteFile(const std::string& path) const { - if (!FileUtil::Exists(path)) { + std::string full_path = base_directory + path; + + if (!FileUtil::Exists(full_path)) { return ERROR_PATH_NOT_FOUND; } - FileUtil::Delete(path); + FileUtil::Delete(full_path); return RESULT_SUCCESS; } diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp index 609cdbff2..2532dd450 100644 --- a/src/core/hle/kernel/hle_ipc.cpp +++ b/src/core/hle/kernel/hle_ipc.cpp @@ -214,8 +214,8 @@ ResultCode HLERequestContext::WriteToOutgoingCommandBuffer(Thread& thread) { (sizeof(IPC::CommandHeader) + sizeof(IPC::HandleDescriptorHeader)) / sizeof(u32); ASSERT_MSG(!handle_descriptor_header->send_current_pid, "Sending PID is not implemented"); - ASSERT_MSG(copy_objects.size() == handle_descriptor_header->num_handles_to_copy); - ASSERT_MSG(move_objects.size() == handle_descriptor_header->num_handles_to_move); + ASSERT(copy_objects.size() == handle_descriptor_header->num_handles_to_copy); + ASSERT(move_objects.size() == handle_descriptor_header->num_handles_to_move); // We don't make a distinction between copy and move handles when translating since HLE // services don't deal with handles directly. However, the guest applications might check diff --git a/src/core/hle/service/sockets/bsd.cpp b/src/core/hle/service/sockets/bsd.cpp index 32648bdd9..6aa1e2511 100644 --- a/src/core/hle/service/sockets/bsd.cpp +++ b/src/core/hle/service/sockets/bsd.cpp @@ -19,10 +19,9 @@ void BSD::RegisterClient(Kernel::HLERequestContext& ctx) { void BSD::StartMonitoring(Kernel::HLERequestContext& ctx) { LOG_WARNING(Service, "(STUBBED) called"); - IPC::ResponseBuilder rb{ctx, 3}; + IPC::ResponseBuilder rb{ctx, 2}; rb.Push(RESULT_SUCCESS); - rb.Push<u32>(0); // bsd errno } void BSD::Socket(Kernel::HLERequestContext& ctx) { diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 2e91a43e3..eecbc5ff0 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -324,9 +324,6 @@ std::pair<Surface, Surface> RasterizerOpenGL::ConfigureFramebuffers(bool using_c bool using_depth_fb) { const auto& regs = Core::System().GetInstance().GPU().Maxwell3D().regs; - // Sync the depth test state before configuring the framebuffer surfaces. - SyncDepthTestState(); - // TODO(bunnei): Implement this const bool has_stencil = false; @@ -391,6 +388,13 @@ void RasterizerOpenGL::Clear() { if (regs.clear_buffers.Z) { clear_mask |= GL_DEPTH_BUFFER_BIT; use_depth_fb = true; + + // Always enable the depth write when clearing the depth buffer. The depth write mask is + // ignored when clearing the buffer in the Switch, but OpenGL obeys it so we set it to true. + state.depth.test_enabled = true; + state.depth.write_mask = GL_TRUE; + state.depth.test_func = GL_ALWAYS; + state.Apply(); } if (clear_mask == 0) @@ -429,6 +433,7 @@ void RasterizerOpenGL::DrawArrays() { auto [dirty_color_surface, dirty_depth_surface] = ConfigureFramebuffers(true, regs.zeta.Address() != 0); + SyncDepthTestState(); SyncBlendState(); SyncCullMode(); |