u_draw.h revision f623d06c495c671f687d4a70c9281c64e5875232
1ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang/************************************************************************** 2ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * 3ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 4ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * All Rights Reserved. 5ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * 6ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * Permission is hereby granted, free of charge, to any person obtaining a 7ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * copy of this software and associated documentation files (the 8ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * "Software"), to deal in the Software without restriction, including 9ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * without limitation the rights to use, copy, modify, merge, publish, 10ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * distribute, sub license, and/or sell copies of the Software, and to 11ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * permit persons to whom the Software is furnished to do so, subject to 12ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * the following conditions: 13ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * 14ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * The above copyright notice and this permission notice (including the 15ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * next paragraph) shall be included in all copies or substantial portions 16ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * of the Software. 17ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * 18ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * 26b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian **************************************************************************/ 27b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 28b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifndef U_DRAW_H 29b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#define U_DRAW_H 30ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 31ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 32ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "pipe/p_compiler.h" 33ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "pipe/p_context.h" 34ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 35ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 36ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangstatic INLINE void 37ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangutil_draw_init_info(struct pipe_draw_info *info) 38ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang{ 39ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang memset(info, 0, sizeof(*info)); 40ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang info->instance_count = 1; 41ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang info->max_index = 0xffffffff; 42ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 43ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 44ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 45ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangstatic INLINE void 46ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangutil_draw_arrays(struct pipe_context *pipe, uint mode, uint start, uint count) 47ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang{ 48ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang struct pipe_draw_info info; 49ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 50ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang util_draw_init_info(&info); 51ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang info.mode = mode; 52ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang info.start = start; 53ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang info.count = count; 54ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang info.min_index = start; 55ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang info.max_index = start + count - 1; 56ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 57ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang pipe->draw_vbo(pipe, &info); 58ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 59ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 609b35249446b07f40ac5fcc3205f2c048616efacchkuangstatic INLINE void 619b35249446b07f40ac5fcc3205f2c048616efacchkuangutil_draw_elements(struct pipe_context *pipe, int index_bias, 629b35249446b07f40ac5fcc3205f2c048616efacchkuang uint mode, uint start, uint count) 63b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian{ 649b35249446b07f40ac5fcc3205f2c048616efacchkuang struct pipe_draw_info info; 659b35249446b07f40ac5fcc3205f2c048616efacchkuang 66ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang util_draw_init_info(&info); 67ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang info.indexed = TRUE; 68b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian info.mode = mode; 69b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian info.start = start; 705ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang info.count = count; 719b35249446b07f40ac5fcc3205f2c048616efacchkuang info.index_bias = index_bias; 72b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 73b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian pipe->draw_vbo(pipe, &info); 74ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 75ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 76ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangstatic INLINE void 775ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangutil_draw_arrays_instanced(struct pipe_context *pipe, 785ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang uint mode, uint start, uint count, 795ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang uint start_instance, 809b35249446b07f40ac5fcc3205f2c048616efacchkuang uint instance_count) 81ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang{ 82b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian struct pipe_draw_info info; 83b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 84b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian util_draw_init_info(&info); 85b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian info.mode = mode; 86b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian info.start = start; 875ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang info.count = count; 8891037db265ecdd914a26e056cf69207b4f50924ehkuang info.start_instance = start_instance; 896ac915abcdb404a00d927fe6308a47fcf09d9519hkuang info.instance_count = instance_count; 901184aebb761cbeac9124c37189a80a1a58f04b6bhkuang info.min_index = start; 91b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian info.max_index = start + count - 1; 92f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang 935ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang pipe->draw_vbo(pipe, &info); 94b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian} 955ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 96b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianstatic INLINE void 975ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangutil_draw_elements_instanced(struct pipe_context *pipe, 98b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int index_bias, 999b35249446b07f40ac5fcc3205f2c048616efacchkuang uint mode, uint start, uint count, 1009b35249446b07f40ac5fcc3205f2c048616efacchkuang uint start_instance, 101b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian uint instance_count) 102b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian{ 103b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian struct pipe_draw_info info; 104ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 105b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian util_draw_init_info(&info); 106ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang info.indexed = TRUE; 1079b35249446b07f40ac5fcc3205f2c048616efacchkuang info.mode = mode; 108b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian info.start = start; 1095ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang info.count = count; 110b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian info.index_bias = index_bias; 111b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian info.start_instance = start_instance; 112b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian info.instance_count = instance_count; 113ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang info.min_index = start; 114b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian info.max_index = start + count - 1; 115ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 116b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian pipe->draw_vbo(pipe, &info); 117ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 118b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 119b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianstatic INLINE void 120ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangutil_draw_range_elements(struct pipe_context *pipe, 121b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int index_bias, 122b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian uint min_index, 123b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian uint max_index, 124b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian uint mode, uint start, uint count) 125b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian{ 126ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang struct pipe_draw_info info; 127ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 128ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang util_draw_init_info(&info); 129ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang info.indexed = TRUE; 130b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian info.mode = mode; 131ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang info.start = start; 132ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang info.count = count; 133b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian info.index_bias = index_bias; 134b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian info.min_index = min_index; 135b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian info.max_index = max_index; 136b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 137b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian pipe->draw_vbo(pipe, &info); 138ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 139ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 140ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#endif 141ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang