#ifndef XORG_RENDERER_H #define XORG_RENDERER_H #include "pipe/p_context.h" #include "pipe/p_state.h" struct xorg_shaders; struct exa_pixmap_priv; /* max number of vertices * * max number of attributes per vertex * * max number of components per attribute * * currently the max is 100 quads */ #define BUF_SIZE (100 * 4 * 3 * 4) struct xorg_renderer { struct pipe_context *pipe; struct cso_context *cso; struct xorg_shaders *shaders; int fb_width; int fb_height; struct pipe_resource *vs_const_buffer; struct pipe_resource *fs_const_buffer; float buffer[BUF_SIZE]; int buffer_size; struct pipe_vertex_element velems[3]; /* number of attributes per vertex for the current * draw operation */ int attrs_per_vertex; }; struct xorg_renderer *renderer_create(struct pipe_context *pipe); void renderer_destroy(struct xorg_renderer *renderer); void renderer_bind_destination(struct xorg_renderer *r, struct pipe_surface *surface, int width, int height ); void renderer_bind_framebuffer(struct xorg_renderer *r, struct exa_pixmap_priv *priv); void renderer_bind_viewport(struct xorg_renderer *r, struct exa_pixmap_priv *dst); void renderer_set_constants(struct xorg_renderer *r, int shader_type, const float *buffer, int size); void renderer_draw_yuv(struct xorg_renderer *r, float src_x, float src_y, float src_w, float src_h, int dst_x, int dst_y, int dst_w, int dst_h, struct pipe_resource **textures); void renderer_begin_solid(struct xorg_renderer *r); void renderer_solid(struct xorg_renderer *r, int x0, int y0, int x1, int y1, float *color); void renderer_begin_textures(struct xorg_renderer *r, int num_textures); void renderer_texture(struct xorg_renderer *r, int *pos, int width, int height, struct pipe_sampler_view **textures, int num_textures, float *src_matrix, float *mask_matrix); void renderer_draw_flush(struct xorg_renderer *r); #endif