/* Hopefully this will remain quite simple, otherwise need to pull in * something like the state tracker mechanism. */ void softpipe_update_derived(struct softpipe_context *softpipe, unsigned prim) { struct softpipe_screen *sp_screen = softpipe_screen(softpipe->pipe.screen); /* Check for updated textures. */ if (softpipe->tex_timestamp != sp_screen->timestamp) { softpipe->tex_timestamp = sp_screen->timestamp; softpipe->dirty |= SP_NEW_TEXTURE; } #if DO_PSTIPPLE_IN_HELPER_MODULE if (softpipe->dirty & SP_NEW_STIPPLE) /* before updating samplers! */ update_polygon_stipple_pattern(softpipe); #endif if (softpipe->dirty & (SP_NEW_RASTERIZER | SP_NEW_FS)) update_fragment_shader(softpipe, prim); #if DO_PSTIPPLE_IN_HELPER_MODULE if (softpipe->dirty & (SP_NEW_RASTERIZER | SP_NEW_STIPPLE | SP_NEW_FS)) update_polygon_stipple_enable(softpipe, prim); #endif /* TODO: this looks suboptimal */ if (softpipe->dirty & (SP_NEW_SAMPLER | SP_NEW_TEXTURE | SP_NEW_FS | SP_NEW_VS)) update_tgsi_samplers( softpipe ); if (softpipe->dirty & (SP_NEW_RASTERIZER | SP_NEW_FS | SP_NEW_VS)) invalidate_vertex_layout( softpipe ); if (softpipe->dirty & (SP_NEW_SCISSOR | SP_NEW_RASTERIZER | SP_NEW_FRAMEBUFFER)) compute_cliprect(softpipe); if (softpipe->dirty & (SP_NEW_BLEND | SP_NEW_DEPTH_STENCIL_ALPHA | SP_NEW_FRAMEBUFFER | SP_NEW_STIPPLE | SP_NEW_FS)) sp_build_quad_pipeline(softpipe); softpipe->dirty = 0; }
/* Hopefully this will remain quite simple, otherwise need to pull in * something like the state tracker mechanism. */ void softpipe_update_derived( struct softpipe_context *softpipe ) { if (softpipe->dirty & (SP_NEW_RASTERIZER | SP_NEW_FS | SP_NEW_VS)) invalidate_vertex_layout( softpipe ); if (softpipe->dirty & (SP_NEW_SCISSOR | SP_NEW_DEPTH_STENCIL_ALPHA | SP_NEW_FRAMEBUFFER)) compute_cliprect(softpipe); if (softpipe->dirty & (SP_NEW_BLEND | SP_NEW_DEPTH_STENCIL_ALPHA | SP_NEW_FRAMEBUFFER | SP_NEW_RASTERIZER | SP_NEW_FS | SP_NEW_QUERY)) sp_build_quad_pipeline(softpipe); softpipe->dirty = 0; }