void nv20_emit_tex_gen(GLcontext *ctx, int emit) { const int i = emit - NOUVEAU_STATE_TEX_GEN0; struct nouveau_context *nctx = to_nouveau_context(ctx); struct nouveau_channel *chan = context_chan(ctx); struct nouveau_grobj *kelvin = context_eng3d(ctx); struct gl_texture_unit *unit = &ctx->Texture.Unit[i]; int j; for (j = 0; j < 4; j++) { if (nctx->fallback == HWTNL && (unit->TexGenEnabled & 1 << j)) { struct gl_texgen *coord = get_texgen_coord(unit, j); float *k = get_texgen_coeff(coord); if (k) { BEGIN_RING(chan, kelvin, TX_GEN_COEFF(i, j), 4); OUT_RINGp(chan, k, 4); } BEGIN_RING(chan, kelvin, TX_GEN_MODE(i, j), 1); OUT_RING(chan, nvgl_texgen_mode(coord->Mode)); } else { BEGIN_RING(chan, kelvin, TX_GEN_MODE(i, j), 1); OUT_RING(chan, 0); } } }
void nv20_emit_tex_gen(struct gl_context *ctx, int emit) { const int i = emit - NOUVEAU_STATE_TEX_GEN0; struct nouveau_context *nctx = to_nouveau_context(ctx); struct nouveau_pushbuf *push = context_push(ctx); struct gl_texture_unit *unit = &ctx->Texture.Unit[i]; int j; for (j = 0; j < 4; j++) { if (nctx->fallback == HWTNL && (unit->TexGenEnabled & 1 << j)) { struct gl_texgen *coord = get_texgen_coord(unit, j); float *k = get_texgen_coeff(coord); if (k) { BEGIN_NV04(push, NV20_3D(TEX_GEN_COEFF(i, j)), 4); PUSH_DATAp(push, k, 4); } BEGIN_NV04(push, NV20_3D(TEX_GEN_MODE(i, j)), 1); PUSH_DATA (push, nvgl_texgen_mode(coord->Mode)); } else { BEGIN_NV04(push, NV20_3D(TEX_GEN_MODE(i, j)), 1); PUSH_DATA (push, 0); } } }