From 6f3e1b44714a57c3f5f2d7752d0266390cb93878 Mon Sep 17 00:00:00 2001 From: CamilleLaVey Date: Tue, 28 Jul 2026 01:24:06 -0400 Subject: [PATCH] Revert "[TEST] Some miscellaneous changes within buffers queue and RAII deallocations" --- .../hle/service/nvdrv/nvdrv_interface.cpp | 22 ++---------- .../nvnflinger/buffer_queue_producer.cpp | 36 +------------------ .../nvnflinger/buffer_queue_producer.h | 1 - src/video_core/buffer_cache/buffer_cache.h | 4 +-- src/video_core/renderer_vulkan/blit_image.cpp | 1 + 5 files changed, 7 insertions(+), 57 deletions(-) diff --git a/src/core/hle/service/nvdrv/nvdrv_interface.cpp b/src/core/hle/service/nvdrv/nvdrv_interface.cpp index b4ed187027..5fae68adbb 100644 --- a/src/core/hle/service/nvdrv/nvdrv_interface.cpp +++ b/src/core/hle/service/nvdrv/nvdrv_interface.cpp @@ -5,8 +5,6 @@ // SPDX-FileCopyrightText: 2021 Skyline Team and Contributors // SPDX-License-Identifier: GPL-3.0-or-later -#include - #include "common/logging.h" #include "common/scope_exit.h" #include "common/string_util.h" @@ -21,17 +19,6 @@ namespace Service::Nvidia { -namespace { - -size_t ClampIoctlOutputSize(size_t descriptor_size, u32 ioctl_length) { - if (ioctl_length == 0) { - return descriptor_size; - } - return (std::min)(descriptor_size, static_cast(ioctl_length)); -} - -} - void NVDRV::Open(HLERequestContext& ctx) { LOG_DEBUG(Service_NVDRV, "called"); IPC::ResponseBuilder rb{ctx, 4}; @@ -81,8 +68,7 @@ void NVDRV::Ioctl1(HLERequestContext& ctx) { } // Check device - output_buffer.resize_destructive( - ClampIoctlOutputSize(ctx.GetWriteBufferSize(0), command.length)); + output_buffer.resize_destructive(ctx.GetWriteBufferSize(0)); const auto input_buffer = ctx.ReadBuffer(0); const auto nv_result = nvdrv->Ioctl1(fd, command, input_buffer, output_buffer); @@ -109,8 +95,7 @@ void NVDRV::Ioctl2(HLERequestContext& ctx) { const auto input_buffer = ctx.ReadBuffer(0); const auto input_inlined_buffer = ctx.ReadBuffer(1); - output_buffer.resize_destructive( - ClampIoctlOutputSize(ctx.GetWriteBufferSize(0), command.length)); + output_buffer.resize_destructive(ctx.GetWriteBufferSize(0)); const auto nv_result = nvdrv->Ioctl2(fd, command, input_buffer, input_inlined_buffer, output_buffer); @@ -136,8 +121,7 @@ void NVDRV::Ioctl3(HLERequestContext& ctx) { } const auto input_buffer = ctx.ReadBuffer(0); - output_buffer.resize_destructive( - ClampIoctlOutputSize(ctx.GetWriteBufferSize(0), command.length)); + output_buffer.resize_destructive(ctx.GetWriteBufferSize(0)); inline_output_buffer.resize_destructive(ctx.GetWriteBufferSize(1)); const auto nv_result = diff --git a/src/core/hle/service/nvnflinger/buffer_queue_producer.cpp b/src/core/hle/service/nvnflinger/buffer_queue_producer.cpp index 243fd73def..c3eb2796e3 100644 --- a/src/core/hle/service/nvnflinger/buffer_queue_producer.cpp +++ b/src/core/hle/service/nvnflinger/buffer_queue_producer.cpp @@ -19,30 +19,11 @@ #include "core/hle/service/nvnflinger/buffer_queue_producer.h" #include "core/hle/service/nvnflinger/consumer_listener.h" #include "core/hle/service/nvnflinger/parcel.h" -#include "core/hle/service/nvnflinger/producer_listener.h" #include "core/hle/service/nvnflinger/ui/graphic_buffer.h" #include "core/hle/service/nvnflinger/window.h" namespace Service::android { -namespace { - -class BufferWaitEventListener final : public IProducerListener { -public: - explicit BufferWaitEventListener(Kernel::KEvent* event_, Kernel::KernelCore& kernel_) - : event{event_}, kernel{kernel_} {} - - void OnBufferReleased() override { - event->Signal(kernel); - } - -private: - Kernel::KEvent* event; - Kernel::KernelCore& kernel; -}; - -} - BufferQueueProducer::BufferQueueProducer(Service::KernelHelpers::ServiceContext& service_context_, std::shared_ptr buffer_queue_core_, Service::Nvidia::NvCore::NvMap& nvmap_) @@ -54,13 +35,6 @@ BufferQueueProducer::BufferQueueProducer(Service::KernelHelpers::ServiceContext& } BufferQueueProducer::~BufferQueueProducer() { - { - std::scoped_lock lock{core->mutex}; - if (core->connected_producer_listener == internal_listener) { - core->connected_producer_listener = nullptr; - } - internal_listener = nullptr; - } service_context.CloseEvent(buffer_wait_event); } @@ -694,15 +668,7 @@ Status BufferQueueProducer::Connect(const std::shared_ptr& li core->connected_api = api; output->Inflate(core->default_width, core->default_height, core->transform_hint, static_cast(core->queue.size())); - if (listener != nullptr) { - core->connected_producer_listener = listener; - } else { - if (internal_listener == nullptr) { - internal_listener = std::make_shared( - buffer_wait_event, service_context.kernel); - } - core->connected_producer_listener = internal_listener; - } + core->connected_producer_listener = listener; break; default: LOG_ERROR(Service_Nvnflinger, "unknown api = {}", api); diff --git a/src/core/hle/service/nvnflinger/buffer_queue_producer.h b/src/core/hle/service/nvnflinger/buffer_queue_producer.h index d933c1a6b0..697de0ac9b 100644 --- a/src/core/hle/service/nvnflinger/buffer_queue_producer.h +++ b/src/core/hle/service/nvnflinger/buffer_queue_producer.h @@ -81,7 +81,6 @@ private: Kernel::KEvent* buffer_wait_event{}; Service::KernelHelpers::ServiceContext& service_context; - std::shared_ptr internal_listener; std::shared_ptr core; BufferQueueDefs::SlotsType& slots; diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index 7b7247e6e5..5009e12e5e 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h @@ -1565,10 +1565,10 @@ typename BufferCache

