nv50_state.c revision 01670ca8073b57029625873b5c8374fb8716e1eb
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" 25c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs#include "pipe/p_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 3447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 3547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_blend_state_create(struct pipe_context *pipe, 3647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_blend_state *cso) 3747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 383250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nouveau_stateobj *so = so_new(64, 0); 393250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla; 403250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nv50_blend_stateobj *bso = CALLOC_STRUCT(nv50_blend_stateobj); 413250bacd2411d3f1af50135599380b2140238535Ben Skeggs unsigned cmask = 0, i; 423250bacd2411d3f1af50135599380b2140238535Ben Skeggs 433250bacd2411d3f1af50135599380b2140238535Ben Skeggs /*XXX ignored: 443250bacd2411d3f1af50135599380b2140238535Ben Skeggs * - dither 453250bacd2411d3f1af50135599380b2140238535Ben Skeggs */ 463250bacd2411d3f1af50135599380b2140238535Ben Skeggs 473250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->blend_enable == 0) { 483250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_BLEND_ENABLE(0), 8); 493250bacd2411d3f1af50135599380b2140238535Ben Skeggs for (i = 0; i < 8; i++) 503250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data(so, 0); 513250bacd2411d3f1af50135599380b2140238535Ben Skeggs } else { 523250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_BLEND_ENABLE(0), 8); 533250bacd2411d3f1af50135599380b2140238535Ben Skeggs for (i = 0; i < 8; i++) 543250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data(so, 1); 553250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_BLEND_EQUATION_RGB, 5); 563250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, nvgl_blend_eqn(cso->rgb_func)); 574bde3a72ab0b4246cd779a6d1e2a72943f25c0f6Ben Skeggs so_data (so, 0x4000 | nvgl_blend_func(cso->rgb_src_factor)); 584bde3a72ab0b4246cd779a6d1e2a72943f25c0f6Ben Skeggs so_data (so, 0x4000 | nvgl_blend_func(cso->rgb_dst_factor)); 593250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, nvgl_blend_eqn(cso->alpha_func)); 604bde3a72ab0b4246cd779a6d1e2a72943f25c0f6Ben Skeggs so_data (so, 0x4000 | nvgl_blend_func(cso->alpha_src_factor)); 613250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_BLEND_FUNC_DST_ALPHA, 1); 624bde3a72ab0b4246cd779a6d1e2a72943f25c0f6Ben Skeggs so_data (so, 0x4000 | nvgl_blend_func(cso->alpha_dst_factor)); 633250bacd2411d3f1af50135599380b2140238535Ben Skeggs } 643250bacd2411d3f1af50135599380b2140238535Ben Skeggs 653250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->logicop_enable == 0 ) { 663250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_LOGIC_OP_ENABLE, 1); 673250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, 0); 683250bacd2411d3f1af50135599380b2140238535Ben Skeggs } else { 693250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_LOGIC_OP_ENABLE, 2); 703250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, 1); 713250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, nvgl_logicop_func(cso->logicop_func)); 723250bacd2411d3f1af50135599380b2140238535Ben Skeggs } 733250bacd2411d3f1af50135599380b2140238535Ben Skeggs 743250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->colormask & PIPE_MASK_R) 753250bacd2411d3f1af50135599380b2140238535Ben Skeggs cmask |= (1 << 0); 763250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->colormask & PIPE_MASK_G) 773250bacd2411d3f1af50135599380b2140238535Ben Skeggs cmask |= (1 << 4); 783250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->colormask & PIPE_MASK_B) 793250bacd2411d3f1af50135599380b2140238535Ben Skeggs cmask |= (1 << 8); 803250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->colormask & PIPE_MASK_A) 813250bacd2411d3f1af50135599380b2140238535Ben Skeggs cmask |= (1 << 12); 823250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_COLOR_MASK(0), 8); 833250bacd2411d3f1af50135599380b2140238535Ben Skeggs for (i = 0; i < 8; i++) 843250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data(so, cmask); 853250bacd2411d3f1af50135599380b2140238535Ben Skeggs 863250bacd2411d3f1af50135599380b2140238535Ben Skeggs bso->pipe = *cso; 873250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_ref(so, &bso->so); 88ca95d71a4bc63e2ea45abf9096a3da802819ef92Ben Skeggs so_ref(NULL, &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{ 1396c1627a51c237428a79613fcda1412c4660780deBen Skeggs struct nv50_sampler_stateobj *sso = CALLOC(1, sizeof(*sso)); 1406c1627a51c237428a79613fcda1412c4660780deBen Skeggs unsigned *tsc = sso->tsc; 141534f1e8f022ea7408c2ad49013e8f2446aa16364Ben Skeggs float limit; 142c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs 143534f1e8f022ea7408c2ad49013e8f2446aa16364Ben Skeggs tsc[0] = (0x00026000 | 144866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs (wrap_mode(cso->wrap_s) << 0) | 145866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs (wrap_mode(cso->wrap_t) << 3) | 146866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs (wrap_mode(cso->wrap_r) << 6)); 147866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs 148866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs switch (cso->mag_img_filter) { 149866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_FILTER_LINEAR: 150866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MAGF_LINEAR; 151866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 152866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_FILTER_NEAREST: 153866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs default: 154866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MAGF_NEAREST; 155866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 156866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs } 157866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs 158866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs switch (cso->min_img_filter) { 159866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_FILTER_LINEAR: 160866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MINF_LINEAR; 161866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 162866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_FILTER_NEAREST: 163866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs default: 164866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MINF_NEAREST; 165866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 166866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs } 167866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs 168866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs switch (cso->min_mip_filter) { 169866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_MIPFILTER_LINEAR: 170866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MIPF_LINEAR; 171866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 172866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_MIPFILTER_NEAREST: 173866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MIPF_NEAREST; 174866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 175866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs case PIPE_TEX_MIPFILTER_NONE: 176866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs default: 177866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs tsc[1] |= NV50TSC_1_1_MIPF_NONE; 178866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs break; 179866a68dbd1ec9c3a6100de6d50890ac5068247dcBen Skeggs } 180c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs 181f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs if (cso->max_anisotropy >= 16.0) 182f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs tsc[0] |= (7 << 20); 183f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs else 184f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs if (cso->max_anisotropy >= 12.0) 185f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs tsc[0] |= (6 << 20); 186f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs else 187f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs if (cso->max_anisotropy >= 10.0) 188f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs tsc[0] |= (5 << 20); 189f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs else 190f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs if (cso->max_anisotropy >= 8.0) 191f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs tsc[0] |= (4 << 20); 192f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs else 193f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs if (cso->max_anisotropy >= 6.0) 194f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs tsc[0] |= (3 << 20); 195f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs else 196f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs if (cso->max_anisotropy >= 4.0) 197f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs tsc[0] |= (2 << 20); 198f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs else 199f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs if (cso->max_anisotropy >= 2.0) 200f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs tsc[0] |= (1 << 20); 201f7c2010525a3fb37079c2cff51d4c593ef8e807bBen Skeggs 20268bb26b62d87ae6737ba51a4bffda49eeb7647cbBen Skeggs if (cso->compare_mode == PIPE_TEX_COMPARE_R_TO_TEXTURE) { 20368bb26b62d87ae6737ba51a4bffda49eeb7647cbBen Skeggs tsc[0] |= (1 << 8); 20468bb26b62d87ae6737ba51a4bffda49eeb7647cbBen Skeggs tsc[0] |= (nvgl_comparison_op(cso->compare_func) & 0x7); 20568bb26b62d87ae6737ba51a4bffda49eeb7647cbBen Skeggs } 20668bb26b62d87ae6737ba51a4bffda49eeb7647cbBen Skeggs 207534f1e8f022ea7408c2ad49013e8f2446aa16364Ben Skeggs limit = CLAMP(cso->lod_bias, -16.0, 15.0); 208df189c9efc0fbcdce816af483f0147ab635280d1Christoph Bumiller tsc[1] |= ((int)(limit * 256.0) & 0x1fff) << 12; 209534f1e8f022ea7408c2ad49013e8f2446aa16364Ben Skeggs 210534f1e8f022ea7408c2ad49013e8f2446aa16364Ben Skeggs tsc[2] |= ((int)CLAMP(cso->max_lod, 0.0, 15.0) << 20) | 211534f1e8f022ea7408c2ad49013e8f2446aa16364Ben Skeggs ((int)CLAMP(cso->min_lod, 0.0, 15.0) << 8); 212534f1e8f022ea7408c2ad49013e8f2446aa16364Ben Skeggs 213df189c9efc0fbcdce816af483f0147ab635280d1Christoph Bumiller tsc[4] = fui(cso->border_color[0]); 214df189c9efc0fbcdce816af483f0147ab635280d1Christoph Bumiller tsc[5] = fui(cso->border_color[1]); 215df189c9efc0fbcdce816af483f0147ab635280d1Christoph Bumiller tsc[6] = fui(cso->border_color[2]); 216df189c9efc0fbcdce816af483f0147ab635280d1Christoph Bumiller tsc[7] = fui(cso->border_color[3]); 217df189c9efc0fbcdce816af483f0147ab635280d1Christoph Bumiller 2186c1627a51c237428a79613fcda1412c4660780deBen Skeggs sso->normalized = cso->normalized_coords; 2196c1627a51c237428a79613fcda1412c4660780deBen Skeggs return (void *)sso; 22047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 22147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 22247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 2239a4938d7033101122b627786273ff37229b5558aBen Skeggsnv50_sampler_state_bind(struct pipe_context *pipe, unsigned nr, void **sampler) 22447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 225c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 226c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs int i; 227c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs 228c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs nv50->sampler_nr = nr; 229c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs for (i = 0; i < nv50->sampler_nr; i++) 230c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs nv50->sampler[i] = sampler[i]; 231c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs 232c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs nv50->dirty |= NV50_NEW_SAMPLER; 23347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 23447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 23547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 23647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_sampler_state_delete(struct pipe_context *pipe, void *hwcso) 23747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 238c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs FREE(hwcso); 23947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 24047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 24179bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggsstatic void 2429a4938d7033101122b627786273ff37229b5558aBen Skeggsnv50_set_sampler_texture(struct pipe_context *pipe, unsigned nr, 2439a4938d7033101122b627786273ff37229b5558aBen Skeggs struct pipe_texture **pt) 24479bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs{ 245c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 246c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs int i; 247c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs 248c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs for (i = 0; i < nr; i++) 249bf94027fdde51aed476e9bfdd4326aa9040440b0Ben Skeggs pipe_texture_reference((void *)&nv50->miptree[i], pt[i]); 250c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs for (i = nr; i < nv50->miptree_nr; i++) 251bf94027fdde51aed476e9bfdd4326aa9040440b0Ben Skeggs pipe_texture_reference((void *)&nv50->miptree[i], NULL); 252c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs 253c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs nv50->miptree_nr = nr; 254c0ed6a871cd3513e17a1fab960f5626485ffed13Ben Skeggs nv50->dirty |= NV50_NEW_TEXTURE; 25579bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs} 25679bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs 25747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 25847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_create(struct pipe_context *pipe, 25947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_rasterizer_state *cso) 26047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 261cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nouveau_stateobj *so = so_new(64, 0); 262cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla; 263cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nv50_rasterizer_stateobj *rso = 264cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs CALLOC_STRUCT(nv50_rasterizer_stateobj); 265cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 266cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs /*XXX: ignored 267cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - light_twosize 268cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - point_smooth 269cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - multisample 270cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - point_sprite / sprite_coord_mode 271cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs */ 272cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 273cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_SHADE_MODEL, 1); 274cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->flatshade ? NV50TCL_SHADE_MODEL_FLAT : 275cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs NV50TCL_SHADE_MODEL_SMOOTH); 2768313801911426a9a7b0bdbf2d6a4b2232428cc5bChristoph Bumiller so_method(so, tesla, 0x1684, 1); 2778313801911426a9a7b0bdbf2d6a4b2232428cc5bChristoph Bumiller so_data (so, cso->flatshade_first ? 0 : 1); 278cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 2794d7b4781c82c60d646ee5e766824a0f894e4c292Christoph Bumiller so_method(so, tesla, NV50TCL_VERTEX_TWO_SIDE_ENABLE, 1); 2804d7b4781c82c60d646ee5e766824a0f894e4c292Christoph Bumiller so_data (so, cso->light_twoside); 2814d7b4781c82c60d646ee5e766824a0f894e4c292Christoph Bumiller 282cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_WIDTH, 1); 283cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, fui(cso->line_width)); 284cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_SMOOTH_ENABLE, 1); 285cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->line_smooth ? 1 : 0); 286cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->line_stipple_enable) { 287cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_STIPPLE_ENABLE, 1); 288cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, 1); 289cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_STIPPLE_PATTERN, 1); 290e52d37d56c91e152bc149230410ed700ff1cffe2Ben Skeggs so_data (so, (cso->line_stipple_pattern << 8) | 291cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs cso->line_stipple_factor); 292cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } else { 293cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_STIPPLE_ENABLE, 1); 294cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, 0); 295cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 296cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 297cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POINT_SIZE, 1); 298cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, fui(cso->point_size)); 299cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 30001670ca8073b57029625873b5c8374fb8716e1ebChristoph Bumiller so_method(so, tesla, NV50TCL_POINT_SPRITE_ENABLE, 1); 30101670ca8073b57029625873b5c8374fb8716e1ebChristoph Bumiller so_data (so, cso->point_sprite); 30201670ca8073b57029625873b5c8374fb8716e1ebChristoph Bumiller 303cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_MODE_FRONT, 3); 304cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->front_winding == PIPE_WINDING_CCW) { 305cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_ccw)); 306cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_cw)); 307cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } else { 308cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_cw)); 309cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_ccw)); 310cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 311cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, cso->poly_smooth ? 1 : 0); 312cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 313cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_CULL_FACE_ENABLE, 3); 314cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->cull_mode != PIPE_WINDING_NONE); 315cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->front_winding == PIPE_WINDING_CCW) { 316cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_FRONT_FACE_CCW); 317cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs switch (cso->cull_mode) { 318cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CCW: 319cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT); 320cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 321cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CW: 322cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 323cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 324cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_BOTH: 325cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT_AND_BACK); 326cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 327cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs default: 328cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 329cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 330cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 331cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } else { 332cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_FRONT_FACE_CW); 333cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs switch (cso->cull_mode) { 334cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CCW: 335cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 336cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 337cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CW: 338cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT); 339cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 340cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_BOTH: 341cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT_AND_BACK); 342cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 343cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs default: 344cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 345cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 346cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 347cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 348cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 349cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_STIPPLE_ENABLE, 1); 350cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->poly_stipple_enable ? 1 : 0); 351cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 352cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_OFFSET_POINT_ENABLE, 3); 353cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_POINT) || 354cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_POINT)) 355cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 1); 356cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs else 357cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 0); 358cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_LINE) || 359cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_LINE)) 360cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 1); 361cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs else 362cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 0); 363cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_FILL) || 364cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_FILL)) 365cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 1); 366cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs else 367cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 0); 368cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 369cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->offset_cw || cso->offset_ccw) { 370cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_OFFSET_FACTOR, 1); 371cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, fui(cso->offset_scale)); 372cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_OFFSET_UNITS, 1); 373fea9eb284248adda65afdc3833385d4b03bb25aaBen Skeggs so_data (so, fui(cso->offset_units)); 374cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 375cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 376cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs rso->pipe = *cso; 377cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_ref(so, &rso->so); 378ca95d71a4bc63e2ea45abf9096a3da802819ef92Ben Skeggs so_ref(NULL, &so); 379cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs return (void *)rso; 38047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 38147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 38247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 38347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_bind(struct pipe_context *pipe, void *hwcso) 38447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 385cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 386cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 387cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs nv50->rasterizer = hwcso; 388cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs nv50->dirty |= NV50_NEW_RASTERIZER; 38947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 39047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 39147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 39247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_delete(struct pipe_context *pipe, void *hwcso) 39347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 394cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nv50_rasterizer_stateobj *rso = hwcso; 395cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 396cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_ref(NULL, &rso->so); 397cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs FREE(rso); 39847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 39947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 40047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 4013af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_create(struct pipe_context *pipe, 4023af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs const struct pipe_depth_stencil_alpha_state *cso) 40347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 40406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla; 40506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nv50_zsa_stateobj *zsa = CALLOC_STRUCT(nv50_zsa_stateobj); 40606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nouveau_stateobj *so = so_new(64, 0); 40706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 40806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_WRITE_ENABLE, 1); 4095a3362521de5e17e4f340fd9136af1d5e3891e23Ben Skeggs so_data (so, cso->depth.writemask ? 1 : 0); 410101305f37f7268354a50b825bcb66894e4a0b777Ben Skeggs if (cso->depth.enabled) { 41106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_TEST_ENABLE, 1); 4125a3362521de5e17e4f340fd9136af1d5e3891e23Ben Skeggs so_data (so, 1); 41306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_TEST_FUNC, 1); 41406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->depth.func)); 41506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 41606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_TEST_ENABLE, 1); 41706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 41806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 41906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 4200204c7d8d712c1023b6d75f2f50b0e89d7777de8Christoph Bumiller /* XXX: keep hex values until header is updated (names reversed) */ 42106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs if (cso->stencil[0].enabled) { 4220204c7d8d712c1023b6d75f2f50b0e89d7777de8Christoph Bumiller so_method(so, tesla, 0x1380, 8); 42306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 1); 42406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[0].fail_op)); 42506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[0].zfail_op)); 42606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[0].zpass_op)); 42706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->stencil[0].func)); 42806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[0].ref_value); 429a7e72231e3c76a9410d192441da309002ea6422dZack Rusin so_data (so, cso->stencil[0].writemask); 430a7e72231e3c76a9410d192441da309002ea6422dZack Rusin so_data (so, cso->stencil[0].valuemask); 43106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 4320204c7d8d712c1023b6d75f2f50b0e89d7777de8Christoph Bumiller so_method(so, tesla, 0x1380, 1); 43306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 43406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 43506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 43606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs if (cso->stencil[1].enabled) { 4370204c7d8d712c1023b6d75f2f50b0e89d7777de8Christoph Bumiller so_method(so, tesla, 0x1594, 5); 43806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 1); 43906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[1].fail_op)); 44006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[1].zfail_op)); 44106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[1].zpass_op)); 44206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->stencil[1].func)); 4430204c7d8d712c1023b6d75f2f50b0e89d7777de8Christoph Bumiller so_method(so, tesla, 0x0f54, 3); 44406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[1].ref_value); 445a7e72231e3c76a9410d192441da309002ea6422dZack Rusin so_data (so, cso->stencil[1].writemask); 446a7e72231e3c76a9410d192441da309002ea6422dZack Rusin so_data (so, cso->stencil[1].valuemask); 44706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 4480204c7d8d712c1023b6d75f2f50b0e89d7777de8Christoph Bumiller so_method(so, tesla, 0x1594, 1); 44906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 45006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 45106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 45206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs if (cso->alpha.enabled) { 45306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_ALPHA_TEST_ENABLE, 1); 45406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 1); 45506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_ALPHA_TEST_REF, 2); 456d6888e811d24eaa7e8d9093be606394f00435c05Zack Rusin so_data (so, fui(cso->alpha.ref_value)); 45706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->alpha.func)); 45806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 45906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_ALPHA_TEST_ENABLE, 1); 46006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 46106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 46206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 46306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs zsa->pipe = *cso; 46406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_ref(so, &zsa->so); 465ca95d71a4bc63e2ea45abf9096a3da802819ef92Ben Skeggs so_ref(NULL, &so); 46606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs return (void *)zsa; 46747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 46847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 46947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 4703af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_bind(struct pipe_context *pipe, void *hwcso) 47147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 47206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 47306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 47406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs nv50->zsa = hwcso; 47506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs nv50->dirty |= NV50_NEW_ZSA; 47647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 47747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 47847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 4793af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_delete(struct pipe_context *pipe, void *hwcso) 48047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 48106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nv50_zsa_stateobj *zsa = hwcso; 48206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 48306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_ref(NULL, &zsa->so); 48406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs FREE(zsa); 48547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 48647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 48747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 48847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_create(struct pipe_context *pipe, 48947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_shader_state *cso) 49047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 491f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_program *p = CALLOC_STRUCT(nv50_program); 492f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 493a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton p->pipe.tokens = tgsi_dup_tokens(cso->tokens); 494b5bbf09c42a9d563984fad875ced5c4814033a3dBen Skeggs p->type = PIPE_SHADER_VERTEX; 495f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs tgsi_scan_shader(p->pipe.tokens, &p->info); 496f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs return (void *)p; 49747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 49847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 49947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 50047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_bind(struct pipe_context *pipe, void *hwcso) 50147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 502f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 503f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 504f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->vertprog = hwcso; 505f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_VERTPROG; 50647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 50747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 50847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 50947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_delete(struct pipe_context *pipe, void *hwcso) 51047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 511f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 512a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton struct nv50_program *p = hwcso; 513f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 514a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton nv50_program_destroy(nv50, p); 515a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton FREE((void*)p->pipe.tokens); 516a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton FREE(p); 51747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 51847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 51947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 52047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_create(struct pipe_context *pipe, 52147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_shader_state *cso) 52247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 523f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_program *p = CALLOC_STRUCT(nv50_program); 524f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 525a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton p->pipe.tokens = tgsi_dup_tokens(cso->tokens); 526b5bbf09c42a9d563984fad875ced5c4814033a3dBen Skeggs p->type = PIPE_SHADER_FRAGMENT; 527f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs tgsi_scan_shader(p->pipe.tokens, &p->info); 528f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs return (void *)p; 52947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 53047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 53147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 53247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_bind(struct pipe_context *pipe, void *hwcso) 53347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 534f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 535f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 536f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->fragprog = hwcso; 537f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_FRAGPROG; 53847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 53947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 54047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 54147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_delete(struct pipe_context *pipe, void *hwcso) 54247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 543f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 544a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton struct nv50_program *p = hwcso; 545f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 546a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton nv50_program_destroy(nv50, p); 547a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton FREE((void*)p->pipe.tokens); 548a8da04cb861b8f9caf3acd33f52f64621f0c15e2Younes Manton FREE(p); 54947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 55047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 55147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 55247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_blend_color(struct pipe_context *pipe, 55347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_blend_color *bcol) 55447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 5552fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 5562fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 5572fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->blend_colour = *bcol; 5582fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_BLEND_COLOUR; 55947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 56047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 56147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 56247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_clip_state(struct pipe_context *pipe, 56347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_clip_state *clip) 56447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 56547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 56647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 56747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 56847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index, 56947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_constant_buffer *buf ) 57047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 571f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 572f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 573f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs if (shader == PIPE_SHADER_VERTEX) { 574f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->constbuf[PIPE_SHADER_VERTEX] = buf->buffer; 575716c1cd2ecbc1e86c0fd747c9fa9e095ded5fd5dBen Skeggs nv50->dirty |= NV50_NEW_VERTPROG_CB; 576f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs } else 577f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs if (shader == PIPE_SHADER_FRAGMENT) { 578f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->constbuf[PIPE_SHADER_FRAGMENT] = buf->buffer; 579716c1cd2ecbc1e86c0fd747c9fa9e095ded5fd5dBen Skeggs nv50->dirty |= NV50_NEW_FRAGPROG_CB; 580f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs } 58147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 58247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 58347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 58447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_framebuffer_state(struct pipe_context *pipe, 58547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_framebuffer_state *fb) 58647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 587cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 588cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs 589cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs nv50->framebuffer = *fb; 590cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs nv50->dirty |= NV50_NEW_FRAMEBUFFER; 59147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 59247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 59347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 59447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_polygon_stipple(struct pipe_context *pipe, 59547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_poly_stipple *stipple) 59647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 5972fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 5982fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 5992fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->stipple = *stipple; 6002fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_STIPPLE; 60147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 60247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 60347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 60447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_scissor_state(struct pipe_context *pipe, 60547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_scissor_state *s) 60647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 6072fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 6082fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 6092fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->scissor = *s; 6102fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_SCISSOR; 61147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 61247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 61347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 61447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_viewport_state(struct pipe_context *pipe, 61547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_viewport_state *vpt) 61647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 6172fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 6182fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 6192fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->viewport = *vpt; 6202fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_VIEWPORT; 62147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 62247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 62347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 624bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggsnv50_set_vertex_buffers(struct pipe_context *pipe, unsigned count, 625bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs const struct pipe_vertex_buffer *vb) 62647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 627f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 628f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 629f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs memcpy(nv50->vtxbuf, vb, sizeof(*vb) * count); 630f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->vtxbuf_nr = count; 631f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 632f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_ARRAYS; 63347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 63447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 63547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 636bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggsnv50_set_vertex_elements(struct pipe_context *pipe, unsigned count, 637bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs const struct pipe_vertex_element *ve) 63847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 639f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 640f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 641f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs memcpy(nv50->vtxelt, ve, sizeof(*ve) * count); 642f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->vtxelt_nr = count; 643f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 644f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_ARRAYS; 64547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 64647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 64747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsvoid 64847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_init_state_functions(struct nv50_context *nv50) 64947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 65047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_blend_state = nv50_blend_state_create; 65147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_blend_state = nv50_blend_state_bind; 65247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_blend_state = nv50_blend_state_delete; 65347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 65447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_sampler_state = nv50_sampler_state_create; 6559a4938d7033101122b627786273ff37229b5558aBen Skeggs nv50->pipe.bind_sampler_states = nv50_sampler_state_bind; 65647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_sampler_state = nv50_sampler_state_delete; 6579a4938d7033101122b627786273ff37229b5558aBen Skeggs nv50->pipe.set_sampler_textures = nv50_set_sampler_texture; 65847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 65947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_rasterizer_state = nv50_rasterizer_state_create; 66047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_rasterizer_state = nv50_rasterizer_state_bind; 66147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_rasterizer_state = nv50_rasterizer_state_delete; 66247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 6633af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50->pipe.create_depth_stencil_alpha_state = 6643af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50_depth_stencil_alpha_state_create; 6653af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50->pipe.bind_depth_stencil_alpha_state = 6663af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50_depth_stencil_alpha_state_bind; 6673af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50->pipe.delete_depth_stencil_alpha_state = 6683af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50_depth_stencil_alpha_state_delete; 66947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 67047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_vs_state = nv50_vp_state_create; 67147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_vs_state = nv50_vp_state_bind; 67247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_vs_state = nv50_vp_state_delete; 67347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 67447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_fs_state = nv50_fp_state_create; 67547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_fs_state = nv50_fp_state_bind; 67647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_fs_state = nv50_fp_state_delete; 67747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 67847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_blend_color = nv50_set_blend_color; 67947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_clip_state = nv50_set_clip_state; 68047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_constant_buffer = nv50_set_constant_buffer; 68147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_framebuffer_state = nv50_set_framebuffer_state; 68247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_polygon_stipple = nv50_set_polygon_stipple; 68347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_scissor_state = nv50_set_scissor_state; 68447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_viewport_state = nv50_set_viewport_state; 68547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 686bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs nv50->pipe.set_vertex_buffers = nv50_set_vertex_buffers; 687bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs nv50->pipe.set_vertex_elements = nv50_set_vertex_elements; 68847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 68947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 690