nv50_state.c revision 4bde3a72ab0b4246cd779a6d1e2a72943f25c0f6
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 73250bacd2411d3f1af50135599380b2140238535Ben Skeggs#include "nouveau/nouveau_stateobj.h" 83250bacd2411d3f1af50135599380b2140238535Ben Skeggs 947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 1047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_blend_state_create(struct pipe_context *pipe, 1147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_blend_state *cso) 1247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 133250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nouveau_stateobj *so = so_new(64, 0); 143250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla; 153250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nv50_blend_stateobj *bso = CALLOC_STRUCT(nv50_blend_stateobj); 163250bacd2411d3f1af50135599380b2140238535Ben Skeggs unsigned cmask = 0, i; 173250bacd2411d3f1af50135599380b2140238535Ben Skeggs 183250bacd2411d3f1af50135599380b2140238535Ben Skeggs /*XXX ignored: 193250bacd2411d3f1af50135599380b2140238535Ben Skeggs * - dither 203250bacd2411d3f1af50135599380b2140238535Ben Skeggs */ 213250bacd2411d3f1af50135599380b2140238535Ben Skeggs 223250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->blend_enable == 0) { 233250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_BLEND_ENABLE(0), 8); 243250bacd2411d3f1af50135599380b2140238535Ben Skeggs for (i = 0; i < 8; i++) 253250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data(so, 0); 263250bacd2411d3f1af50135599380b2140238535Ben Skeggs } else { 273250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_BLEND_ENABLE(0), 8); 283250bacd2411d3f1af50135599380b2140238535Ben Skeggs for (i = 0; i < 8; i++) 293250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data(so, 1); 303250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_BLEND_EQUATION_RGB, 5); 313250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, nvgl_blend_eqn(cso->rgb_func)); 324bde3a72ab0b4246cd779a6d1e2a72943f25c0f6Ben Skeggs so_data (so, 0x4000 | nvgl_blend_func(cso->rgb_src_factor)); 334bde3a72ab0b4246cd779a6d1e2a72943f25c0f6Ben Skeggs so_data (so, 0x4000 | nvgl_blend_func(cso->rgb_dst_factor)); 343250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, nvgl_blend_eqn(cso->alpha_func)); 354bde3a72ab0b4246cd779a6d1e2a72943f25c0f6Ben Skeggs so_data (so, 0x4000 | nvgl_blend_func(cso->alpha_src_factor)); 363250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_BLEND_FUNC_DST_ALPHA, 1); 374bde3a72ab0b4246cd779a6d1e2a72943f25c0f6Ben Skeggs so_data (so, 0x4000 | nvgl_blend_func(cso->alpha_dst_factor)); 383250bacd2411d3f1af50135599380b2140238535Ben Skeggs } 393250bacd2411d3f1af50135599380b2140238535Ben Skeggs 403250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->logicop_enable == 0 ) { 413250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_LOGIC_OP_ENABLE, 1); 423250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, 0); 433250bacd2411d3f1af50135599380b2140238535Ben Skeggs } else { 443250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_LOGIC_OP_ENABLE, 2); 453250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, 1); 463250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data (so, nvgl_logicop_func(cso->logicop_func)); 473250bacd2411d3f1af50135599380b2140238535Ben Skeggs } 483250bacd2411d3f1af50135599380b2140238535Ben Skeggs 493250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->colormask & PIPE_MASK_R) 503250bacd2411d3f1af50135599380b2140238535Ben Skeggs cmask |= (1 << 0); 513250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->colormask & PIPE_MASK_G) 523250bacd2411d3f1af50135599380b2140238535Ben Skeggs cmask |= (1 << 4); 533250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->colormask & PIPE_MASK_B) 543250bacd2411d3f1af50135599380b2140238535Ben Skeggs cmask |= (1 << 8); 553250bacd2411d3f1af50135599380b2140238535Ben Skeggs if (cso->colormask & PIPE_MASK_A) 563250bacd2411d3f1af50135599380b2140238535Ben Skeggs cmask |= (1 << 12); 573250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_method(so, tesla, NV50TCL_COLOR_MASK(0), 8); 583250bacd2411d3f1af50135599380b2140238535Ben Skeggs for (i = 0; i < 8; i++) 593250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_data(so, cmask); 603250bacd2411d3f1af50135599380b2140238535Ben Skeggs 613250bacd2411d3f1af50135599380b2140238535Ben Skeggs bso->pipe = *cso; 623250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_ref(so, &bso->so); 633250bacd2411d3f1af50135599380b2140238535Ben Skeggs return (void *)bso; 6447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 6547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 6647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 6747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_blend_state_bind(struct pipe_context *pipe, void *hwcso) 6847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 693250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 703250bacd2411d3f1af50135599380b2140238535Ben Skeggs 713250bacd2411d3f1af50135599380b2140238535Ben Skeggs nv50->blend = hwcso; 723250bacd2411d3f1af50135599380b2140238535Ben Skeggs nv50->dirty |= NV50_NEW_BLEND; 7347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 7447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 7547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 7647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_blend_state_delete(struct pipe_context *pipe, void *hwcso) 7747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 783250bacd2411d3f1af50135599380b2140238535Ben Skeggs struct nv50_blend_stateobj *bso = hwcso; 793250bacd2411d3f1af50135599380b2140238535Ben Skeggs 803250bacd2411d3f1af50135599380b2140238535Ben Skeggs so_ref(NULL, &bso->so); 813250bacd2411d3f1af50135599380b2140238535Ben Skeggs FREE(bso); 8247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 8347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 8447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 8547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_sampler_state_create(struct pipe_context *pipe, 8647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_sampler_state *cso) 8747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 8879bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs return NULL; 8947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 9047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 9147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 929a4938d7033101122b627786273ff37229b5558aBen Skeggsnv50_sampler_state_bind(struct pipe_context *pipe, unsigned nr, void **sampler) 9347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 9447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 9547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 9647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 9747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_sampler_state_delete(struct pipe_context *pipe, void *hwcso) 9847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 9947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 10047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 10179bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggsstatic void 1029a4938d7033101122b627786273ff37229b5558aBen Skeggsnv50_set_sampler_texture(struct pipe_context *pipe, unsigned nr, 1039a4938d7033101122b627786273ff37229b5558aBen Skeggs struct pipe_texture **pt) 10479bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs{ 10579bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs} 10679bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs 10747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 10847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_create(struct pipe_context *pipe, 10947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_rasterizer_state *cso) 11047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 111cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nouveau_stateobj *so = so_new(64, 0); 112cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla; 113cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nv50_rasterizer_stateobj *rso = 114cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs CALLOC_STRUCT(nv50_rasterizer_stateobj); 115cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 116cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs /*XXX: ignored 117cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - light_twosize 118cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - point_smooth 119cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - multisample 120cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs * - point_sprite / sprite_coord_mode 121cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs */ 122cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 123cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_SHADE_MODEL, 1); 124cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->flatshade ? NV50TCL_SHADE_MODEL_FLAT : 125cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs NV50TCL_SHADE_MODEL_SMOOTH); 126cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 127cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_WIDTH, 1); 128cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, fui(cso->line_width)); 129cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_SMOOTH_ENABLE, 1); 130cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->line_smooth ? 1 : 0); 131cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->line_stipple_enable) { 132cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_STIPPLE_ENABLE, 1); 133cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, 1); 134cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_STIPPLE_PATTERN, 1); 135cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, (cso->line_stipple_pattern << 16) | 136cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs cso->line_stipple_factor); 137cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } else { 138cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_LINE_STIPPLE_ENABLE, 1); 139cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, 0); 140cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 141cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 142cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POINT_SIZE, 1); 143cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, fui(cso->point_size)); 144cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 145cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_MODE_FRONT, 3); 146cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->front_winding == PIPE_WINDING_CCW) { 147cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_ccw)); 148cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_cw)); 149cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } else { 150cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_cw)); 151cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, nvgl_polygon_mode(cso->fill_ccw)); 152cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 153cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, cso->poly_smooth ? 1 : 0); 154cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 155cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_CULL_FACE_ENABLE, 3); 156cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->cull_mode != PIPE_WINDING_NONE); 157cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->front_winding == PIPE_WINDING_CCW) { 158cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_FRONT_FACE_CCW); 159cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs switch (cso->cull_mode) { 160cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CCW: 161cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT); 162cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 163cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CW: 164cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 165cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 166cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_BOTH: 167cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT_AND_BACK); 168cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 169cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs default: 170cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 171cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 172cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 173cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } else { 174cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_FRONT_FACE_CW); 175cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs switch (cso->cull_mode) { 176cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CCW: 177cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 178cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 179cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_CW: 180cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT); 181cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 182cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs case PIPE_WINDING_BOTH: 183cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_FRONT_AND_BACK); 184cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 185cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs default: 186cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, NV50TCL_CULL_FACE_BACK); 187cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs break; 188cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 189cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 190cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 191cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_STIPPLE_ENABLE, 1); 192cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, cso->poly_stipple_enable ? 1 : 0); 193cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 194cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_OFFSET_POINT_ENABLE, 3); 195cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_POINT) || 196cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_POINT)) 197cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 1); 198cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs else 199cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 0); 200cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_LINE) || 201cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_LINE)) 202cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 1); 203cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs else 204cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 0); 205cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_FILL) || 206cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_FILL)) 207cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 1); 208cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs else 209cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data(so, 0); 210cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 211cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs if (cso->offset_cw || cso->offset_ccw) { 212cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_OFFSET_FACTOR, 1); 213cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, fui(cso->offset_scale)); 214cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_method(so, tesla, NV50TCL_POLYGON_OFFSET_UNITS, 1); 215cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_data (so, fui(cso->offset_units * 2)); 216cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs } 217cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 218cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs rso->pipe = *cso; 219cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_ref(so, &rso->so); 220cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs return (void *)rso; 22147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 22247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 22347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 22447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_bind(struct pipe_context *pipe, void *hwcso) 22547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 226cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 227cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 228cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs nv50->rasterizer = hwcso; 229cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs nv50->dirty |= NV50_NEW_RASTERIZER; 23047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 23147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 23247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 23347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_delete(struct pipe_context *pipe, void *hwcso) 23447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 235cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs struct nv50_rasterizer_stateobj *rso = hwcso; 236cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs 237cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs so_ref(NULL, &rso->so); 238cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs FREE(rso); 23947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 24047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 24147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 2423af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_create(struct pipe_context *pipe, 2433af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs const struct pipe_depth_stencil_alpha_state *cso) 24447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 24506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla; 24606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nv50_zsa_stateobj *zsa = CALLOC_STRUCT(nv50_zsa_stateobj); 24706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nouveau_stateobj *so = so_new(64, 0); 24806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 24906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_WRITE_ENABLE, 1); 250f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs so_data (so, 0); //cso->depth.writemask ? 1 : 0); 251f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs if (0 && cso->depth.enabled) { 25206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_TEST_ENABLE, 1); 25306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 1); 25406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_TEST_FUNC, 1); 25506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->depth.func)); 25606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 25706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_DEPTH_TEST_ENABLE, 1); 25806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 25906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 26006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 26106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs if (cso->stencil[0].enabled) { 26206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_STENCIL_FRONT_ENABLE, 5); 26306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 1); 26406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[0].fail_op)); 26506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[0].zfail_op)); 26606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[0].zpass_op)); 26706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->stencil[0].func)); 26806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_STENCIL_FRONT_FUNC_REF, 3); 26906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[0].ref_value); 27006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[0].write_mask); 27106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[0].value_mask); 27206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 27306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_STENCIL_FRONT_ENABLE, 1); 27406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 27506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 27606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 27706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs if (cso->stencil[1].enabled) { 27806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_STENCIL_BACK_ENABLE, 8); 27906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 1); 28006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[1].fail_op)); 28106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[1].zfail_op)); 28206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_stencil_op(cso->stencil[1].zpass_op)); 28306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->stencil[1].func)); 28406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[1].ref_value); 28506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[1].write_mask); 28606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, cso->stencil[1].value_mask); 28706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 28806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_STENCIL_BACK_ENABLE, 1); 28906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 29006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 29106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 29206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs if (cso->alpha.enabled) { 29306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_ALPHA_TEST_ENABLE, 1); 29406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 1); 29506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_ALPHA_TEST_REF, 2); 29606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, fui(cso->alpha.ref)); 29706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, nvgl_comparison_op(cso->alpha.func)); 29806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } else { 29906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_method(so, tesla, NV50TCL_ALPHA_TEST_ENABLE, 1); 30006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_data (so, 0); 30106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs } 30206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 30306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs zsa->pipe = *cso; 30406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_ref(so, &zsa->so); 30506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs return (void *)zsa; 30647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 30747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 30847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 3093af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_bind(struct pipe_context *pipe, void *hwcso) 31047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 31106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 31206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 31306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs nv50->zsa = hwcso; 31406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs nv50->dirty |= NV50_NEW_ZSA; 31547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 31647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 31747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 3183af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_delete(struct pipe_context *pipe, void *hwcso) 31947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 32006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs struct nv50_zsa_stateobj *zsa = hwcso; 32106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs 32206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs so_ref(NULL, &zsa->so); 32306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs FREE(zsa); 32447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 32547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 32647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void * 32747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_create(struct pipe_context *pipe, 32847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_shader_state *cso) 32947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 330f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_program *p = CALLOC_STRUCT(nv50_program); 331f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 332f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs p->pipe = *cso; 333b5bbf09c42a9d563984fad875ced5c4814033a3dBen Skeggs p->type = PIPE_SHADER_VERTEX; 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; 363b5bbf09c42a9d563984fad875ced5c4814033a3dBen Skeggs p->type = PIPE_SHADER_FRAGMENT; 364f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs tgsi_scan_shader(p->pipe.tokens, &p->info); 365f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs return (void *)p; 36647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 36747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 36847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 36947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_bind(struct pipe_context *pipe, void *hwcso) 37047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 371f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 372f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 373f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->fragprog = hwcso; 374f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_FRAGPROG; 37547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 37647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 37747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 37847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_delete(struct pipe_context *pipe, void *hwcso) 37947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 380f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 381f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 382f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50_program_destroy(nv50, hwcso); 383f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs FREE(hwcso); 38447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 38547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 38647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 38747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_blend_color(struct pipe_context *pipe, 38847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_blend_color *bcol) 38947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 3902fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 3912fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 3922fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->blend_colour = *bcol; 3932fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_BLEND_COLOUR; 39447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 39547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 39647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 39747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_clip_state(struct pipe_context *pipe, 39847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_clip_state *clip) 39947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 40047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 40147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 40247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 40347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index, 40447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_constant_buffer *buf ) 40547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 406f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 407f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 408f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs if (shader == PIPE_SHADER_VERTEX) { 409f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->constbuf[PIPE_SHADER_VERTEX] = buf->buffer; 410716c1cd2ecbc1e86c0fd747c9fa9e095ded5fd5dBen Skeggs nv50->dirty |= NV50_NEW_VERTPROG_CB; 411f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs } else 412f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs if (shader == PIPE_SHADER_FRAGMENT) { 413f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->constbuf[PIPE_SHADER_FRAGMENT] = buf->buffer; 414716c1cd2ecbc1e86c0fd747c9fa9e095ded5fd5dBen Skeggs nv50->dirty |= NV50_NEW_FRAGPROG_CB; 415f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs } 41647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 41747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 41847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 41947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_framebuffer_state(struct pipe_context *pipe, 42047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_framebuffer_state *fb) 42147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 422cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 423cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs 424cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs nv50->framebuffer = *fb; 425cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs nv50->dirty |= NV50_NEW_FRAMEBUFFER; 42647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 42747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 42847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 42947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_polygon_stipple(struct pipe_context *pipe, 43047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_poly_stipple *stipple) 43147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 4322fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 4332fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 4342fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->stipple = *stipple; 4352fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_STIPPLE; 43647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 43747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 43847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 43947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_scissor_state(struct pipe_context *pipe, 44047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_scissor_state *s) 44147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 4422fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 4432fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 4442fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->scissor = *s; 4452fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_SCISSOR; 44647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 44747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 44847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 44947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_viewport_state(struct pipe_context *pipe, 45047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs const struct pipe_viewport_state *vpt) 45147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 4522fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 4532fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs 4542fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->viewport = *vpt; 4552fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs nv50->dirty |= NV50_NEW_VIEWPORT; 45647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 45747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 45847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 459bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggsnv50_set_vertex_buffers(struct pipe_context *pipe, unsigned count, 460bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs const struct pipe_vertex_buffer *vb) 46147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 462f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 463f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 464f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs memcpy(nv50->vtxbuf, vb, sizeof(*vb) * count); 465f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->vtxbuf_nr = count; 466f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 467f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_ARRAYS; 46847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 46947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 47047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void 471bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggsnv50_set_vertex_elements(struct pipe_context *pipe, unsigned count, 472bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs const struct pipe_vertex_element *ve) 47347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 474f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs struct nv50_context *nv50 = nv50_context(pipe); 475f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 476f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs memcpy(nv50->vtxelt, ve, sizeof(*ve) * count); 477f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->vtxelt_nr = count; 478f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs 479f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs nv50->dirty |= NV50_NEW_ARRAYS; 48047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 48147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 48247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsvoid 48347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_init_state_functions(struct nv50_context *nv50) 48447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 48547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_blend_state = nv50_blend_state_create; 48647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_blend_state = nv50_blend_state_bind; 48747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_blend_state = nv50_blend_state_delete; 48847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 48947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_sampler_state = nv50_sampler_state_create; 4909a4938d7033101122b627786273ff37229b5558aBen Skeggs nv50->pipe.bind_sampler_states = nv50_sampler_state_bind; 49147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_sampler_state = nv50_sampler_state_delete; 4929a4938d7033101122b627786273ff37229b5558aBen Skeggs nv50->pipe.set_sampler_textures = nv50_set_sampler_texture; 49347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 49447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_rasterizer_state = nv50_rasterizer_state_create; 49547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_rasterizer_state = nv50_rasterizer_state_bind; 49647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_rasterizer_state = nv50_rasterizer_state_delete; 49747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 4983af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50->pipe.create_depth_stencil_alpha_state = 4993af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50_depth_stencil_alpha_state_create; 5003af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50->pipe.bind_depth_stencil_alpha_state = 5013af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50_depth_stencil_alpha_state_bind; 5023af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50->pipe.delete_depth_stencil_alpha_state = 5033af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs nv50_depth_stencil_alpha_state_delete; 50447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 50547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_vs_state = nv50_vp_state_create; 50647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_vs_state = nv50_vp_state_bind; 50747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_vs_state = nv50_vp_state_delete; 50847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 50947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.create_fs_state = nv50_fp_state_create; 51047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.bind_fs_state = nv50_fp_state_bind; 51147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.delete_fs_state = nv50_fp_state_delete; 51247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 51347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_blend_color = nv50_set_blend_color; 51447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_clip_state = nv50_set_clip_state; 51547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_constant_buffer = nv50_set_constant_buffer; 51647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_framebuffer_state = nv50_set_framebuffer_state; 51747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_polygon_stipple = nv50_set_polygon_stipple; 51847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_scissor_state = nv50_set_scissor_state; 51947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs nv50->pipe.set_viewport_state = nv50_set_viewport_state; 52047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 521bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs nv50->pipe.set_vertex_buffers = nv50_set_vertex_buffers; 522bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs nv50->pipe.set_vertex_elements = nv50_set_vertex_elements; 52347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 52447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 525