gen6_common.c revision 42542f5f
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 35void 36gen6_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 56void 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