::OverlapResult BufferCache

::ResolveOverlaps(DAddr dev // When this memory region has been joined a bunch of times, we assume it's being used // as a stream buffer. Increase the size to skip constantly recreating buffers. has_stream_leap = true; - if (expands_left) { + if (expands_right) { expand_begin(CACHING_PAGESIZE * 128); } - if (expands_right) { + if (expands_left) { expand_end(CACHING_PAGESIZE * 128); } } diff --git a/src/video_core/renderer_vulkan/blit_image.cpp b/src/video_core/renderer_vulkan/blit_image.cpp index 69a4d3b75c..89083d29fb 100644 --- a/src/video_core/renderer_vulkan/blit_image.cpp +++ b/src/video_core/renderer_vulkan/blit_image.cpp @@ -797,6 +797,7 @@ void BlitImageHelper::ConvertR16ToD16(const Framebuffer* dst_framebuffer, void BlitImageHelper::ConvertABGR8ToD24S8(const Framebuffer* dst_framebuffer, const ImageView& src_image_view) { if (!device.IsExtShaderStencilExportSupported()) { + // Shader requires VK_EXT_shader_stencil_export which is not available LOG_WARNING(Render_Vulkan, "ConvertABGR8ToD24S8 requires shader_stencil_export, skipping"); return; }