diff options
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/service/nvflinger/ui/graphic_buffer.h | 100 | 
1 files changed, 100 insertions, 0 deletions
| diff --git a/src/core/hle/service/nvflinger/ui/graphic_buffer.h b/src/core/hle/service/nvflinger/ui/graphic_buffer.h new file mode 100644 index 000000000..c1e54d9ed --- /dev/null +++ b/src/core/hle/service/nvflinger/ui/graphic_buffer.h @@ -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 | 
