|
@@ -0,0 +1,78 @@
|
|
|
|
|
+// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
|
+// Copyright 2021 yuzu Emulator Project
|
|
|
|
|
+// Copyright 2010 The Android Open Source Project
|
|
|
|
|
+// Parts of this implementation were base on:
|
|
|
|
|
+// https://cs.android.com/android/platform/superproject/+/android-5.1.1_r38:frameworks/native/include/gui/IGraphicBufferProducer.h
|
|
|
|
|
+
|
|
|
|
|
+#pragma once
|
|
|
|
|
+
|
|
|
|
|
+#include "common/common_funcs.h"
|
|
|
|
|
+#include "common/common_types.h"
|
|
|
|
|
+#include "core/hle/service/nvflinger/ui/fence.h"
|
|
|
|
|
+#include "core/hle/service/nvflinger/ui/rect.h"
|
|
|
|
|
+#include "core/hle/service/nvflinger/window.h"
|
|
|
|
|
+
|
|
|
|
|
+namespace android {
|
|
|
|
|
+
|
|
|
|
|
+class Parcel;
|
|
|
|
|
+
|
|
|
|
|
+#pragma pack(push, 1)
|
|
|
|
|
+struct QueueBufferInput final {
|
|
|
|
|
+ explicit QueueBufferInput(Parcel& parcel);
|
|
|
|
|
+
|
|
|
|
|
+ void Deflate(s64* timestamp_, bool* is_auto_timestamp_, Rect* crop_,
|
|
|
|
|
+ NativeWindowScalingMode* scaling_mode_, NativeWindowTransform* transform_,
|
|
|
|
|
+ u32* sticky_transform_, bool* async_, s32* swap_interval_, Fence* fence_) const {
|
|
|
|
|
+ *timestamp_ = timestamp;
|
|
|
|
|
+ *is_auto_timestamp_ = static_cast<bool>(is_auto_timestamp);
|
|
|
|
|
+ *crop_ = crop;
|
|
|
|
|
+ *scaling_mode_ = scaling_mode;
|
|
|
|
|
+ *transform_ = transform;
|
|
|
|
|
+ *sticky_transform_ = sticky_transform;
|
|
|
|
|
+ *async_ = static_cast<bool>(async);
|
|
|
|
|
+ *swap_interval_ = swap_interval;
|
|
|
|
|
+ *fence_ = fence;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+private:
|
|
|
|
|
+ s64 timestamp{};
|
|
|
|
|
+ s32 is_auto_timestamp{};
|
|
|
|
|
+ Rect crop{};
|
|
|
|
|
+ NativeWindowScalingMode scaling_mode{};
|
|
|
|
|
+ NativeWindowTransform transform{};
|
|
|
|
|
+ u32 sticky_transform{};
|
|
|
|
|
+ s32 async{};
|
|
|
|
|
+ s32 swap_interval{};
|
|
|
|
|
+ Fence fence{};
|
|
|
|
|
+};
|
|
|
|
|
+#pragma pack(pop)
|
|
|
|
|
+static_assert(sizeof(QueueBufferInput) == 84, "QueueBufferInput has wrong size");
|
|
|
|
|
+
|
|
|
|
|
+#pragma pack(push, 1)
|
|
|
|
|
+struct QueueBufferOutput final {
|
|
|
|
|
+ QueueBufferOutput();
|
|
|
|
|
+
|
|
|
|
|
+ void Deflate(u32* width_, u32* height_, u32* transform_hint_, u32* num_pending_buffers_) const {
|
|
|
|
|
+ *width_ = width;
|
|
|
|
|
+ *height_ = height;
|
|
|
|
|
+ *transform_hint_ = transform_hint;
|
|
|
|
|
+ *num_pending_buffers_ = num_pending_buffers;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ void Inflate(u32 width_, u32 height_, u32 transform_hint_, u32 num_pending_buffers_) {
|
|
|
|
|
+ width = width_;
|
|
|
|
|
+ height = height_;
|
|
|
|
|
+ transform_hint = transform_hint_;
|
|
|
|
|
+ num_pending_buffers = num_pending_buffers_;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+private:
|
|
|
|
|
+ u32 width{};
|
|
|
|
|
+ u32 height{};
|
|
|
|
|
+ u32 transform_hint{};
|
|
|
|
|
+ u32 num_pending_buffers{};
|
|
|
|
|
+};
|
|
|
|
|
+#pragma pack(pop)
|
|
|
|
|
+static_assert(sizeof(QueueBufferOutput) == 16, "QueueBufferOutput has wrong size");
|
|
|
|
|
+
|
|
|
|
|
+} // namespace android
|