Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (C) 2009 Francisco Jerez.
  3.  * All Rights Reserved.
  4.  *
  5.  * Permission is hereby granted, free of charge, to any person obtaining
  6.  * a copy of this software and associated documentation files (the
  7.  * "Software"), to deal in the Software without restriction, including
  8.  * without limitation the rights to use, copy, modify, merge, publish,
  9.  * distribute, sublicense, and/or sell copies of the Software, and to
  10.  * permit persons to whom the Software is furnished to do so, subject to
  11.  * the following conditions:
  12.  *
  13.  * The above copyright notice and this permission notice (including the
  14.  * next paragraph) shall be included in all copies or substantial
  15.  * portions of the Software.
  16.  *
  17.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  18.  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  19.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  20.  * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
  21.  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  22.  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  23.  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  24.  *
  25.  */
  26.  
  27. #include "nouveau_driver.h"
  28. #include "nouveau_context.h"
  29. #include "nouveau_gldefs.h"
  30. #include "nouveau_util.h"
  31. #include "nv10_3d.xml.h"
  32. #include "nv10_driver.h"
  33.  
  34. void
  35. nv10_emit_cull_face(struct gl_context *ctx, int emit)
  36. {
  37.         struct nouveau_pushbuf *push = context_push(ctx);
  38.         GLenum mode = ctx->Polygon.CullFaceMode;
  39.  
  40.         BEGIN_NV04(push, NV10_3D(CULL_FACE_ENABLE), 1);
  41.         PUSH_DATAb(push, ctx->Polygon.CullFlag);
  42.  
  43.         BEGIN_NV04(push, NV10_3D(CULL_FACE), 1);
  44.         PUSH_DATA (push, (mode == GL_FRONT ? NV10_3D_CULL_FACE_FRONT :
  45.                         mode == GL_BACK ? NV10_3D_CULL_FACE_BACK :
  46.                         NV10_3D_CULL_FACE_FRONT_AND_BACK));
  47. }
  48.  
  49. void
  50. nv10_emit_front_face(struct gl_context *ctx, int emit)
  51. {
  52.         struct nouveau_pushbuf *push = context_push(ctx);
  53.  
  54.         BEGIN_NV04(push, NV10_3D(FRONT_FACE), 1);
  55.         PUSH_DATA (push, ctx->Polygon.FrontFace == GL_CW ?
  56.                  NV10_3D_FRONT_FACE_CW : NV10_3D_FRONT_FACE_CCW);
  57. }
  58.  
  59. void
  60. nv10_emit_line_mode(struct gl_context *ctx, int emit)
  61. {
  62.         struct nouveau_pushbuf *push = context_push(ctx);
  63.         GLboolean smooth = ctx->Line.SmoothFlag &&
  64.                 ctx->Hint.LineSmooth == GL_NICEST;
  65.  
  66.         BEGIN_NV04(push, NV10_3D(LINE_WIDTH), 1);
  67.         PUSH_DATA (push, MAX2(smooth ? 0 : 1,
  68.                             ctx->Line.Width) * 8);
  69.         BEGIN_NV04(push, NV10_3D(LINE_SMOOTH_ENABLE), 1);
  70.         PUSH_DATAb(push, smooth);
  71. }
  72.  
  73. void
  74. nv10_emit_line_stipple(struct gl_context *ctx, int emit)
  75. {
  76. }
  77.  
  78. void
  79. nv10_emit_point_mode(struct gl_context *ctx, int emit)
  80. {
  81.         struct nouveau_pushbuf *push = context_push(ctx);
  82.  
  83.         BEGIN_NV04(push, NV10_3D(POINT_SIZE), 1);
  84.         PUSH_DATA (push, (uint32_t)(ctx->Point.Size * 8));
  85.  
  86.         BEGIN_NV04(push, NV10_3D(POINT_SMOOTH_ENABLE), 1);
  87.         PUSH_DATAb(push, ctx->Point.SmoothFlag);
  88. }
  89.  
  90. void
  91. nv10_emit_polygon_mode(struct gl_context *ctx, int emit)
  92. {
  93.         struct nouveau_pushbuf *push = context_push(ctx);
  94.  
  95.         BEGIN_NV04(push, NV10_3D(POLYGON_MODE_FRONT), 2);
  96.         PUSH_DATA (push, nvgl_polygon_mode(ctx->Polygon.FrontMode));
  97.         PUSH_DATA (push, nvgl_polygon_mode(ctx->Polygon.BackMode));
  98.  
  99.         BEGIN_NV04(push, NV10_3D(POLYGON_SMOOTH_ENABLE), 1);
  100.         PUSH_DATAb(push, ctx->Polygon.SmoothFlag);
  101. }
  102.  
  103. void
  104. nv10_emit_polygon_offset(struct gl_context *ctx, int emit)
  105. {
  106.         struct nouveau_pushbuf *push = context_push(ctx);
  107.  
  108.         BEGIN_NV04(push, NV10_3D(POLYGON_OFFSET_POINT_ENABLE), 3);
  109.         PUSH_DATAb(push, ctx->Polygon.OffsetPoint);
  110.         PUSH_DATAb(push, ctx->Polygon.OffsetLine);
  111.         PUSH_DATAb(push, ctx->Polygon.OffsetFill);
  112.  
  113.         BEGIN_NV04(push, NV10_3D(POLYGON_OFFSET_FACTOR), 2);
  114.         PUSH_DATAf(push, ctx->Polygon.OffsetFactor);
  115.         PUSH_DATAf(push, ctx->Polygon.OffsetUnits);
  116. }
  117.  
  118. void
  119. nv10_emit_polygon_stipple(struct gl_context *ctx, int emit)
  120. {
  121. }
  122.