diff options
| author | Johann Rudloff <cypheon@googlemail.com> | 2010-07-27 22:59:26 +0200 | 
|---|---|---|
| committer | Alex Deucher <alexdeucher@gmail.com> | 2010-11-08 19:59:53 -0500 | 
| commit | f9b5201dbdca4a612afdd694a583177fb4af8685 (patch) | |
| tree | e92e985c6d8ac450a0cd7c219e31105a03444b8f /src | |
| parent | a457ca7844c7943e17aa18a73757cc4ac965e200 (diff) | |
radeon: Implement EGL_MESA_no_surface_extension
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/drivers/dri/radeon/radeon_common.c | 4 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/radeon/radeon_common_context.c | 84 | 
2 files changed, 53 insertions, 35 deletions
| diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c b/src/mesa/drivers/dri/radeon/radeon_common.c index 43a6355ad8..7361adffcf 100644 --- a/src/mesa/drivers/dri/radeon/radeon_common.c +++ b/src/mesa/drivers/dri/radeon/radeon_common.c @@ -171,6 +171,10 @@ void radeonSetCliprects(radeonContextPtr radeon)  {  	__DRIdrawable *const drawable = radeon_get_drawable(radeon);  	__DRIdrawable *const readable = radeon_get_readable(radeon); + +	if(drawable == NULL && readable == NULL) +		return; +  	struct radeon_framebuffer *const draw_rfb = drawable->driverPrivate;  	struct radeon_framebuffer *const read_rfb = readable->driverPrivate;  	int x_off, y_off; diff --git a/src/mesa/drivers/dri/radeon/radeon_common_context.c b/src/mesa/drivers/dri/radeon/radeon_common_context.c index 1047dfae0b..a436ec112c 100644 --- a/src/mesa/drivers/dri/radeon/radeon_common_context.c +++ b/src/mesa/drivers/dri/radeon/radeon_common_context.c @@ -39,6 +39,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  #include "drirenderbuffer.h"  #include "drivers/common/meta.h"  #include "main/context.h" +#include "main/framebuffer.h"  #include "main/renderbuffer.h"  #include "main/state.h"  #include "main/simple_list.h" @@ -379,12 +380,12 @@ GLboolean radeonUnbindContext(__DRIcontext * driContextPriv)  static void  radeon_make_kernel_renderbuffer_current(radeonContextPtr radeon, -					struct radeon_framebuffer *draw) +					struct gl_framebuffer *draw)  {  	/* if radeon->fake */  	struct radeon_renderbuffer *rb; -	if ((rb = (void *)draw->base.Attachment[BUFFER_FRONT_LEFT].Renderbuffer)) { +	if ((rb = (void *)draw->Attachment[BUFFER_FRONT_LEFT].Renderbuffer)) {  		if (!rb->bo) {  			rb->bo = radeon_bo_open(radeon->radeonScreen->bom,  						radeon->radeonScreen->frontOffset, @@ -396,7 +397,7 @@ radeon_make_kernel_renderbuffer_current(radeonContextPtr radeon,  		rb->cpp = radeon->radeonScreen->cpp;  		rb->pitch = radeon->radeonScreen->frontPitch * rb->cpp;  	} -	if ((rb = (void *)draw->base.Attachment[BUFFER_BACK_LEFT].Renderbuffer)) { +	if ((rb = (void *)draw->Attachment[BUFFER_BACK_LEFT].Renderbuffer)) {  		if (!rb->bo) {  			rb->bo = radeon_bo_open(radeon->radeonScreen->bom,  						radeon->radeonScreen->backOffset, @@ -408,7 +409,7 @@ radeon_make_kernel_renderbuffer_current(radeonContextPtr radeon,  		rb->cpp = radeon->radeonScreen->cpp;  		rb->pitch = radeon->radeonScreen->backPitch * rb->cpp;  	} -	if ((rb = (void *)draw->base.Attachment[BUFFER_DEPTH].Renderbuffer)) { +	if ((rb = (void *)draw->Attachment[BUFFER_DEPTH].Renderbuffer)) {  		if (!rb->bo) {  			rb->bo = radeon_bo_open(radeon->radeonScreen->bom,  						radeon->radeonScreen->depthOffset, @@ -420,7 +421,7 @@ radeon_make_kernel_renderbuffer_current(radeonContextPtr radeon,  		rb->cpp = radeon->radeonScreen->cpp;  		rb->pitch = radeon->radeonScreen->depthPitch * rb->cpp;  	} -	if ((rb = (void *)draw->base.Attachment[BUFFER_STENCIL].Renderbuffer)) { +	if ((rb = (void *)draw->Attachment[BUFFER_STENCIL].Renderbuffer)) {  		if (!rb->bo) {  			rb->bo = radeon_bo_open(radeon->radeonScreen->bom,  						radeon->radeonScreen->depthOffset, @@ -436,7 +437,7 @@ radeon_make_kernel_renderbuffer_current(radeonContextPtr radeon,  static void  radeon_make_renderbuffer_current(radeonContextPtr radeon, -				 struct radeon_framebuffer *draw) +				 struct gl_framebuffer *draw)  {  	int size = 4096*4096*4;  	/* if radeon->fake */ @@ -448,7 +449,7 @@ radeon_make_renderbuffer_current(radeonContextPtr radeon,  	} -	if ((rb = (void *)draw->base.Attachment[BUFFER_FRONT_LEFT].Renderbuffer)) { +	if ((rb = (void *)draw->Attachment[BUFFER_FRONT_LEFT].Renderbuffer)) {  		if (!rb->bo) {  			rb->bo = radeon_bo_open(radeon->radeonScreen->bom,  						radeon->radeonScreen->frontOffset + @@ -461,7 +462,7 @@ radeon_make_renderbuffer_current(radeonContextPtr radeon,  		rb->cpp = radeon->radeonScreen->cpp;  		rb->pitch = radeon->radeonScreen->frontPitch * rb->cpp;  	} -	if ((rb = (void *)draw->base.Attachment[BUFFER_BACK_LEFT].Renderbuffer)) { +	if ((rb = (void *)draw->Attachment[BUFFER_BACK_LEFT].Renderbuffer)) {  		if (!rb->bo) {  			rb->bo = radeon_bo_open(radeon->radeonScreen->bom,  						radeon->radeonScreen->backOffset + @@ -474,7 +475,7 @@ radeon_make_renderbuffer_current(radeonContextPtr radeon,  		rb->cpp = radeon->radeonScreen->cpp;  		rb->pitch = radeon->radeonScreen->backPitch * rb->cpp;  	} -	if ((rb = (void *)draw->base.Attachment[BUFFER_DEPTH].Renderbuffer)) { +	if ((rb = (void *)draw->Attachment[BUFFER_DEPTH].Renderbuffer)) {  		if (!rb->bo) {  			rb->bo = radeon_bo_open(radeon->radeonScreen->bom,  						radeon->radeonScreen->depthOffset + @@ -487,7 +488,7 @@ radeon_make_renderbuffer_current(radeonContextPtr radeon,  		rb->cpp = radeon->radeonScreen->cpp;  		rb->pitch = radeon->radeonScreen->depthPitch * rb->cpp;  	} -	if ((rb = (void *)draw->base.Attachment[BUFFER_STENCIL].Renderbuffer)) { +	if ((rb = (void *)draw->Attachment[BUFFER_STENCIL].Renderbuffer)) {  		if (!rb->bo) {  			rb->bo = radeon_bo_open(radeon->radeonScreen->bom,  						radeon->radeonScreen->depthOffset + @@ -793,8 +794,8 @@ GLboolean radeonMakeCurrent(__DRIcontext * driContextPriv,  			    __DRIdrawable * driReadPriv)  {  	radeonContextPtr radeon; -	struct radeon_framebuffer *drfb; -	struct gl_framebuffer *readfb; +	struct radeon_framebuffer *rdrfb; +	struct gl_framebuffer *drfb, *readfb;  	if (!driContextPriv) {  		if (RADEON_DEBUG & RADEON_DRI) @@ -804,17 +805,25 @@ GLboolean radeonMakeCurrent(__DRIcontext * driContextPriv,  	}  	radeon = (radeonContextPtr) driContextPriv->driverPrivate; -	drfb = driDrawPriv->driverPrivate; -	readfb = driReadPriv->driverPrivate; + +	if(driDrawPriv == NULL && driReadPriv == NULL) { +		drfb = _mesa_create_framebuffer(&radeon->glCtx->Visual); +		readfb = drfb; +	} +	else { +		drfb = driDrawPriv->driverPrivate; +		readfb = driReadPriv->driverPrivate; +	}  	if (driContextPriv->driScreenPriv->dri2.enabled) { -		radeon_update_renderbuffers(driContextPriv, driDrawPriv, GL_FALSE); +		if(driDrawPriv) +			radeon_update_renderbuffers(driContextPriv, driDrawPriv, GL_FALSE);  		if (driDrawPriv != driReadPriv)  			radeon_update_renderbuffers(driContextPriv, driReadPriv, GL_FALSE);  		_mesa_reference_renderbuffer(&radeon->state.color.rb, -			&(radeon_get_renderbuffer(&drfb->base, BUFFER_BACK_LEFT)->base)); +			&(radeon_get_renderbuffer(drfb, BUFFER_BACK_LEFT)->base));  		_mesa_reference_renderbuffer(&radeon->state.depth.rb, -			&(radeon_get_renderbuffer(&drfb->base, BUFFER_DEPTH)->base)); +			&(radeon_get_renderbuffer(drfb, BUFFER_DEPTH)->base));  	} else {  		radeon_make_renderbuffer_current(radeon, drfb);  	} @@ -822,35 +831,40 @@ GLboolean radeonMakeCurrent(__DRIcontext * driContextPriv,  	if (RADEON_DEBUG & RADEON_DRI)  	     fprintf(stderr, "%s ctx %p dfb %p rfb %p\n", __FUNCTION__, radeon->glCtx, drfb, readfb); -	driUpdateFramebufferSize(radeon->glCtx, driDrawPriv); +	if(driDrawPriv) +		driUpdateFramebufferSize(radeon->glCtx, driDrawPriv);  	if (driReadPriv != driDrawPriv)  		driUpdateFramebufferSize(radeon->glCtx, driReadPriv); -	_mesa_make_current(radeon->glCtx, &drfb->base, readfb); +	_mesa_make_current(radeon->glCtx, drfb, readfb); +	if (driDrawPriv == NULL && driReadPriv == NULL) +		_mesa_reference_framebuffer(&drfb, NULL);  	_mesa_update_state(radeon->glCtx); -	if (radeon->glCtx->DrawBuffer == &drfb->base) { -		if (driDrawPriv->swap_interval == (unsigned)-1) { -			int i; -			driDrawPriv->vblFlags = -				(radeon->radeonScreen->irq != 0) -				? driGetDefaultVBlankFlags(&radeon-> -							   optionCache) -				: VBLANK_FLAG_NO_IRQ; +	if (radeon->glCtx->DrawBuffer == drfb) { +		if(driDrawPriv != NULL) { +			rdrfb = (struct radeon_framebuffer *)drfb; +			if (driDrawPriv->swap_interval == (unsigned)-1) { +				int i; +				driDrawPriv->vblFlags = +					(radeon->radeonScreen->irq != 0) +					? driGetDefaultVBlankFlags(&radeon-> +								   optionCache) +					: VBLANK_FLAG_NO_IRQ; -			driDrawableInitVBlank(driDrawPriv); -			drfb->vbl_waited = driDrawPriv->vblSeq; +				driDrawableInitVBlank(driDrawPriv); +				rdrfb->vbl_waited = driDrawPriv->vblSeq; -			for (i = 0; i < 2; i++) { -				if (drfb->color_rb[i]) -					drfb->color_rb[i]->vbl_pending = driDrawPriv->vblSeq; +				for (i = 0; i < 2; i++) { +					if (rdrfb->color_rb[i]) +						rdrfb->color_rb[i]->vbl_pending = driDrawPriv->vblSeq; +				}  			} - +			radeon_window_moved(radeon);  		} -		radeon_window_moved(radeon); -		radeon_draw_buffer(radeon->glCtx, &drfb->base); +		radeon_draw_buffer(radeon->glCtx, drfb);  	} | 
