i915: Don't overwrite i915's Viewport function from generic code.
authorEric Anholt <eric@anholt.net>
Fri, 14 Nov 2008 02:32:44 +0000 (18:32 -0800)
committerEric Anholt <eric@anholt.net>
Fri, 21 Nov 2008 05:23:46 +0000 (13:23 +0800)
Instead, have i965 and i915 both call the generic function from their Viewport.

src/mesa/drivers/dri/i915/intel_state.c
src/mesa/drivers/dri/i965/brw_context.c
src/mesa/drivers/dri/intel/intel_context.c
src/mesa/drivers/dri/intel/intel_context.h

index 09aa62da361fe5988a24df1202c66d1dc87bd056..4aa43e5f3abd20670e62ce743072b0470d7f9098 100644 (file)
@@ -267,6 +267,8 @@ intelViewport(GLcontext * ctx,
               GLint x, GLint y, GLsizei width, GLsizei height)
 {
    intelCalcViewport(ctx);
+
+   intel_viewport(ctx, x, y, width, height);
 }
 
 static void
index e2bc08a6cb74fab25cabaac0ff0acc46c236bb47..1d6ac2cea68c9a6d08fbd46bd815904e49a9c285 100644 (file)
@@ -71,6 +71,8 @@ static void brwInitDriverFunctions( struct dd_function_table *functions )
    brwInitFragProgFuncs( functions );
    brwInitProgFuncs( functions );
    brw_init_queryobj_functions(functions);
+
+   functions->Viewport = intel_viewport;
 }
 
 
index 9ac18e69609502695bc0bea2941911393cd5eff0..6c625b428c0144c5de4eda35e4533bcc510a8aa0 100644 (file)
@@ -317,11 +317,13 @@ intel_update_renderbuffers(__DRIcontext *context, __DRIdrawable *drawable)
    driUpdateFramebufferSize(&intel->ctx, drawable);
 }
 
-static void
+void
 intel_viewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h)
 {
     struct intel_context *intel = intel_context(ctx);
     __DRIcontext *driContext = intel->driContext;
+    void (*old_viewport)(GLcontext *ctx, GLint x, GLint y,
+                        GLsizei w, GLsizei h);
 
     if (!driContext->driScreenPriv->dri2.enabled)
        return;
@@ -330,11 +332,12 @@ intel_viewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h)
     if (driContext->driDrawablePriv != driContext->driReadablePriv)
        intel_update_renderbuffers(driContext, driContext->driReadablePriv);
 
+    old_viewport = ctx->Driver.Viewport;
     ctx->Driver.Viewport = NULL;
     intel->driDrawable = driContext->driDrawablePriv;
     intelWindowMoved(intel);
     intel_draw_buffer(ctx, intel->ctx.DrawBuffer);
-    ctx->Driver.Viewport = intel_viewport;
+    ctx->Driver.Viewport = old_viewport;
 }
 
 /**
@@ -544,7 +547,6 @@ intelInitDriverFunctions(struct dd_function_table *functions)
    functions->Finish = intelFinish;
    functions->GetString = intelGetString;
    functions->UpdateState = intelInvalidateState;
-   functions->Viewport = intel_viewport;
 
    functions->CopyColorTable = _swrast_CopyColorTable;
    functions->CopyColorSubTable = _swrast_CopyColorSubTable;
index 3938af4c72c934e3ebeeb9a13a8d518d65997306..60028f090ae253773cf99f737f0b81bc09c0b3f5 100644 (file)
@@ -495,6 +495,9 @@ extern int intel_translate_stencil_op(GLenum op);
 extern int intel_translate_blend_factor(GLenum factor);
 extern int intel_translate_logic_op(GLenum opcode);
 
+void intel_viewport(GLcontext * ctx, GLint x, GLint y,
+                   GLsizei width, GLsizei height);
+
 void intel_update_renderbuffers(__DRIcontext *context,
                                __DRIdrawable *drawable);