1bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez/* 2bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * Copyright (C) 2009 Francisco Jerez. 3bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * All Rights Reserved. 4bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * 5bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * Permission is hereby granted, free of charge, to any person obtaining 6bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * a copy of this software and associated documentation files (the 7bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * "Software"), to deal in the Software without restriction, including 8bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * without limitation the rights to use, copy, modify, merge, publish, 9bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * distribute, sublicense, and/or sell copies of the Software, and to 10bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * permit persons to whom the Software is furnished to do so, subject to 11bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * the following conditions: 12bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * 13bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * The above copyright notice and this permission notice (including the 14bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * next paragraph) shall be included in all copies or substantial 15bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * portions of the Software. 16bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * 17bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 20bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 21bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 22bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 23bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * 25bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez */ 26bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 27bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nouveau_driver.h" 28bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nouveau_context.h" 29bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nouveau_gldefs.h" 3088850b3e4f5f2692bf77d46fab031bd573f4d642Francisco Jerez#include "nouveau_util.h" 31f4efc256fd90beaff86321e4c6ce00f9be55092dViktor Novotný#include "nv10_3d.xml.h" 32bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nv10_driver.h" 33bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 34bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezvoid 35f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnv10_emit_cull_face(struct gl_context *ctx, int emit) 36bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 372e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs struct nouveau_pushbuf *push = context_push(ctx); 38bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez GLenum mode = ctx->Polygon.CullFaceMode; 39bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 402e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs BEGIN_NV04(push, NV10_3D(CULL_FACE_ENABLE), 1); 412e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs PUSH_DATAb(push, ctx->Polygon.CullFlag); 42bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 432e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs BEGIN_NV04(push, NV10_3D(CULL_FACE), 1); 442e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs PUSH_DATA (push, (mode == GL_FRONT ? NV10_3D_CULL_FACE_FRONT : 45f4efc256fd90beaff86321e4c6ce00f9be55092dViktor Novotný mode == GL_BACK ? NV10_3D_CULL_FACE_BACK : 46f4efc256fd90beaff86321e4c6ce00f9be55092dViktor Novotný NV10_3D_CULL_FACE_FRONT_AND_BACK)); 47bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 48bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 49bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezvoid 50f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnv10_emit_front_face(struct gl_context *ctx, int emit) 51bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 522e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs struct nouveau_pushbuf *push = context_push(ctx); 53bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 542e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs BEGIN_NV04(push, NV10_3D(FRONT_FACE), 1); 552e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs PUSH_DATA (push, ctx->Polygon.FrontFace == GL_CW ? 56f4efc256fd90beaff86321e4c6ce00f9be55092dViktor Novotný NV10_3D_FRONT_FACE_CW : NV10_3D_FRONT_FACE_CCW); 57bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 58bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 59bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezvoid 60f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnv10_emit_line_mode(struct gl_context *ctx, int emit) 61bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 622e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs struct nouveau_pushbuf *push = context_push(ctx); 63bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez GLboolean smooth = ctx->Line.SmoothFlag && 64bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez ctx->Hint.LineSmooth == GL_NICEST; 65bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 662e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs BEGIN_NV04(push, NV10_3D(LINE_WIDTH), 1); 672e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs PUSH_DATA (push, MAX2(smooth ? 0 : 1, 68bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez ctx->Line.Width) * 8); 692e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs BEGIN_NV04(push, NV10_3D(LINE_SMOOTH_ENABLE), 1); 702e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs PUSH_DATAb(push, smooth); 71bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 72bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 73bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezvoid 74f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnv10_emit_line_stipple(struct gl_context *ctx, int emit) 75bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 76bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 77bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 78bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezvoid 79f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnv10_emit_point_mode(struct gl_context *ctx, int emit) 80bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 812e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs struct nouveau_pushbuf *push = context_push(ctx); 82bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 832e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs BEGIN_NV04(push, NV10_3D(POINT_SIZE), 1); 842e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs PUSH_DATA (push, (uint32_t)(ctx->Point.Size * 8)); 85bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 862e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs BEGIN_NV04(push, NV10_3D(POINT_SMOOTH_ENABLE), 1); 872e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs PUSH_DATAb(push, ctx->Point.SmoothFlag); 88bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 89bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 90bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezvoid 91f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnv10_emit_polygon_mode(struct gl_context *ctx, int emit) 92bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 932e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs struct nouveau_pushbuf *push = context_push(ctx); 94bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 952e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs BEGIN_NV04(push, NV10_3D(POLYGON_MODE_FRONT), 2); 962e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs PUSH_DATA (push, nvgl_polygon_mode(ctx->Polygon.FrontMode)); 972e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs PUSH_DATA (push, nvgl_polygon_mode(ctx->Polygon.BackMode)); 98bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 992e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs BEGIN_NV04(push, NV10_3D(POLYGON_SMOOTH_ENABLE), 1); 1002e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs PUSH_DATAb(push, ctx->Polygon.SmoothFlag); 101bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 102bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 103bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezvoid 104f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnv10_emit_polygon_offset(struct gl_context *ctx, int emit) 105bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 1062e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs struct nouveau_pushbuf *push = context_push(ctx); 107bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 1082e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs BEGIN_NV04(push, NV10_3D(POLYGON_OFFSET_POINT_ENABLE), 3); 1092e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs PUSH_DATAb(push, ctx->Polygon.OffsetPoint); 1102e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs PUSH_DATAb(push, ctx->Polygon.OffsetLine); 1112e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs PUSH_DATAb(push, ctx->Polygon.OffsetFill); 112bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 1132e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs BEGIN_NV04(push, NV10_3D(POLYGON_OFFSET_FACTOR), 2); 1142e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs PUSH_DATAf(push, ctx->Polygon.OffsetFactor); 1152e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs PUSH_DATAf(push, ctx->Polygon.OffsetUnits); 116bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 117bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 118bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezvoid 119f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnv10_emit_polygon_stipple(struct gl_context *ctx, int emit) 120bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 121bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 122