/* Validate state derived from shaders and the rasterizer cso. */ void nv50_validate_derived_rs(struct nv50_context *nv50) { struct nouveau_channel *chan = nv50->screen->base.channel; uint32_t color, psize; nv50_sprite_coords_validate(nv50); if (nv50->dirty & NV50_NEW_FRAGPROG) return; psize = nv50->state.semantic_psize & ~NV50_3D_MAP_SEMANTIC_3_PTSZ_EN__MASK; color = nv50->state.semantic_color & ~NV50_3D_MAP_SEMANTIC_0_CLMP_EN; if (nv50->rast->pipe.clamp_vertex_color) color |= NV50_3D_MAP_SEMANTIC_0_CLMP_EN; if (color != nv50->state.semantic_color) { nv50->state.semantic_color = color; BEGIN_RING(chan, RING_3D(MAP_SEMANTIC_0), 1); OUT_RING (chan, color); } if (nv50->rast->pipe.point_size_per_vertex) psize |= NV50_3D_MAP_SEMANTIC_3_PTSZ_EN__MASK; if (psize != nv50->state.semantic_psize) { nv50->state.semantic_psize = psize; BEGIN_RING(chan, RING_3D(MAP_SEMANTIC_3), 1); OUT_RING (chan, psize); } }
/* Validate state derived from shaders and the rasterizer cso. */ void nv50_validate_derived_rs(struct nv50_context *nv50) { struct nouveau_pushbuf *push = nv50->base.pushbuf; uint32_t color, psize; nv50_sprite_coords_validate(nv50); if (nv50->state.rasterizer_discard != nv50->rast->pipe.rasterizer_discard) { nv50->state.rasterizer_discard = nv50->rast->pipe.rasterizer_discard; BEGIN_NV04(push, NV50_3D(RASTERIZE_ENABLE), 1); PUSH_DATA (push, !nv50->rast->pipe.rasterizer_discard); } if (nv50->dirty & NV50_NEW_FRAGPROG) return; psize = nv50->state.semantic_psize & ~NV50_3D_SEMANTIC_PTSZ_PTSZ_EN__MASK; color = nv50->state.semantic_color & ~NV50_3D_SEMANTIC_COLOR_CLMP_EN; if (nv50->rast->pipe.clamp_vertex_color) color |= NV50_3D_SEMANTIC_COLOR_CLMP_EN; if (color != nv50->state.semantic_color) { nv50->state.semantic_color = color; BEGIN_NV04(push, NV50_3D(SEMANTIC_COLOR), 1); PUSH_DATA (push, color); } if (nv50->rast->pipe.point_size_per_vertex) psize |= NV50_3D_SEMANTIC_PTSZ_PTSZ_EN__MASK; if (psize != nv50->state.semantic_psize) { nv50->state.semantic_psize = psize; BEGIN_NV04(push, NV50_3D(SEMANTIC_PTSZ), 1); PUSH_DATA (push, psize); } }