nv50_state.c revision a8da04cb861b8f9caf3acd33f52f64621f0c15e2
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" 2547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs#include "pipe/p_util.h" 26c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs#include "pipe/p_inlines.h" 2747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 28a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton#include "tgsi/util/tgsi_parse.h" 29a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton 3047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs#include "nv50_context.h" 31866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs#include "nv50_texture.h" 3247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 333250bacd2411d3f1af50135599380b2140238535Ben Skeggs#include "nouveau/nouveau_stateobj.h" 343250bacd2411d3f1af50135599380b2140238535Ben Skeggs 3547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 3647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_blend_state_create(struct pipe_context *pipe, 3747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_blend_state *cso) 3847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 393250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nouveau_stateobj *so = so_new(64, 0); 403250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla; 413250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nv50_blend_stateobj *bso = CALLOC_STRUCT(nv50_blend_stateobj); 423250bacd2411d3f1af50135599380b2140238535Ben Skeggs unsigned cmask = 0, i; 433250bacd2411d3f1af50135599380b2140238535Ben Skeggs 443250bacd2411d3f1af50135599380b2140238535Ben Skeggs /*XXX ignored: 453250bacd2411d3f1af50135599380b2140238535Ben Skeggs * - dither 463250bacd2411d3f1af50135599380b2140238535Ben Skeggs */ 473250bacd2411d3f1af50135599380b2140238535Ben Skeggs 483250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->blend_enable == 0) { 493250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_BLEND_ENABLE(0), 8); 503250bacd2411d3f1af50135599380b2140238535Ben Skeggs for (i = 0; i < 8; i++) 513250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data(so, 0); 523250bacd2411d3f1af50135599380b2140238535Ben Skeggs } else { 533250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_BLEND_ENABLE(0), 8); 543250bacd2411d3f1af50135599380b2140238535Ben Skeggs for (i = 0; i < 8; i++) 553250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data(so, 1); 563250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_BLEND_EQUATION_RGB, 5); 573250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, nvgl_blend_eqn(cso->rgb_func)); 584bde3a72ab0b4246cd779a6d1e2a72943f25c0f6Ben Skeggs so_data (so, 0x4000 | nvgl_blend_func(cso->rgb_src_factor)); 594bde3a72ab0b4246cd779a6d1e2a72943f25c0f6Ben Skeggs so_data (so, 0x4000 | nvgl_blend_func(cso->rgb_dst_factor)); 603250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, nvgl_blend_eqn(cso->alpha_func)); 614bde3a72ab0b4246cd779a6d1e2a72943f25c0f6Ben Skeggs so_data (so, 0x4000 | nvgl_blend_func(cso->alpha_src_factor)); 623250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_BLEND_FUNC_DST_ALPHA, 1); 634bde3a72ab0b4246cd779a6d1e2a72943f25c0f6Ben Skeggs so_data (so, 0x4000 | nvgl_blend_func(cso->alpha_dst_factor)); 643250bacd2411d3f1af50135599380b2140238535Ben Skeggs } 653250bacd2411d3f1af50135599380b2140238535Ben Skeggs 663250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->logicop_enable == 0 ) { 673250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_LOGIC_OP_ENABLE, 1); 683250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, 0); 693250bacd2411d3f1af50135599380b2140238535Ben Skeggs } else { 703250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_LOGIC_OP_ENABLE, 2); 713250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, 1); 723250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, nvgl_logicop_func(cso->logicop_func)); 733250bacd2411d3f1af50135599380b2140238535Ben Skeggs } 743250bacd2411d3f1af50135599380b2140238535Ben Skeggs 753250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->colormask & PIPE_MASK_R) 763250bacd2411d3f1af50135599380b2140238535Ben Skeggs cmask |= (1 << 0); 773250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->colormask & PIPE_MASK_G) 783250bacd2411d3f1af50135599380b2140238535Ben Skeggs cmask |= (1 << 4); 793250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->colormask & PIPE_MASK_B) 803250bacd2411d3f1af50135599380b2140238535Ben Skeggs cmask |= (1 << 8); 813250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->colormask & PIPE_MASK_A) 823250bacd2411d3f1af50135599380b2140238535Ben Skeggs cmask |= (1 << 12); 833250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_COLOR_MASK(0), 8); 843250bacd2411d3f1af50135599380b2140238535Ben Skeggs for (i = 0; i < 8; i++) 853250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data(so, cmask); 863250bacd2411d3f1af50135599380b2140238535Ben Skeggs 873250bacd2411d3f1af50135599380b2140238535Ben Skeggs bso->pipe = *cso; 883250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_ref(so, &bso->so); 893250bacd2411d3f1af50135599380b2140238535Ben Skeggs return (void *)bso; 9047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 9147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 9247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 9347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_blend_state_bind(struct pipe_context *pipe, void *hwcso) 9447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 953250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 963250bacd2411d3f1af50135599380b2140238535Ben Skeggs 973250bacd2411d3f1af50135599380b2140238535Ben Skeggs nv50->blend = hwcso; 983250bacd2411d3f1af50135599380b2140238535Ben Skeggs nv50->dirty |= NV50_NEW_BLEND; 9947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 10047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 10147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 10247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_blend_state_delete(struct pipe_context *pipe, void *hwcso) 10347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 1043250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nv50_blend_stateobj *bso = hwcso; 1053250bacd2411d3f1af50135599380b2140238535Ben Skeggs 1063250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_ref(NULL, &bso->so); 1073250bacd2411d3f1af50135599380b2140238535Ben Skeggs FREE(bso); 10847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 10947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 110866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggsstatic INLINE unsigned 111866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggswrap_mode(unsigned wrap) 112866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs{ 113866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs switch (wrap) { 114866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_WRAP_REPEAT: 115866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs return NV50TSC_1_0_WRAPS_REPEAT; 116866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_WRAP_MIRROR_REPEAT: 117866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs return NV50TSC_1_0_WRAPS_MIRROR_REPEAT; 118866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_WRAP_CLAMP_TO_EDGE: 119866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs return NV50TSC_1_0_WRAPS_CLAMP_TO_EDGE; 120866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_WRAP_CLAMP_TO_BORDER: 121866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs return NV50TSC_1_0_WRAPS_CLAMP_TO_BORDER; 122866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_WRAP_CLAMP: 123866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs return NV50TSC_1_0_WRAPS_CLAMP; 124866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE: 125866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs return NV50TSC_1_0_WRAPS_MIRROR_CLAMP_TO_EDGE; 126866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER: 127866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs return NV50TSC_1_0_WRAPS_MIRROR_CLAMP_TO_BORDER; 128866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_WRAP_MIRROR_CLAMP: 129866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs return NV50TSC_1_0_WRAPS_MIRROR_CLAMP; 130866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs default: 131866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs NOUVEAU_ERR("unknown wrap mode: %d\n", wrap); 132866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs return NV50TSC_1_0_WRAPS_REPEAT; 133866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs } 134866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs} 13547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 13647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_sampler_state_create(struct pipe_context *pipe, 13747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_sampler_state *cso) 13847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 139c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs unsigned *tsc = CALLOC(8, sizeof(unsigned)); 140c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs 141866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[0] = (0x00024000 | 142866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs (wrap_mode(cso->wrap_s) << 0) | 143866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs (wrap_mode(cso->wrap_t) << 3) | 144866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs (wrap_mode(cso->wrap_r) << 6)); 145866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs 146866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs switch (cso->mag_img_filter) { 147866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_FILTER_LINEAR: 148866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MAGF_LINEAR; 149866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 150866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_FILTER_NEAREST: 151866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs default: 152866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MAGF_NEAREST; 153866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 154866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs } 155866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs 156866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs switch (cso->min_img_filter) { 157866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_FILTER_LINEAR: 158866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MINF_LINEAR; 159866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 160866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_FILTER_NEAREST: 161866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs default: 162866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MINF_NEAREST; 163866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 164866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs } 165866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs 166866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs switch (cso->min_mip_filter) { 167866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_MIPFILTER_LINEAR: 168866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MIPF_LINEAR; 169866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 170866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_MIPFILTER_NEAREST: 171866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MIPF_NEAREST; 172866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 173866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_MIPFILTER_NONE: 174866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs default: 175866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MIPF_NONE; 176866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 177866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs } 178c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs 179c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs return (void *)tsc; 18047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 18147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 18247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 1839a4938d7033101122b627786273ff37229b5558aBen Skeggsnv50_sampler_state_bind(struct pipe_context *pipe, unsigned nr, void **sampler) 18447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 185c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 186c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs int i; 187c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs 188c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs nv50->sampler_nr = nr; 189c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs for (i = 0; i < nv50->sampler_nr; i++) 190c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs nv50->sampler[i] = sampler[i]; 191c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs 192c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs nv50->dirty |= NV50_NEW_SAMPLER; 19347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 19447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 19547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 19647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_sampler_state_delete(struct pipe_context *pipe, void *hwcso) 19747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 198c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs FREE(hwcso); 19947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 20047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 20179bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggsstatic void 2029a4938d7033101122b627786273ff37229b5558aBen Skeggsnv50_set_sampler_texture(struct pipe_context *pipe, unsigned nr, 2039a4938d7033101122b627786273ff37229b5558aBen Skeggs struct pipe_texture **pt) 20479bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs{ 205c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 206c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs int i; 207c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs 208c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs for (i = 0; i < nr; i++) 209bf94027fdde51aed476e9bfdd4326aa9040440b0Ben Skeggs pipe_texture_reference((void *)&nv50->miptree[i], pt[i]); 210c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs for (i = nr; i < nv50->miptree_nr; i++) 211bf94027fdde51aed476e9bfdd4326aa9040440b0Ben Skeggs pipe_texture_reference((void *)&nv50->miptree[i], NULL); 212c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs 213c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs nv50->miptree_nr = nr; 214c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs nv50->dirty |= NV50_NEW_TEXTURE; 21579bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs} 21679bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs 21747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 21847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_create(struct pipe_context *pipe, 21947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_rasterizer_state *cso) 22047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 221cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nouveau_stateobj *so = so_new(64, 0); 222cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla; 223cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nv50_rasterizer_stateobj *rso = 224cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs CALLOC_STRUCT(nv50_rasterizer_stateobj); 225cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 226cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs /*XXX: ignored 227cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - light_twosize 228cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - point_smooth 229cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - multisample 230cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - point_sprite / sprite_coord_mode 231cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs */ 232cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 233cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_SHADE_MODEL, 1); 234cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->flatshade ? NV50TCL_SHADE_MODEL_FLAT : 235cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs NV50TCL_SHADE_MODEL_SMOOTH); 236cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 237cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_WIDTH, 1); 238cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, fui(cso->line_width)); 239cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_SMOOTH_ENABLE, 1); 240cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->line_smooth ? 1 : 0); 241cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->line_stipple_enable) { 242cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_STIPPLE_ENABLE, 1); 243cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, 1); 244cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_STIPPLE_PATTERN, 1); 245e52d37d56c91e152bc149230410ed700ff1cffe2Ben Skeggs so_data (so, (cso->line_stipple_pattern << 8) | 246cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs cso->line_stipple_factor); 247cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } else { 248cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_STIPPLE_ENABLE, 1); 249cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, 0); 250cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 251cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 252cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POINT_SIZE, 1); 253cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, fui(cso->point_size)); 254cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 255cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_MODE_FRONT, 3); 256cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->front_winding == PIPE_WINDING_CCW) { 257cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_ccw)); 258cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_cw)); 259cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } else { 260cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_cw)); 261cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_ccw)); 262cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 263cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, cso->poly_smooth ? 1 : 0); 264cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 265cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_CULL_FACE_ENABLE, 3); 266cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->cull_mode != PIPE_WINDING_NONE); 267cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->front_winding == PIPE_WINDING_CCW) { 268cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_FRONT_FACE_CCW); 269cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs switch (cso->cull_mode) { 270cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CCW: 271cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT); 272cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 273cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CW: 274cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 275cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 276cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_BOTH: 277cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT_AND_BACK); 278cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 279cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs default: 280cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 281cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 282cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 283cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } else { 284cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_FRONT_FACE_CW); 285cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs switch (cso->cull_mode) { 286cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CCW: 287cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 288cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 289cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CW: 290cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT); 291cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 292cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_BOTH: 293cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT_AND_BACK); 294cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 295cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs default: 296cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 297cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 298cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 299cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 300cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 301cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_STIPPLE_ENABLE, 1); 302cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->poly_stipple_enable ? 1 : 0); 303cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 304cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_OFFSET_POINT_ENABLE, 3); 305cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_POINT) || 306cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_POINT)) 307cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 1); 308cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs else 309cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 0); 310cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_LINE) || 311cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_LINE)) 312cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 1); 313cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs else 314cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 0); 315cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_FILL) || 316cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_FILL)) 317cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 1); 318cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs else 319cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 0); 320cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 321cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->offset_cw || cso->offset_ccw) { 322cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_OFFSET_FACTOR, 1); 323cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, fui(cso->offset_scale)); 324cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_OFFSET_UNITS, 1); 325fea9eb284248adda65afdc3833385d4b03bb25aaBen Skeggs so_data (so, fui(cso->offset_units)); 326cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 327cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 328cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs rso->pipe = *cso; 329cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_ref(so, &rso->so); 330cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs return (void *)rso; 33147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 33247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 33347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 33447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_bind(struct pipe_context *pipe, void *hwcso) 33547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 336cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 337cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 338cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs nv50->rasterizer = hwcso; 339cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs nv50->dirty |= NV50_NEW_RASTERIZER; 34047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 34147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 34247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 34347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_delete(struct pipe_context *pipe, void *hwcso) 34447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 345cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nv50_rasterizer_stateobj *rso = hwcso; 346cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 347cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_ref(NULL, &rso->so); 348cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs FREE(rso); 34947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 35047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 35147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 3523af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_create(struct pipe_context *pipe, 3533af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs const struct pipe_depth_stencil_alpha_state *cso) 35447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 35506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla; 35606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nv50_zsa_stateobj *zsa = CALLOC_STRUCT(nv50_zsa_stateobj); 35706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nouveau_stateobj *so = so_new(64, 0); 35806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 35906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_WRITE_ENABLE, 1); 3605a3362521de5e17e4f340fd9136af1d5e3891e23Ben Skeggs so_data (so, cso->depth.writemask ? 1 : 0); 361101305f37f7268354a50b825bcb66894e4a0b777Ben Skeggs if (cso->depth.enabled) { 36206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_TEST_ENABLE, 1); 3635a3362521de5e17e4f340fd9136af1d5e3891e23Ben Skeggs so_data (so, 1); 36406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_TEST_FUNC, 1); 36506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->depth.func)); 36606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 36706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_TEST_ENABLE, 1); 36806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 36906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 37006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 37170f0f0ebdfa40de0fe03ca94294d372b9fa4642dBen Skeggs /*XXX: yes, I know they're backwards.. header needs fixing */ 37206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs if (cso->stencil[0].enabled) { 37370f0f0ebdfa40de0fe03ca94294d372b9fa4642dBen Skeggs so_method(so, tesla, NV50TCL_STENCIL_BACK_ENABLE, 5); 37406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 1); 37506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[0].fail_op)); 37606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[0].zfail_op)); 37706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[0].zpass_op)); 37806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->stencil[0].func)); 37970f0f0ebdfa40de0fe03ca94294d372b9fa4642dBen Skeggs so_method(so, tesla, NV50TCL_STENCIL_BACK_FUNC_REF, 3); 38006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[0].ref_value); 38106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[0].write_mask); 38206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[0].value_mask); 38306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 38470f0f0ebdfa40de0fe03ca94294d372b9fa4642dBen Skeggs so_method(so, tesla, NV50TCL_STENCIL_BACK_ENABLE, 1); 38506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 38606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 38706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 38806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs if (cso->stencil[1].enabled) { 38970f0f0ebdfa40de0fe03ca94294d372b9fa4642dBen Skeggs so_method(so, tesla, NV50TCL_STENCIL_FRONT_ENABLE, 8); 39006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 1); 39106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[1].fail_op)); 39206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[1].zfail_op)); 39306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[1].zpass_op)); 39406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->stencil[1].func)); 39506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[1].ref_value); 39606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[1].write_mask); 39706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[1].value_mask); 39806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 39970f0f0ebdfa40de0fe03ca94294d372b9fa4642dBen Skeggs so_method(so, tesla, NV50TCL_STENCIL_FRONT_ENABLE, 1); 40006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 40106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 40206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 40306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs if (cso->alpha.enabled) { 40406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_ALPHA_TEST_ENABLE, 1); 40506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 1); 40606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_ALPHA_TEST_REF, 2); 40706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, fui(cso->alpha.ref)); 40806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->alpha.func)); 40906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 41006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_ALPHA_TEST_ENABLE, 1); 41106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 41206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 41306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 41406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs zsa->pipe = *cso; 41506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_ref(so, &zsa->so); 41606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs return (void *)zsa; 41747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 41847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 41947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 4203af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_bind(struct pipe_context *pipe, void *hwcso) 42147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 42206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 42306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 42406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs nv50->zsa = hwcso; 42506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs nv50->dirty |= NV50_NEW_ZSA; 42647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 42747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 42847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 4293af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_delete(struct pipe_context *pipe, void *hwcso) 43047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 43106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nv50_zsa_stateobj *zsa = hwcso; 43206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 43306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_ref(NULL, &zsa->so); 43406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs FREE(zsa); 43547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 43647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 43747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 43847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_create(struct pipe_context *pipe, 43947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_shader_state *cso) 44047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 441f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_program *p = CALLOC_STRUCT(nv50_program); 442f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 443a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton p->pipe.tokens = tgsi_dup_tokens(cso->tokens); 444b5bbf09c42a9d563984fad875ced5c4814033a3dBen Skeggs p->type = PIPE_SHADER_VERTEX; 445f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs tgsi_scan_shader(p->pipe.tokens, &p->info); 446f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs return (void *)p; 44747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 44847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 44947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 45047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_bind(struct pipe_context *pipe, void *hwcso) 45147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 452f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 453f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 454f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->vertprog = hwcso; 455f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_VERTPROG; 45647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 45747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 45847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 45947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_delete(struct pipe_context *pipe, void *hwcso) 46047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 461f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 462a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton struct nv50_program *p = hwcso; 463f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 464a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton nv50_program_destroy(nv50, p); 465a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton FREE((void*)p->pipe.tokens); 466a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton FREE(p); 46747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 46847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 46947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 47047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_create(struct pipe_context *pipe, 47147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_shader_state *cso) 47247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 473f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_program *p = CALLOC_STRUCT(nv50_program); 474f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 475a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton p->pipe.tokens = tgsi_dup_tokens(cso->tokens); 476b5bbf09c42a9d563984fad875ced5c4814033a3dBen Skeggs p->type = PIPE_SHADER_FRAGMENT; 477f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs tgsi_scan_shader(p->pipe.tokens, &p->info); 478f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs return (void *)p; 47947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 48047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 48147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 48247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_bind(struct pipe_context *pipe, void *hwcso) 48347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 484f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 485f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 486f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->fragprog = hwcso; 487f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_FRAGPROG; 48847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 48947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 49047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 49147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_delete(struct pipe_context *pipe, void *hwcso) 49247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 493f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 494a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton struct nv50_program *p = hwcso; 495f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 496a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton nv50_program_destroy(nv50, p); 497a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton FREE((void*)p->pipe.tokens); 498a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton FREE(p); 49947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 50047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 50147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 50247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_blend_color(struct pipe_context *pipe, 50347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_blend_color *bcol) 50447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 5052fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 5062fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 5072fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->blend_colour = *bcol; 5082fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_BLEND_COLOUR; 50947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 51047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 51147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 51247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_clip_state(struct pipe_context *pipe, 51347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_clip_state *clip) 51447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 51547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 51647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 51747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 51847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index, 51947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_constant_buffer *buf ) 52047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 521f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 522f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 523f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs if (shader == PIPE_SHADER_VERTEX) { 524f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->constbuf[PIPE_SHADER_VERTEX] = buf->buffer; 525716c1cd2ecbc1e86c0fd747c9fa9e095ded5fd5dBen Skeggs nv50->dirty |= NV50_NEW_VERTPROG_CB; 526f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs } else 527f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs if (shader == PIPE_SHADER_FRAGMENT) { 528f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->constbuf[PIPE_SHADER_FRAGMENT] = buf->buffer; 529716c1cd2ecbc1e86c0fd747c9fa9e095ded5fd5dBen Skeggs nv50->dirty |= NV50_NEW_FRAGPROG_CB; 530f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs } 53147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 53247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 53347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 53447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_framebuffer_state(struct pipe_context *pipe, 53547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_framebuffer_state *fb) 53647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 537cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 538cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs 539cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs nv50->framebuffer = *fb; 540cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs nv50->dirty |= NV50_NEW_FRAMEBUFFER; 54147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 54247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 54347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 54447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_polygon_stipple(struct pipe_context *pipe, 54547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_poly_stipple *stipple) 54647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 5472fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 5482fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 5492fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->stipple = *stipple; 5502fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_STIPPLE; 55147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 55247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 55347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 55447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_scissor_state(struct pipe_context *pipe, 55547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_scissor_state *s) 55647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 5572fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 5582fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 5592fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->scissor = *s; 5602fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_SCISSOR; 56147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 56247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 56347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 56447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_viewport_state(struct pipe_context *pipe, 56547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_viewport_state *vpt) 56647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 5672fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 5682fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 5692fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->viewport = *vpt; 5702fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_VIEWPORT; 57147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 57247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 57347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 574bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggsnv50_set_vertex_buffers(struct pipe_context *pipe, unsigned count, 575bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs const struct pipe_vertex_buffer *vb) 57647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 577f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 578f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 579f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs memcpy(nv50->vtxbuf, vb, sizeof(*vb) * count); 580f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->vtxbuf_nr = count; 581f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 582f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_ARRAYS; 58347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 58447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 58547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 586bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggsnv50_set_vertex_elements(struct pipe_context *pipe, unsigned count, 587bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs const struct pipe_vertex_element *ve) 58847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 589f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 590f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 591f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs memcpy(nv50->vtxelt, ve, sizeof(*ve) * count); 592f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->vtxelt_nr = count; 593f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 594f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_ARRAYS; 59547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 59647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 59747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsvoid 59847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_init_state_functions(struct nv50_context *nv50) 59947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 60047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_blend_state = nv50_blend_state_create; 60147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_blend_state = nv50_blend_state_bind; 60247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_blend_state = nv50_blend_state_delete; 60347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 60447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_sampler_state = nv50_sampler_state_create; 6059a4938d7033101122b627786273ff37229b5558aBen Skeggs nv50->pipe.bind_sampler_states = nv50_sampler_state_bind; 60647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_sampler_state = nv50_sampler_state_delete; 6079a4938d7033101122b627786273ff37229b5558aBen Skeggs nv50->pipe.set_sampler_textures = nv50_set_sampler_texture; 60847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 60947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_rasterizer_state = nv50_rasterizer_state_create; 61047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_rasterizer_state = nv50_rasterizer_state_bind; 61147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_rasterizer_state = nv50_rasterizer_state_delete; 61247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 6133af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50->pipe.create_depth_stencil_alpha_state = 6143af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50_depth_stencil_alpha_state_create; 6153af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50->pipe.bind_depth_stencil_alpha_state = 6163af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50_depth_stencil_alpha_state_bind; 6173af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50->pipe.delete_depth_stencil_alpha_state = 6183af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50_depth_stencil_alpha_state_delete; 61947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 62047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_vs_state = nv50_vp_state_create; 62147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_vs_state = nv50_vp_state_bind; 62247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_vs_state = nv50_vp_state_delete; 62347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 62447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_fs_state = nv50_fp_state_create; 62547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_fs_state = nv50_fp_state_bind; 62647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_fs_state = nv50_fp_state_delete; 62747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 62847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_blend_color = nv50_set_blend_color; 62947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_clip_state = nv50_set_clip_state; 63047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_constant_buffer = nv50_set_constant_buffer; 63147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_framebuffer_state = nv50_set_framebuffer_state; 63247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_polygon_stipple = nv50_set_polygon_stipple; 63347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_scissor_state = nv50_set_scissor_state; 63447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_viewport_state = nv50_set_viewport_state; 63547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 636bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs nv50->pipe.set_vertex_buffers = nv50_set_vertex_buffers; 637bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs nv50->pipe.set_vertex_elements = nv50_set_vertex_elements; 63847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 63947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 640