nv50_state.c revision 716c1cd2ecbc1e86c0fd747c9fa9e095ded5fd5d
147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs#include "pipe/p_state.h" 247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs#include "pipe/p_defines.h" 347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs#include "pipe/p_util.h" 447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs#include "nv50_context.h" 647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs#include "nv50_state.h" 747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 83250bacd2411d3f1af50135599380b2140238535Ben Skeggs#include "nouveau/nouveau_stateobj.h" 93250bacd2411d3f1af50135599380b2140238535Ben Skeggs 1047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 1147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_blend_state_create(struct pipe_context *pipe, 1247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_blend_state *cso) 1347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 143250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nouveau_stateobj *so = so_new(64, 0); 153250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla; 163250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nv50_blend_stateobj *bso = CALLOC_STRUCT(nv50_blend_stateobj); 173250bacd2411d3f1af50135599380b2140238535Ben Skeggs unsigned cmask = 0, i; 183250bacd2411d3f1af50135599380b2140238535Ben Skeggs 193250bacd2411d3f1af50135599380b2140238535Ben Skeggs /*XXX ignored: 203250bacd2411d3f1af50135599380b2140238535Ben Skeggs * - dither 213250bacd2411d3f1af50135599380b2140238535Ben Skeggs */ 223250bacd2411d3f1af50135599380b2140238535Ben Skeggs 233250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->blend_enable == 0) { 243250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_BLEND_ENABLE(0), 8); 253250bacd2411d3f1af50135599380b2140238535Ben Skeggs for (i = 0; i < 8; i++) 263250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data(so, 0); 273250bacd2411d3f1af50135599380b2140238535Ben Skeggs } else { 283250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_BLEND_ENABLE(0), 8); 293250bacd2411d3f1af50135599380b2140238535Ben Skeggs for (i = 0; i < 8; i++) 303250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data(so, 1); 313250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_BLEND_EQUATION_RGB, 5); 323250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, nvgl_blend_eqn(cso->rgb_func)); 333250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, nvgl_blend_func(cso->rgb_src_factor)); 343250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, nvgl_blend_func(cso->rgb_dst_factor)); 353250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, nvgl_blend_eqn(cso->alpha_func)); 363250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, nvgl_blend_func(cso->alpha_src_factor)); 373250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_BLEND_FUNC_DST_ALPHA, 1); 383250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, nvgl_blend_func(cso->alpha_dst_factor)); 393250bacd2411d3f1af50135599380b2140238535Ben Skeggs } 403250bacd2411d3f1af50135599380b2140238535Ben Skeggs 413250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->logicop_enable == 0 ) { 423250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_LOGIC_OP_ENABLE, 1); 433250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, 0); 443250bacd2411d3f1af50135599380b2140238535Ben Skeggs } else { 453250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_LOGIC_OP_ENABLE, 2); 463250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, 1); 473250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, nvgl_logicop_func(cso->logicop_func)); 483250bacd2411d3f1af50135599380b2140238535Ben Skeggs } 493250bacd2411d3f1af50135599380b2140238535Ben Skeggs 503250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->colormask & PIPE_MASK_R) 513250bacd2411d3f1af50135599380b2140238535Ben Skeggs cmask |= (1 << 0); 523250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->colormask & PIPE_MASK_G) 533250bacd2411d3f1af50135599380b2140238535Ben Skeggs cmask |= (1 << 4); 543250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->colormask & PIPE_MASK_B) 553250bacd2411d3f1af50135599380b2140238535Ben Skeggs cmask |= (1 << 8); 563250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->colormask & PIPE_MASK_A) 573250bacd2411d3f1af50135599380b2140238535Ben Skeggs cmask |= (1 << 12); 583250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_COLOR_MASK(0), 8); 593250bacd2411d3f1af50135599380b2140238535Ben Skeggs for (i = 0; i < 8; i++) 603250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data(so, cmask); 613250bacd2411d3f1af50135599380b2140238535Ben Skeggs 623250bacd2411d3f1af50135599380b2140238535Ben Skeggs bso->pipe = *cso; 633250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_ref(so, &bso->so); 643250bacd2411d3f1af50135599380b2140238535Ben Skeggs return (void *)bso; 6547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 6647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 6747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 6847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_blend_state_bind(struct pipe_context *pipe, void *hwcso) 6947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 703250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 713250bacd2411d3f1af50135599380b2140238535Ben Skeggs 723250bacd2411d3f1af50135599380b2140238535Ben Skeggs nv50->blend = hwcso; 733250bacd2411d3f1af50135599380b2140238535Ben Skeggs nv50->dirty |= NV50_NEW_BLEND; 7447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 7547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 7647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 7747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_blend_state_delete(struct pipe_context *pipe, void *hwcso) 7847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 793250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nv50_blend_stateobj *bso = hwcso; 803250bacd2411d3f1af50135599380b2140238535Ben Skeggs 813250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_ref(NULL, &bso->so); 823250bacd2411d3f1af50135599380b2140238535Ben Skeggs FREE(bso); 8347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 8447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 8547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 8647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_sampler_state_create(struct pipe_context *pipe, 8747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_sampler_state *cso) 8847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 8979bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs return NULL; 9047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 9147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 9247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 939a4938d7033101122b627786273ff37229b5558aBen Skeggsnv50_sampler_state_bind(struct pipe_context *pipe, unsigned nr, void **sampler) 9447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 9547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 9647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 9747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 9847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_sampler_state_delete(struct pipe_context *pipe, void *hwcso) 9947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 10047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 10147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 10279bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggsstatic void 1039a4938d7033101122b627786273ff37229b5558aBen Skeggsnv50_set_sampler_texture(struct pipe_context *pipe, unsigned nr, 1049a4938d7033101122b627786273ff37229b5558aBen Skeggs struct pipe_texture **pt) 10579bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs{ 10679bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs} 10779bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs 10847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 10947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_create(struct pipe_context *pipe, 11047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_rasterizer_state *cso) 11147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 112cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nouveau_stateobj *so = so_new(64, 0); 113cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla; 114cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nv50_rasterizer_stateobj *rso = 115cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs CALLOC_STRUCT(nv50_rasterizer_stateobj); 116cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 117cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs /*XXX: ignored 118cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - light_twosize 119cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - point_smooth 120cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - multisample 121cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - point_sprite / sprite_coord_mode 122cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs */ 123cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 124cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_SHADE_MODEL, 1); 125cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->flatshade ? NV50TCL_SHADE_MODEL_FLAT : 126cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs NV50TCL_SHADE_MODEL_SMOOTH); 127cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 128cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_WIDTH, 1); 129cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, fui(cso->line_width)); 130cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_SMOOTH_ENABLE, 1); 131cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->line_smooth ? 1 : 0); 132cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->line_stipple_enable) { 133cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_STIPPLE_ENABLE, 1); 134cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, 1); 135cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_STIPPLE_PATTERN, 1); 136cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, (cso->line_stipple_pattern << 16) | 137cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs cso->line_stipple_factor); 138cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } else { 139cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_STIPPLE_ENABLE, 1); 140cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, 0); 141cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 142cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 143cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POINT_SIZE, 1); 144cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, fui(cso->point_size)); 145cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 146cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_MODE_FRONT, 3); 147cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->front_winding == PIPE_WINDING_CCW) { 148cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_ccw)); 149cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_cw)); 150cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } else { 151cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_cw)); 152cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_ccw)); 153cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 154cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, cso->poly_smooth ? 1 : 0); 155cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 156cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_CULL_FACE_ENABLE, 3); 157cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->cull_mode != PIPE_WINDING_NONE); 158cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->front_winding == PIPE_WINDING_CCW) { 159cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_FRONT_FACE_CCW); 160cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs switch (cso->cull_mode) { 161cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CCW: 162cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT); 163cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 164cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CW: 165cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 166cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 167cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_BOTH: 168cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT_AND_BACK); 169cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 170cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs default: 171cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 172cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 173cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 174cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } else { 175cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_FRONT_FACE_CW); 176cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs switch (cso->cull_mode) { 177cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CCW: 178cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 179cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 180cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CW: 181cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT); 182cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 183cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_BOTH: 184cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT_AND_BACK); 185cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 186cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs default: 187cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 188cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 189cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 190cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 191cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 192cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_STIPPLE_ENABLE, 1); 193cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->poly_stipple_enable ? 1 : 0); 194cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 195cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_OFFSET_POINT_ENABLE, 3); 196cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_POINT) || 197cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_POINT)) 198cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 1); 199cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs else 200cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 0); 201cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_LINE) || 202cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_LINE)) 203cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 1); 204cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs else 205cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 0); 206cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_FILL) || 207cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_FILL)) 208cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 1); 209cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs else 210cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 0); 211cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 212cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->offset_cw || cso->offset_ccw) { 213cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_OFFSET_FACTOR, 1); 214cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, fui(cso->offset_scale)); 215cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_OFFSET_UNITS, 1); 216cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, fui(cso->offset_units * 2)); 217cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 218cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 219cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs rso->pipe = *cso; 220cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_ref(so, &rso->so); 221cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs return (void *)rso; 22247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 22347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 22447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 22547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_bind(struct pipe_context *pipe, void *hwcso) 22647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 227cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 228cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 229cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs nv50->rasterizer = hwcso; 230cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs nv50->dirty |= NV50_NEW_RASTERIZER; 23147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 23247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 23347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 23447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_delete(struct pipe_context *pipe, void *hwcso) 23547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 236cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nv50_rasterizer_stateobj *rso = hwcso; 237cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 238cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_ref(NULL, &rso->so); 239cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs FREE(rso); 24047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 24147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 24247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 2433af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_create(struct pipe_context *pipe, 2443af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs const struct pipe_depth_stencil_alpha_state *cso) 24547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 24606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla; 24706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nv50_zsa_stateobj *zsa = CALLOC_STRUCT(nv50_zsa_stateobj); 24806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nouveau_stateobj *so = so_new(64, 0); 24906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 25006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_WRITE_ENABLE, 1); 251f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs so_data (so, 0); //cso->depth.writemask ? 1 : 0); 252f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs if (0 && cso->depth.enabled) { 25306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_TEST_ENABLE, 1); 25406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 1); 25506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_TEST_FUNC, 1); 25606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->depth.func)); 25706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 25806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_TEST_ENABLE, 1); 25906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 26006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 26106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 26206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs if (cso->stencil[0].enabled) { 26306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_STENCIL_FRONT_ENABLE, 5); 26406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 1); 26506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[0].fail_op)); 26606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[0].zfail_op)); 26706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[0].zpass_op)); 26806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->stencil[0].func)); 26906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_STENCIL_FRONT_FUNC_REF, 3); 27006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[0].ref_value); 27106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[0].write_mask); 27206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[0].value_mask); 27306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 27406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_STENCIL_FRONT_ENABLE, 1); 27506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 27606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 27706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 27806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs if (cso->stencil[1].enabled) { 27906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_STENCIL_BACK_ENABLE, 8); 28006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 1); 28106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[1].fail_op)); 28206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[1].zfail_op)); 28306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[1].zpass_op)); 28406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->stencil[1].func)); 28506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[1].ref_value); 28606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[1].write_mask); 28706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[1].value_mask); 28806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 28906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_STENCIL_BACK_ENABLE, 1); 29006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 29106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 29206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 29306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs if (cso->alpha.enabled) { 29406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_ALPHA_TEST_ENABLE, 1); 29506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 1); 29606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_ALPHA_TEST_REF, 2); 29706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, fui(cso->alpha.ref)); 29806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->alpha.func)); 29906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 30006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_ALPHA_TEST_ENABLE, 1); 30106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 30206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 30306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 30406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs zsa->pipe = *cso; 30506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_ref(so, &zsa->so); 30606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs return (void *)zsa; 30747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 30847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 30947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 3103af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_bind(struct pipe_context *pipe, void *hwcso) 31147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 31206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 31306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 31406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs nv50->zsa = hwcso; 31506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs nv50->dirty |= NV50_NEW_ZSA; 31647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 31747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 31847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 3193af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_delete(struct pipe_context *pipe, void *hwcso) 32047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 32106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nv50_zsa_stateobj *zsa = hwcso; 32206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 32306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_ref(NULL, &zsa->so); 32406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs FREE(zsa); 32547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 32647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 32747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 32847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_create(struct pipe_context *pipe, 32947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_shader_state *cso) 33047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 331f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_program *p = CALLOC_STRUCT(nv50_program); 332f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 333f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs p->pipe = *cso; 334f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs tgsi_scan_shader(p->pipe.tokens, &p->info); 335f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs return (void *)p; 33647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 33747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 33847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 33947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_bind(struct pipe_context *pipe, void *hwcso) 34047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 341f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 342f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 343f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->vertprog = hwcso; 344f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_VERTPROG; 34547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 34647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 34747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 34847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_delete(struct pipe_context *pipe, void *hwcso) 34947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 350f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 351f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 352f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50_program_destroy(nv50, hwcso); 353f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs FREE(hwcso); 35447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 35547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 35647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 35747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_create(struct pipe_context *pipe, 35847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_shader_state *cso) 35947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 360f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_program *p = CALLOC_STRUCT(nv50_program); 361f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 362f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs p->pipe = *cso; 363f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs tgsi_scan_shader(p->pipe.tokens, &p->info); 364f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs return (void *)p; 36547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 36647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 36747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 36847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_bind(struct pipe_context *pipe, void *hwcso) 36947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 370f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 371f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 372f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->fragprog = hwcso; 373f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_FRAGPROG; 37447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 37547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 37647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 37747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_delete(struct pipe_context *pipe, void *hwcso) 37847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 379f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 380f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 381f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50_program_destroy(nv50, hwcso); 382f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs FREE(hwcso); 38347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 38447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 38547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 38647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_blend_color(struct pipe_context *pipe, 38747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_blend_color *bcol) 38847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 3892fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 3902fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 3912fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->blend_colour = *bcol; 3922fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_BLEND_COLOUR; 39347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 39447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 39547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 39647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_clip_state(struct pipe_context *pipe, 39747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_clip_state *clip) 39847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 39947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 40047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 40147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 40247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index, 40347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_constant_buffer *buf ) 40447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 405f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 406f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 407f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs if (shader == PIPE_SHADER_VERTEX) { 408f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->constbuf[PIPE_SHADER_VERTEX] = buf->buffer; 409716c1cd2ecbc1e86c0fd747c9fa9e095ded5fd5dBen Skeggs nv50->dirty |= NV50_NEW_VERTPROG_CB; 410f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs } else 411f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs if (shader == PIPE_SHADER_FRAGMENT) { 412f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->constbuf[PIPE_SHADER_FRAGMENT] = buf->buffer; 413716c1cd2ecbc1e86c0fd747c9fa9e095ded5fd5dBen Skeggs nv50->dirty |= NV50_NEW_FRAGPROG_CB; 414f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs } 41547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 41647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 41747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 41847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_framebuffer_state(struct pipe_context *pipe, 41947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_framebuffer_state *fb) 42047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 421cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 422cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs 423cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs nv50->framebuffer = *fb; 424cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs nv50->dirty |= NV50_NEW_FRAMEBUFFER; 42547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 42647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 42747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 42847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_polygon_stipple(struct pipe_context *pipe, 42947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_poly_stipple *stipple) 43047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 4312fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 4322fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 4332fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->stipple = *stipple; 4342fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_STIPPLE; 43547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 43647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 43747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 43847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_scissor_state(struct pipe_context *pipe, 43947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_scissor_state *s) 44047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 4412fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 4422fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 4432fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->scissor = *s; 4442fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_SCISSOR; 44547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 44647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 44747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 44847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_viewport_state(struct pipe_context *pipe, 44947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_viewport_state *vpt) 45047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 4512fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 4522fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 4532fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->viewport = *vpt; 4542fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_VIEWPORT; 45547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 45647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 45747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 458bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggsnv50_set_vertex_buffers(struct pipe_context *pipe, unsigned count, 459bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs const struct pipe_vertex_buffer *vb) 46047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 461f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 462f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 463f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs memcpy(nv50->vtxbuf, vb, sizeof(*vb) * count); 464f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->vtxbuf_nr = count; 465f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 466f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_ARRAYS; 46747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 46847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 46947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 470bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggsnv50_set_vertex_elements(struct pipe_context *pipe, unsigned count, 471bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs const struct pipe_vertex_element *ve) 47247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 473f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 474f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 475f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs memcpy(nv50->vtxelt, ve, sizeof(*ve) * count); 476f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->vtxelt_nr = count; 477f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 478f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_ARRAYS; 47947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 48047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 48147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsvoid 48247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_init_state_functions(struct nv50_context *nv50) 48347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 48447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_blend_state = nv50_blend_state_create; 48547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_blend_state = nv50_blend_state_bind; 48647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_blend_state = nv50_blend_state_delete; 48747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 48847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_sampler_state = nv50_sampler_state_create; 4899a4938d7033101122b627786273ff37229b5558aBen Skeggs nv50->pipe.bind_sampler_states = nv50_sampler_state_bind; 49047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_sampler_state = nv50_sampler_state_delete; 4919a4938d7033101122b627786273ff37229b5558aBen Skeggs nv50->pipe.set_sampler_textures = nv50_set_sampler_texture; 49247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 49347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_rasterizer_state = nv50_rasterizer_state_create; 49447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_rasterizer_state = nv50_rasterizer_state_bind; 49547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_rasterizer_state = nv50_rasterizer_state_delete; 49647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 4973af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50->pipe.create_depth_stencil_alpha_state = 4983af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50_depth_stencil_alpha_state_create; 4993af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50->pipe.bind_depth_stencil_alpha_state = 5003af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50_depth_stencil_alpha_state_bind; 5013af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50->pipe.delete_depth_stencil_alpha_state = 5023af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50_depth_stencil_alpha_state_delete; 50347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 50447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_vs_state = nv50_vp_state_create; 50547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_vs_state = nv50_vp_state_bind; 50647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_vs_state = nv50_vp_state_delete; 50747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 50847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_fs_state = nv50_fp_state_create; 50947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_fs_state = nv50_fp_state_bind; 51047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_fs_state = nv50_fp_state_delete; 51147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 51247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_blend_color = nv50_set_blend_color; 51347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_clip_state = nv50_set_clip_state; 51447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_constant_buffer = nv50_set_constant_buffer; 51547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_framebuffer_state = nv50_set_framebuffer_state; 51647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_polygon_stipple = nv50_set_polygon_stipple; 51747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_scissor_state = nv50_set_scissor_state; 51847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_viewport_state = nv50_set_viewport_state; 51947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 520bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs nv50->pipe.set_vertex_buffers = nv50_set_vertex_buffers; 521bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs nv50->pipe.set_vertex_elements = nv50_set_vertex_elements; 52247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 52347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 524