1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mesa 3-D graphics library 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Version: 6.5 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the "Software"), 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to deal in the Software without restriction, including without limitation 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and/or sell copies of the Software, and to permit persons to whom the 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software is furnished to do so, subject to the following conditions: 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice shall be included 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * in all copies or substantial portions of the Software. 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This file contains "accelerated" triangle functions. It should be 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * fairly easy to write new special-purpose triangle functions and hook 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * them into this module. 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/imports.h" 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/mtypes.h" 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "glxheader.h" 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "xmesaP.h" 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Internal swrast includes: 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_context.h" 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_depth.h" 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_triangle.h" 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GET_XRB(XRB) struct xmesa_renderbuffer *XRB = \ 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmesa_renderbuffer(ctx->DrawBuffer->_ColorDrawBuffers[0]) 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**********************************************************************/ 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** Triangle rendering ***/ 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**********************************************************************/ 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if CHAN_BITS == 8 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, smooth, depth-buffered, PF_TRUECOLOR triangle. 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME smooth_TRUECOLOR_z_triangle 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_Z 1 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_RGB 1 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint x = span.x, y = YFLIP(xrb, span.y); \ 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++, x++) { \ 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const DEPTH_TYPE z = FixedToDepth(span.z); \ 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (z < zRow[i]) { \ 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long p; \ 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PACK_TRUECOLOR(p, FixedToInt(span.red), \ 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FixedToInt(span.green), FixedToInt(span.blue)); \ 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaPutPixel(xrb->ximage, x, y, p); \ 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zRow[i] = z; \ 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.red += span.redStep; \ 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.green += span.greenStep; \ 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.blue += span.blueStep; \ 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.z += span.zStep; \ 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, smooth, depth-buffered, PF_8A8B8G8R triangle. 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME smooth_8A8B8G8R_z_triangle 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_Z 1 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_RGB 1 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_ALPHA 1 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLuint 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++) { \ 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const DEPTH_TYPE z = FixedToDepth(span.z); \ 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (z < zRow[i]) { \ 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pRow[i] = PACK_8A8B8G8R(FixedToInt(span.red), \ 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FixedToInt(span.green), FixedToInt(span.blue), \ 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FixedToInt(span.alpha)); \ 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zRow[i] = z; \ 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.red += span.redStep; \ 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.green += span.greenStep; \ 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.blue += span.blueStep; \ 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.alpha += span.alphaStep; \ 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.z += span.zStep; \ 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, smooth, depth-buffered, PF_8A8R8G8B triangle. 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME smooth_8A8R8G8B_z_triangle 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_Z 1 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_RGB 1 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_ALPHA 1 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLuint 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++) { \ 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const DEPTH_TYPE z = FixedToDepth(span.z); \ 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (z < zRow[i]) { \ 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pRow[i] = PACK_8A8R8G8B(FixedToInt(span.red), \ 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FixedToInt(span.green), FixedToInt(span.blue), \ 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FixedToInt(span.alpha)); \ 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zRow[i] = z; \ 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.red += span.redStep; \ 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.green += span.greenStep; \ 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.blue += span.blueStep; \ 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.alpha += span.alphaStep; \ 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.z += span.zStep; \ 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, smooth, depth-buffered, PF_8R8G8B triangle. 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME smooth_8R8G8B_z_triangle 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_Z 1 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_RGB 1 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLuint 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++) { \ 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const DEPTH_TYPE z = FixedToDepth(span.z); \ 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (z < zRow[i]) { \ 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pRow[i] = PACK_8R8G8B(FixedToInt(span.red), \ 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FixedToInt(span.green), FixedToInt(span.blue)); \ 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zRow[i] = z; \ 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.red += span.redStep; \ 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.green += span.greenStep; \ 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.blue += span.blueStep; \ 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.z += span.zStep; \ 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, smooth, depth-buffered, PF_8R8G8B24 triangle. 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME smooth_8R8G8B24_z_triangle 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_Z 1 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_RGB 1 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR3(xrb, X, Y) 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE bgr_t 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++) { \ 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const DEPTH_TYPE z = FixedToDepth(span.z); \ 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (z < zRow[i]) { \ 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIXEL_TYPE *ptr = pRow + i; \ 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ptr->r = FixedToInt(span.red); \ 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ptr->g = FixedToInt(span.green); \ 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ptr->b = FixedToInt(span.blue); \ 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zRow[i] = z; \ 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.red += span.redStep; \ 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.green += span.greenStep; \ 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.blue += span.blueStep; \ 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.z += span.zStep; \ 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, smooth, depth-buffered, PF_TRUEDITHER triangle. 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME smooth_TRUEDITHER_z_triangle 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_Z 1 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_RGB 1 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint x = span.x, y = YFLIP(xrb, span.y); \ 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++, x++) { \ 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const DEPTH_TYPE z = FixedToDepth(span.z); \ 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (z < zRow[i]) { \ 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long p; \ 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PACK_TRUEDITHER(p, x, y, FixedToInt(span.red), \ 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FixedToInt(span.green), FixedToInt(span.blue)); \ 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaPutPixel(xrb->ximage, x, y, p); \ 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zRow[i] = z; \ 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.red += span.redStep; \ 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.green += span.greenStep; \ 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.blue += span.blueStep; \ 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.z += span.zStep; \ 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, smooth, depth-buffered, PF_5R6G5B triangle. 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME smooth_5R6G5B_z_triangle 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_Z 1 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_RGB 1 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR2(xrb, X, Y) 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLushort 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++) { \ 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const DEPTH_TYPE z = FixedToDepth(span.z); \ 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (z < zRow[i]) { \ 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pRow[i] = PACK_5R6G5B(FixedToInt(span.red), \ 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FixedToInt(span.green), FixedToInt(span.blue)); \ 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zRow[i] = z; \ 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.red += span.redStep; \ 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.green += span.greenStep; \ 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.blue += span.blueStep; \ 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.z += span.zStep; \ 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, smooth, depth-buffered, PF_DITHER_5R6G5B triangle. 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME smooth_DITHER_5R6G5B_z_triangle 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_Z 1 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_RGB 1 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR2(xrb, X, Y) 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLushort 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint x = span.x, y = YFLIP(xrb, span.y); \ 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++, x++) { \ 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const DEPTH_TYPE z = FixedToDepth(span.z); \ 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (z < zRow[i]) { \ 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PACK_TRUEDITHER(pRow[i], x, y, FixedToInt(span.red), \ 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FixedToInt(span.green), FixedToInt(span.blue)); \ 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zRow[i] = z; \ 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.red += span.redStep; \ 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.green += span.greenStep; \ 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.blue += span.blueStep; \ 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.z += span.zStep; \ 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, flat, depth-buffered, PF_TRUECOLOR triangle. 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME flat_TRUECOLOR_z_triangle 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_Z 1 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); \ 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaImage *img = xrb->ximage; \ 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long pixel; \ 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PACK_TRUECOLOR(pixel, v2->color[0], v2->color[1], v2->color[2]); 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint x = span.x, y = YFLIP(xrb, span.y); \ 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++, x++) { \ 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const DEPTH_TYPE z = FixedToDepth(span.z); \ 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (z < zRow[i]) { \ 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaPutPixel(img, x, y, pixel); \ 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zRow[i] = z; \ 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.z += span.zStep; \ 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, flat, depth-buffered, PF_8A8B8G8R triangle. 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME flat_8A8B8G8R_z_triangle 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_Z 1 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLuint 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); \ 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint p = PACK_8A8B8G8R( v2->color[0], v2->color[1],\ 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v2->color[2], v2->color[3]); 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++) { \ 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const DEPTH_TYPE z = FixedToDepth(span.z); \ 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (z < zRow[i]) { \ 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pRow[i] = (PIXEL_TYPE) p; \ 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zRow[i] = z; \ 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.z += span.zStep; \ 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, flat, depth-buffered, PF_8A8R8G8B triangle. 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME flat_8A8R8G8B_z_triangle 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_Z 1 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLuint 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); \ 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint p = PACK_8A8R8G8B(v2->color[0], v2->color[1], \ 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v2->color[2], v2->color[3]); 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++) { \ 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const DEPTH_TYPE z = FixedToDepth(span.z); \ 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (z < zRow[i]) { \ 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pRow[i] = (PIXEL_TYPE) p; \ 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zRow[i] = z; \ 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.z += span.zStep; \ 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, flat, depth-buffered, PF_8R8G8B triangle. 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME flat_8R8G8B_z_triangle 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_Z 1 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLuint 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); \ 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint p = PACK_8R8G8B( v2->color[0], v2->color[1], v2->color[2] ); 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++) { \ 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DEPTH_TYPE z = FixedToDepth(span.z); \ 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (z < zRow[i]) { \ 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pRow[i] = (PIXEL_TYPE) p; \ 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zRow[i] = z; \ 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.z += span.zStep; \ 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, flat, depth-buffered, PF_8R8G8B24 triangle. 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME flat_8R8G8B24_z_triangle 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_Z 1 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR3(xrb, X, Y) 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE bgr_t 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); \ 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLubyte *color = v2->color; 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++) { \ 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const DEPTH_TYPE z = FixedToDepth(span.z); \ 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (z < zRow[i]) { \ 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIXEL_TYPE *ptr = pRow + i; \ 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ptr->r = color[RCOMP]; \ 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ptr->g = color[GCOMP]; \ 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ptr->b = color[BCOMP]; \ 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zRow[i] = z; \ 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.z += span.zStep; \ 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, flat, depth-buffered, PF_TRUEDITHER triangle. 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME flat_TRUEDITHER_z_triangle 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_Z 1 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); \ 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaImage *img = xrb->ximage; 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint x = span.x, y = YFLIP(xrb, span.y); \ 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++, x++) { \ 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const DEPTH_TYPE z = FixedToDepth(span.z); \ 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (z < zRow[i]) { \ 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long p; \ 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PACK_TRUEDITHER(p, x, y, v2->color[0], \ 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v2->color[1], v2->color[2]); \ 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaPutPixel(img, x, y, p); \ 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zRow[i] = z; \ 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.z += span.zStep; \ 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, flat, depth-buffered, PF_5R6G5B triangle. 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME flat_5R6G5B_z_triangle 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_Z 1 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR2(xrb, X, Y) 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLushort 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); \ 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLushort p = PACK_5R6G5B( v2->color[0], v2->color[1], v2->color[2] ); 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++) { \ 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const DEPTH_TYPE z = FixedToDepth(span.z); \ 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (z < zRow[i]) { \ 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pRow[i] = (PIXEL_TYPE) p; \ 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zRow[i] = z; \ 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.z += span.zStep; \ 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, flat, depth-buffered, PF_DITHER_5R6G5B triangle. 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME flat_DITHER_5R6G5B_z_triangle 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_Z 1 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR2(xrb, X, Y) 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLushort 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); \ 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLubyte *color = v2->color; 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint x = span.x, y = YFLIP(xrb, span.y); \ 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++, x++) { \ 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const DEPTH_TYPE z = FixedToDepth(span.z); \ 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (z < zRow[i]) { \ 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PACK_TRUEDITHER(pRow[i], x, y, color[RCOMP], \ 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org color[GCOMP], color[BCOMP]); \ 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zRow[i] = z; \ 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.z += span.zStep; \ 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, smooth, NON-depth-buffered, PF_TRUECOLOR triangle. 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME smooth_TRUECOLOR_triangle 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_RGB 1 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); \ 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaImage *img = xrb->ximage; 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint x = span.x, y = YFLIP(xrb, span.y); \ 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++, x++) { \ 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long p; \ 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PACK_TRUECOLOR(p, FixedToInt(span.red), \ 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FixedToInt(span.green), FixedToInt(span.blue)); \ 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaPutPixel(img, x, y, p); \ 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.red += span.redStep; \ 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.green += span.greenStep; \ 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.blue += span.blueStep; \ 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, smooth, NON-depth-buffered, PF_8A8B8G8R triangle. 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME smooth_8A8B8G8R_triangle 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_RGB 1 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_ALPHA 1 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLuint 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++) { \ 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pRow[i] = PACK_8A8B8G8R(FixedToInt(span.red), \ 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FixedToInt(span.green), FixedToInt(span.blue), \ 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FixedToInt(span.alpha)); \ 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.red += span.redStep; \ 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.green += span.greenStep; \ 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.blue += span.blueStep; \ 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.alpha += span.alphaStep; \ 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, smooth, NON-depth-buffered, PF_8A8R8G8B triangle. 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME smooth_8A8R8G8B_triangle 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_RGB 1 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_ALPHA 1 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLuint 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++) { \ 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pRow[i] = PACK_8A8R8G8B(FixedToInt(span.red), \ 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FixedToInt(span.green), FixedToInt(span.blue), \ 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FixedToInt(span.alpha)); \ 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.red += span.redStep; \ 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.green += span.greenStep; \ 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.blue += span.blueStep; \ 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.alpha += span.alphaStep; \ 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, smooth, NON-depth-buffered, PF_8R8G8B triangle. 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME smooth_8R8G8B_triangle 616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_RGB 1 617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLuint 619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); 622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++) { \ 625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pRow[i] = PACK_8R8G8B(FixedToInt(span.red), \ 626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FixedToInt(span.green), FixedToInt(span.blue) ); \ 627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.red += span.redStep; \ 628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.green += span.greenStep; \ 629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.blue += span.blueStep; \ 630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, smooth, NON-depth-buffered, PF_8R8G8B triangle. 637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME smooth_8R8G8B24_triangle 639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_RGB 1 640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR3(xrb, X, Y) 641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE bgr_t 642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); 645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIXEL_TYPE *pixel = pRow; \ 648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++, pixel++) { \ 649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pixel->r = FixedToInt(span.red); \ 650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pixel->g = FixedToInt(span.green); \ 651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pixel->b = FixedToInt(span.blue); \ 652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.red += span.redStep; \ 653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.green += span.greenStep; \ 654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.blue += span.blueStep; \ 655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, smooth, NON-depth-buffered, PF_TRUEDITHER triangle. 662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME smooth_TRUEDITHER_triangle 664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_RGB 1 665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); \ 668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaImage *img = xrb->ximage; 669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint x = span.x, y = YFLIP(xrb, span.y); \ 672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++, x++) { \ 673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long p; \ 674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PACK_TRUEDITHER(p, x, y, FixedToInt(span.red), \ 675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FixedToInt(span.green), FixedToInt(span.blue)); \ 676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaPutPixel(img, x, y, p ); \ 677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.red += span.redStep; \ 678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.green += span.greenStep; \ 679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.blue += span.blueStep; \ 680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, smooth, NON-depth-buffered, PF_5R6G5B triangle. 687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME smooth_5R6G5B_triangle 689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_RGB 1 690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR2(xrb, X, Y) 691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLushort 692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); 695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++) { \ 698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pRow[i] = (PIXEL_TYPE) PACK_5R6G5B(FixedToInt(span.red), \ 699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FixedToInt(span.green), FixedToInt(span.blue)); \ 700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.red += span.redStep; \ 701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.green += span.greenStep; \ 702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.blue += span.blueStep; \ 703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, smooth, NON-depth-buffered, PF_DITHER_5R6G5B triangle. 710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME smooth_DITHER_5R6G5B_triangle 712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTERP_RGB 1 713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR2(xrb, X, Y) 714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLushort 715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); 719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint x = span.x, y = YFLIP(xrb, span.y); \ 722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++, x++) { \ 723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PACK_TRUEDITHER(pRow[i], x, y, FixedToInt(span.red), \ 724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FixedToInt(span.green), FixedToInt(span.blue)); \ 725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.red += span.redStep; \ 726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.green += span.greenStep; \ 727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org span.blue += span.blueStep; \ 728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, flat, NON-depth-buffered, PF_TRUECOLOR triangle. 735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME flat_TRUECOLOR_triangle 737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); \ 740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaImage *img = xrb->ximage; \ 741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long pixel; \ 742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PACK_TRUECOLOR(pixel, v2->color[0], v2->color[1], v2->color[2]); 743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint x = span.x, y = YFLIP(xrb, span.y); \ 746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++, x++) { \ 747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaPutPixel(img, x, y, pixel); \ 748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, flat, NON-depth-buffered, PF_8A8B8G8R triangle. 755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME flat_8A8B8G8R_triangle 757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLuint 759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); \ 762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long p = PACK_8B8G8R( v2->color[0], \ 763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v2->color[1], v2->color[2] ); 764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++) { \ 767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pRow[i] = (PIXEL_TYPE) p; \ 768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, flat, NON-depth-buffered, PF_8A8R8G8B triangle. 775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME flat_8A8R8G8B_triangle 777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLuint 779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); \ 782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long p = PACK_8R8G8B( v2->color[0], \ 783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v2->color[1], v2->color[2] ); 784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++) { \ 787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pRow[i] = (PIXEL_TYPE) p; \ 788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, flat, NON-depth-buffered, PF_8R8G8B triangle. 795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME flat_8R8G8B_triangle 797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLuint 799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); \ 802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long p = PACK_8R8G8B( v2->color[0], \ 803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v2->color[1], v2->color[2] ); 804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++) { \ 807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pRow[i] = (PIXEL_TYPE) p; \ 808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, flat, NON-depth-buffered, PF_8R8G8B24 triangle. 815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME flat_8R8G8B24_triangle 817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR3(xrb, X, Y) 818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE bgr_t 819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); \ 822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLubyte *color = v2->color; 823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIXEL_TYPE *pixel = pRow; \ 826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++, pixel++) { \ 827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pixel->r = color[RCOMP]; \ 828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pixel->g = color[GCOMP]; \ 829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pixel->b = color[BCOMP]; \ 830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, flat, NON-depth-buffered, PF_TRUEDITHER triangle. 837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME flat_TRUEDITHER_triangle 839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); \ 842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaImage *img = xrb->ximage; 843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint x = span.x, y = YFLIP(xrb, span.y); \ 846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++, x++) { \ 847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long p; \ 848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PACK_TRUEDITHER(p, x, y, v2->color[0], \ 849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v2->color[1], v2->color[2] ); \ 850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaPutPixel(img, x, y, p); \ 851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, flat, NON-depth-buffered, PF_5R6G5B triangle. 858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME flat_5R6G5B_triangle 860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR2(xrb, X, Y) 861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLushort 862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); \ 865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long p = PACK_5R6G5B( v2->color[0], \ 866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v2->color[1], v2->color[2] ); 867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++) { \ 870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pRow[i] = (PIXEL_TYPE) p; \ 871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XImage, flat, NON-depth-buffered, PF_DITHER_5R6G5B triangle. 878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NAME flat_DITHER_5R6G5B_triangle 880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR2(xrb, X, Y) 881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIXEL_TYPE GLushort 882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SETUP_CODE \ 884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_XRB(xrb); \ 886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLubyte *color = v2->color; 887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_SPAN( span ) { \ 888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; \ 889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint x = span.x, y = YFLIP(xrb, span.y); \ 890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < span.end; i++, x++) { \ 891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PACK_TRUEDITHER(pRow[i], x, y, color[RCOMP], \ 892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org color[GCOMP], color[BCOMP]); \ 893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } } 894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_tritemp.h" 895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* CHAN_BITS == 8 */ 899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if defined(DEBUG) && CHAN_BITS == 8 902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void _xmesa_print_triangle_func( swrast_tri_func triFunc ); 903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid _xmesa_print_triangle_func( swrast_tri_func triFunc ) 904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("XMesa tri func = "); 906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (triFunc ==smooth_TRUECOLOR_z_triangle) 907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("smooth_TRUECOLOR_z_triangle\n"); 908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==smooth_8A8B8G8R_z_triangle) 909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("smooth_8A8B8G8R_z_triangle\n"); 910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==smooth_8A8R8G8B_z_triangle) 911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("smooth_8A8R8G8B_z_triangle\n"); 912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==smooth_8R8G8B_z_triangle) 913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("smooth_8R8G8B_z_triangle\n"); 914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==smooth_8R8G8B24_z_triangle) 915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("smooth_8R8G8B24_z_triangle\n"); 916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==smooth_TRUEDITHER_z_triangle) 917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("smooth_TRUEDITHER_z_triangle\n"); 918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==smooth_5R6G5B_z_triangle) 919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("smooth_5R6G5B_z_triangle\n"); 920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==smooth_DITHER_5R6G5B_z_triangle) 921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("smooth_DITHER_5R6G5B_z_triangle\n"); 922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==flat_TRUECOLOR_z_triangle) 923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("flat_TRUECOLOR_z_triangle\n"); 924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==flat_8A8B8G8R_z_triangle) 925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("flat_8A8B8G8R_z_triangle\n"); 926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==flat_8A8R8G8B_z_triangle) 927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("flat_8A8R8G8B_z_triangle\n"); 928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==flat_8R8G8B_z_triangle) 929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("flat_8R8G8B_z_triangle\n"); 930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==flat_8R8G8B24_z_triangle) 931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("flat_8R8G8B24_z_triangle\n"); 932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==flat_TRUEDITHER_z_triangle) 933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("flat_TRUEDITHER_z_triangle\n"); 934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==flat_5R6G5B_z_triangle) 935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("flat_5R6G5B_z_triangle\n"); 936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==flat_DITHER_5R6G5B_z_triangle) 937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("flat_DITHER_5R6G5B_z_triangle\n"); 938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==smooth_TRUECOLOR_triangle) 939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("smooth_TRUECOLOR_triangle\n"); 940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==smooth_8A8B8G8R_triangle) 941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("smooth_8A8B8G8R_triangle\n"); 942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==smooth_8A8R8G8B_triangle) 943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("smooth_8A8R8G8B_triangle\n"); 944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==smooth_8R8G8B_triangle) 945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("smooth_8R8G8B_triangle\n"); 946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==smooth_8R8G8B24_triangle) 947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("smooth_8R8G8B24_triangle\n"); 948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==smooth_TRUEDITHER_triangle) 949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("smooth_TRUEDITHER_triangle\n"); 950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==smooth_5R6G5B_triangle) 951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("smooth_5R6G5B_triangle\n"); 952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==smooth_DITHER_5R6G5B_triangle) 953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("smooth_DITHER_5R6G5B_triangle\n"); 954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==flat_TRUECOLOR_triangle) 955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("flat_TRUECOLOR_triangle\n"); 956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==flat_TRUEDITHER_triangle) 957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("flat_TRUEDITHER_triangle\n"); 958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==flat_8A8B8G8R_triangle) 959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("flat_8A8B8G8R_triangle\n"); 960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==flat_8A8R8G8B_triangle) 961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("flat_8A8R8G8B_triangle\n"); 962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==flat_8R8G8B_triangle) 963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("flat_8R8G8B_triangle\n"); 964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==flat_8R8G8B24_triangle) 965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("flat_8R8G8B24_triangle\n"); 966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==flat_5R6G5B_triangle) 967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("flat_5R6G5B_triangle\n"); 968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (triFunc ==flat_DITHER_5R6G5B_triangle) 969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("flat_DITHER_5R6G5B_triangle\n"); 970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("???\n"); 972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef DEBUG 977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* record the current triangle function name */ 979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const char *triFuncName = NULL; 980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define USE(triFunc) \ 982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdo { \ 983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org triFuncName = #triFunc; \ 984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return triFunc; \ 985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} while (0) 986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#else 988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define USE(triFunc) return triFunc 990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Return pointer to line drawing function, or NULL if we should use a 996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * swrast fallback. 997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic swrast_tri_func 999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgget_triangle_func(struct gl_context *ctx) 1000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if CHAN_BITS == 8 1002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SWcontext *swrast = SWRAST_CONTEXT(ctx); 1003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesa = XMESA_CONTEXT(ctx); 1004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct xmesa_renderbuffer *xrb; 1005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef DEBUG 1007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org triFuncName = NULL; 1008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* trivial fallback tests */ 1011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ((ctx->DrawBuffer->_ColorDrawBufferIndexes[0] != BUFFER_BIT_FRONT_LEFT) && 1012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (ctx->DrawBuffer->_ColorDrawBufferIndexes[0] != BUFFER_BIT_BACK_LEFT)) 1013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (swrast_tri_func) NULL; 1014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->RenderMode != GL_RENDER) 1015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (swrast_tri_func) NULL; 1016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Polygon.SmoothFlag) 1017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (swrast_tri_func) NULL; 1018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Texture._EnabledUnits) 1019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (swrast_tri_func) NULL; 1020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (swrast->_RasterMask & MULTI_DRAW_BIT) 1021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (swrast_tri_func) NULL; 1022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Polygon.CullFlag && 1023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Polygon.CullFaceMode == GL_FRONT_AND_BACK) 1024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (swrast_tri_func) NULL; 1025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xrb = xmesa_renderbuffer(ctx->DrawBuffer->_ColorDrawBuffers[0]); 1027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xrb->ximage) { 1029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ( ctx->Light.ShadeModel==GL_SMOOTH 1030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && swrast->_RasterMask==DEPTH_BIT 1031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Depth.Func==GL_LESS 1032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Depth.Mask==GL_TRUE 1033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Visual.depthBits == DEFAULT_SOFTWARE_DEPTH_BITS 1034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Polygon.StippleFlag==GL_FALSE) { 1035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (xmesa->pixelformat) { 1036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_Truecolor: 1037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(smooth_TRUECOLOR_z_triangle); 1038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_8A8B8G8R: 1039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(smooth_8A8B8G8R_z_triangle); 1040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_8A8R8G8B: 1041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(smooth_8A8R8G8B_z_triangle); 1042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_8R8G8B: 1043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(smooth_8R8G8B_z_triangle); 1044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_8R8G8B24: 1045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(smooth_8R8G8B24_z_triangle); 1046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_Dither_True: 1047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(smooth_TRUEDITHER_z_triangle); 1048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_5R6G5B: 1049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(smooth_5R6G5B_z_triangle); 1050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_Dither_5R6G5B: 1051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(smooth_DITHER_5R6G5B_z_triangle); 1052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (swrast_tri_func) NULL; 1054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ( ctx->Light.ShadeModel==GL_FLAT 1057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && swrast->_RasterMask==DEPTH_BIT 1058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Depth.Func==GL_LESS 1059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Depth.Mask==GL_TRUE 1060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Visual.depthBits == DEFAULT_SOFTWARE_DEPTH_BITS 1061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Polygon.StippleFlag==GL_FALSE) { 1062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (xmesa->pixelformat) { 1063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_Truecolor: 1064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(flat_TRUECOLOR_z_triangle); 1065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_8A8B8G8R: 1066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(flat_8A8B8G8R_z_triangle); 1067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_8A8R8G8B: 1068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(flat_8A8R8G8B_z_triangle); 1069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_8R8G8B: 1070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(flat_8R8G8B_z_triangle); 1071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_8R8G8B24: 1072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(flat_8R8G8B24_z_triangle); 1073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_Dither_True: 1074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(flat_TRUEDITHER_z_triangle); 1075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_5R6G5B: 1076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(flat_5R6G5B_z_triangle); 1077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_Dither_5R6G5B: 1078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(flat_DITHER_5R6G5B_z_triangle); 1079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (swrast_tri_func) NULL; 1081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ( swrast->_RasterMask==0 /* no depth test */ 1084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Light.ShadeModel==GL_SMOOTH 1085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Polygon.StippleFlag==GL_FALSE) { 1086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (xmesa->pixelformat) { 1087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_Truecolor: 1088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(smooth_TRUECOLOR_triangle); 1089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_8A8B8G8R: 1090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(smooth_8A8B8G8R_triangle); 1091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_8A8R8G8B: 1092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(smooth_8A8R8G8B_triangle); 1093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_8R8G8B: 1094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(smooth_8R8G8B_triangle); 1095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_8R8G8B24: 1096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(smooth_8R8G8B24_triangle); 1097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_Dither_True: 1098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(smooth_TRUEDITHER_triangle); 1099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_5R6G5B: 1100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(smooth_5R6G5B_triangle); 1101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_Dither_5R6G5B: 1102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(smooth_DITHER_5R6G5B_triangle); 1103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (swrast_tri_func) NULL; 1105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ( swrast->_RasterMask==0 /* no depth test */ 1109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Light.ShadeModel==GL_FLAT 1110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Polygon.StippleFlag==GL_FALSE) { 1111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (xmesa->pixelformat) { 1112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_Truecolor: 1113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(flat_TRUECOLOR_triangle); 1114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_Dither_True: 1115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(flat_TRUEDITHER_triangle); 1116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_8A8B8G8R: 1117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(flat_8A8B8G8R_triangle); 1118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_8A8R8G8B: 1119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(flat_8A8R8G8B_triangle); 1120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_8R8G8B: 1121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(flat_8R8G8B_triangle); 1122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_8R8G8B24: 1123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(flat_8R8G8B24_triangle); 1124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_5R6G5B: 1125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(flat_5R6G5B_triangle); 1126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PF_Dither_5R6G5B: 1127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org USE(flat_DITHER_5R6G5B_triangle); 1128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (swrast_tri_func) NULL; 1130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* CHAN_BITS == 8 */ 1134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (swrast_tri_func) NULL; 1136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Override for the swrast tri-selection function. Try to use one 1140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of our internal tri functions, otherwise fall back to the 1141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * standard swrast functions. 1142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid xmesa_choose_triangle( struct gl_context *ctx ) 1144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SWcontext *swrast = SWRAST_CONTEXT(ctx); 1146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!(swrast->Triangle = get_triangle_func( ctx ))) 1148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _swrast_choose_triangle( ctx ); 1149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1151