#ifndef _ACCELERANT_H_
#define _ACCELERANT_H_
#include <GraphicsDefs.h>
#include <OS.h>
#if defined(__cplusplus)
extern "C" {
#endif
#define B_ACCELERANT_ENTRY_POINT "get_accelerant_hook"
#define B_ACCELERANT_VERSION 1
typedef void* (*GetAccelerantHook)(uint32, void*);
void* get_accelerant_hook(uint32 feature, void* data);
enum {
B_INIT_ACCELERANT = 0,
B_ACCELERANT_CLONE_INFO_SIZE,
B_GET_ACCELERANT_CLONE_INFO,
B_CLONE_ACCELERANT,
B_UNINIT_ACCELERANT,
B_GET_ACCELERANT_DEVICE_INFO,
B_ACCELERANT_RETRACE_SEMAPHORE,
B_ACCELERANT_MODE_COUNT = 0x100,
B_GET_MODE_LIST,
B_PROPOSE_DISPLAY_MODE,
B_SET_DISPLAY_MODE,
B_GET_DISPLAY_MODE,
B_GET_FRAME_BUFFER_CONFIG,
B_GET_PIXEL_CLOCK_LIMITS,
B_GET_TIMING_CONSTRAINTS,
B_MOVE_DISPLAY,
B_SET_INDEXED_COLORS,
B_DPMS_CAPABILITIES,
B_DPMS_MODE,
B_SET_DPMS_MODE,
B_GET_PREFERRED_DISPLAY_MODE,
B_GET_MONITOR_INFO,
B_GET_EDID_INFO,
B_SET_BRIGHTNESS,
B_GET_BRIGHTNESS,
B_MOVE_CURSOR = 0x200,
B_SET_CURSOR_SHAPE,
B_SHOW_CURSOR,
B_SET_CURSOR_BITMAP,
B_ACCELERANT_ENGINE_COUNT = 0x300,
B_ACQUIRE_ENGINE,
B_RELEASE_ENGINE,
B_WAIT_ENGINE_IDLE,
B_GET_SYNC_TOKEN,
B_SYNC_TO_TOKEN,
B_SCREEN_TO_SCREEN_BLIT = 0x400,
B_FILL_RECTANGLE,
B_INVERT_RECTANGLE,
B_FILL_SPAN,
B_SCREEN_TO_SCREEN_TRANSPARENT_BLIT,
B_SCREEN_TO_SCREEN_SCALED_FILTERED_BLIT,
B_ACCELERANT_PRIVATE_START = (int)0x80000000
};
typedef struct {
uint32 version;
char name[32];
char chipset[32];
char serial_no[32];
uint32 memory;
uint32 dac_speed;
} accelerant_device_info;
typedef struct {
uint32 pixel_clock;
uint16 h_display;
uint16 h_sync_start;
uint16 h_sync_end;
uint16 h_total;
uint16 v_display;
uint16 v_sync_start;
uint16 v_sync_end;
uint16 v_total;
uint32 flags;
} display_timing;
typedef struct {
display_timing timing;
uint32 space;
uint16 virtual_width;
uint16 virtual_height;
uint16 h_display_start;
uint16 v_display_start;
uint32 flags;
} display_mode;
typedef struct {
void* frame_buffer;
void* frame_buffer_dma;
uint32 bytes_per_row;
} frame_buffer_config;
typedef struct {
uint16 h_res;
uint16 h_sync_min;
uint16 h_sync_max;
uint16 h_blank_min;
uint16 h_blank_max;
uint16 v_res;
uint16 v_sync_min;
uint16 v_sync_max;
uint16 v_blank_min;
uint16 v_blank_max;
} display_timing_constraints;
typedef struct {
uint32 version;
char vendor[128];
char name[128];
char serial_number[128];
uint32 product_id;
struct {
uint16 week;
uint16 year;
} produced;
float width;
float height;
uint32 min_horizontal_frequency;
uint32 max_horizontal_frequency;
uint32 min_vertical_frequency;
uint32 max_vertical_frequency;
uint32 max_pixel_clock;
} monitor_info;
enum {
B_SCROLL = 1 << 0,
B_8_BIT_DAC = 1 << 1,
B_HARDWARE_CURSOR = 1 << 2,
B_PARALLEL_ACCESS = 1 << 3,
B_DPMS = 1 << 4,
B_IO_FB_NA = 1 << 5
};
enum {
B_DPMS_ON = 1 << 0,
B_DPMS_STAND_BY = 1 << 1,
B_DPMS_SUSPEND = 1 << 2,
B_DPMS_OFF = 1 << 3
};
enum {
B_BLANK_PEDESTAL = 1 << 27,
B_TIMING_INTERLACED = 1 << 28,
B_POSITIVE_HSYNC = 1 << 29,
B_POSITIVE_VSYNC = 1 << 30,
B_SYNC_ON_GREEN = 1 << 31
};
typedef struct {
uint16 src_left;
uint16 src_top;
uint16 dest_left;
uint16 dest_top;
uint16 width;
uint16 height;
} blit_params;
typedef struct {
uint16 src_left;
uint16 src_top;
uint16 src_width;
uint16 src_height;
uint16 dest_left;
uint16 dest_top;
uint16 dest_width;
uint16 dest_height;
} scaled_blit_params;
typedef struct {
uint16 left;
uint16 top;
uint16 right;
uint16 bottom;
} fill_rect_params;
typedef struct {
uint32 engine_id;
uint32 capability_mask;
void* opaque;
} engine_token;
enum {
B_2D_ACCELERATION = 1 << 0,
B_3D_ACCELERATION = 1 << 1
};
typedef struct {
uint64 counter;
uint32 engine_id;
char opaque[12];
} sync_token;
typedef status_t (*init_accelerant)(int fd);
typedef ssize_t (*accelerant_clone_info_size)(void);
typedef void (*get_accelerant_clone_info)(void* data);
typedef status_t (*clone_accelerant)(void* data);
typedef void (*uninit_accelerant)(void);
typedef status_t (*get_accelerant_device_info)(accelerant_device_info* adi);
typedef uint32 (*accelerant_mode_count)(void);
typedef status_t (*get_mode_list)(display_mode*);
typedef status_t (*propose_display_mode)(display_mode* target,
display_mode* low, display_mode* high);
typedef status_t (*set_display_mode)(display_mode* modeToSet);
typedef status_t (*get_display_mode)(display_mode* currentMode);
typedef status_t (*get_frame_buffer_config)(frame_buffer_config* frameBuffer);
typedef status_t (*get_pixel_clock_limits)(display_mode* dm, uint32* low,
uint32* high);
typedef status_t (*move_display_area)(uint16 hDisplayStart,
uint16 vDisplayStart);
typedef status_t (*get_timing_constraints)(display_timing_constraints* dtc);
typedef void (*set_indexed_colors)(uint count, uint8 first,
const uint8* colorData, uint32 flags);
typedef uint32 (*dpms_capabilities)(void);
typedef uint32 (*dpms_mode)(void);
typedef status_t (*set_dpms_mode)(uint32 dpms_flags);
typedef status_t (*get_preferred_display_mode)(display_mode* preferredMode);
typedef status_t (*get_monitor_info)(monitor_info* info);
typedef status_t (*get_edid_info)(void* info, uint32 size, uint32* _version);
typedef status_t (*set_brightness)(float brightness);
typedef status_t (*get_brightness)(float* brightness);
typedef sem_id (*accelerant_retrace_semaphore)(void);
typedef status_t (*set_cursor_shape)(uint16 width, uint16 height,
uint16 hotX, uint16 hotY, const uint8* andMask, const uint8* xorMask);
typedef status_t (*set_cursor_bitmap)(uint16 width, uint16 height,
uint16 hotX, uint16 hotY, color_space colorSpace, uint16 bytesPerRow,
const uint8* bitmapData);
typedef void (*move_cursor)(uint16 x, uint16 y);
typedef void (*show_cursor)(bool isVisible);
typedef uint32 (*accelerant_engine_count)(void);
typedef status_t (*acquire_engine)(uint32 capabilities, uint32 maxWait,
sync_token* st, engine_token** et);
typedef status_t (*release_engine)(engine_token* et, sync_token* st);
typedef void (*wait_engine_idle)(void);
typedef status_t (*get_sync_token)(engine_token* et, sync_token* st);
typedef status_t (*sync_to_token)(sync_token* st);
typedef void (*screen_to_screen_blit)(engine_token* et, blit_params* list,
uint32 count);
typedef void (*fill_rectangle)(engine_token* et, uint32 color,
fill_rect_params* list, uint32 count);
typedef void (*invert_rectangle)(engine_token* et, fill_rect_params* list,
uint32 count);
typedef void (*screen_to_screen_transparent_blit)(engine_token* et,
uint32 transparent_color, blit_params* list, uint32 count);
typedef void (*screen_to_screen_scaled_filtered_blit)(engine_token* et,
scaled_blit_params* list, uint32 count);
typedef void (*fill_span)(engine_token* et, uint32 color, uint16* list,
uint32 count);
#if defined(__cplusplus)
}
#endif
#endif