예제 #1
0
void nvc0_validate_samplers(struct nvc0_context *nvc0)
{
   boolean need_flush;

   if (nvc0->screen->base.class_3d >= NVE4_3D_CLASS) {
      need_flush  = nve4_validate_tsc(nvc0, 0);
      need_flush |= nve4_validate_tsc(nvc0, 3);
      need_flush |= nve4_validate_tsc(nvc0, 4);
   } else {
      need_flush  = nvc0_validate_tsc(nvc0, 0);
      need_flush |= nvc0_validate_tsc(nvc0, 3);
      need_flush |= nvc0_validate_tsc(nvc0, 4);
   }

   if (need_flush) {
      BEGIN_NVC0(nvc0->base.pushbuf, NVC0_3D(TSC_FLUSH), 1);
      PUSH_DATA (nvc0->base.pushbuf, 0);
   }
}
예제 #2
0
static void
nvc0_compute_validate_samplers(struct nvc0_context *nvc0)
{
   bool need_flush = nvc0_validate_tsc(nvc0, 5);
   if (need_flush) {
      BEGIN_NVC0(nvc0->base.pushbuf, NVC0_CP(TSC_FLUSH), 1);
      PUSH_DATA (nvc0->base.pushbuf, 0);
   }

   /* Invalidate all 3D samplers because they are aliased. */
   for (int s = 0; s < 5; s++)
      nvc0->samplers_dirty[s] = ~0;
   nvc0->dirty_3d |= NVC0_NEW_3D_SAMPLERS;
}