mirror of https://git.suyu.dev/suyu/suyu
hle: nvflinger: Add implementation for GraphicBuffer class.
parent
8c27465325
commit
5a8b9a9706
@ -0,0 +1,100 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
// Copyright 2021 yuzu Emulator Project
|
||||
// Copyright 2007 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/ui/GraphicBuffer.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "common/common_funcs.h"
|
||||
#include "common/common_types.h"
|
||||
#include "core/hle/service/nvflinger/pixel_format.h"
|
||||
|
||||
namespace android {
|
||||
|
||||
class GraphicBuffer final {
|
||||
public:
|
||||
constexpr GraphicBuffer() = default;
|
||||
|
||||
constexpr GraphicBuffer(u32 width_, u32 height_, PixelFormat format_, u32 usage_)
|
||||
: width{static_cast<s32>(width_)}, height{static_cast<s32>(height_)}, format{format_},
|
||||
usage{static_cast<s32>(usage_)} {}
|
||||
|
||||
constexpr u32 Width() const {
|
||||
return static_cast<u32>(width);
|
||||
}
|
||||
|
||||
constexpr u32 Height() const {
|
||||
return static_cast<u32>(height);
|
||||
}
|
||||
|
||||
constexpr u32 Stride() const {
|
||||
return static_cast<u32>(stride);
|
||||
}
|
||||
|
||||
constexpr u32 Usage() const {
|
||||
return static_cast<u32>(usage);
|
||||
}
|
||||
|
||||
constexpr PixelFormat Format() const {
|
||||
return format;
|
||||
}
|
||||
|
||||
constexpr u32 BufferId() const {
|
||||
return buffer_id;
|
||||
}
|
||||
|
||||
constexpr u32 ExternalFormat() const {
|
||||
return external_format;
|
||||
}
|
||||
|
||||
constexpr u32 Handle() const {
|
||||
return handle;
|
||||
}
|
||||
|
||||
constexpr u32 Offset() const {
|
||||
return offset;
|
||||
}
|
||||
|
||||
constexpr bool NeedsReallocation(u32 width_, u32 height_, PixelFormat format_,
|
||||
u32 usage_) const {
|
||||
if (static_cast<s32>(width_) != width) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (static_cast<s32>(height_) != height) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (format_ != format) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ((static_cast<u32>(usage) & usage_) != usage_) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private:
|
||||
u32 magic{};
|
||||
s32 width{};
|
||||
s32 height{};
|
||||
s32 stride{};
|
||||
PixelFormat format{};
|
||||
s32 usage{};
|
||||
INSERT_PADDING_WORDS(1);
|
||||
u32 index{};
|
||||
INSERT_PADDING_WORDS(3);
|
||||
u32 buffer_id{};
|
||||
INSERT_PADDING_WORDS(6);
|
||||
u32 external_format{};
|
||||
INSERT_PADDING_WORDS(10);
|
||||
u32 handle{};
|
||||
u32 offset{};
|
||||
INSERT_PADDING_WORDS(60);
|
||||
};
|
||||
static_assert(sizeof(GraphicBuffer) == 0x16C, "GraphicBuffer has wrong size");
|
||||
|
||||
} // namespace android
|
Loading…
Reference in New Issue