797
static void intelRenderPrimitive( GLcontext *ctx, GLenum prim )
799
intelContextPtr intel = INTEL_CONTEXT(ctx);
802
fprintf(stderr, "%s %s\n", __FUNCTION__, _mesa_lookup_enum_by_nr(prim));
804
/* Let some clipping routines know which primitive they're dealing
807
intel->render_primitive = prim;
809
/* Shortcircuit this when called from t_dd_rendertmp.h for unfilled
810
* triangles. The rasterized primitive will always be reset by
811
* lower level functions in that case, potentially pingponging the
814
if (reduced_prim[prim] == GL_TRIANGLES &&
815
(ctx->_TriangleCaps & DD_TRI_UNFILLED))
818
/* Set some primitive-dependent state and Start? a new primitive.
820
intelRasterPrimitive( ctx, reduced_prim[prim], hw_prim[prim] );
824
/**********************************************************************/
825
/* Transition to/from hardware rasterization. */
826
/**********************************************************************/
828
static char *fallbackStrings[] = {
840
static char *getFallbackString(GLuint bit)
847
return fallbackStrings[i];
852
void intelFallback( intelContextPtr intel, GLuint bit, GLboolean mode )
854
GLcontext *ctx = &intel->ctx;
855
TNLcontext *tnl = TNL_CONTEXT(ctx);
856
GLuint oldfallback = intel->Fallback;
859
intel->Fallback |= bit;
860
if (oldfallback == 0) {
862
if (INTEL_DEBUG & DEBUG_FALLBACKS)
863
fprintf(stderr, "ENTER FALLBACK %x: %s\n",
864
bit, getFallbackString( bit ));
865
_swsetup_Wakeup( ctx );
866
intel->RenderIndex = ~0;
870
intel->Fallback &= ~bit;
871
if (oldfallback == bit) {
872
_swrast_flush( ctx );
873
if (INTEL_DEBUG & DEBUG_FALLBACKS)
874
fprintf(stderr, "LEAVE FALLBACK %s\n", getFallbackString( bit ));
875
tnl->Driver.Render.Start = intelRenderStart;
876
tnl->Driver.Render.PrimitiveNotify = intelRenderPrimitive;
877
tnl->Driver.Render.Finish = intelRenderFinish;
878
tnl->Driver.Render.BuildVertices = _tnl_build_vertices;
879
tnl->Driver.Render.CopyPV = _tnl_copy_pv;
880
tnl->Driver.Render.Interp = _tnl_interp;
882
_tnl_invalidate_vertex_state( ctx, ~0 );
883
_tnl_invalidate_vertices( ctx, ~0 );
884
_tnl_install_attrs( ctx,
886
intel->vertex_attr_count,
887
intel->ViewportMatrix.m, 0 );
889
intel->NewGLState |= _INTEL_NEW_RENDERSTATE;
803
static void intelRenderPrimitive( GLcontext *ctx, GLenum prim )
805
intelContextPtr intel = INTEL_CONTEXT(ctx);
808
fprintf(stderr, "%s %s\n", __FUNCTION__, _mesa_lookup_enum_by_nr(prim));
810
/* Let some clipping routines know which primitive they're dealing
813
intel->render_primitive = prim;
815
/* Shortcircuit this when called from t_dd_rendertmp.h for unfilled
816
* triangles. The rasterized primitive will always be reset by
817
* lower level functions in that case, potentially pingponging the
820
if (reduced_prim[prim] == GL_TRIANGLES &&
821
(ctx->_TriangleCaps & DD_TRI_UNFILLED))
824
/* Set some primitive-dependent state and Start? a new primitive.
826
intelRasterPrimitive( ctx, reduced_prim[prim], hw_prim[prim] );
830
/**********************************************************************/
831
/* Transition to/from hardware rasterization. */
832
/**********************************************************************/
837
} fallbackStrings[] = {
838
{ INTEL_FALLBACK_DRAW_BUFFER, "Draw buffer" },
839
{ INTEL_FALLBACK_READ_BUFFER, "Read buffer" },
840
{ INTEL_FALLBACK_USER, "User" },
841
{ INTEL_FALLBACK_NO_BATCHBUFFER, "No Batchbuffer" },
842
{ INTEL_FALLBACK_NO_TEXMEM, "No Texmem" },
843
{ INTEL_FALLBACK_RENDERMODE, "Rendermode" },
845
{ I830_FALLBACK_TEXTURE, "i830 texture" },
846
{ I830_FALLBACK_COLORMASK, "i830 colormask" },
847
{ I830_FALLBACK_STENCIL, "i830 stencil" },
848
{ I830_FALLBACK_STIPPLE, "i830 stipple" },
849
{ I830_FALLBACK_LOGICOP, "i830 logicop" },
851
{ I915_FALLBACK_TEXTURE, "i915 texture" },
852
{ I915_FALLBACK_COLORMASK, "i915 colormask" },
853
{ I915_FALLBACK_STENCIL, "i915 stencil" },
854
{ I915_FALLBACK_STIPPLE, "i915 stipple" },
855
{ I915_FALLBACK_PROGRAM, "i915 program" },
856
{ I915_FALLBACK_LOGICOP, "i915 logicop" },
857
{ I915_FALLBACK_POLYGON_SMOOTH, "i915 polygon smooth" },
858
{ I915_FALLBACK_POINT_SMOOTH, "i915 point smooth" },
865
getFallbackString(GLuint bit)
868
for (i = 0; fallbackStrings[i].bit; i++) {
869
if (fallbackStrings[i].bit == bit)
870
return fallbackStrings[i].str;
872
return "unknown fallback bit";
876
void intelFallback( intelContextPtr intel, GLuint bit, GLboolean mode )
878
GLcontext *ctx = &intel->ctx;
879
TNLcontext *tnl = TNL_CONTEXT(ctx);
880
GLuint oldfallback = intel->Fallback;
883
intel->Fallback |= bit;
884
if (oldfallback == 0) {
886
if (INTEL_DEBUG & DEBUG_FALLBACKS)
887
fprintf(stderr, "ENTER FALLBACK 0x%x: %s\n",
888
bit, getFallbackString(bit));
889
_swsetup_Wakeup( ctx );
890
intel->RenderIndex = ~0;
894
intel->Fallback &= ~bit;
895
if (oldfallback == bit) {
896
_swrast_flush( ctx );
897
if (INTEL_DEBUG & DEBUG_FALLBACKS)
898
fprintf(stderr, "LEAVE FALLBACK 0x%x: %s\n",
899
bit, getFallbackString(bit));
900
tnl->Driver.Render.Start = intelRenderStart;
901
tnl->Driver.Render.PrimitiveNotify = intelRenderPrimitive;
902
tnl->Driver.Render.Finish = intelRenderFinish;
903
tnl->Driver.Render.BuildVertices = _tnl_build_vertices;
904
tnl->Driver.Render.CopyPV = _tnl_copy_pv;
905
tnl->Driver.Render.Interp = _tnl_interp;
907
_tnl_invalidate_vertex_state( ctx, ~0 );
908
_tnl_invalidate_vertices( ctx, ~0 );
909
_tnl_install_attrs( ctx,
911
intel->vertex_attr_count,
912
intel->ViewportMatrix.m, 0 );
914
intel->NewGLState |= _INTEL_NEW_RENDERSTATE;