1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef XORG_RENDERER_H 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define XORG_RENDERER_H 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_context.h" 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_state.h" 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct xorg_shaders; 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct exa_pixmap_priv; 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* max number of vertices * 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * max number of attributes per vertex * 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * max number of components per attribute 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * currently the max is 100 quads 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUF_SIZE (100 * 4 * 3 * 4) 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct xorg_renderer { 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe; 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct cso_context *cso; 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct xorg_shaders *shaders; 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int fb_width; 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int fb_height; 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *vs_const_buffer; 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *fs_const_buffer; 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float buffer[BUF_SIZE]; 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int buffer_size; 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_vertex_element velems[3]; 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* number of attributes per vertex for the current 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * draw operation */ 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int attrs_per_vertex; 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct xorg_renderer *renderer_create(struct pipe_context *pipe); 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_destroy(struct xorg_renderer *renderer); 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_bind_destination(struct xorg_renderer *r, 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_surface *surface, 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int width, 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int height ); 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_bind_framebuffer(struct xorg_renderer *r, 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct exa_pixmap_priv *priv); 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_bind_viewport(struct xorg_renderer *r, 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct exa_pixmap_priv *dst); 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_set_constants(struct xorg_renderer *r, 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int shader_type, 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const float *buffer, 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int size); 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_draw_yuv(struct xorg_renderer *r, 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float src_x, float src_y, float src_w, float src_h, 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int dst_x, int dst_y, int dst_w, int dst_h, 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource **textures); 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_begin_solid(struct xorg_renderer *r); 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_solid(struct xorg_renderer *r, 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int x0, int y0, 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int x1, int y1, 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float *color); 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_begin_textures(struct xorg_renderer *r, 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int num_textures); 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_texture(struct xorg_renderer *r, 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int *pos, 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int width, int height, 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_sampler_view **textures, 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int num_textures, 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float *src_matrix, 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float *mask_matrix); 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid renderer_draw_flush(struct xorg_renderer *r); 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 82