mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
152 lines
4.1 KiB
C
152 lines
4.1 KiB
C
#pragma once
|
|
#include "../gfx/nvioctl.h"
|
|
|
|
typedef struct {
|
|
u32 is_valid;
|
|
nvioctl_fence nv_fences[4];
|
|
} PACKED bufferProducerFence;
|
|
|
|
typedef struct {
|
|
s32 left;
|
|
s32 top;
|
|
s32 right;
|
|
s32 bottom;
|
|
} PACKED bufferProducerRect;
|
|
|
|
typedef struct {
|
|
s64 timestamp;
|
|
s32 isAutoTimestamp;
|
|
bufferProducerRect crop;
|
|
s32 scalingMode;
|
|
u32 transform;//See the NATIVE_WINDOW_TRANSFORM_* enums.
|
|
u32 stickyTransform;
|
|
u32 unk[2];
|
|
bufferProducerFence fence;
|
|
} PACKED bufferProducerQueueBufferInput;
|
|
|
|
typedef struct {
|
|
u32 width;
|
|
u32 height;
|
|
u32 transformHint;
|
|
u32 numPendingBuffers;
|
|
} PACKED bufferProducerQueueBufferOutput;
|
|
|
|
typedef struct {
|
|
u32 magic;
|
|
u32 width;
|
|
u32 height;
|
|
u32 stride;
|
|
u32 format;
|
|
u32 usage;
|
|
|
|
u32 pid;
|
|
u32 refcount;
|
|
|
|
u32 numFds;
|
|
u32 numInts;
|
|
|
|
struct {//Actual size is numFds*4 + numInts*4.
|
|
u32 unk_x0;
|
|
u32 nvmap_handle0;
|
|
u32 unk_x8;
|
|
u32 unk_xc;
|
|
u32 unk_x10;
|
|
u32 unk_x14;
|
|
u32 unk_x18;
|
|
u32 unk_x1c;
|
|
u32 unk_x20;
|
|
u32 width_unk0;
|
|
u32 buffer_size0;
|
|
u32 unk_x2c;
|
|
u32 unk_x30;
|
|
u32 width_unk1;
|
|
u32 height_unk;
|
|
u32 flags;
|
|
u32 unk_x40;
|
|
u32 unk_x44;
|
|
u32 byte_stride;
|
|
u32 nvmap_handle1;
|
|
u32 buffer_offset;
|
|
u32 unk_x54;
|
|
u32 unk_x58;
|
|
u32 unk_x5c;
|
|
u32 unk_x60;
|
|
u32 unk_x64;
|
|
u32 unk_x68;
|
|
u32 buffer_size1;
|
|
u32 unk_x70[0x33];//Normally all-zero.
|
|
u64 timestamp;
|
|
} PACKED data;
|
|
} PACKED bufferProducerGraphicBuffer;
|
|
|
|
//From Android window.h.
|
|
/* attributes queriable with query() */
|
|
enum {
|
|
NATIVE_WINDOW_WIDTH = 0,
|
|
NATIVE_WINDOW_HEIGHT = 1,
|
|
NATIVE_WINDOW_FORMAT = 2,
|
|
//...
|
|
// NATIVE_WINDOW_DEFAULT_WIDTH = 6, //These two return invalid data.
|
|
// NATIVE_WINDOW_DEFAULT_HEIGHT = 7,
|
|
};
|
|
|
|
//From Android window.h.
|
|
/* parameter for NATIVE_WINDOW_[API_][DIS]CONNECT */
|
|
enum {
|
|
//...
|
|
/* Buffers will be queued after being filled using the CPU
|
|
*/
|
|
NATIVE_WINDOW_API_CPU = 2,
|
|
//...
|
|
};
|
|
|
|
//From Android hardware.h.
|
|
|
|
/**
|
|
* Transformation definitions
|
|
*
|
|
* IMPORTANT NOTE:
|
|
* HAL_TRANSFORM_ROT_90 is applied CLOCKWISE and AFTER HAL_TRANSFORM_FLIP_{H|V}.
|
|
*
|
|
*/
|
|
|
|
enum {
|
|
/* flip source image horizontally (around the vertical axis) */
|
|
HAL_TRANSFORM_FLIP_H = 0x01,
|
|
/* flip source image vertically (around the horizontal axis)*/
|
|
HAL_TRANSFORM_FLIP_V = 0x02,
|
|
/* rotate source image 90 degrees clockwise */
|
|
HAL_TRANSFORM_ROT_90 = 0x04,
|
|
/* rotate source image 180 degrees */
|
|
HAL_TRANSFORM_ROT_180 = 0x03,
|
|
/* rotate source image 270 degrees clockwise */
|
|
HAL_TRANSFORM_ROT_270 = 0x07,
|
|
};
|
|
|
|
//From Android window.h.
|
|
/* parameter for NATIVE_WINDOW_SET_BUFFERS_TRANSFORM */
|
|
enum {
|
|
/* flip source image horizontally */
|
|
NATIVE_WINDOW_TRANSFORM_FLIP_H = HAL_TRANSFORM_FLIP_H,
|
|
/* flip source image vertically */
|
|
NATIVE_WINDOW_TRANSFORM_FLIP_V = HAL_TRANSFORM_FLIP_V,
|
|
/* rotate source image 90 degrees clock-wise */
|
|
NATIVE_WINDOW_TRANSFORM_ROT_90 = HAL_TRANSFORM_ROT_90,
|
|
/* rotate source image 180 degrees */
|
|
NATIVE_WINDOW_TRANSFORM_ROT_180 = HAL_TRANSFORM_ROT_180,
|
|
/* rotate source image 270 degrees clock-wise */
|
|
NATIVE_WINDOW_TRANSFORM_ROT_270 = HAL_TRANSFORM_ROT_270,
|
|
};
|
|
|
|
Result bufferProducerInitialize(Binder *session);
|
|
void bufferProducerExit(void);
|
|
|
|
Result bufferProducerRequestBuffer(s32 bufferIdx, bufferProducerGraphicBuffer *buf);
|
|
Result bufferProducerDequeueBuffer(bool async, u32 width, u32 height, s32 format, u32 usage, s32 *buf, bufferProducerFence *fence);
|
|
Result bufferProducerDetachBuffer(s32 slot);
|
|
Result bufferProducerQueueBuffer(s32 buf, bufferProducerQueueBufferInput *input, bufferProducerQueueBufferOutput *output);
|
|
Result bufferProducerQuery(s32 what, s32* value);
|
|
Result bufferProducerConnect(s32 api, bool producerControlledByApp, bufferProducerQueueBufferOutput *output);
|
|
Result bufferProducerDisconnect(s32 api);
|
|
Result bufferProducerGraphicBufferInit(s32 buf, bufferProducerGraphicBuffer *input);
|