nv50_state.c revision b5bbf09c42a9d563984fad875ced5c4814033a3d
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; 334b5bbf09c42a9d563984fad875ced5c4814033a3dBen Skeggs p->type = PIPE_SHADER_VERTEX; 335f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs tgsi_scan_shader(p->pipe.tokens, &p->info); 336f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs return (void *)p; 33747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 33847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 33947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 34047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_bind(struct pipe_context *pipe, void *hwcso) 34147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 342f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 343f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 344f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->vertprog = hwcso; 345f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_VERTPROG; 34647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 34747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 34847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 34947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_delete(struct pipe_context *pipe, void *hwcso) 35047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 351f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 352f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 353f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50_program_destroy(nv50, hwcso); 354f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs FREE(hwcso); 35547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 35647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 35747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 35847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_create(struct pipe_context *pipe, 35947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_shader_state *cso) 36047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 361f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_program *p = CALLOC_STRUCT(nv50_program); 362f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 363f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs p->pipe = *cso; 364b5bbf09c42a9d563984fad875ced5c4814033a3dBen Skeggs p->type = PIPE_SHADER_FRAGMENT; 365f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs tgsi_scan_shader(p->pipe.tokens, &p->info); 366f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs return (void *)p; 36747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 36847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 36947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 37047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_bind(struct pipe_context *pipe, void *hwcso) 37147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 372f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 373f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 374f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->fragprog = hwcso; 375f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_FRAGPROG; 37647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 37747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 37847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 37947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_delete(struct pipe_context *pipe, void *hwcso) 38047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 381f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 382f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 383f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50_program_destroy(nv50, hwcso); 384f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs FREE(hwcso); 38547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 38647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 38747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 38847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_blend_color(struct pipe_context *pipe, 38947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_blend_color *bcol) 39047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 3912fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 3922fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 3932fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->blend_colour = *bcol; 3942fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_BLEND_COLOUR; 39547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 39647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 39747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 39847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_clip_state(struct pipe_context *pipe, 39947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_clip_state *clip) 40047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 40147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 40247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 40347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 40447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index, 40547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_constant_buffer *buf ) 40647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 407f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 408f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 409f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs if (shader == PIPE_SHADER_VERTEX) { 410f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->constbuf[PIPE_SHADER_VERTEX] = buf->buffer; 411716c1cd2ecbc1e86c0fd747c9fa9e095ded5fd5dBen Skeggs nv50->dirty |= NV50_NEW_VERTPROG_CB; 412f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs } else 413f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs if (shader == PIPE_SHADER_FRAGMENT) { 414f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->constbuf[PIPE_SHADER_FRAGMENT] = buf->buffer; 415716c1cd2ecbc1e86c0fd747c9fa9e095ded5fd5dBen Skeggs nv50->dirty |= NV50_NEW_FRAGPROG_CB; 416f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs } 41747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 41847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 41947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 42047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_framebuffer_state(struct pipe_context *pipe, 42147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_framebuffer_state *fb) 42247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 423cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 424cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs 425cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs nv50->framebuffer = *fb; 426cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs nv50->dirty |= NV50_NEW_FRAMEBUFFER; 42747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 42847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 42947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 43047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_polygon_stipple(struct pipe_context *pipe, 43147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_poly_stipple *stipple) 43247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 4332fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 4342fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 4352fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->stipple = *stipple; 4362fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_STIPPLE; 43747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 43847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 43947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 44047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_scissor_state(struct pipe_context *pipe, 44147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_scissor_state *s) 44247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 4432fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 4442fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 4452fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->scissor = *s; 4462fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_SCISSOR; 44747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 44847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 44947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 45047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_viewport_state(struct pipe_context *pipe, 45147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_viewport_state *vpt) 45247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 4532fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 4542fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 4552fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->viewport = *vpt; 4562fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_VIEWPORT; 45747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 45847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 45947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 460bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggsnv50_set_vertex_buffers(struct pipe_context *pipe, unsigned count, 461bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs const struct pipe_vertex_buffer *vb) 46247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 463f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 464f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 465f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs memcpy(nv50->vtxbuf, vb, sizeof(*vb) * count); 466f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->vtxbuf_nr = count; 467f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 468f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_ARRAYS; 46947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 47047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 47147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 472bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggsnv50_set_vertex_elements(struct pipe_context *pipe, unsigned count, 473bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs const struct pipe_vertex_element *ve) 47447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 475f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 476f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 477f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs memcpy(nv50->vtxelt, ve, sizeof(*ve) * count); 478f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->vtxelt_nr = count; 479f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 480f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_ARRAYS; 48147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 48247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 48347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsvoid 48447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_init_state_functions(struct nv50_context *nv50) 48547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 48647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_blend_state = nv50_blend_state_create; 48747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_blend_state = nv50_blend_state_bind; 48847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_blend_state = nv50_blend_state_delete; 48947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 49047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_sampler_state = nv50_sampler_state_create; 4919a4938d7033101122b627786273ff37229b5558aBen Skeggs nv50->pipe.bind_sampler_states = nv50_sampler_state_bind; 49247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_sampler_state = nv50_sampler_state_delete; 4939a4938d7033101122b627786273ff37229b5558aBen Skeggs nv50->pipe.set_sampler_textures = nv50_set_sampler_texture; 49447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 49547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_rasterizer_state = nv50_rasterizer_state_create; 49647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_rasterizer_state = nv50_rasterizer_state_bind; 49747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_rasterizer_state = nv50_rasterizer_state_delete; 49847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 4993af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50->pipe.create_depth_stencil_alpha_state = 5003af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50_depth_stencil_alpha_state_create; 5013af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50->pipe.bind_depth_stencil_alpha_state = 5023af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50_depth_stencil_alpha_state_bind; 5033af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50->pipe.delete_depth_stencil_alpha_state = 5043af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50_depth_stencil_alpha_state_delete; 50547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 50647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_vs_state = nv50_vp_state_create; 50747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_vs_state = nv50_vp_state_bind; 50847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_vs_state = nv50_vp_state_delete; 50947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 51047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_fs_state = nv50_fp_state_create; 51147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_fs_state = nv50_fp_state_bind; 51247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_fs_state = nv50_fp_state_delete; 51347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 51447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_blend_color = nv50_set_blend_color; 51547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_clip_state = nv50_set_clip_state; 51647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_constant_buffer = nv50_set_constant_buffer; 51747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_framebuffer_state = nv50_set_framebuffer_state; 51847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_polygon_stipple = nv50_set_polygon_stipple; 51947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_scissor_state = nv50_set_scissor_state; 52047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_viewport_state = nv50_set_viewport_state; 52147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 522bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs nv50->pipe.set_vertex_buffers = nv50_set_vertex_buffers; 523bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs nv50->pipe.set_vertex_elements = nv50_set_vertex_elements; 52447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 52547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 526