1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mesa 3-D graphics library 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Version: 7.9 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2007-2008 Tungsten Graphics, Inc., Cedar Park, Texas. 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 2010 LunarG Inc. 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the "Software"), 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to deal in the Software without restriction, including without limitation 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense, 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and/or sell copies of the Software, and to permit persons to whom the 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software is furnished to do so, subject to the following conditions: 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice shall be included 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * in all copies or substantial portions of the Software. 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * DEALINGS IN THE SOFTWARE. 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_math.h" 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_memory.h" 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "draw/draw_context.h" 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "draw/draw_private.h" 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "draw/draw_pt.h" 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SEGMENT_SIZE 1024 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAP_SIZE 256 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct vsplit_frontend { 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct draw_pt_front_end base; 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct draw_context *draw; 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned prim; 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct draw_pt_middle_end *middle; 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned max_vertices; 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ushort segment_size; 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* buffers for splitting */ 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned fetch_elts[SEGMENT_SIZE]; 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ushort draw_elts[SEGMENT_SIZE]; 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ushort identity_draw_elts[SEGMENT_SIZE]; 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* map a fetch element to a draw element */ 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned fetches[MAP_SIZE]; 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ushort draws[MAP_SIZE]; 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean has_max_fetch; 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ushort num_fetch_elts; 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ushort num_draw_elts; 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } cache; 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvsplit_clear_cache(struct vsplit_frontend *vsplit) 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memset(vsplit->cache.fetches, 0xff, sizeof(vsplit->cache.fetches)); 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->cache.has_max_fetch = FALSE; 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->cache.num_fetch_elts = 0; 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->cache.num_draw_elts = 0; 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvsplit_flush_cache(struct vsplit_frontend *vsplit, unsigned flags) 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->middle->run(vsplit->middle, 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->fetch_elts, vsplit->cache.num_fetch_elts, 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->draw_elts, vsplit->cache.num_draw_elts, flags); 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Add a fetch element and add it to the draw elements. 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvsplit_add_cache(struct vsplit_frontend *vsplit, unsigned fetch) 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct draw_context *draw = vsplit->draw; 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned hash; 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fetch = MIN2(fetch, draw->pt.max_index); 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org hash = fetch % MAP_SIZE; 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vsplit->cache.fetches[hash] != fetch) { 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* update cache */ 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->cache.fetches[hash] = fetch; 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->cache.draws[hash] = vsplit->cache.num_fetch_elts; 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* add fetch */ 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(vsplit->cache.num_fetch_elts < vsplit->segment_size); 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->fetch_elts[vsplit->cache.num_fetch_elts++] = fetch; 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->draw_elts[vsplit->cache.num_draw_elts++] = vsplit->cache.draws[hash]; 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Add a fetch element and add it to the draw elements. The fetch element is 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * in full range (uint). 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvsplit_add_cache_uint(struct vsplit_frontend *vsplit, unsigned fetch) 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* special care for 0xffffffff */ 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fetch == 0xffffffff && !vsplit->cache.has_max_fetch) { 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned hash = fetch % MAP_SIZE; 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->cache.fetches[hash] = fetch - 1; /* force update */ 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->cache.has_max_fetch = TRUE; 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit_add_cache(vsplit, fetch); 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FUNC vsplit_run_linear 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "draw_pt_vsplit_tmp.h" 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FUNC vsplit_run_ubyte 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ELT_TYPE ubyte 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ADD_CACHE(vsplit, fetch) vsplit_add_cache(vsplit, fetch) 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "draw_pt_vsplit_tmp.h" 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FUNC vsplit_run_ushort 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ELT_TYPE ushort 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ADD_CACHE(vsplit, fetch) vsplit_add_cache(vsplit, fetch) 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "draw_pt_vsplit_tmp.h" 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FUNC vsplit_run_uint 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ELT_TYPE uint 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ADD_CACHE(vsplit, fetch) vsplit_add_cache_uint(vsplit, fetch) 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "draw_pt_vsplit_tmp.h" 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void vsplit_prepare(struct draw_pt_front_end *frontend, 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned in_prim, 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct draw_pt_middle_end *middle, 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned opt) 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct vsplit_frontend *vsplit = (struct vsplit_frontend *) frontend; 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (vsplit->draw->pt.user.eltSize) { 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0: 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->base.run = vsplit_run_linear; 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 1: 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->base.run = vsplit_run_ubyte; 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 2: 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->base.run = vsplit_run_ushort; 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 4: 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->base.run = vsplit_run_uint; 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* split only */ 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->prim = in_prim; 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->middle = middle; 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org middle->prepare(middle, vsplit->prim, opt, &vsplit->max_vertices); 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->segment_size = MIN2(SEGMENT_SIZE, vsplit->max_vertices); 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void vsplit_flush(struct draw_pt_front_end *frontend, unsigned flags) 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct vsplit_frontend *vsplit = (struct vsplit_frontend *) frontend; 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!(flags & DRAW_FLUSH_BACKEND)) { 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->middle->finish(vsplit->middle); 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->middle = NULL; 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void vsplit_destroy(struct draw_pt_front_end *frontend) 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FREE(frontend); 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct draw_pt_front_end *draw_pt_vsplit(struct draw_context *draw) 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct vsplit_frontend *vsplit = CALLOC_STRUCT(vsplit_frontend); 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ushort i; 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!vsplit) 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->base.prepare = vsplit_prepare; 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->base.run = NULL; 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->base.flush = vsplit_flush; 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->base.destroy = vsplit_destroy; 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->draw = draw; 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < SEGMENT_SIZE; i++) 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vsplit->identity_draw_elts[i] = i; 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return &vsplit->base; 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 217