nv50_state.c revision 287c94ea4987033f9c99a2f91c5750c9083504ca
1857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs/* 2857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * Copyright 2008 Ben Skeggs 3857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * 4857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * Permission is hereby granted, free of charge, to any person obtaining a 5857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * copy of this software and associated documentation files (the "Software"), 6857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * to deal in the Software without restriction, including without limitation 7857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * and/or sell copies of the Software, and to permit persons to whom the 9857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * Software is furnished to do so, subject to the following conditions: 10857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * 11857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * The above copyright notice and this permission notice shall be included in 12857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * all copies or substantial portions of the Software. 13857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * 14857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 18857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 19857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * SOFTWARE. 21857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs */ 22857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs 2347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs#include "pipe/p_state.h" 2447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs#include "pipe/p_defines.h" 2528486880ca3ec39419ccee0cb1a3bedc9ef7117cJosé Fonseca#include "util/u_inlines.h" 2647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 27fda01b584715c05696a0e6768fda669ef1eb5f3bBen Skeggs#include "tgsi/tgsi_parse.h" 28a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton 2947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs#include "nv50_context.h" 30866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs#include "nv50_texture.h" 3147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 323250bacd2411d3f1af50135599380b2140238535Ben Skeggs#include "nouveau/nouveau_stateobj.h" 333250bacd2411d3f1af50135599380b2140238535Ben Skeggs 34a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumillerstatic INLINE uint32_t 35a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumillernv50_colormask(unsigned mask) 36a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller{ 37a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller uint32_t cmask = 0; 38a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller 39a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller if (mask & PIPE_MASK_R) 40a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller cmask |= 0x0001; 41a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller if (mask & PIPE_MASK_G) 42a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller cmask |= 0x0010; 43a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller if (mask & PIPE_MASK_B) 44a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller cmask |= 0x0100; 45a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller if (mask & PIPE_MASK_A) 46a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller cmask |= 0x1000; 47a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller 48a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller return cmask; 49a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller} 50a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller 5147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 5247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_blend_state_create(struct pipe_context *pipe, 5347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_blend_state *cso) 5447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 55c77ade8fed2be933af3f493932cedee7ca868b04Maarten Maathuis struct nouveau_stateobj *so = so_new(5, 24, 0); 563250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla; 573250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nv50_blend_stateobj *bso = CALLOC_STRUCT(nv50_blend_stateobj); 58a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller unsigned i, blend_enabled = 0; 593250bacd2411d3f1af50135599380b2140238535Ben Skeggs 603250bacd2411d3f1af50135599380b2140238535Ben Skeggs /*XXX ignored: 613250bacd2411d3f1af50135599380b2140238535Ben Skeggs * - dither 623250bacd2411d3f1af50135599380b2140238535Ben Skeggs */ 633250bacd2411d3f1af50135599380b2140238535Ben Skeggs 64a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller so_method(so, tesla, NV50TCL_BLEND_ENABLE(0), 8); 65a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller if (cso->independent_blend_enable) { 66a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller for (i = 0; i < 8; ++i) { 67a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller so_data(so, cso->rt[i].blend_enable); 68a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller if (cso->rt[i].blend_enable) 69a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller blend_enabled = 1; 70a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller } 71a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller } else 72a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller if (cso->rt[0].blend_enable) { 73a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller blend_enabled = 1; 743250bacd2411d3f1af50135599380b2140238535Ben Skeggs for (i = 0; i < 8; i++) 75a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller so_data(so, 1); 763250bacd2411d3f1af50135599380b2140238535Ben Skeggs } else { 773250bacd2411d3f1af50135599380b2140238535Ben Skeggs for (i = 0; i < 8; i++) 78a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller so_data(so, 0); 79a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller } 80a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller if (blend_enabled) { 813250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_BLEND_EQUATION_RGB, 5); 82e908abf1740dce1a3b391ce5bcfda4f2a0b480deRoland Scheidegger so_data (so, nvgl_blend_eqn(cso->rt[0].rgb_func)); 83e908abf1740dce1a3b391ce5bcfda4f2a0b480deRoland Scheidegger so_data (so, 0x4000 | nvgl_blend_func(cso->rt[0].rgb_src_factor)); 84e908abf1740dce1a3b391ce5bcfda4f2a0b480deRoland Scheidegger so_data (so, 0x4000 | nvgl_blend_func(cso->rt[0].rgb_dst_factor)); 85e908abf1740dce1a3b391ce5bcfda4f2a0b480deRoland Scheidegger so_data (so, nvgl_blend_eqn(cso->rt[0].alpha_func)); 86e908abf1740dce1a3b391ce5bcfda4f2a0b480deRoland Scheidegger so_data (so, 0x4000 | nvgl_blend_func(cso->rt[0].alpha_src_factor)); 873250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_BLEND_FUNC_DST_ALPHA, 1); 88e908abf1740dce1a3b391ce5bcfda4f2a0b480deRoland Scheidegger so_data (so, 0x4000 | nvgl_blend_func(cso->rt[0].alpha_dst_factor)); 893250bacd2411d3f1af50135599380b2140238535Ben Skeggs } 903250bacd2411d3f1af50135599380b2140238535Ben Skeggs 913250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->logicop_enable == 0 ) { 923250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_LOGIC_OP_ENABLE, 1); 933250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, 0); 943250bacd2411d3f1af50135599380b2140238535Ben Skeggs } else { 953250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_LOGIC_OP_ENABLE, 2); 963250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, 1); 973250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, nvgl_logicop_func(cso->logicop_func)); 983250bacd2411d3f1af50135599380b2140238535Ben Skeggs } 993250bacd2411d3f1af50135599380b2140238535Ben Skeggs 1003250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_COLOR_MASK(0), 8); 101a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller if (cso->independent_blend_enable) 102a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller for (i = 0; i < 8; ++i) 103a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller so_data(so, nv50_colormask(cso->rt[i].colormask)); 104a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller else { 105a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller uint32_t cmask = nv50_colormask(cso->rt[0].colormask); 106a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller for (i = 0; i < 8; i++) 107a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller so_data(so, cmask); 108a5d67dc0119035c518d9778854948d13f0ce2d69Christoph Bumiller } 1093250bacd2411d3f1af50135599380b2140238535Ben Skeggs 1103250bacd2411d3f1af50135599380b2140238535Ben Skeggs bso->pipe = *cso; 1113250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_ref(so, &bso->so); 112ca95d71a4bc63e2ea45abf9096a3da802819ef92Ben Skeggs so_ref(NULL, &so); 1133250bacd2411d3f1af50135599380b2140238535Ben Skeggs return (void *)bso; 11447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 11547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 11647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 11747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_blend_state_bind(struct pipe_context *pipe, void *hwcso) 11847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 1193250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 1203250bacd2411d3f1af50135599380b2140238535Ben Skeggs 1213250bacd2411d3f1af50135599380b2140238535Ben Skeggs nv50->blend = hwcso; 1223250bacd2411d3f1af50135599380b2140238535Ben Skeggs nv50->dirty |= NV50_NEW_BLEND; 12347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 12447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 12547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 12647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_blend_state_delete(struct pipe_context *pipe, void *hwcso) 12747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 1283250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nv50_blend_stateobj *bso = hwcso; 1293250bacd2411d3f1af50135599380b2140238535Ben Skeggs 1303250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_ref(NULL, &bso->so); 1313250bacd2411d3f1af50135599380b2140238535Ben Skeggs FREE(bso); 13247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 13347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 134866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggsstatic INLINE unsigned 135866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggswrap_mode(unsigned wrap) 136866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs{ 137866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs switch (wrap) { 138866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_WRAP_REPEAT: 139866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs return NV50TSC_1_0_WRAPS_REPEAT; 140866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_WRAP_MIRROR_REPEAT: 141866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs return NV50TSC_1_0_WRAPS_MIRROR_REPEAT; 142866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_WRAP_CLAMP_TO_EDGE: 143866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs return NV50TSC_1_0_WRAPS_CLAMP_TO_EDGE; 144866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_WRAP_CLAMP_TO_BORDER: 145866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs return NV50TSC_1_0_WRAPS_CLAMP_TO_BORDER; 146866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_WRAP_CLAMP: 147866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs return NV50TSC_1_0_WRAPS_CLAMP; 148866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE: 149866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs return NV50TSC_1_0_WRAPS_MIRROR_CLAMP_TO_EDGE; 150866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER: 151866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs return NV50TSC_1_0_WRAPS_MIRROR_CLAMP_TO_BORDER; 152866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_WRAP_MIRROR_CLAMP: 153866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs return NV50TSC_1_0_WRAPS_MIRROR_CLAMP; 154866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs default: 155866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs NOUVEAU_ERR("unknown wrap mode: %d\n", wrap); 156866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs return NV50TSC_1_0_WRAPS_REPEAT; 157866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs } 158866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs} 15947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 16047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_sampler_state_create(struct pipe_context *pipe, 16147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_sampler_state *cso) 16247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 1636c1627a51c237428a79613fcda1412c4660780deBen Skeggs struct nv50_sampler_stateobj *sso = CALLOC(1, sizeof(*sso)); 1646c1627a51c237428a79613fcda1412c4660780deBen Skeggs unsigned *tsc = sso->tsc; 165534f1e8f022ea7408c2ad49013e8f2446aa16364Ben Skeggs float limit; 166c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs 167534f1e8f022ea7408c2ad49013e8f2446aa16364Ben Skeggs tsc[0] = (0x00026000 | 168866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs (wrap_mode(cso->wrap_s) << 0) | 169866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs (wrap_mode(cso->wrap_t) << 3) | 170866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs (wrap_mode(cso->wrap_r) << 6)); 171866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs 172866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs switch (cso->mag_img_filter) { 173866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_FILTER_LINEAR: 174866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MAGF_LINEAR; 175866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 176866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_FILTER_NEAREST: 177866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs default: 178866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MAGF_NEAREST; 179866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 180866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs } 181866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs 182866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs switch (cso->min_img_filter) { 183866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_FILTER_LINEAR: 184866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MINF_LINEAR; 185866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 186866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_FILTER_NEAREST: 187866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs default: 188866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MINF_NEAREST; 189866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 190866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs } 191866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs 192866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs switch (cso->min_mip_filter) { 193866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_MIPFILTER_LINEAR: 194866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MIPF_LINEAR; 195866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 196866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_MIPFILTER_NEAREST: 197866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MIPF_NEAREST; 198866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 199866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_MIPFILTER_NONE: 200866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs default: 201866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MIPF_NONE; 202866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 203866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs } 204c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs 205ebe12d50064370e4ddec21a1e087b24295940319Roland Scheidegger if (cso->max_anisotropy >= 16) 206f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs tsc[0] |= (7 << 20); 207f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs else 208ebe12d50064370e4ddec21a1e087b24295940319Roland Scheidegger if (cso->max_anisotropy >= 12) 209f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs tsc[0] |= (6 << 20); 210198925caa18526e5aa908ab50482aff814207dc2Christoph Bumiller else { 211ebe12d50064370e4ddec21a1e087b24295940319Roland Scheidegger tsc[0] |= (cso->max_anisotropy >> 1) << 20; 212198925caa18526e5aa908ab50482aff814207dc2Christoph Bumiller 213ebe12d50064370e4ddec21a1e087b24295940319Roland Scheidegger if (cso->max_anisotropy >= 4) 214198925caa18526e5aa908ab50482aff814207dc2Christoph Bumiller tsc[1] |= NV50TSC_1_1_UNKN_ANISO_35; 215198925caa18526e5aa908ab50482aff814207dc2Christoph Bumiller else 216ebe12d50064370e4ddec21a1e087b24295940319Roland Scheidegger if (cso->max_anisotropy >= 2) 217198925caa18526e5aa908ab50482aff814207dc2Christoph Bumiller tsc[1] |= NV50TSC_1_1_UNKN_ANISO_15; 218198925caa18526e5aa908ab50482aff814207dc2Christoph Bumiller } 219f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs 22068bb26b62d87ae6737ba51a4bffda49eeb7647cbBen Skeggs if (cso->compare_mode == PIPE_TEX_COMPARE_R_TO_TEXTURE) { 221cc0ffaba7d1df234b3c62769ade9dee712117d2fChristoph Bumiller /* XXX: must be deactivated for non-shadow textures */ 222cc0ffaba7d1df234b3c62769ade9dee712117d2fChristoph Bumiller tsc[0] |= (1 << 9); 223cc0ffaba7d1df234b3c62769ade9dee712117d2fChristoph Bumiller tsc[0] |= (nvgl_comparison_op(cso->compare_func) & 0x7) << 10; 22468bb26b62d87ae6737ba51a4bffda49eeb7647cbBen Skeggs } 22568bb26b62d87ae6737ba51a4bffda49eeb7647cbBen Skeggs 226534f1e8f022ea7408c2ad49013e8f2446aa16364Ben Skeggs limit = CLAMP(cso->lod_bias, -16.0, 15.0); 227df189c9efc0fbcdce816af483f0147ab635280d1Christoph Bumiller tsc[1] |= ((int)(limit * 256.0) & 0x1fff) << 12; 228534f1e8f022ea7408c2ad49013e8f2446aa16364Ben Skeggs 229534f1e8f022ea7408c2ad49013e8f2446aa16364Ben Skeggs tsc[2] |= ((int)CLAMP(cso->max_lod, 0.0, 15.0) << 20) | 230534f1e8f022ea7408c2ad49013e8f2446aa16364Ben Skeggs ((int)CLAMP(cso->min_lod, 0.0, 15.0) << 8); 231534f1e8f022ea7408c2ad49013e8f2446aa16364Ben Skeggs 232df189c9efc0fbcdce816af483f0147ab635280d1Christoph Bumiller tsc[4] = fui(cso->border_color[0]); 233df189c9efc0fbcdce816af483f0147ab635280d1Christoph Bumiller tsc[5] = fui(cso->border_color[1]); 234df189c9efc0fbcdce816af483f0147ab635280d1Christoph Bumiller tsc[6] = fui(cso->border_color[2]); 235df189c9efc0fbcdce816af483f0147ab635280d1Christoph Bumiller tsc[7] = fui(cso->border_color[3]); 236df189c9efc0fbcdce816af483f0147ab635280d1Christoph Bumiller 2376c1627a51c237428a79613fcda1412c4660780deBen Skeggs sso->normalized = cso->normalized_coords; 2386c1627a51c237428a79613fcda1412c4660780deBen Skeggs return (void *)sso; 23947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 24047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 24144570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller/* type == 0 for VPs, 1 for GPs, 2 for FPs, which is how the 24244570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller * relevant tesla methods are indexed (NV50TCL_BIND_TSC etc.) 24344570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller */ 2446a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumillerstatic INLINE void 2456a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumillernv50_sampler_state_bind(struct pipe_context *pipe, unsigned type, 2466a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumiller unsigned nr, void **sampler) 24747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 248c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 249c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs 2506a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumiller memcpy(nv50->sampler[type], sampler, nr * sizeof(void *)); 251c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs 2526a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumiller nv50->sampler_nr[type] = nr; 253c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs nv50->dirty |= NV50_NEW_SAMPLER; 25447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 25547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 25647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 2576a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumillernv50_vp_sampler_state_bind(struct pipe_context *pipe, unsigned nr, void **s) 2586a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumiller{ 25944570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller nv50_sampler_state_bind(pipe, 0, nr, s); 2606a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumiller} 2616a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumiller 2626a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumillerstatic void 2636a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumillernv50_fp_sampler_state_bind(struct pipe_context *pipe, unsigned nr, void **s) 2646a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumiller{ 26544570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller nv50_sampler_state_bind(pipe, 2, nr, s); 2666a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumiller} 2676a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumiller 2686a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumillerstatic void 26947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_sampler_state_delete(struct pipe_context *pipe, void *hwcso) 27047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 271c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs FREE(hwcso); 27247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 27347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 2746a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumillerstatic INLINE void 27544570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumillernv50_set_sampler_views(struct pipe_context *pipe, unsigned p, 2766a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol unsigned nr, 2776a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol struct pipe_sampler_view **views) 27879bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs{ 279c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 2806a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumiller unsigned i; 281c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs 28244570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller for (i = 0; i < nr; i++) 28344570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller pipe_sampler_view_reference(&nv50->sampler_views[p][i], 28444570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller views[i]); 285c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs 28644570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller for (i = nr; i < nv50->sampler_view_nr[p]; i++) 28744570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller pipe_sampler_view_reference(&nv50->sampler_views[p][i], NULL); 28844570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller 28944570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller nv50->sampler_view_nr[p] = nr; 290c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs nv50->dirty |= NV50_NEW_TEXTURE; 29179bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs} 29279bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs 2936a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumillerstatic void 2946a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krolnv50_set_vp_sampler_views(struct pipe_context *pipe, 2956a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol unsigned nr, 2966a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol struct pipe_sampler_view **views) 2976a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol{ 29844570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller nv50_set_sampler_views(pipe, 0, nr, views); 2996a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol} 3006a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol 3016a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krolstatic void 3026a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krolnv50_set_fp_sampler_views(struct pipe_context *pipe, 3036a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol unsigned nr, 3046a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol struct pipe_sampler_view **views) 3056a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumiller{ 30644570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller nv50_set_sampler_views(pipe, 2, nr, views); 30744570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller} 30844570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller 30944570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumillerstatic void 31044570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumillernv50_sampler_view_destroy(struct pipe_context *pipe, 31144570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller struct pipe_sampler_view *view) 31244570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller{ 313287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell pipe_resource_reference(&view->texture, NULL); 31444570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller FREE(nv50_sampler_view(view)); 3156a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumiller} 3166a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumiller 3176a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krolstatic struct pipe_sampler_view * 3186a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krolnv50_create_sampler_view(struct pipe_context *pipe, 319287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct pipe_resource *texture, 3206a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol const struct pipe_sampler_view *templ) 3216a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol{ 32244570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller struct nv50_sampler_view *view = CALLOC_STRUCT(nv50_sampler_view); 3236a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol 32444570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller view->pipe = *templ; 32544570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller view->pipe.reference.count = 1; 32644570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller view->pipe.texture = NULL; 327287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell pipe_resource_reference(&view->pipe.texture, texture); 32844570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller view->pipe.context = pipe; 3296a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol 33044570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller if (!nv50_tex_construct(view)) { 33144570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller nv50_sampler_view_destroy(pipe, &view->pipe); 33244570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller return NULL; 33344570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller } 33444570063bf8a4f45807bc1598c8de291cdc64506Christoph Bumiller return &view->pipe; 3356a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol} 3366a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol 3376a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol 33847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 33947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_create(struct pipe_context *pipe, 34047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_rasterizer_state *cso) 34147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 3422b8c0cf16959c07341309484da41b2e9a17e5266Ben Skeggs struct nouveau_stateobj *so = so_new(16, 22, 0); 343cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla; 344cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nv50_rasterizer_stateobj *rso = 345cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs CALLOC_STRUCT(nv50_rasterizer_stateobj); 346cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 347cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs /*XXX: ignored 348cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - light_twosize 349cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - point_smooth 350cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - multisample 351cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - point_sprite / sprite_coord_mode 352cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs */ 353cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 3542b8c0cf16959c07341309484da41b2e9a17e5266Ben Skeggs so_method(so, tesla, NV50TCL_SCISSOR_ENABLE(0), 1); 3552b8c0cf16959c07341309484da41b2e9a17e5266Ben Skeggs so_data (so, cso->scissor); 3562b8c0cf16959c07341309484da41b2e9a17e5266Ben Skeggs 357cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_SHADE_MODEL, 1); 358cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->flatshade ? NV50TCL_SHADE_MODEL_FLAT : 359cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs NV50TCL_SHADE_MODEL_SMOOTH); 360c84cc09d41a83caa96eca84c73284024d8d63024Marcin Kościelnicki so_method(so, tesla, NV50TCL_PROVOKING_VERTEX_LAST, 1); 3618313801911426a9a7b0bdbf2d6a4b2232428cc5bChristoph Bumiller so_data (so, cso->flatshade_first ? 0 : 1); 362cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 3634d7b4781c82c60d646ee5e766824a0f894e4c292Christoph Bumiller so_method(so, tesla, NV50TCL_VERTEX_TWO_SIDE_ENABLE, 1); 3644d7b4781c82c60d646ee5e766824a0f894e4c292Christoph Bumiller so_data (so, cso->light_twoside); 3654d7b4781c82c60d646ee5e766824a0f894e4c292Christoph Bumiller 366cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_WIDTH, 1); 367cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, fui(cso->line_width)); 368cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_SMOOTH_ENABLE, 1); 369cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->line_smooth ? 1 : 0); 370cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->line_stipple_enable) { 371cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_STIPPLE_ENABLE, 1); 372cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, 1); 373cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_STIPPLE_PATTERN, 1); 374e52d37d56c91e152bc149230410ed700ff1cffe2Ben Skeggs so_data (so, (cso->line_stipple_pattern << 8) | 375cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs cso->line_stipple_factor); 376cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } else { 377cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_STIPPLE_ENABLE, 1); 378cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, 0); 379cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 380cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 381cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POINT_SIZE, 1); 382cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, fui(cso->point_size)); 383cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 38401670ca8073b57029625873b5c8374fb8716e1ebChristoph Bumiller so_method(so, tesla, NV50TCL_POINT_SPRITE_ENABLE, 1); 38568f93ea3eb83cfad014b8ec93cec3564c1aa9833Roland Scheidegger so_data (so, cso->point_quad_rasterization ? 1 : 0); 38601670ca8073b57029625873b5c8374fb8716e1ebChristoph Bumiller 387cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_MODE_FRONT, 3); 388cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->front_winding == PIPE_WINDING_CCW) { 389cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_ccw)); 390cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_cw)); 391cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } else { 392cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_cw)); 393cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_ccw)); 394cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 395cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, cso->poly_smooth ? 1 : 0); 396cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 397cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_CULL_FACE_ENABLE, 3); 398cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->cull_mode != PIPE_WINDING_NONE); 399cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->front_winding == PIPE_WINDING_CCW) { 400cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_FRONT_FACE_CCW); 401cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs switch (cso->cull_mode) { 402cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CCW: 403cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT); 404cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 405cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CW: 406cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 407cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 408cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_BOTH: 409cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT_AND_BACK); 410cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 411cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs default: 412cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 413cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 414cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 415cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } else { 416cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_FRONT_FACE_CW); 417cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs switch (cso->cull_mode) { 418cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CCW: 419cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 420cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 421cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CW: 422cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT); 423cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 424cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_BOTH: 425cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT_AND_BACK); 426cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 427cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs default: 428cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 429cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 430cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 431cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 432cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 433cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_STIPPLE_ENABLE, 1); 434cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->poly_stipple_enable ? 1 : 0); 435cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 436cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_OFFSET_POINT_ENABLE, 3); 437cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_POINT) || 438cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_POINT)) 439cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 1); 440cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs else 441cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 0); 442cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_LINE) || 443cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_LINE)) 444cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 1); 445cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs else 446cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 0); 447cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_FILL) || 448cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_FILL)) 449cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 1); 450cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs else 451cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 0); 452cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 453cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->offset_cw || cso->offset_ccw) { 454cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_OFFSET_FACTOR, 1); 455cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, fui(cso->offset_scale)); 456cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_OFFSET_UNITS, 1); 4570ba518e3274b020deac255061ab23c74aefeb3f1Christoph Bumiller so_data (so, fui(cso->offset_units * 2.0f)); 458cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 459cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 460cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs rso->pipe = *cso; 461cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_ref(so, &rso->so); 462ca95d71a4bc63e2ea45abf9096a3da802819ef92Ben Skeggs so_ref(NULL, &so); 463cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs return (void *)rso; 46447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 46547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 46647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 46747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_bind(struct pipe_context *pipe, void *hwcso) 46847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 469cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 470cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 471cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs nv50->rasterizer = hwcso; 472cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs nv50->dirty |= NV50_NEW_RASTERIZER; 47347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 47447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 47547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 47647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_delete(struct pipe_context *pipe, void *hwcso) 47747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 478cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nv50_rasterizer_stateobj *rso = hwcso; 479cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 480cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_ref(NULL, &rso->so); 481cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs FREE(rso); 48247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 48347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 48447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 4853af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_create(struct pipe_context *pipe, 4863af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs const struct pipe_depth_stencil_alpha_state *cso) 48747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 48806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla; 48906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nv50_zsa_stateobj *zsa = CALLOC_STRUCT(nv50_zsa_stateobj); 49067479eea365954396679714901c11175253bb13bRoland Scheidegger struct nouveau_stateobj *so = so_new(9, 21, 0); 49106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 49206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_WRITE_ENABLE, 1); 4935a3362521de5e17e4f340fd9136af1d5e3891e23Ben Skeggs so_data (so, cso->depth.writemask ? 1 : 0); 494101305f37f7268354a50b825bcb66894e4a0b777Ben Skeggs if (cso->depth.enabled) { 49506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_TEST_ENABLE, 1); 4965a3362521de5e17e4f340fd9136af1d5e3891e23Ben Skeggs so_data (so, 1); 49706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_TEST_FUNC, 1); 49806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->depth.func)); 49906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 50006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_TEST_ENABLE, 1); 50106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 50206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 50306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 50406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs if (cso->stencil[0].enabled) { 50567479eea365954396679714901c11175253bb13bRoland Scheidegger so_method(so, tesla, NV50TCL_STENCIL_FRONT_ENABLE, 5); 50606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 1); 50706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[0].fail_op)); 50806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[0].zfail_op)); 50906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[0].zpass_op)); 51006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->stencil[0].func)); 51167479eea365954396679714901c11175253bb13bRoland Scheidegger so_method(so, tesla, NV50TCL_STENCIL_FRONT_MASK, 2); 512a7e72231e3c76a9410d192441da309002ea6422dZack Rusin so_data (so, cso->stencil[0].writemask); 513a7e72231e3c76a9410d192441da309002ea6422dZack Rusin so_data (so, cso->stencil[0].valuemask); 51406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 515c84cc09d41a83caa96eca84c73284024d8d63024Marcin Kościelnicki so_method(so, tesla, NV50TCL_STENCIL_FRONT_ENABLE, 1); 51606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 51706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 51806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 51906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs if (cso->stencil[1].enabled) { 520c84cc09d41a83caa96eca84c73284024d8d63024Marcin Kościelnicki so_method(so, tesla, NV50TCL_STENCIL_BACK_ENABLE, 5); 52106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 1); 52206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[1].fail_op)); 52306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[1].zfail_op)); 52406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[1].zpass_op)); 52506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->stencil[1].func)); 52667479eea365954396679714901c11175253bb13bRoland Scheidegger so_method(so, tesla, NV50TCL_STENCIL_BACK_MASK, 2); 527a7e72231e3c76a9410d192441da309002ea6422dZack Rusin so_data (so, cso->stencil[1].writemask); 528a7e72231e3c76a9410d192441da309002ea6422dZack Rusin so_data (so, cso->stencil[1].valuemask); 52906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 530c84cc09d41a83caa96eca84c73284024d8d63024Marcin Kościelnicki so_method(so, tesla, NV50TCL_STENCIL_BACK_ENABLE, 1); 53106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 53206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 53306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 53406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs if (cso->alpha.enabled) { 53506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_ALPHA_TEST_ENABLE, 1); 53606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 1); 53706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_ALPHA_TEST_REF, 2); 538d6888e811d24eaa7e8d9093be606394f00435c05Zack Rusin so_data (so, fui(cso->alpha.ref_value)); 53906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->alpha.func)); 54006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 54106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_ALPHA_TEST_ENABLE, 1); 54206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 54306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 54406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 54506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs zsa->pipe = *cso; 54606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_ref(so, &zsa->so); 547ca95d71a4bc63e2ea45abf9096a3da802819ef92Ben Skeggs so_ref(NULL, &so); 54806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs return (void *)zsa; 54947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 55047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 55147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 5523af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_bind(struct pipe_context *pipe, void *hwcso) 55347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 55406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 55506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 55606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs nv50->zsa = hwcso; 55706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs nv50->dirty |= NV50_NEW_ZSA; 55847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 55947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 56047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 5613af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_delete(struct pipe_context *pipe, void *hwcso) 56247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 56306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nv50_zsa_stateobj *zsa = hwcso; 56406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 56506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_ref(NULL, &zsa->so); 56606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs FREE(zsa); 56747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 56847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 56947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 57047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_create(struct pipe_context *pipe, 57147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_shader_state *cso) 57247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 573f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_program *p = CALLOC_STRUCT(nv50_program); 574f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 575a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton p->pipe.tokens = tgsi_dup_tokens(cso->tokens); 576b5bbf09c42a9d563984fad875ced5c4814033a3dBen Skeggs p->type = PIPE_SHADER_VERTEX; 577f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs tgsi_scan_shader(p->pipe.tokens, &p->info); 578f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs return (void *)p; 57947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 58047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 58147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 58247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_bind(struct pipe_context *pipe, void *hwcso) 58347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 584f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 585f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 586f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->vertprog = hwcso; 587f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_VERTPROG; 58847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 58947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 59047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 59147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_delete(struct pipe_context *pipe, void *hwcso) 59247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 593f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 594a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton struct nv50_program *p = hwcso; 595f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 596a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton nv50_program_destroy(nv50, p); 5974c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller FREE((void *)p->pipe.tokens); 598a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton FREE(p); 59947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 60047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 60147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 60247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_create(struct pipe_context *pipe, 60347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_shader_state *cso) 60447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 605f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_program *p = CALLOC_STRUCT(nv50_program); 606f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 607a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton p->pipe.tokens = tgsi_dup_tokens(cso->tokens); 608b5bbf09c42a9d563984fad875ced5c4814033a3dBen Skeggs p->type = PIPE_SHADER_FRAGMENT; 609f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs tgsi_scan_shader(p->pipe.tokens, &p->info); 610f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs return (void *)p; 61147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 61247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 61347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 61447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_bind(struct pipe_context *pipe, void *hwcso) 61547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 616f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 617f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 618f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->fragprog = hwcso; 619f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_FRAGPROG; 62047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 62147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 62247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 62347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_delete(struct pipe_context *pipe, void *hwcso) 62447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 625f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 626a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton struct nv50_program *p = hwcso; 627f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 628a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton nv50_program_destroy(nv50, p); 6294c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller FREE((void *)p->pipe.tokens); 6304c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller FREE(p); 6314c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller} 6324c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller 6334c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumillerstatic void * 6344c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumillernv50_gp_state_create(struct pipe_context *pipe, 6354c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller const struct pipe_shader_state *cso) 6364c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller{ 6374c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller struct nv50_program *p = CALLOC_STRUCT(nv50_program); 6384c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller 6394c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller p->pipe.tokens = tgsi_dup_tokens(cso->tokens); 6404c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller p->type = PIPE_SHADER_GEOMETRY; 6414c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller tgsi_scan_shader(p->pipe.tokens, &p->info); 6424c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller return (void *)p; 6434c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller} 6444c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller 6454c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumillerstatic void 6464c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumillernv50_gp_state_bind(struct pipe_context *pipe, void *hwcso) 6474c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller{ 6484c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller struct nv50_context *nv50 = nv50_context(pipe); 6494c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller 6504c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller nv50->fragprog = hwcso; 6514c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller nv50->dirty |= NV50_NEW_GEOMPROG; 6524c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller} 6534c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller 6544c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumillerstatic void 6554c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumillernv50_gp_state_delete(struct pipe_context *pipe, void *hwcso) 6564c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller{ 6574c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller struct nv50_context *nv50 = nv50_context(pipe); 6584c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller struct nv50_program *p = hwcso; 6594c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller 6604c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller nv50_program_destroy(nv50, p); 6614c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller FREE((void *)p->pipe.tokens); 662a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton FREE(p); 66347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 66447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 66547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 66647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_blend_color(struct pipe_context *pipe, 66747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_blend_color *bcol) 66847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 6692fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 6702fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 6712fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->blend_colour = *bcol; 6722fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_BLEND_COLOUR; 67347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 67447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 67567479eea365954396679714901c11175253bb13bRoland Scheidegger static void 67667479eea365954396679714901c11175253bb13bRoland Scheideggernv50_set_stencil_ref(struct pipe_context *pipe, 67767479eea365954396679714901c11175253bb13bRoland Scheidegger const struct pipe_stencil_ref *sr) 67867479eea365954396679714901c11175253bb13bRoland Scheidegger{ 67967479eea365954396679714901c11175253bb13bRoland Scheidegger struct nv50_context *nv50 = nv50_context(pipe); 68067479eea365954396679714901c11175253bb13bRoland Scheidegger 68167479eea365954396679714901c11175253bb13bRoland Scheidegger nv50->stencil_ref = *sr; 68267479eea365954396679714901c11175253bb13bRoland Scheidegger nv50->dirty |= NV50_NEW_STENCIL_REF; 68367479eea365954396679714901c11175253bb13bRoland Scheidegger} 68467479eea365954396679714901c11175253bb13bRoland Scheidegger 68547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 68647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_clip_state(struct pipe_context *pipe, 68747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_clip_state *clip) 68847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 68947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 69047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 69147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 69247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index, 693287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct pipe_resource *buf ) 69447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 695f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 696f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 697f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs if (shader == PIPE_SHADER_VERTEX) { 6981278507e3bf2e83c7027820a0d313de267a440ffRoland Scheidegger nv50->constbuf[PIPE_SHADER_VERTEX] = buf; 699716c1cd2ecbc1e86c0fd747c9fa9e095ded5fd5dBen Skeggs nv50->dirty |= NV50_NEW_VERTPROG_CB; 700f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs } else 701f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs if (shader == PIPE_SHADER_FRAGMENT) { 7021278507e3bf2e83c7027820a0d313de267a440ffRoland Scheidegger nv50->constbuf[PIPE_SHADER_FRAGMENT] = buf; 703716c1cd2ecbc1e86c0fd747c9fa9e095ded5fd5dBen Skeggs nv50->dirty |= NV50_NEW_FRAGPROG_CB; 7044c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller } else 7054c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller if (shader == PIPE_SHADER_GEOMETRY) { 7064c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller nv50->constbuf[PIPE_SHADER_GEOMETRY] = buf; 7074c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller nv50->dirty |= NV50_NEW_GEOMPROG_CB; 708f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs } 70947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 71047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 71147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 71247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_framebuffer_state(struct pipe_context *pipe, 71347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_framebuffer_state *fb) 71447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 715cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 716cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs 717cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs nv50->framebuffer = *fb; 718cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs nv50->dirty |= NV50_NEW_FRAMEBUFFER; 71947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 72047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 72147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 72247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_polygon_stipple(struct pipe_context *pipe, 72347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_poly_stipple *stipple) 72447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 7252fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 7262fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 7272fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->stipple = *stipple; 7282fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_STIPPLE; 72947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 73047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 73147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 73247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_scissor_state(struct pipe_context *pipe, 73347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_scissor_state *s) 73447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 7352fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 7362fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 7372fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->scissor = *s; 7382fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_SCISSOR; 73947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 74047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 74147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 74247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_viewport_state(struct pipe_context *pipe, 74347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_viewport_state *vpt) 74447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 7452fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 7462fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 7472fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->viewport = *vpt; 7482fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_VIEWPORT; 74947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 75047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 75147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 752bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggsnv50_set_vertex_buffers(struct pipe_context *pipe, unsigned count, 753bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs const struct pipe_vertex_buffer *vb) 75447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 755f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 756f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 757f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs memcpy(nv50->vtxbuf, vb, sizeof(*vb) * count); 758f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->vtxbuf_nr = count; 759f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 760f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_ARRAYS; 76147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 76247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 763f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumillerstatic void * 764f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumillernv50_vtxelts_state_create(struct pipe_context *pipe, 765f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller unsigned num_elements, 766f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller const struct pipe_vertex_element *elements) 767f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller{ 768f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller struct nv50_vtxelt_stateobj *cso = CALLOC_STRUCT(nv50_vtxelt_stateobj); 769f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller 770f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller assert(num_elements < 16); /* not doing fallbacks yet */ 771f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller cso->num_elements = num_elements; 772f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller memcpy(cso->pipe, elements, num_elements * sizeof(*elements)); 773f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller 774f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller nv50_vtxelt_construct(cso); 775f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller 776f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller return (void *)cso; 777f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller} 778f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller 77947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 780f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumillernv50_vtxelts_state_delete(struct pipe_context *pipe, void *hwcso) 78147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 782f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller FREE(hwcso); 783f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller} 784f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 785f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumillerstatic void 786f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumillernv50_vtxelts_state_bind(struct pipe_context *pipe, void *hwcso) 787f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller{ 788f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller struct nv50_context *nv50 = nv50_context(pipe); 789f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 790f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller nv50->vtxelt = hwcso; 791f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_ARRAYS; 79247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 79347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 79447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsvoid 79547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_init_state_functions(struct nv50_context *nv50) 79647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 79747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_blend_state = nv50_blend_state_create; 79847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_blend_state = nv50_blend_state_bind; 79947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_blend_state = nv50_blend_state_delete; 80047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 80147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_sampler_state = nv50_sampler_state_create; 80247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_sampler_state = nv50_sampler_state_delete; 8036a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumiller nv50->pipe.bind_fragment_sampler_states = nv50_fp_sampler_state_bind; 8046a15ec9141b070b088d03d87673d0d2741b7db6bChristoph Bumiller nv50->pipe.bind_vertex_sampler_states = nv50_vp_sampler_state_bind; 8056a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol nv50->pipe.set_fragment_sampler_views = nv50_set_fp_sampler_views; 8066a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol nv50->pipe.set_vertex_sampler_views = nv50_set_vp_sampler_views; 8076a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol nv50->pipe.create_sampler_view = nv50_create_sampler_view; 8086a8961a2479288df4ec736f94b8bf990c1fe0d72Michal Krol nv50->pipe.sampler_view_destroy = nv50_sampler_view_destroy; 80947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 81047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_rasterizer_state = nv50_rasterizer_state_create; 81147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_rasterizer_state = nv50_rasterizer_state_bind; 81247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_rasterizer_state = nv50_rasterizer_state_delete; 81347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 8143af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50->pipe.create_depth_stencil_alpha_state = 8153af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50_depth_stencil_alpha_state_create; 8163af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50->pipe.bind_depth_stencil_alpha_state = 8173af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50_depth_stencil_alpha_state_bind; 8183af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50->pipe.delete_depth_stencil_alpha_state = 8193af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50_depth_stencil_alpha_state_delete; 82047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 82147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_vs_state = nv50_vp_state_create; 82247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_vs_state = nv50_vp_state_bind; 82347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_vs_state = nv50_vp_state_delete; 82447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 82547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_fs_state = nv50_fp_state_create; 82647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_fs_state = nv50_fp_state_bind; 82747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_fs_state = nv50_fp_state_delete; 82847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 8294c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller nv50->pipe.create_gs_state = nv50_gp_state_create; 8304c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller nv50->pipe.bind_gs_state = nv50_gp_state_bind; 8314c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller nv50->pipe.delete_gs_state = nv50_gp_state_delete; 8324c223aaa3b1209006454d600cabc7547fa259a13Christoph Bumiller 83347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_blend_color = nv50_set_blend_color; 83467479eea365954396679714901c11175253bb13bRoland Scheidegger nv50->pipe.set_stencil_ref = nv50_set_stencil_ref; 83547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_clip_state = nv50_set_clip_state; 83647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_constant_buffer = nv50_set_constant_buffer; 83747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_framebuffer_state = nv50_set_framebuffer_state; 83847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_polygon_stipple = nv50_set_polygon_stipple; 83947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_scissor_state = nv50_set_scissor_state; 84047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_viewport_state = nv50_set_viewport_state; 84147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 842f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller nv50->pipe.create_vertex_elements_state = nv50_vtxelts_state_create; 843f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller nv50->pipe.delete_vertex_elements_state = nv50_vtxelts_state_delete; 844f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller nv50->pipe.bind_vertex_elements_state = nv50_vtxelts_state_bind; 845f2656c3e3cc91edcbf572d175efe9346a30b1da2Christoph Bumiller 846bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs nv50->pipe.set_vertex_buffers = nv50_set_vertex_buffers; 84747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 84847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 849