104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu/* 204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * Mesa 3-D graphics library 304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * Version: 7.9 404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * 504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * Copyright 2007-2008 Tungsten Graphics, Inc., Cedar Park, Texas. 604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * Copyright (C) 2010 LunarG Inc. 704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * 804bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * Permission is hereby granted, free of charge, to any person obtaining a 904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * copy of this software and associated documentation files (the "Software"), 1004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * to deal in the Software without restriction, including without limitation 1104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * the rights to use, copy, modify, merge, publish, distribute, sublicense, 1204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * and/or sell copies of the Software, and to permit persons to whom the 1304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * Software is furnished to do so, subject to the following conditions: 1404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * 1504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * The above copyright notice and this permission notice shall be included 1604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * in all copies or substantial portions of the Software. 1704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * 1804bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 2004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 2104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 2204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 2304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 2404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * DEALINGS IN THE SOFTWARE. 2504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu */ 2604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 2704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#include "util/u_math.h" 2804bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#include "util/u_memory.h" 2904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 3004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#include "draw/draw_context.h" 3104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#include "draw/draw_private.h" 3204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#include "draw/draw_pt.h" 3304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 3404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#define SEGMENT_SIZE 1024 3504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#define MAP_SIZE 256 3604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 3704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wustruct vsplit_frontend { 3804bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu struct draw_pt_front_end base; 3904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu struct draw_context *draw; 4004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 4104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu unsigned prim; 4204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 4304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu struct draw_pt_middle_end *middle; 4404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 4504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu unsigned max_vertices; 4604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu ushort segment_size; 4704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 4804bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu /* buffers for splitting */ 4904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu unsigned fetch_elts[SEGMENT_SIZE]; 5004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu ushort draw_elts[SEGMENT_SIZE]; 5104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu ushort identity_draw_elts[SEGMENT_SIZE]; 5204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 5304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu struct { 5404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu /* map a fetch element to a draw element */ 5504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu unsigned fetches[MAP_SIZE]; 5604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu ushort draws[MAP_SIZE]; 5704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu boolean has_max_fetch; 5804bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 5904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu ushort num_fetch_elts; 6004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu ushort num_draw_elts; 6104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu } cache; 6204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu}; 6304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 6404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 6504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wustatic void 6604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wuvsplit_clear_cache(struct vsplit_frontend *vsplit) 6704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu{ 6804bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu memset(vsplit->cache.fetches, 0xff, sizeof(vsplit->cache.fetches)); 6904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->cache.has_max_fetch = FALSE; 7004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->cache.num_fetch_elts = 0; 7104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->cache.num_draw_elts = 0; 7204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu} 7304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 7404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wustatic void 7504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wuvsplit_flush_cache(struct vsplit_frontend *vsplit, unsigned flags) 7604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu{ 7704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->middle->run(vsplit->middle, 7804bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->fetch_elts, vsplit->cache.num_fetch_elts, 7904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->draw_elts, vsplit->cache.num_draw_elts, flags); 8004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu} 8104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 8204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu/** 8304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * Add a fetch element and add it to the draw elements. 8404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu */ 8504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wustatic INLINE void 8604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wuvsplit_add_cache(struct vsplit_frontend *vsplit, unsigned fetch) 8704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu{ 883733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca struct draw_context *draw = vsplit->draw; 893733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca unsigned hash; 903733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca 913733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca fetch = MIN2(fetch, draw->pt.max_index); 923733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca 933733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca hash = fetch % MAP_SIZE; 9404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 9504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu if (vsplit->cache.fetches[hash] != fetch) { 9604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu /* update cache */ 9704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->cache.fetches[hash] = fetch; 9804bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->cache.draws[hash] = vsplit->cache.num_fetch_elts; 9904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 10004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu /* add fetch */ 10104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu assert(vsplit->cache.num_fetch_elts < vsplit->segment_size); 10204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->fetch_elts[vsplit->cache.num_fetch_elts++] = fetch; 10304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu } 10404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 10504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->draw_elts[vsplit->cache.num_draw_elts++] = vsplit->cache.draws[hash]; 10604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu} 10704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 10804bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 10904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu/** 11004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * Add a fetch element and add it to the draw elements. The fetch element is 11104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu * in full range (uint). 11204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu */ 11304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wustatic INLINE void 11404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wuvsplit_add_cache_uint(struct vsplit_frontend *vsplit, unsigned fetch) 11504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu{ 11604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu /* special care for 0xffffffff */ 11704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu if (fetch == 0xffffffff && !vsplit->cache.has_max_fetch) { 11804bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu unsigned hash = fetch % MAP_SIZE; 11904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->cache.fetches[hash] = fetch - 1; /* force update */ 12004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->cache.has_max_fetch = TRUE; 12104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu } 12204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 12304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit_add_cache(vsplit, fetch); 12404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu} 12504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 12604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 12704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#define FUNC vsplit_run_linear 12804bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#include "draw_pt_vsplit_tmp.h" 12904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 13004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#define FUNC vsplit_run_ubyte 13104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#define ELT_TYPE ubyte 13204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#define ADD_CACHE(vsplit, fetch) vsplit_add_cache(vsplit, fetch) 13304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#include "draw_pt_vsplit_tmp.h" 13404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 13504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#define FUNC vsplit_run_ushort 13604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#define ELT_TYPE ushort 13704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#define ADD_CACHE(vsplit, fetch) vsplit_add_cache(vsplit, fetch) 13804bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#include "draw_pt_vsplit_tmp.h" 13904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 14004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#define FUNC vsplit_run_uint 14104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#define ELT_TYPE uint 14204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#define ADD_CACHE(vsplit, fetch) vsplit_add_cache_uint(vsplit, fetch) 14304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu#include "draw_pt_vsplit_tmp.h" 14404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 14504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 14604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wustatic void vsplit_prepare(struct draw_pt_front_end *frontend, 14704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu unsigned in_prim, 14804bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu struct draw_pt_middle_end *middle, 14904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu unsigned opt) 15004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu{ 15104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu struct vsplit_frontend *vsplit = (struct vsplit_frontend *) frontend; 15204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 15304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu switch (vsplit->draw->pt.user.eltSize) { 15404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu case 0: 15504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->base.run = vsplit_run_linear; 15604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu break; 15704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu case 1: 15804bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->base.run = vsplit_run_ubyte; 15904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu break; 16004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu case 2: 16104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->base.run = vsplit_run_ushort; 16204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu break; 16304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu case 4: 16404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->base.run = vsplit_run_uint; 16504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu break; 16604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu default: 16704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu assert(0); 16804bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu break; 16904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu } 17004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 17104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu /* split only */ 17204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->prim = in_prim; 17304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 17404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->middle = middle; 17504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu middle->prepare(middle, vsplit->prim, opt, &vsplit->max_vertices); 17604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 17704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->segment_size = MIN2(SEGMENT_SIZE, vsplit->max_vertices); 17804bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu} 17904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 18004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 181b6d3a435a0e0e53a9e8cc4c4249dc7c2f897a83dJakob Bornecrantzstatic void vsplit_flush(struct draw_pt_front_end *frontend, unsigned flags) 18204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu{ 18304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu struct vsplit_frontend *vsplit = (struct vsplit_frontend *) frontend; 184b6d3a435a0e0e53a9e8cc4c4249dc7c2f897a83dJakob Bornecrantz 185b6d3a435a0e0e53a9e8cc4c4249dc7c2f897a83dJakob Bornecrantz if (!(flags & DRAW_FLUSH_BACKEND)) { 186b6d3a435a0e0e53a9e8cc4c4249dc7c2f897a83dJakob Bornecrantz vsplit->middle->finish(vsplit->middle); 187b6d3a435a0e0e53a9e8cc4c4249dc7c2f897a83dJakob Bornecrantz vsplit->middle = NULL; 188b6d3a435a0e0e53a9e8cc4c4249dc7c2f897a83dJakob Bornecrantz } 18904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu} 19004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 19104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 19204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wustatic void vsplit_destroy(struct draw_pt_front_end *frontend) 19304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu{ 19404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu FREE(frontend); 19504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu} 19604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 19704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 19804bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wustruct draw_pt_front_end *draw_pt_vsplit(struct draw_context *draw) 19904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu{ 20004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu struct vsplit_frontend *vsplit = CALLOC_STRUCT(vsplit_frontend); 20104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu ushort i; 20204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 20304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu if (!vsplit) 20404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu return NULL; 20504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 20604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->base.prepare = vsplit_prepare; 20704bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->base.run = NULL; 208b6d3a435a0e0e53a9e8cc4c4249dc7c2f897a83dJakob Bornecrantz vsplit->base.flush = vsplit_flush; 20904bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->base.destroy = vsplit_destroy; 21004bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->draw = draw; 21104bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 21204bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu for (i = 0; i < SEGMENT_SIZE; i++) 21304bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu vsplit->identity_draw_elts[i] = i; 21404bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu 21504bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu return &vsplit->base; 21604bc530dbdbe5d004219c9100e35f5d56cfedd80Chia-I Wu} 217