1f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell/************************************************************************** 2f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * 3f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 4f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * All Rights Reserved. 5f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * 6f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 7f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * copy of this software and associated documentation files (the 8f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * "Software"), to deal in the Software without restriction, including 9f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * without limitation the rights to use, copy, modify, merge, publish, 10f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * distribute, sub license, and/or sell copies of the Software, and to 11f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * permit persons to whom the Software is furnished to do so, subject to 12f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * the following conditions: 13f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * 14f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * The above copyright notice and this permission notice (including the 15f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * next paragraph) shall be included in all copies or substantial portions 16f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * of the Software. 17f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * 18f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell * 26f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell **************************************************************************/ 27f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 28f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell#ifndef U_DRAW_H 29f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell#define U_DRAW_H 30f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 31f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 32f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell#include "pipe/p_compiler.h" 33f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell#include "pipe/p_context.h" 34b812ff8f9e5c9d292c0fb9518df1d35165542556Vinson Lee#include "pipe/p_state.h" 35f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 36f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 373733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca#ifdef __cplusplus 383733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonsecaextern "C" { 393733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca#endif 403733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca 413733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca 42f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellstatic INLINE void 43f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellutil_draw_init_info(struct pipe_draw_info *info) 44f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell{ 45f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell memset(info, 0, sizeof(*info)); 46f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info->instance_count = 1; 47f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info->max_index = 0xffffffff; 48f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell} 49f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 50f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 51f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellstatic INLINE void 52f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellutil_draw_arrays(struct pipe_context *pipe, uint mode, uint start, uint count) 53f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell{ 54f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell struct pipe_draw_info info; 55f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 56f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell util_draw_init_info(&info); 57f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.mode = mode; 58f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.start = start; 59f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.count = count; 60f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.min_index = start; 61f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.max_index = start + count - 1; 62f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 63f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell pipe->draw_vbo(pipe, &info); 64f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell} 65f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 66f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellstatic INLINE void 67f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellutil_draw_elements(struct pipe_context *pipe, int index_bias, 68f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell uint mode, uint start, uint count) 69f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell{ 70f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell struct pipe_draw_info info; 71f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 72f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell util_draw_init_info(&info); 73f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.indexed = TRUE; 74f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.mode = mode; 75f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.start = start; 76f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.count = count; 77f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.index_bias = index_bias; 78f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 79f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell pipe->draw_vbo(pipe, &info); 80f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell} 81f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 82f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellstatic INLINE void 83f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellutil_draw_arrays_instanced(struct pipe_context *pipe, 84f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell uint mode, uint start, uint count, 85f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell uint start_instance, 86f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell uint instance_count) 87f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell{ 88f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell struct pipe_draw_info info; 89f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 90f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell util_draw_init_info(&info); 91f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.mode = mode; 92f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.start = start; 93f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.count = count; 94f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.start_instance = start_instance; 95f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.instance_count = instance_count; 96f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.min_index = start; 97f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.max_index = start + count - 1; 98f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 99f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell pipe->draw_vbo(pipe, &info); 100f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell} 101f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 102f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellstatic INLINE void 103f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellutil_draw_elements_instanced(struct pipe_context *pipe, 104f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell int index_bias, 105f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell uint mode, uint start, uint count, 106f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell uint start_instance, 107f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell uint instance_count) 108f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell{ 109f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell struct pipe_draw_info info; 110f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 111f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell util_draw_init_info(&info); 112f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.indexed = TRUE; 113f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.mode = mode; 114f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.start = start; 115f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.count = count; 116f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.index_bias = index_bias; 117f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.start_instance = start_instance; 118f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.instance_count = instance_count; 119f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 120f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell pipe->draw_vbo(pipe, &info); 121f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell} 122f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 123f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellstatic INLINE void 124f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwellutil_draw_range_elements(struct pipe_context *pipe, 125f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell int index_bias, 126f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell uint min_index, 127f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell uint max_index, 128f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell uint mode, uint start, uint count) 129f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell{ 130f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell struct pipe_draw_info info; 131f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 132f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell util_draw_init_info(&info); 133f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.indexed = TRUE; 134f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.mode = mode; 135f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.start = start; 136f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.count = count; 137f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.index_bias = index_bias; 138f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.min_index = min_index; 139f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell info.max_index = max_index; 140f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 141f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell pipe->draw_vbo(pipe, &info); 142f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell} 143f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell 1443733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca 1453733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonsecaunsigned 1463733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonsecautil_draw_max_index( 1473733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca const struct pipe_vertex_buffer *vertex_buffers, 1483733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca const struct pipe_vertex_element *vertex_elements, 1493733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca unsigned nr_vertex_elements, 1503733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca const struct pipe_draw_info *info); 1513733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca 1523733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca 1533733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca#ifdef __cplusplus 1543733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca} 155f623d06c495c671f687d4a70c9281c64e5875232Keith Whitwell#endif 1563733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca 1573733da31e8b4405b65e1b6ca3b6599ecc5af5fe7José Fonseca#endif /* !U_DRAW_H */ 158