summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/state_tracker/st_framebuffer.c20
-rw-r--r--src/mesa/state_tracker/st_public.h10
2 files changed, 30 insertions, 0 deletions
diff --git a/src/mesa/state_tracker/st_framebuffer.c b/src/mesa/state_tracker/st_framebuffer.c
index 54ae175e60e..326773c505e 100644
--- a/src/mesa/state_tracker/st_framebuffer.c
+++ b/src/mesa/state_tracker/st_framebuffer.c
@@ -112,3 +112,23 @@ void st_unreference_framebuffer( struct st_framebuffer **stfb )
}
+
+/**
+ * Return the pipe_surface for the given renderbuffer.
+ */
+struct pipe_surface *
+st_get_framebuffer_surface(struct st_framebuffer *stfb, uint surfIndex)
+{
+ struct st_renderbuffer *strb;
+
+ assert(surfIndex <= ST_SURFACE_BACK_RIGHT);
+
+ /* sanity checks, ST tokens should match Mesa tokens */
+ assert(ST_SURFACE_FRONT_LEFT == BUFFER_FRONT_LEFT);
+ assert(ST_SURFACE_BACK_RIGHT == BUFFER_BACK_RIGHT);
+
+ strb = st_renderbuffer(stfb->Base.Attachment[surfIndex].Renderbuffer);
+ if (strb)
+ return strb->surface;
+ return NULL;
+}
diff --git a/src/mesa/state_tracker/st_public.h b/src/mesa/state_tracker/st_public.h
index 93239e66d63..acbf54d5ab3 100644
--- a/src/mesa/state_tracker/st_public.h
+++ b/src/mesa/state_tracker/st_public.h
@@ -30,6 +30,13 @@
#include "mtypes.h"
+
+#define ST_SURFACE_FRONT_LEFT 0
+#define ST_SURFACE_BACK_LEFT 1
+#define ST_SURFACE_FRONT_RIGHT 2
+#define ST_SURFACE_BACK_RIGHT 3
+
+
struct st_context;
struct st_framebuffer;
@@ -51,6 +58,9 @@ struct st_framebuffer *st_create_framebuffer( const __GLcontextModes *visual );
void st_resize_framebuffer( struct st_framebuffer *stfb,
GLuint width, GLuint height );
+struct pipe_surface *st_get_framebuffer_surface(struct st_framebuffer *stfb,
+ uint surfIndex);
+
void st_unreference_framebuffer( struct st_framebuffer **stfb );
void st_make_current(struct st_context *st,