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 2628486880ca3ec39419ccee0cb1a3bedc9ef7117cJosé Fonseca#include "util/u_inlines.h" 273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "pipe/p_state.h" 283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_context.h" 313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_state.h" 323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_debug.h" 333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_hw_reg.h" 343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/*********************************************************************** 363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 38396da5df0e50c90a74bbf57c980e484cf1a527b7Brian Paul 39396da5df0e50c90a74bbf57c980e484cf1a527b7Brian Paul/** 40396da5df0e50c90a74bbf57c980e484cf1a527b7Brian Paul * Given a gallium vertex element format, return the corresponding SVGA3D 41396da5df0e50c90a74bbf57c980e484cf1a527b7Brian Paul * format. Return SVGA3D_DECLTYPE_MAX for unsupported gallium formats. 42396da5df0e50c90a74bbf57c980e484cf1a527b7Brian Paul */ 433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstatic INLINE SVGA3dDeclType 443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzsvga_translate_vertex_format(enum pipe_format format) 453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz switch (format) { 473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_FORMAT_R32_FLOAT: return SVGA3D_DECLTYPE_FLOAT1; 483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_FORMAT_R32G32_FLOAT: return SVGA3D_DECLTYPE_FLOAT2; 493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_FORMAT_R32G32B32_FLOAT: return SVGA3D_DECLTYPE_FLOAT3; 503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_FORMAT_R32G32B32A32_FLOAT: return SVGA3D_DECLTYPE_FLOAT4; 51e94a092437d3c2ebe2a4c514cc1e3fce38c1d7e9José Fonseca case PIPE_FORMAT_B8G8R8A8_UNORM: return SVGA3D_DECLTYPE_D3DCOLOR; 523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_FORMAT_R8G8B8A8_USCALED: return SVGA3D_DECLTYPE_UBYTE4; 533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_FORMAT_R16G16_SSCALED: return SVGA3D_DECLTYPE_SHORT2; 543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_FORMAT_R16G16B16A16_SSCALED: return SVGA3D_DECLTYPE_SHORT4; 553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_FORMAT_R8G8B8A8_UNORM: return SVGA3D_DECLTYPE_UBYTE4N; 563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_FORMAT_R16G16_SNORM: return SVGA3D_DECLTYPE_SHORT2N; 573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_FORMAT_R16G16B16A16_SNORM: return SVGA3D_DECLTYPE_SHORT4N; 583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_FORMAT_R16G16_UNORM: return SVGA3D_DECLTYPE_USHORT2N; 593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_FORMAT_R16G16B16A16_UNORM: return SVGA3D_DECLTYPE_USHORT4N; 60e6c3f594e904256b031092ff4f1a321a005f53deJosé Fonseca case PIPE_FORMAT_R10G10B10X2_USCALED: return SVGA3D_DECLTYPE_UDEC3; 61e6c3f594e904256b031092ff4f1a321a005f53deJosé Fonseca case PIPE_FORMAT_R10G10B10X2_SNORM: return SVGA3D_DECLTYPE_DEC3N; 623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_FORMAT_R16G16_FLOAT: return SVGA3D_DECLTYPE_FLOAT16_2; 633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_FORMAT_R16G16B16A16_FLOAT: return SVGA3D_DECLTYPE_FLOAT16_4; 643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz default: 663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* There are many formats without hardware support. This case 673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * will be hit regularly, meaning we'll need swvfetch. 683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return SVGA3D_DECLTYPE_MAX; 703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 74e8f646fa7e9cf6f6793864384128157735aa03b3José Fonsecastatic enum pipe_error 75e8f646fa7e9cf6f6793864384128157735aa03b3José Fonsecaupdate_need_swvfetch( struct svga_context *svga, 76e8f646fa7e9cf6f6793864384128157735aa03b3José Fonseca unsigned dirty ) 773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned i; 793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz boolean need_swvfetch = FALSE; 803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 81504ad3606dfd5891ee04d85d3af2c233fd362c51Michal Krol if (!svga->curr.velems) { 82504ad3606dfd5891ee04d85d3af2c233fd362c51Michal Krol /* No vertex elements bound. */ 83504ad3606dfd5891ee04d85d3af2c233fd362c51Michal Krol return 0; 84504ad3606dfd5891ee04d85d3af2c233fd362c51Michal Krol } 85504ad3606dfd5891ee04d85d3af2c233fd362c51Michal Krol 86b1676a953eb61838e9ef03532792bc723f4d4adaRoland Scheidegger for (i = 0; i < svga->curr.velems->count; i++) { 87b1676a953eb61838e9ef03532792bc723f4d4adaRoland Scheidegger svga->state.sw.ve_format[i] = svga_translate_vertex_format(svga->curr.velems->velem[i].src_format); 883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (svga->state.sw.ve_format[i] == SVGA3D_DECLTYPE_MAX) { 89396da5df0e50c90a74bbf57c980e484cf1a527b7Brian Paul /* Unsupported format - use software fetch */ 903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz need_swvfetch = TRUE; 913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz break; 923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (need_swvfetch != svga->state.sw.need_swvfetch) { 963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->state.sw.need_swvfetch = need_swvfetch; 973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->dirty |= SVGA_NEW_NEED_SWVFETCH; 983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1002786343896030ed4abcf6674a3e66f3a0d246e0dBrian Paul return PIPE_OK; 1013192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 1023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct svga_tracked_state svga_update_need_swvfetch = 1043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 1053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz "update need_swvfetch", 1063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz ( SVGA_NEW_VELEMENT ), 1073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz update_need_swvfetch 1083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz}; 1093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/*********************************************************************** 1123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 1133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 114e8f646fa7e9cf6f6793864384128157735aa03b3José Fonsecastatic enum pipe_error 115e8f646fa7e9cf6f6793864384128157735aa03b3José Fonsecaupdate_need_pipeline( struct svga_context *svga, 116e8f646fa7e9cf6f6793864384128157735aa03b3José Fonseca unsigned dirty ) 1173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 1183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz boolean need_pipeline = FALSE; 120429f0e3b37e33a33289f8488369474b20bfd5247Roland Scheidegger struct svga_vertex_shader *vs = svga->curr.vs; 1213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* SVGA_NEW_RAST, SVGA_NEW_REDUCED_PRIMITIVE 1233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 1243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (svga->curr.rast->need_pipeline & (1 << svga->curr.reduced_prim)) { 1257bbf675b884a8fda19b0b53cd524d48243e814f3José Fonseca SVGA_DBG(DEBUG_SWTNL, "%s: rast need_pipeline (0x%x) & prim (0x%x)\n", 1263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz __FUNCTION__, 1273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->curr.rast->need_pipeline, 1283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz (1 << svga->curr.reduced_prim) ); 129c523f31f4a35f8396ab35859c70fb041c210cedbJakob Bornecrantz SVGA_DBG(DEBUG_SWTNL, "%s: rast need_pipeline tris (%s), lines (%s), points (%s)\n", 130c523f31f4a35f8396ab35859c70fb041c210cedbJakob Bornecrantz __FUNCTION__, 131c523f31f4a35f8396ab35859c70fb041c210cedbJakob Bornecrantz svga->curr.rast->need_pipeline_tris_str, 132c523f31f4a35f8396ab35859c70fb041c210cedbJakob Bornecrantz svga->curr.rast->need_pipeline_lines_str, 133c523f31f4a35f8396ab35859c70fb041c210cedbJakob Bornecrantz svga->curr.rast->need_pipeline_points_str); 1343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz need_pipeline = TRUE; 1353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 1363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 137429f0e3b37e33a33289f8488369474b20bfd5247Roland Scheidegger /* EDGEFLAGS 1383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 139991798822346dbb2d741b1f6d62f4bcb2c889dc8Brian Paul if (vs && vs->base.info.writes_edgeflag) { 1403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_DBG(DEBUG_SWTNL, "%s: edgeflags\n", __FUNCTION__); 1413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz need_pipeline = TRUE; 1423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 1433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 144df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul /* SVGA_NEW_FS, SVGA_NEW_RAST, SVGA_NEW_REDUCED_PRIMITIVE 145df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul */ 146df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul if (svga->curr.reduced_prim == PIPE_PRIM_POINTS) { 147df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul unsigned sprite_coord_gen = svga->curr.rast->templ.sprite_coord_enable; 148cff0eac702e0070d4d7f0e2ae5f785ec10597d4dZack Rusin unsigned generic_inputs = 149cff0eac702e0070d4d7f0e2ae5f785ec10597d4dZack Rusin svga->curr.fs ? svga->curr.fs->generic_inputs : 0; 150df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul 151df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul if (sprite_coord_gen && 152df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul (generic_inputs & ~sprite_coord_gen)) { 153df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul /* The fragment shader is using some generic inputs that are 154df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul * not being replaced by auto-generated point/sprite coords (and 155df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul * auto sprite coord generation is turned on). 156df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul * The SVGA3D interface does not support that: if we enable 157df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul * SVGA3D_RS_POINTSPRITEENABLE it gets enabled for _all_ 158df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul * texture coordinate sets. 159df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul * To solve this, we have to use the draw-module's wide/sprite 160df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul * point stage. 161df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul */ 162df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul need_pipeline = TRUE; 163df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul } 164df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul } 165df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul 1663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (need_pipeline != svga->state.sw.need_pipeline) { 1673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->state.sw.need_pipeline = need_pipeline; 1683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->dirty |= SVGA_NEW_NEED_PIPELINE; 1693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 1703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 171396da5df0e50c90a74bbf57c980e484cf1a527b7Brian Paul /* DEBUG */ 172396da5df0e50c90a74bbf57c980e484cf1a527b7Brian Paul if (0 && svga->state.sw.need_pipeline) 173396da5df0e50c90a74bbf57c980e484cf1a527b7Brian Paul debug_printf("sw.need_pipeline = %d\n", svga->state.sw.need_pipeline); 174396da5df0e50c90a74bbf57c980e484cf1a527b7Brian Paul 1752786343896030ed4abcf6674a3e66f3a0d246e0dBrian Paul return PIPE_OK; 1763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 1773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct svga_tracked_state svga_update_need_pipeline = 1803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 1813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz "need pipeline", 1823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz (SVGA_NEW_RAST | 183df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul SVGA_NEW_FS | 184429f0e3b37e33a33289f8488369474b20bfd5247Roland Scheidegger SVGA_NEW_VS | 1853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_NEW_REDUCED_PRIMITIVE), 1863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz update_need_pipeline 1873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz}; 1883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/*********************************************************************** 1913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 1923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 193e8f646fa7e9cf6f6793864384128157735aa03b3José Fonsecastatic enum pipe_error 194e8f646fa7e9cf6f6793864384128157735aa03b3José Fonsecaupdate_need_swtnl( struct svga_context *svga, 195e8f646fa7e9cf6f6793864384128157735aa03b3José Fonseca unsigned dirty ) 1963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 1973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz boolean need_swtnl; 1983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (svga->debug.no_swtnl) { 2002f5032ec1e2adcac3e6e990624f05900a459f270Brian Paul svga->state.sw.need_swvfetch = FALSE; 2012f5032ec1e2adcac3e6e990624f05900a459f270Brian Paul svga->state.sw.need_pipeline = FALSE; 2023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 2033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz need_swtnl = (svga->state.sw.need_swvfetch || 2053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->state.sw.need_pipeline); 2063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (svga->debug.force_swtnl) { 2082f5032ec1e2adcac3e6e990624f05900a459f270Brian Paul need_swtnl = TRUE; 2093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 2103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 211ff0f0875135a7842e78fae002ee1187892f9405bJakob Bornecrantz /* 212df73a70fbab40fe18e127bc614a9f4cb9e5ed006Brian Paul * Some state changes the draw module does makes us believe we 213ff0f0875135a7842e78fae002ee1187892f9405bJakob Bornecrantz * we don't need swtnl. This causes the vdecl code to pickup 214ff0f0875135a7842e78fae002ee1187892f9405bJakob Bornecrantz * the wrong buffers and vertex formats. Try trivial/line-wide. 215ff0f0875135a7842e78fae002ee1187892f9405bJakob Bornecrantz */ 216ff0f0875135a7842e78fae002ee1187892f9405bJakob Bornecrantz if (svga->state.sw.in_swtnl_draw) 2172f5032ec1e2adcac3e6e990624f05900a459f270Brian Paul need_swtnl = TRUE; 218ff0f0875135a7842e78fae002ee1187892f9405bJakob Bornecrantz 2193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (need_swtnl != svga->state.sw.need_swtnl) { 2203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_DBG(DEBUG_SWTNL|DEBUG_PERF, 2211138775d79dfe9043cf9e6c77a9077b0acc0a239Jakob Bornecrantz "%s: need_swvfetch %s, need_pipeline %s\n", 2223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz __FUNCTION__, 2233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->state.sw.need_swvfetch ? "true" : "false", 2243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->state.sw.need_pipeline ? "true" : "false"); 2253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->state.sw.need_swtnl = need_swtnl; 2273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->dirty |= SVGA_NEW_NEED_SWTNL; 2283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->swtnl.new_vdecl = TRUE; 2293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 2303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2312786343896030ed4abcf6674a3e66f3a0d246e0dBrian Paul return PIPE_OK; 2323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 2333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct svga_tracked_state svga_update_need_swtnl = 2363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 2373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz "need swtnl", 2383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz (SVGA_NEW_NEED_PIPELINE | 2393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_NEW_NEED_SWVFETCH), 2403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz update_need_swtnl 2413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz}; 242