summaryrefslogtreecommitdiff
path: root/include/kernel/display.h
blob: c1236a67e337bc6b05030f63eb4eefd1be8a06c8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#ifndef _PSP2_KERNEL_DISPLAY_H_
#define _PSP2_KERNEL_DISPLAY_H_

#include <psp2/types.h>

#ifdef __cplusplus
extern "C" {
#endif

enum {
	SCE_DISPLAY_ERROR_OK			= 0,
	SCE_DISPLAY_ERROR_INVALID_HEAD		= 0x80290000,
	SCE_DISPLAY_ERROR_INVALID_VALUE		= 0x80290001,
	SCE_DISPLAY_ERROR_INVALID_ADDR		= 0x80290002,
	SCE_DISPLAY_ERROR_INVALID_PIXELFORMAT	= 0x80290003,
	SCE_DISPLAY_ERROR_INVALID_PITCH		= 0x80290004,
	SCE_DISPLAY_ERROR_INVALID_RESOLUTION	= 0x80290005,
	SCE_DISPLAY_ERROR_INVALID_UPDATETIMING	= 0x80290006,
	SCE_DISPLAY_ERROR_NO_FRAME_BUFFER	= 0x80290007,
	SCE_DISPLAY_ERROR_NO_PIXEL_DATA		= 0x80290008
};

#define SCE_DISPLAY_PIXELFORMAT_A8B8G8R8 0x00000000U

enum {
	/** Buffer change effective immediately */
	SCE_DISPLAY_SETBUF_IMMEDIATE = 0,
	/** Buffer change effective next frame */
	SCE_DISPLAY_SETBUF_NEXTFRAME = 1
};

/**
 * Structure used with sceDisplaySetFrameBuf to set/update framebuffer.
 * Original screen resolution is 960x544, but the following resolutions
 * can also be supplied as width and height :
 * 480x272, 640x368, 720x408
 *
 * @note - This structure is returned by sceDisplayGetFrameBuf
*/
typedef struct SceDisplayFrameBuf {
	SceSize size;	//!< sizeof(SceDisplayFrameBuf)
	void *base;	//!< Pointer to framebuffer
	unsigned int pitch;	//!< pitch pixels
	unsigned int pixelformat;	//!< use SCE_DISPLAY_PIXELFORMAT_A8B8G8R8
	unsigned int width;	//!< framebuffer width
	unsigned int height;	//!< framebuffer height
} SceDisplayFrameBuf;

/**
 * Set/Update framebuffer parameters
 *
 * @param[in] pParam - Pointer to a ::SceDisplayFrameBuf structure.
 * @param[in] sync - One of ::DisplaySetBufSync
 *
 * @return 0 on success, < 0 on error.
 * @note - If NULL is provided as pParam pointer, output is blacked out.
*/
int sceDisplaySetFrameBuf(const SceDisplayFrameBuf *pParam, int sync);

/**
 * Get current framebuffer parameters
 *
 * @param[out] pParam - Pointer to a ::SceDisplayFrameBuf structure
 * which will receive framebuffer parameters.
 *
 * @param[in] sync - One of ::DisplaySetBufSync
 *
 * @return 0 on success, < 0 on error.
*/
int sceDisplayGetFrameBuf(SceDisplayFrameBuf *pParam, int sync);

/**
 * Get current framebuffer dimensions
 *
 * @param[out] width - Framebuffer width
 * @param[out] height - Framebuffer height
 *
 * @return 0 on success, < 0 on error.
*/
int sceDisplayGetFrameBufDimensions(int *width, int *height);

/**
 * Wait for vertical blank start
 */
int sceDisplayWaitVblankStart(void);

/**
 * Wait for vertical blank start after specified number of vertical periods
 *
 * @param[in] vcount - Number of vertical periods before waiting for vertical blank start
 */
int sceDisplayWaitVblankStartMulti(unsigned int vcount);

#ifdef __cplusplus
}
#endif

#endif /* _PSP2_KERNEL_DISPLAY_H_ */