void nv50_vertprog_validate(struct nv50_context *nv50) { struct nouveau_pushbuf *push = nv50->base.pushbuf; struct nv50_program *vp = nv50->vertprog; if (!nv50_program_validate(nv50, vp)) return; nv50_program_update_context_state(nv50, vp, 0); BEGIN_NV04(push, NV50_3D(VP_ATTR_EN(0)), 2); PUSH_DATA (push, vp->vp.attrs[0]); PUSH_DATA (push, vp->vp.attrs[1]); BEGIN_NV04(push, NV50_3D(VP_REG_ALLOC_RESULT), 1); PUSH_DATA (push, vp->max_out); BEGIN_NV04(push, NV50_3D(VP_REG_ALLOC_TEMP), 1); PUSH_DATA (push, vp->max_gpr); BEGIN_NV04(push, NV50_3D(VP_START_ID), 1); PUSH_DATA (push, vp->code_base); if (unlikely(nv50->state.vport_bypass != vp->vp.vport_bypass)) { nv50->state.vport_bypass = vp->vp.vport_bypass; BEGIN_NV04(push, NV50_3D(VIEWPORT_TRANSFORM_EN), 1); PUSH_DATA (push, !vp->vp.vport_bypass); /* TODO: don't do these twice if the vport changed, too: */ nv50_validate_viewport(nv50); #ifdef NV50_SCISSORS_CLIPPING nv50_validate_scissor(nv50); #endif } }
void nv50_vertprog_validate(struct nv50_context *nv50) { struct nouveau_channel *chan = nv50->screen->base.channel; struct nv50_program *vp = nv50->vertprog; if (!nv50_program_validate(nv50, vp)) return; BEGIN_RING(chan, RING_3D(VP_ATTR_EN(0)), 2); OUT_RING (chan, vp->vp.attrs[0]); OUT_RING (chan, vp->vp.attrs[1]); BEGIN_RING(chan, RING_3D(VP_REG_ALLOC_RESULT), 1); OUT_RING (chan, vp->max_out); BEGIN_RING(chan, RING_3D(VP_REG_ALLOC_TEMP), 1); OUT_RING (chan, vp->max_gpr); BEGIN_RING(chan, RING_3D(VP_START_ID), 1); OUT_RING (chan, vp->code_base); }
void nv50_vertprog_validate(struct nv50_context *nv50) { struct nouveau_pushbuf *push = nv50->base.pushbuf; struct nv50_program *vp = nv50->vertprog; if (!nv50_program_validate(nv50, vp)) return; nv50_program_update_context_state(nv50, vp, 0); BEGIN_NV04(push, NV50_3D(VP_ATTR_EN(0)), 2); PUSH_DATA (push, vp->vp.attrs[0]); PUSH_DATA (push, vp->vp.attrs[1]); BEGIN_NV04(push, NV50_3D(VP_REG_ALLOC_RESULT), 1); PUSH_DATA (push, vp->max_out); BEGIN_NV04(push, NV50_3D(VP_REG_ALLOC_TEMP), 1); PUSH_DATA (push, vp->max_gpr); BEGIN_NV04(push, NV50_3D(VP_START_ID), 1); PUSH_DATA (push, vp->code_base); }