Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright © 2011-2013 Intel Corporation
  3.  *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a
  5.  * copy of this software and associated documentation files (the "Software"),
  6.  * to deal in the Software without restriction, including without limitation
  7.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8.  * and/or sell copies of the Software, and to permit persons to whom the
  9.  * Software is furnished to do so, subject to the following conditions:
  10.  *
  11.  * The above copyright notice and this permission notice (including the next
  12.  * paragraph) shall be included in all copies or substantial portions of the
  13.  * Software.
  14.  *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  18.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  20.  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  21.  * SOFTWARE.
  22.  *
  23.  * Authors:
  24.  *    Chris Wilson <chris@chris-wilson.co.uk>
  25.  *
  26.  */
  27.  
  28. #ifdef HAVE_CONFIG_H
  29. #include "config.h"
  30. #endif
  31.  
  32. #include "gen6_common.h"
  33. #include "gen4_vertex.h"
  34.  
  35. void
  36. gen6_render_context_switch(struct kgem *kgem,
  37.                            int new_mode)
  38. {
  39.         if (kgem->nbatch) {
  40.                 DBG(("%s: from %d to %d, submit batch\n", __FUNCTION__, kgem->mode, new_mode));
  41.                 _kgem_submit(kgem);
  42.         }
  43.  
  44.         if (kgem->nexec) {
  45.                 DBG(("%s: from %d to %d, reset incomplete batch\n", __FUNCTION__, kgem->mode, new_mode));
  46.                 kgem_reset(kgem);
  47.         }
  48.  
  49.         assert(kgem->nbatch == 0);
  50.         assert(kgem->nreloc == 0);
  51.         assert(kgem->nexec == 0);
  52.  
  53.         kgem->ring = new_mode;
  54. }
  55.  
  56. void gen6_render_retire(struct kgem *kgem)
  57. {
  58.         struct sna *sna;
  59.  
  60.         if (kgem->ring && (kgem->has_semaphores || !kgem->need_retire))
  61.                 kgem->ring = kgem->mode;
  62.  
  63.         sna = container_of(kgem, struct sna, kgem);
  64.         if (sna->render.nvertex_reloc == 0 &&
  65.             sna->render.vbo &&
  66.             !kgem_bo_is_busy(sna->render.vbo)) {
  67.                 DBG(("%s: resetting idle vbo\n", __FUNCTION__));
  68.                 sna->render.vertex_used = 0;
  69.                 sna->render.vertex_index = 0;
  70.         }
  71. }
  72.