X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fstate_tracker%2Fst_pbo.h;h=54ae7768b4f233383d8e397743eb9191eb06aeee;hb=80797edd7193409d0109d4d3378dd1b8d2597f80;hp=7ba426fedd2809cc03464ab67aecca601230196d;hpb=21e069f7d4294bfe9500e84023df970e87be9059;p=mesa.git diff --git a/src/mesa/state_tracker/st_pbo.h b/src/mesa/state_tracker/st_pbo.h index 7ba426fedd2..54ae7768b4f 100644 --- a/src/mesa/state_tracker/st_pbo.h +++ b/src/mesa/state_tracker/st_pbo.h @@ -24,8 +24,60 @@ #ifndef ST_PBO_H #define ST_PBO_H +struct gl_pixelstore_attrib; + struct st_context; +struct st_pbo_addresses { + int xoffset; + int yoffset; + unsigned width; + unsigned height; + unsigned depth; + + unsigned bytes_per_pixel; + + /* Everything below is filled in by st_pbo_from_pixelstore */ + unsigned pixels_per_row; + unsigned image_height; + + /* Everything below is filled in by st_pbo_setup_buffer */ + + /* Buffer and view. */ + struct pipe_resource *buffer; /* non-owning pointer */ + unsigned first_element; + unsigned last_element; + + /* Constant buffer for the fragment shader. */ + struct { + int32_t xoffset; + int32_t yoffset; + int32_t stride; + int32_t image_size; + int32_t layer_offset; + } constants; +}; + +bool +st_pbo_addresses_setup(struct st_context *st, + struct pipe_resource *buf, intptr_t buf_offset, + struct st_pbo_addresses *addr); + +bool +st_pbo_addresses_pixelstore(struct st_context *st, + GLenum gl_target, bool skip_images, + const struct gl_pixelstore_attrib *store, + const void *pixels, + struct st_pbo_addresses *addr); + +void +st_pbo_addresses_invert_y(struct st_pbo_addresses *addr, + unsigned viewport_height); + +bool +st_pbo_draw(struct st_context *st, const struct st_pbo_addresses *addr, + unsigned surface_width, unsigned surface_height); + void * st_pbo_create_vs(struct st_context *st); @@ -33,7 +85,14 @@ void * st_pbo_create_gs(struct st_context *st); void * -st_pbo_create_upload_fs(struct st_context *st); +st_pbo_get_upload_fs(struct st_context *st, + enum pipe_format src_format, + enum pipe_format dst_format); + +void * +st_pbo_get_download_fs(struct st_context *st, enum pipe_texture_target target, + enum pipe_format src_format, + enum pipe_format dst_format); extern void st_init_pbo_helpers(struct st_context *st);