mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-10-10 06:56:49 +00:00
Revert "[TEST] Some miscellaneous changes within buffers queue and RAII deallocations"
This commit is contained in:
@@ -5,8 +5,6 @@
|
|||||||
// SPDX-FileCopyrightText: 2021 Skyline Team and Contributors
|
// SPDX-FileCopyrightText: 2021 Skyline Team and Contributors
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
#include "common/logging.h"
|
#include "common/logging.h"
|
||||||
#include "common/scope_exit.h"
|
#include "common/scope_exit.h"
|
||||||
#include "common/string_util.h"
|
#include "common/string_util.h"
|
||||||
@@ -21,17 +19,6 @@
|
|||||||
|
|
||||||
namespace Service::Nvidia {
|
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<size_t>(ioctl_length));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void NVDRV::Open(HLERequestContext& ctx) {
|
void NVDRV::Open(HLERequestContext& ctx) {
|
||||||
LOG_DEBUG(Service_NVDRV, "called");
|
LOG_DEBUG(Service_NVDRV, "called");
|
||||||
IPC::ResponseBuilder rb{ctx, 4};
|
IPC::ResponseBuilder rb{ctx, 4};
|
||||||
@@ -81,8 +68,7 @@ void NVDRV::Ioctl1(HLERequestContext& ctx) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check device
|
// Check device
|
||||||
output_buffer.resize_destructive(
|
output_buffer.resize_destructive(ctx.GetWriteBufferSize(0));
|
||||||
ClampIoctlOutputSize(ctx.GetWriteBufferSize(0), command.length));
|
|
||||||
const auto input_buffer = ctx.ReadBuffer(0);
|
const auto input_buffer = ctx.ReadBuffer(0);
|
||||||
|
|
||||||
const auto nv_result = nvdrv->Ioctl1(fd, command, input_buffer, output_buffer);
|
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_buffer = ctx.ReadBuffer(0);
|
||||||
const auto input_inlined_buffer = ctx.ReadBuffer(1);
|
const auto input_inlined_buffer = ctx.ReadBuffer(1);
|
||||||
output_buffer.resize_destructive(
|
output_buffer.resize_destructive(ctx.GetWriteBufferSize(0));
|
||||||
ClampIoctlOutputSize(ctx.GetWriteBufferSize(0), command.length));
|
|
||||||
|
|
||||||
const auto nv_result =
|
const auto nv_result =
|
||||||
nvdrv->Ioctl2(fd, command, input_buffer, input_inlined_buffer, output_buffer);
|
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);
|
const auto input_buffer = ctx.ReadBuffer(0);
|
||||||
output_buffer.resize_destructive(
|
output_buffer.resize_destructive(ctx.GetWriteBufferSize(0));
|
||||||
ClampIoctlOutputSize(ctx.GetWriteBufferSize(0), command.length));
|
|
||||||
inline_output_buffer.resize_destructive(ctx.GetWriteBufferSize(1));
|
inline_output_buffer.resize_destructive(ctx.GetWriteBufferSize(1));
|
||||||
|
|
||||||
const auto nv_result =
|
const auto nv_result =
|
||||||
|
|||||||
@@ -19,30 +19,11 @@
|
|||||||
#include "core/hle/service/nvnflinger/buffer_queue_producer.h"
|
#include "core/hle/service/nvnflinger/buffer_queue_producer.h"
|
||||||
#include "core/hle/service/nvnflinger/consumer_listener.h"
|
#include "core/hle/service/nvnflinger/consumer_listener.h"
|
||||||
#include "core/hle/service/nvnflinger/parcel.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/ui/graphic_buffer.h"
|
||||||
#include "core/hle/service/nvnflinger/window.h"
|
#include "core/hle/service/nvnflinger/window.h"
|
||||||
|
|
||||||
namespace Service::android {
|
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_,
|
BufferQueueProducer::BufferQueueProducer(Service::KernelHelpers::ServiceContext& service_context_,
|
||||||
std::shared_ptr<BufferQueueCore> buffer_queue_core_,
|
std::shared_ptr<BufferQueueCore> buffer_queue_core_,
|
||||||
Service::Nvidia::NvCore::NvMap& nvmap_)
|
Service::Nvidia::NvCore::NvMap& nvmap_)
|
||||||
@@ -54,13 +35,6 @@ BufferQueueProducer::BufferQueueProducer(Service::KernelHelpers::ServiceContext&
|
|||||||
}
|
}
|
||||||
|
|
||||||
BufferQueueProducer::~BufferQueueProducer() {
|
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);
|
service_context.CloseEvent(buffer_wait_event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -694,15 +668,7 @@ Status BufferQueueProducer::Connect(const std::shared_ptr<IProducerListener>& li
|
|||||||
core->connected_api = api;
|
core->connected_api = api;
|
||||||
output->Inflate(core->default_width, core->default_height, core->transform_hint,
|
output->Inflate(core->default_width, core->default_height, core->transform_hint,
|
||||||
static_cast<u32>(core->queue.size()));
|
static_cast<u32>(core->queue.size()));
|
||||||
if (listener != nullptr) {
|
core->connected_producer_listener = listener;
|
||||||
core->connected_producer_listener = listener;
|
|
||||||
} else {
|
|
||||||
if (internal_listener == nullptr) {
|
|
||||||
internal_listener = std::make_shared<BufferWaitEventListener>(
|
|
||||||
buffer_wait_event, service_context.kernel);
|
|
||||||
}
|
|
||||||
core->connected_producer_listener = internal_listener;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
LOG_ERROR(Service_Nvnflinger, "unknown api = {}", api);
|
LOG_ERROR(Service_Nvnflinger, "unknown api = {}", api);
|
||||||
|
|||||||
@@ -81,7 +81,6 @@ private:
|
|||||||
|
|
||||||
Kernel::KEvent* buffer_wait_event{};
|
Kernel::KEvent* buffer_wait_event{};
|
||||||
Service::KernelHelpers::ServiceContext& service_context;
|
Service::KernelHelpers::ServiceContext& service_context;
|
||||||
std::shared_ptr<IProducerListener> internal_listener;
|
|
||||||
|
|
||||||
std::shared_ptr<BufferQueueCore> core;
|
std::shared_ptr<BufferQueueCore> core;
|
||||||
BufferQueueDefs::SlotsType& slots;
|
BufferQueueDefs::SlotsType& slots;
|
||||||
|
|||||||
@@ -1639,10 +1639,10 @@ typename BufferCache<P>::OverlapResult BufferCache<P>::ResolveOverlaps(DAddr dev
|
|||||||
// When this memory region has been joined a bunch of times, we assume it's being used
|
// 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.
|
// as a stream buffer. Increase the size to skip constantly recreating buffers.
|
||||||
has_stream_leap = true;
|
has_stream_leap = true;
|
||||||
if (expands_left) {
|
if (expands_right) {
|
||||||
expand_begin(CACHING_PAGESIZE * 128);
|
expand_begin(CACHING_PAGESIZE * 128);
|
||||||
}
|
}
|
||||||
if (expands_right) {
|
if (expands_left) {
|
||||||
expand_end(CACHING_PAGESIZE * 128);
|
expand_end(CACHING_PAGESIZE * 128);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -834,6 +834,7 @@ void BlitImageHelper::ConvertR16ToD16(const Framebuffer* dst_framebuffer,
|
|||||||
void BlitImageHelper::ConvertABGR8ToD24S8(const Framebuffer* dst_framebuffer,
|
void BlitImageHelper::ConvertABGR8ToD24S8(const Framebuffer* dst_framebuffer,
|
||||||
const ImageView& src_image_view) {
|
const ImageView& src_image_view) {
|
||||||
if (!device.IsExtShaderStencilExportSupported()) {
|
if (!device.IsExtShaderStencilExportSupported()) {
|
||||||
|
// Shader requires VK_EXT_shader_stencil_export which is not available
|
||||||
LOG_WARNING(Render_Vulkan, "ConvertABGR8ToD24S8 requires shader_stencil_export, skipping");
|
LOG_WARNING(Render_Vulkan, "ConvertABGR8ToD24S8 requires shader_stencil_export, skipping");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user