#pragma once
#include "../display/types.h"
#include "types.h"

typedef struct {
    u32 width;
    u32 height;
    NvColorFormat color_format;
    NvLayout layout;
    u32 pitch;
    u32 unused; // usually this field contains the nvmap handle, but it's completely unused/overwritten during marshalling
    u32 offset;
    NvKind kind;
    u32 block_height_log2;
    NvDisplayScanFormat scan;
    u32 second_field_offset;
    u64 flags;
    u64 size;
    u32 unk[6]; // compression related
} NvSurface;

typedef struct {
    NativeHandle header;
    s32 unk0;       // -1
    s32 nvmap_id;   // nvmap object id
    u32 unk2;       // 0
    u32 magic;      // 0xDAFFCAFF
    u32 pid;        // 42
    u32 type;       // ?
    u32 usage;      // GRALLOC_USAGE_* bitmask
    u32 format;     // PIXEL_FORMAT_*
    u32 ext_format; // copy of the above (in most cases)
    u32 stride;     // in pixels!
    u32 total_size; // in bytes
    u32 num_planes; // usually 1
    u32 unk12;      // 0
    NvSurface planes[3];
    u64 unused;     // official sw writes a pointer to bookkeeping data here, but it's otherwise completely unused/overwritten during marshalling
} NvGraphicBuffer;