13192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/********************************************************** 23192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Copyright 2008-2009 VMware, Inc. All rights reserved. 33192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 43192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Permission is hereby granted, free of charge, to any person 53192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * obtaining a copy of this software and associated documentation 63192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * files (the "Software"), to deal in the Software without 73192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * restriction, including without limitation the rights to use, copy, 83192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * modify, merge, publish, distribute, sublicense, and/or sell copies 93192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * of the Software, and to permit persons to whom the Software is 103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * furnished to do so, subject to the following conditions: 113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The above copyright notice and this permission notice shall be 133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * included in all copies or substantial portions of the Software. 143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SOFTWARE. 233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz **********************************************************/ 253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#ifndef SVGA_DRAW_H_ 273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_DRAW_H_ 283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "pipe/p_compiler.h" 303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "pipe/p_defines.h" 313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "indices/u_indices.h" 3290afd7b7ef897f7ba126006d866d1e726235b974Brian Paul#include "util/u_prim.h" 3390afd7b7ef897f7ba126006d866d1e726235b974Brian Paul#include "svga_context.h" 343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_hw_reg.h" 353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga3d_shaderdefs.h" 363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct svga_context; 383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct u_upload_mgr; 393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 401e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul/** 411e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul * Mask indicating which types of gallium primitives are actually 421e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul * handled by the svga device. Other types will be converted to 431e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul * these types by the index/translation code. 443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstatic const unsigned svga_hw_prims = 463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz ((1 << PIPE_PRIM_POINTS) | 473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz (1 << PIPE_PRIM_LINES) | 483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz (1 << PIPE_PRIM_LINE_STRIP) | 493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz (1 << PIPE_PRIM_TRIANGLES) | 503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz (1 << PIPE_PRIM_TRIANGLE_STRIP) | 51e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul (1 << PIPE_PRIM_TRIANGLE_FAN) | 52e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul (1 << PIPE_PRIM_LINES_ADJACENCY) | 53e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul (1 << PIPE_PRIM_LINE_STRIP_ADJACENCY) | 54e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul (1 << PIPE_PRIM_TRIANGLES_ADJACENCY) | 55e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul (1 << PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY)); 563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 581e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul/** 591e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul * Translate a gallium PIPE_PRIM_x value to an SVGA3D_PRIMITIVE_x value. 601e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul * Also, compute the number of primitives that'll be drawn given a 611e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul * vertex count. 621e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul * Note that this function doesn't have to handle PIPE_PRIM_LINE_LOOP, 631e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul * PIPE_PRIM_QUADS, PIPE_PRIM_QUAD_STRIP or PIPE_PRIM_POLYGON. We convert 641e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul * those to other types of primitives with index/translation code. 651e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul */ 66e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paulstatic inline SVGA3dPrimitiveType 67e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paulsvga_translate_prim(unsigned mode, unsigned vcount, unsigned *prim_count) 683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz switch (mode) { 703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_PRIM_POINTS: 711e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul *prim_count = vcount; 723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return SVGA3D_PRIMITIVE_POINTLIST; 733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_PRIM_LINES: 751e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul *prim_count = vcount / 2; 763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return SVGA3D_PRIMITIVE_LINELIST; 773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_PRIM_LINE_STRIP: 791e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul *prim_count = vcount - 1; 803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return SVGA3D_PRIMITIVE_LINESTRIP; 813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_PRIM_TRIANGLES: 831e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul *prim_count = vcount / 3; 843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return SVGA3D_PRIMITIVE_TRIANGLELIST; 853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_PRIM_TRIANGLE_STRIP: 871e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul *prim_count = vcount - 2; 883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return SVGA3D_PRIMITIVE_TRIANGLESTRIP; 893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_PRIM_TRIANGLE_FAN: 911e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul *prim_count = vcount - 2; 923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return SVGA3D_PRIMITIVE_TRIANGLEFAN; 933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 94e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul case PIPE_PRIM_LINES_ADJACENCY: 95e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul *prim_count = vcount / 4; 96e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul return SVGA3D_PRIMITIVE_LINELIST_ADJ; 97e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul 98e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul case PIPE_PRIM_LINE_STRIP_ADJACENCY: 99e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul *prim_count = vcount - 3; 100e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul return SVGA3D_PRIMITIVE_LINESTRIP_ADJ; 101e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul 102e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul case PIPE_PRIM_TRIANGLES_ADJACENCY: 103e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul *prim_count = vcount / 6; 104e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul return SVGA3D_PRIMITIVE_TRIANGLELIST_ADJ; 105e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul 106e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY: 107e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul *prim_count = vcount / 2 - 2 ; 108e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul return SVGA3D_PRIMITIVE_TRIANGLESTRIP_ADJ; 109e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul 1103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz default: 1113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz assert(0); 1121e16e48f8837b9c573de3efdea8b1259b0234b61Brian Paul *prim_count = 0; 1133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return 0; 1143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 1153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 1163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct index_cache { 1193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz u_generate_func generate; 1203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned gen_nr; 1213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* If non-null, this buffer is filled by calling 1233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * generate(nr, map(buffer)) 1243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 125287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct pipe_resource *buffer; 1263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz}; 1273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 128b9c8b2a1f1b2fe2e02b314790ebdc465f0ffec6eBrian Paul 129b9c8b2a1f1b2fe2e02b314790ebdc465f0ffec6eBrian Paul/** Max number of primitives per draw call */ 130b9c8b2a1f1b2fe2e02b314790ebdc465f0ffec6eBrian Paul#define QSZ SVGA3D_MAX_DRAW_PRIMITIVE_RANGES 1313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct draw_cmd { 1333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct svga_winsys_context *swc; 1343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 135e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul /* vertex layout info */ 1363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA3dVertexDecl vdecl[SVGA3D_INPUTREG_MAX]; 1373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned vdecl_count; 138e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul SVGA3dElementLayoutId vdecl_layout_id; 139e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul unsigned vdecl_buffer_index[SVGA3D_INPUTREG_MAX]; 140e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul 141e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul /* vertex buffer info */ 142e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul struct pipe_vertex_buffer vbufs[SVGA3D_INPUTREG_MAX]; 143e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul unsigned vbuf_count; 1443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA3dPrimitiveRange prim[QSZ]; 146287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct pipe_resource *prim_ib[QSZ]; 147e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul unsigned prim_count; /**< number of primitives for this draw */ 1483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned min_index[QSZ]; 1493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned max_index[QSZ]; 1503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz}; 1513192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define IDX_CACHE_MAX 8 1533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct svga_hwtnl { 1553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct svga_context *svga; 1563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct u_upload_mgr *upload_ib; 1572b301df4aa00cbf4f88c716bda292d0c7126ff95Thomas Hellstrom 1582b301df4aa00cbf4f88c716bda292d0c7126ff95Thomas Hellstrom /* Additional negative index bias due to partial buffer uploads 1592b301df4aa00cbf4f88c716bda292d0c7126ff95Thomas Hellstrom * This is compensated for in the offset associated with all 1602b301df4aa00cbf4f88c716bda292d0c7126ff95Thomas Hellstrom * vertex buffers. 1612b301df4aa00cbf4f88c716bda292d0c7126ff95Thomas Hellstrom */ 1622b301df4aa00cbf4f88c716bda292d0c7126ff95Thomas Hellstrom int index_bias; 1633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1642c07c40d2f65e3c7ac25db21b247e647c846edcfBrian Paul /* Provoking vertex information (for flat shading). */ 1652c07c40d2f65e3c7ac25db21b247e647c846edcfBrian Paul unsigned api_pv; /**< app-requested PV mode (PV_FIRST or PV_LAST) */ 1662c07c40d2f65e3c7ac25db21b247e647c846edcfBrian Paul unsigned hw_pv; /**< device-supported PV mode (PV_FIRST or PV_LAST) */ 1672c07c40d2f65e3c7ac25db21b247e647c846edcfBrian Paul 1682c07c40d2f65e3c7ac25db21b247e647c846edcfBrian Paul /* The triangle fillmode for the device (one of PIPE_POLYGON_MODE_{FILL, 1692c07c40d2f65e3c7ac25db21b247e647c846edcfBrian Paul * LINE,POINT}). If the polygon front mode matches the back mode, 1702c07c40d2f65e3c7ac25db21b247e647c846edcfBrian Paul * api_fillmode will be that mode. Otherwise, api_fillmode will be 1712c07c40d2f65e3c7ac25db21b247e647c846edcfBrian Paul * PIPE_POLYGON_MODE_FILL. 1723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 1733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned api_fillmode; 1743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1753192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* Cache the results of running a particular generate func on each 1763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * primitive type. 1773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 1783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct index_cache index_cache[PIPE_PRIM_MAX][IDX_CACHE_MAX]; 1793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* Try to build the maximal draw command packet before emitting: 1813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 1823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct draw_cmd cmd; 1833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz}; 1843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 18790afd7b7ef897f7ba126006d866d1e726235b974Brian Paul/** 18890afd7b7ef897f7ba126006d866d1e726235b974Brian Paul * Do we need to use the gallium 'indices' helper to render unfilled 18990afd7b7ef897f7ba126006d866d1e726235b974Brian Paul * triangles? 1903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 19190afd7b7ef897f7ba126006d866d1e726235b974Brian Paulstatic inline boolean 192d21a309c6c00122b0562284d78fce5138fa2ad30Brian Paulsvga_need_unfilled_fallback(const struct svga_hwtnl *hwtnl, 193d21a309c6c00122b0562284d78fce5138fa2ad30Brian Paul enum pipe_prim_type prim) 19490afd7b7ef897f7ba126006d866d1e726235b974Brian Paul{ 19590afd7b7ef897f7ba126006d866d1e726235b974Brian Paul const struct svga_context *svga = hwtnl->svga; 19690afd7b7ef897f7ba126006d866d1e726235b974Brian Paul 19790afd7b7ef897f7ba126006d866d1e726235b974Brian Paul if (u_reduced_prim(prim) != PIPE_PRIM_TRIANGLES) { 19890afd7b7ef897f7ba126006d866d1e726235b974Brian Paul /* if we're drawing points or lines, no fallback needed */ 19990afd7b7ef897f7ba126006d866d1e726235b974Brian Paul return FALSE; 20090afd7b7ef897f7ba126006d866d1e726235b974Brian Paul } 20190afd7b7ef897f7ba126006d866d1e726235b974Brian Paul 20290afd7b7ef897f7ba126006d866d1e726235b974Brian Paul if (svga_have_vgpu10(svga)) { 20390afd7b7ef897f7ba126006d866d1e726235b974Brian Paul /* vgpu10 supports polygon fill and line modes */ 20490afd7b7ef897f7ba126006d866d1e726235b974Brian Paul if ((prim == PIPE_PRIM_QUADS || 20590afd7b7ef897f7ba126006d866d1e726235b974Brian Paul prim == PIPE_PRIM_QUAD_STRIP || 20690afd7b7ef897f7ba126006d866d1e726235b974Brian Paul prim == PIPE_PRIM_POLYGON) && 20790afd7b7ef897f7ba126006d866d1e726235b974Brian Paul hwtnl->api_fillmode == PIPE_POLYGON_MODE_LINE) { 20890afd7b7ef897f7ba126006d866d1e726235b974Brian Paul /* VGPU10 doesn't directly render quads or polygons. They're 20990afd7b7ef897f7ba126006d866d1e726235b974Brian Paul * converted to triangles. If we let the device draw the triangle 21090afd7b7ef897f7ba126006d866d1e726235b974Brian Paul * outlines we'll get an extra, stray lines in the interiors. 21190afd7b7ef897f7ba126006d866d1e726235b974Brian Paul * So, to draw unfilled quads correctly, we need the fallback. 21290afd7b7ef897f7ba126006d866d1e726235b974Brian Paul */ 21390afd7b7ef897f7ba126006d866d1e726235b974Brian Paul return true; 21490afd7b7ef897f7ba126006d866d1e726235b974Brian Paul } 21590afd7b7ef897f7ba126006d866d1e726235b974Brian Paul return hwtnl->api_fillmode == PIPE_POLYGON_MODE_POINT; 21690afd7b7ef897f7ba126006d866d1e726235b974Brian Paul } else { 21790afd7b7ef897f7ba126006d866d1e726235b974Brian Paul /* vgpu9 doesn't support line or point fill modes */ 21890afd7b7ef897f7ba126006d866d1e726235b974Brian Paul return hwtnl->api_fillmode != PIPE_POLYGON_MODE_FILL; 21990afd7b7ef897f7ba126006d866d1e726235b974Brian Paul } 22090afd7b7ef897f7ba126006d866d1e726235b974Brian Paul} 22190afd7b7ef897f7ba126006d866d1e726235b974Brian Paul 22290afd7b7ef897f7ba126006d866d1e726235b974Brian Paul 2233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzenum pipe_error 2243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzsvga_hwtnl_prim( struct svga_hwtnl *hwtnl, 2253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz const SVGA3dPrimitiveRange *range, 226e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul unsigned vcount, 2273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned min_index, 2283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned max_index, 229e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul struct pipe_resource *ib, 230e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul unsigned start_instance, unsigned instance_count); 2313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzenum pipe_error 2333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzsvga_hwtnl_simple_draw_range_elements( struct svga_hwtnl *hwtnl, 234287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct pipe_resource *indexBuffer, 2353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned index_size, 2369515b78859b52b4532cc9e06366428f2c49c7869José Fonseca int index_bias, 2373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned min_index, 2383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned max_index, 239d21a309c6c00122b0562284d78fce5138fa2ad30Brian Paul enum pipe_prim_type prim, 2403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned start, 241e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul unsigned count, 242e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul unsigned start_instance, 243e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul unsigned instance_count); 2443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#endif 247