gallium: change the st_get_framebuffer_surface/texture functions
to return TRUE/FALSE if the st_framebuffer is valid, and if it is return the surface/texture in the passed pointer.
This commit is contained in:
@@ -1117,7 +1117,7 @@ void XMesaSwapBuffers( XMesaBuffer b )
|
||||
*/
|
||||
st_notify_swapbuffers(b->stfb);
|
||||
|
||||
surf = st_get_framebuffer_surface(b->stfb, ST_SURFACE_BACK_LEFT);
|
||||
st_get_framebuffer_surface(b->stfb, ST_SURFACE_BACK_LEFT, &surf);
|
||||
if (surf) {
|
||||
driver.display_surface(b, surf);
|
||||
}
|
||||
@@ -1132,12 +1132,13 @@ void XMesaSwapBuffers( XMesaBuffer b )
|
||||
*/
|
||||
void XMesaCopySubBuffer( XMesaBuffer b, int x, int y, int width, int height )
|
||||
{
|
||||
struct pipe_surface *surf_front
|
||||
= st_get_framebuffer_surface(b->stfb, ST_SURFACE_FRONT_LEFT);
|
||||
struct pipe_surface *surf_back
|
||||
= st_get_framebuffer_surface(b->stfb, ST_SURFACE_BACK_LEFT);
|
||||
struct pipe_surface *surf_front;
|
||||
struct pipe_surface *surf_back;
|
||||
struct pipe_context *pipe = NULL; /* XXX fix */
|
||||
|
||||
st_get_framebuffer_surface(b->stfb, ST_SURFACE_FRONT_LEFT, &surf_front);
|
||||
st_get_framebuffer_surface(b->stfb, ST_SURFACE_BACK_LEFT, &surf_back);
|
||||
|
||||
if (!surf_front || !surf_back)
|
||||
return;
|
||||
|
||||
|
||||
@@ -149,10 +149,9 @@ update_framebuffer_state( struct st_context *st )
|
||||
if (st->frontbuffer_status == FRONT_STATUS_COPY_OF_BACK) {
|
||||
/* copy back color buffer to front color buffer */
|
||||
struct st_framebuffer *stfb = (struct st_framebuffer *) fb;
|
||||
struct pipe_surface *surf_front
|
||||
= st_get_framebuffer_surface(stfb, ST_SURFACE_FRONT_LEFT);
|
||||
struct pipe_surface *surf_back
|
||||
= st_get_framebuffer_surface(stfb, ST_SURFACE_BACK_LEFT);
|
||||
struct pipe_surface *surf_front, *surf_back;
|
||||
(void) st_get_framebuffer_surface(stfb, ST_SURFACE_FRONT_LEFT, &surf_front);
|
||||
(void) st_get_framebuffer_surface(stfb, ST_SURFACE_BACK_LEFT, &surf_back);
|
||||
|
||||
st->pipe->surface_copy(st->pipe,
|
||||
FALSE,
|
||||
|
||||
@@ -33,9 +33,9 @@
|
||||
#include "main/matrix.h"
|
||||
#include "main/renderbuffer.h"
|
||||
#include "main/scissor.h"
|
||||
#include "st_public.h"
|
||||
#include "st_context.h"
|
||||
#include "st_cb_fbo.h"
|
||||
#include "st_public.h"
|
||||
#include "pipe/p_defines.h"
|
||||
#include "pipe/p_context.h"
|
||||
#include "pipe/p_inlines.h"
|
||||
@@ -230,8 +230,8 @@ st_set_framebuffer_surface(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)
|
||||
int
|
||||
st_get_framebuffer_surface(struct st_framebuffer *stfb, uint surfIndex, struct pipe_surface **surface)
|
||||
{
|
||||
struct st_renderbuffer *strb;
|
||||
|
||||
@@ -242,13 +242,17 @@ st_get_framebuffer_surface(struct st_framebuffer *stfb, uint surfIndex)
|
||||
assert(ST_SURFACE_BACK_RIGHT == BUFFER_BACK_RIGHT);
|
||||
|
||||
strb = st_renderbuffer(stfb->Base.Attachment[surfIndex].Renderbuffer);
|
||||
if (strb)
|
||||
return strb->surface;
|
||||
return NULL;
|
||||
if (strb) {
|
||||
*surface = strb->surface;
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
*surface = NULL;
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
struct pipe_texture *
|
||||
st_get_framebuffer_texture(struct st_framebuffer *stfb, uint surfIndex)
|
||||
int
|
||||
st_get_framebuffer_texture(struct st_framebuffer *stfb, uint surfIndex, struct pipe_texture **texture)
|
||||
{
|
||||
struct st_renderbuffer *strb;
|
||||
|
||||
@@ -259,9 +263,13 @@ st_get_framebuffer_texture(struct st_framebuffer *stfb, uint surfIndex)
|
||||
assert(ST_SURFACE_BACK_RIGHT == BUFFER_BACK_RIGHT);
|
||||
|
||||
strb = st_renderbuffer(stfb->Base.Attachment[surfIndex].Renderbuffer);
|
||||
if (strb)
|
||||
return strb->texture;
|
||||
return NULL;
|
||||
if (strb) {
|
||||
*texture = strb->texture;
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
*texture = NULL;
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -80,11 +80,11 @@ void st_set_framebuffer_surface(struct st_framebuffer *stfb,
|
||||
void st_get_framebuffer_dimensions( struct st_framebuffer *stfb,
|
||||
uint *width, uint *height);
|
||||
|
||||
struct pipe_surface *st_get_framebuffer_surface(struct st_framebuffer *stfb,
|
||||
uint surfIndex);
|
||||
int st_get_framebuffer_surface(struct st_framebuffer *stfb,
|
||||
uint surfIndex, struct pipe_surface **surface);
|
||||
|
||||
struct pipe_texture *st_get_framebuffer_texture(struct st_framebuffer *stfb,
|
||||
uint surfIndex);
|
||||
int st_get_framebuffer_texture(struct st_framebuffer *stfb,
|
||||
uint surfIndex, struct pipe_texture **texture);
|
||||
|
||||
void *st_framebuffer_private( struct st_framebuffer *stfb );
|
||||
|
||||
|
||||
Reference in New Issue
Block a user