216
220
if (!vmesa->front.Base.InternalFormat) {
217
221
/* do one-time init for the renderbuffers */
218
viaInitRenderbuffer(&vmesa->front.Base, GL_RGBA);
222
viaInitRenderbuffer(&vmesa->front, GL_RGBA, dPriv);
219
223
viaSetSpanFunctions(&vmesa->front, &fb->Visual);
220
224
_mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &vmesa->front.Base);
222
226
if (fb->Visual.doubleBufferMode) {
223
viaInitRenderbuffer(&vmesa->back.Base, GL_RGBA);
227
viaInitRenderbuffer(&vmesa->back, GL_RGBA, dPriv);
224
228
viaSetSpanFunctions(&vmesa->back, &fb->Visual);
225
229
_mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &vmesa->back.Base);
228
232
if (vmesa->glCtx->Visual.depthBits > 0) {
229
viaInitRenderbuffer(&vmesa->depth.Base,
233
viaInitRenderbuffer(&vmesa->depth,
230
234
(vmesa->glCtx->Visual.depthBits == 16
231
? GL_DEPTH_COMPONENT16 : GL_DEPTH_COMPONENT24));
235
? GL_DEPTH_COMPONENT16 : GL_DEPTH_COMPONENT24),
232
237
viaSetSpanFunctions(&vmesa->depth, &fb->Visual);
233
238
_mesa_add_renderbuffer(fb, BUFFER_DEPTH, &vmesa->depth.Base);
236
241
if (vmesa->glCtx->Visual.stencilBits > 0) {
237
viaInitRenderbuffer(&vmesa->stencil.Base, GL_STENCIL_INDEX8_EXT);
242
viaInitRenderbuffer(&vmesa->stencil, GL_STENCIL_INDEX8_EXT,
238
244
viaSetSpanFunctions(&vmesa->stencil, &fb->Visual);
239
245
_mesa_add_renderbuffer(fb, BUFFER_STENCIL, &vmesa->stencil.Base);
353
357
struct via_context *vmesa = VIA_CONTEXT(ctx);
355
calculate_buffer_parameters( vmesa, drawbuffer );
359
calculate_buffer_parameters(vmesa, drawbuffer, vmesa->driDrawable);
357
361
_mesa_resize_framebuffer(ctx, drawbuffer, width, height);
360
static void viaBufferSize(GLframebuffer *buffer, GLuint *width, GLuint *height)
362
GET_CURRENT_CONTEXT(ctx);
363
struct via_context *vmesa = VIA_CONTEXT(ctx);
364
*width = vmesa->driDrawable->w;
365
*height = vmesa->driDrawable->h;
368
364
/* Extension strings exported by the Unichrome driver.
370
366
const struct dri_extension card_extensions[] =
657
655
VIA_DEBUG = driParseDebugString( getenv( "VIA_DEBUG" ),
660
if (getenv("VIA_NO_RAST"))
658
if (getenv("VIA_NO_RAST") ||
659
driQueryOptionb(&vmesa->optionCache, "no_rast"))
661
660
FALLBACK(vmesa, VIA_FALLBACK_USER_DISABLE, 1);
663
/* I don't understand why this isn't working:
665
662
vmesa->vblank_flags =
666
663
vmesa->viaScreen->irqEnabled ?
667
664
driGetDefaultVBlankFlags(&vmesa->optionCache) : VBLANK_FLAG_NO_IRQ;
669
/* Hack this up in its place:
671
vmesa->vblank_flags = (getenv("VIA_VSYNC") ?
672
VBLANK_FLAG_SYNC : VBLANK_FLAG_NO_IRQ);
674
666
if (getenv("VIA_PAGEFLIP"))
675
667
vmesa->allowPageFlip = 1;
728
720
assert (is_empty_list(&vmesa->tex_image_list[VIA_MEM_SYSTEM]));
729
721
assert (is_empty_list(&vmesa->freed_tex_buffers));
723
driDestroyOptionCache(&vmesa->optionCache);
736
730
void viaXMesaWindowMoved(struct via_context *vmesa)
738
__DRIdrawablePrivate *dPriv = vmesa->driDrawable;
732
__DRIdrawablePrivate *const drawable = vmesa->driDrawable;
733
__DRIdrawablePrivate *const readable = vmesa->driReadable;
734
struct via_renderbuffer *const draw_buffer =
735
(struct via_renderbuffer *) drawable->driverPrivate;
736
struct via_renderbuffer *const read_buffer =
737
(struct via_renderbuffer *) readable->driverPrivate;
739
738
GLuint bytePerPixel = vmesa->viaScreen->bitsPerPixel >> 3;
744
743
switch (vmesa->glCtx->DrawBuffer->_ColorDrawBufferMask[0]) {
745
744
case BUFFER_BIT_BACK_LEFT:
746
if (dPriv->numBackClipRects == 0) {
747
vmesa->numClipRects = dPriv->numClipRects;
748
vmesa->pClipRects = dPriv->pClipRects;
745
if (drawable->numBackClipRects == 0) {
746
vmesa->numClipRects = drawable->numClipRects;
747
vmesa->pClipRects = drawable->pClipRects;
751
vmesa->numClipRects = dPriv->numBackClipRects;
752
vmesa->pClipRects = dPriv->pBackClipRects;
750
vmesa->numClipRects = drawable->numBackClipRects;
751
vmesa->pClipRects = drawable->pBackClipRects;
755
754
case BUFFER_BIT_FRONT_LEFT:
756
vmesa->numClipRects = dPriv->numClipRects;
757
vmesa->pClipRects = dPriv->pClipRects;
755
vmesa->numClipRects = drawable->numClipRects;
756
vmesa->pClipRects = drawable->pClipRects;
760
759
vmesa->numClipRects = 0;
764
if (vmesa->drawW != dPriv->w ||
765
vmesa->drawH != dPriv->h)
766
calculate_buffer_parameters( vmesa, vmesa->glCtx->DrawBuffer );
763
if ((draw_buffer->drawW != drawable->w)
764
|| (draw_buffer->drawH != drawable->h)) {
765
calculate_buffer_parameters(vmesa, vmesa->glCtx->DrawBuffer,
768
vmesa->drawXoff = (GLuint)(((dPriv->x * bytePerPixel) & 0x1f) /
769
draw_buffer->drawXoff = (GLuint)(((drawable->x * bytePerPixel) & 0x1f) /
770
vmesa->drawX = dPriv->x - vmesa->drawXoff;
771
vmesa->drawY = dPriv->y;
772
vmesa->drawW = dPriv->w;
773
vmesa->drawH = dPriv->h;
771
draw_buffer->drawX = drawable->x - draw_buffer->drawXoff;
772
draw_buffer->drawY = drawable->y;
773
draw_buffer->drawW = drawable->w;
774
draw_buffer->drawH = drawable->h;
776
if (drawable != readable) {
777
if ((read_buffer->drawW != readable->w)
778
|| (read_buffer->drawH != readable->h)) {
779
calculate_buffer_parameters(vmesa, vmesa->glCtx->ReadBuffer,
783
read_buffer->drawXoff = (GLuint)(((readable->x * bytePerPixel) & 0x1f) /
785
read_buffer->drawX = readable->x - read_buffer->drawXoff;
786
read_buffer->drawY = readable->y;
787
read_buffer->drawW = readable->w;
788
read_buffer->drawH = readable->h;
775
791
vmesa->front.orig = (vmesa->front.offset +
776
vmesa->drawY * vmesa->front.pitch +
777
vmesa->drawX * bytePerPixel);
792
draw_buffer->drawY * vmesa->front.pitch +
793
draw_buffer->drawX * bytePerPixel);
779
795
vmesa->front.origMap = (vmesa->front.map +
780
vmesa->drawY * vmesa->front.pitch +
781
vmesa->drawX * bytePerPixel);
796
draw_buffer->drawY * vmesa->front.pitch +
797
draw_buffer->drawX * bytePerPixel);
783
799
vmesa->back.orig = vmesa->back.offset;
784
800
vmesa->depth.orig = vmesa->depth.offset;
814
830
drawBuffer = (GLframebuffer *)driDrawPriv->driverPrivate;
815
831
readBuffer = (GLframebuffer *)driReadPriv->driverPrivate;
817
if ( vmesa->driDrawable != driDrawPriv ) {
818
driDrawableInitVBlank( driDrawPriv, vmesa->vblank_flags );
819
vmesa->driDrawable = driDrawPriv;
820
if ( ! calculate_buffer_parameters( vmesa, drawBuffer ) ) {
833
if (vmesa->driDrawable != driDrawPriv) {
834
driDrawableInitVBlank(driDrawPriv, vmesa->vblank_flags,
838
if ((vmesa->driDrawable != driDrawPriv)
839
|| (vmesa->driReadable != driReadPriv)) {
840
vmesa->driDrawable = driDrawPriv;
841
vmesa->driReadable = driReadPriv;
843
if ((drawBuffer->Width != driDrawPriv->w)
844
|| (drawBuffer->Height != driDrawPriv->h)) {
845
_mesa_resize_framebuffer(ctx, drawBuffer,
846
driDrawPriv->w, driDrawPriv->h);
847
drawBuffer->Initialized = GL_TRUE;
850
if (!calculate_buffer_parameters(vmesa, drawBuffer, driDrawPriv)) {
854
if (driDrawPriv != driReadPriv) {
855
if ((readBuffer->Width != driReadPriv->w)
856
|| (readBuffer->Height != driReadPriv->h)) {
857
_mesa_resize_framebuffer(ctx, readBuffer,
858
driReadPriv->w, driReadPriv->h);
859
readBuffer->Initialized = GL_TRUE;
862
if (!calculate_buffer_parameters(vmesa, readBuffer, driReadPriv)) {
825
868
_mesa_make_current(vmesa->glCtx, drawBuffer, readBuffer);
827
870
ctx->Driver.DrawBuffer( ctx, ctx->Color.DrawBuffer[0] );