mesa: fix fallthrough in glformats
[mesa.git] / src / mesa / state_tracker / st_pbo.h
index 0ce30958410a1335922a2d3f7cb786672b0daef3..54ae7768b4f233383d8e397743eb9191eb06aeee 100644 (file)
 #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);
+
+void *
+st_pbo_create_gs(struct st_context *st);
+
+void *
+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);