xm_tri.c revision c7a5d528c7e5f4812b423bf4c091d21c34af3cf1
18a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 28a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * Mesa 3-D graphics library 38a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * Version: 6.5 48a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * 5fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. 6fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com * 7fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com * Permission is hereby granted, free of charge, to any person obtaining a 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * copy of this software and associated documentation files (the "Software"), 9fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com * to deal in the Software without restriction, including without limitation 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com * and/or sell copies of the Software, and to permit persons to whom the 12fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com * Software is furnished to do so, subject to the following conditions: 13fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com * 14fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com * The above copyright notice and this permission notice shall be included 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * in all copies or substantial portions of the Software. 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com */ 24fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com 25fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com 26fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com/* 27fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com * This file contains "accelerated" triangle functions. It should be 2847e0a09052eb4c93a4506ebf3c64070fafc3d4b3tomhudson@google.com * fairly easy to write new special-purpose triangle functions and hook 2947e0a09052eb4c93a4506ebf3c64070fafc3d4b3tomhudson@google.com * them into this module. 30fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com */ 31fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com 32fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com 33fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com#include "glxheader.h" 34fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com#include "depth.h" 35fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com#include "macros.h" 36fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com#include "imports.h" 37fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com#include "mtypes.h" 38fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com#include "xmesaP.h" 39fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com 40fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com/* Internal swrast includes: 41fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com */ 42fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com#include "swrast/s_context.h" 43fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com#include "swrast/s_depth.h" 44fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com#include "swrast/s_triangle.h" 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 464e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define GET_XRB(XRB) struct xmesa_renderbuffer *XRB = \ 488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com (struct xmesa_renderbuffer *) ctx->DrawBuffer->_ColorDrawBuffers[0][0]->Wrapped 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/**********************************************************************/ 524e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org/*** Triangle rendering ***/ 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/**********************************************************************/ 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * XImage, smooth, depth-buffered, PF_TRUECOLOR triangle. 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define NAME smooth_TRUECOLOR_z_triangle 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_Z 1 614e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_RGB 1 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SETUP_CODE \ 648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 654e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org GET_XRB(xrb); 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 674e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define RENDER_SPAN( span ) \ 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLint x = span.x, y = YFLIP(xrb, span.y); \ 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLuint i; \ 708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for (i = 0; i < span.end; i++, x++) { \ 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const DEPTH_TYPE z = FixedToDepth(span.z); \ 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (z < zRow[i]) { \ 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com unsigned long p; \ 744e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org PACK_TRUECOLOR(p, FixedToInt(span.red), \ 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com FixedToInt(span.green), FixedToInt(span.blue)); \ 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com XMesaPutPixel(xrb->ximage, x, y, p); \ 778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com zRow[i] = z; \ 788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } \ 798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.red += span.redStep; \ 808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.green += span.greenStep; \ 814e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org span.blue += span.blueStep; \ 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.z += span.zStep; \ 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 854e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#include "swrast/s_tritemp.h" 868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 904e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org/* 914e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org * XImage, smooth, depth-buffered, PF_8A8B8G8R triangle. 928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 934e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define NAME smooth_8A8B8G8R_z_triangle 948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_Z 1 958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_RGB 1 974e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define PIXEL_TYPE GLuint 994e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SETUP_CODE \ 1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GET_XRB(xrb); 1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define RENDER_SPAN( span ) \ 1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLuint i; \ 1044e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org for (i = 0; i < span.end; i++) { \ 105d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org const DEPTH_TYPE z = FixedToDepth(span.z); \ 106d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org if (z < zRow[i]) { \ 107d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org pRow[i] = PACK_8B8G8R(FixedToInt(span.red), \ 108d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org FixedToInt(span.green), FixedToInt(span.blue)); \ 109d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org zRow[i] = z; \ 110d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org } \ 111d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org span.red += span.redStep; \ 112d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org span.green += span.greenStep; \ 113d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org span.blue += span.blueStep; \ 114d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org span.z += span.zStep; \ 1154e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org } 116d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org 117d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org#include "swrast/s_tritemp.h" 118d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org 119d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org 120d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org 1214e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org/* 122d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org * XImage, smooth, depth-buffered, PF_8A8R8G8B triangle. 123d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org */ 124d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org#define NAME smooth_8A8R8G8B_z_triangle 125d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org#define INTERP_Z 1 126d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 1274e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define INTERP_RGB 1 1284e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 1294e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define PIXEL_TYPE GLuint 130d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 131d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org#define SETUP_CODE \ 132d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org GET_XRB(xrb); 133d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org 134d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org#define RENDER_SPAN( span ) \ 135d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org GLuint i; \ 136d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org for (i = 0; i < span.end; i++) { \ 137d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org const DEPTH_TYPE z = FixedToDepth(span.z); \ 138d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org if (z < zRow[i]) { \ 139677cbedda7dc43844cbc58dbebbe52e37381be8evandebo@chromium.org pRow[i] = PACK_8R8G8B(FixedToInt(span.red), \ 1404e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org FixedToInt(span.green), FixedToInt(span.blue)); \ 1418072e4fdc8261b1ca8937aa5c31db967280eae2areed@google.com zRow[i] = z; \ 1428072e4fdc8261b1ca8937aa5c31db967280eae2areed@google.com } \ 1438072e4fdc8261b1ca8937aa5c31db967280eae2areed@google.com span.red += span.redStep; \ 1448072e4fdc8261b1ca8937aa5c31db967280eae2areed@google.com span.green += span.greenStep; \ 1458072e4fdc8261b1ca8937aa5c31db967280eae2areed@google.com span.blue += span.blueStep; \ 1468072e4fdc8261b1ca8937aa5c31db967280eae2areed@google.com span.z += span.zStep; \ 147677cbedda7dc43844cbc58dbebbe52e37381be8evandebo@chromium.org } 1488072e4fdc8261b1ca8937aa5c31db967280eae2areed@google.com 149677cbedda7dc43844cbc58dbebbe52e37381be8evandebo@chromium.org#include "swrast/s_tritemp.h" 150677cbedda7dc43844cbc58dbebbe52e37381be8evandebo@chromium.org 1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1524e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org 153677cbedda7dc43844cbc58dbebbe52e37381be8evandebo@chromium.org/* 1544e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org * XImage, smooth, depth-buffered, PF_8R8G8B triangle. 1558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 1568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define NAME smooth_8R8G8B_z_triangle 1578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_Z 1 1588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 1598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_RGB 1 1608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 1614e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define PIXEL_TYPE GLuint 1624e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SETUP_CODE \ 1648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GET_XRB(xrb); 1658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define RENDER_SPAN( span ) \ 1678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLuint i; \ 1688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for (i = 0; i < span.end; i++) { \ 1694e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org const DEPTH_TYPE z = FixedToDepth(span.z); \ 1708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (z < zRow[i]) { \ 1718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com pRow[i] = PACK_8R8G8B(FixedToInt(span.red), \ 1728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com FixedToInt(span.green), FixedToInt(span.blue)); \ 1738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com zRow[i] = z; \ 1748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } \ 1758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.red += span.redStep; \ 1768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.green += span.greenStep; \ 1778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.blue += span.blueStep; \ 1788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.z += span.zStep; \ 1798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "swrast/s_tritemp.h" 1828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 185fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com/* 1868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * XImage, smooth, depth-buffered, PF_8R8G8B24 triangle. 1878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 1888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define NAME smooth_8R8G8B24_z_triangle 1898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_Z 1 1904e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 1918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_RGB 1 1928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR3(xrb, X, Y) 1938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define PIXEL_TYPE bgr_t 1948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 1958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SETUP_CODE \ 1968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GET_XRB(xrb); 1978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define RENDER_SPAN( span ) \ 1988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLuint i; \ 1994e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org for (i = 0; i < span.end; i++) { \ 2008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const DEPTH_TYPE z = FixedToDepth(span.z); \ 2018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (z < zRow[i]) { \ 2024e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org PIXEL_TYPE *ptr = pRow + i; \ 2038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ptr->r = FixedToInt(span.red); \ 2044e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org ptr->g = FixedToInt(span.green); \ 2058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ptr->b = FixedToInt(span.blue); \ 2068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com zRow[i] = z; \ 2078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } \ 2088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.red += span.redStep; \ 2094e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org span.green += span.greenStep; \ 2108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.blue += span.blueStep; \ 2114e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org span.z += span.zStep; \ 2128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "swrast/s_tritemp.h" 2148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2174e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org/* 2184e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org * XImage, smooth, depth-buffered, PF_TRUEDITHER triangle. 2198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 2208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define NAME smooth_TRUEDITHER_z_triangle 2214e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define INTERP_Z 1 2228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 2234e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define INTERP_RGB 1 2248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SETUP_CODE \ 2258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 2268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GET_XRB(xrb); 2278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define RENDER_SPAN( span ) \ 2288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLuint i; \ 2294e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org GLint x = span.x, y = YFLIP(xrb, span.y); \ 2308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for (i = 0; i < span.end; i++, x++) { \ 2318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const DEPTH_TYPE z = FixedToDepth(span.z); \ 2328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (z < zRow[i]) { \ 2338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com unsigned long p; \ 2348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com PACK_TRUEDITHER(p, x, y, FixedToInt(span.red), \ 2354e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org FixedToInt(span.green), FixedToInt(span.blue)); \ 2368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com XMesaPutPixel(xrb->ximage, x, y, p); \ 2378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com zRow[i] = z; \ 2388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } \ 2398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.red += span.redStep; \ 2408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.green += span.greenStep; \ 2418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.blue += span.blueStep; \ 2428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.z += span.zStep; \ 2438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2444e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#include "swrast/s_tritemp.h" 2458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 2498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * XImage, smooth, depth-buffered, PF_5R6G5B triangle. 2508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 2518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define NAME smooth_5R6G5B_z_triangle 2524e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define INTERP_Z 1 2538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 2548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_RGB 1 2558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR2(xrb, X, Y) 2568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define PIXEL_TYPE GLushort 2578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 2588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SETUP_CODE \ 2598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GET_XRB(xrb); 2608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define RENDER_SPAN( span ) \ 2614e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org GLuint i; \ 2628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for (i = 0; i < span.end; i++) { \ 2638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const DEPTH_TYPE z = FixedToDepth(span.z); \ 2648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (z < zRow[i]) { \ 2658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com pRow[i] = PACK_5R6G5B(FixedToInt(span.red), \ 2668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com FixedToInt(span.green), FixedToInt(span.blue)); \ 2678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com zRow[i] = z; \ 2688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } \ 2698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.red += span.redStep; \ 2704e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org span.green += span.greenStep; \ 2718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.blue += span.blueStep; \ 2728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.z += span.zStep; \ 2738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "swrast/s_tritemp.h" 2758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2774e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org 2788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 2798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * XImage, smooth, depth-buffered, PF_DITHER_5R6G5B triangle. 2808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 2818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define NAME smooth_DITHER_5R6G5B_z_triangle 2828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_Z 1 2838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 2848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_RGB 1 2858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR2(xrb, X, Y) 2864e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define PIXEL_TYPE GLushort 2878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 2888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SETUP_CODE \ 2894e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 2908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GET_XRB(xrb); 2914e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define RENDER_SPAN( span ) \ 2928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLuint i; \ 2934e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org GLint x = span.x, y = YFLIP(xrb, span.y); \ 2948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for (i = 0; i < span.end; i++, x++) { \ 2958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const DEPTH_TYPE z = FixedToDepth(span.z); \ 2968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (z < zRow[i]) { \ 2974e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org PACK_TRUEDITHER(pRow[i], x, y, FixedToInt(span.red), \ 2988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com FixedToInt(span.green), FixedToInt(span.blue)); \ 2998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com zRow[i] = z; \ 3008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } \ 3014e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org span.red += span.redStep; \ 3028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.green += span.greenStep; \ 3038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.blue += span.blueStep; \ 3048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.z += span.zStep; \ 3054e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org } 3068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "swrast/s_tritemp.h" 3078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 3114e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org * XImage, smooth, depth-buffered, 8-bit, PF_DITHER8 triangle. 3128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 3138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define NAME smooth_DITHER8_z_triangle 3144e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define INTERP_Z 1 3158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 3168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_RGB 1 3178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR1(xrb, X, Y) 3188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define PIXEL_TYPE GLubyte 3198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 3208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SETUP_CODE \ 321fc296295257a9300098df56a1e3975580e13d329bsalomon@google.com GET_XRB(xrb); 322fc296295257a9300098df56a1e3975580e13d329bsalomon@google.com#define RENDER_SPAN( span ) \ 323fc296295257a9300098df56a1e3975580e13d329bsalomon@google.com GLuint i; \ 324fc296295257a9300098df56a1e3975580e13d329bsalomon@google.com GLint x = span.x, y = YFLIP(xrb, span.y); \ 325fc296295257a9300098df56a1e3975580e13d329bsalomon@google.com XDITHER_SETUP(y); \ 326fc296295257a9300098df56a1e3975580e13d329bsalomon@google.com for (i = 0; i < span.end; i++, x++) { \ 327fc296295257a9300098df56a1e3975580e13d329bsalomon@google.com const DEPTH_TYPE z = FixedToDepth(span.z); \ 328fc296295257a9300098df56a1e3975580e13d329bsalomon@google.com if (z < zRow[i]) { \ 329fc296295257a9300098df56a1e3975580e13d329bsalomon@google.com pRow[i] = (PIXEL_TYPE) XDITHER(x, FixedToInt(span.red),\ 3304e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org FixedToInt(span.green), FixedToInt(span.blue) ); \ 3318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com zRow[i] = z; \ 3328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } \ 3334e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org span.red += span.redStep; \ 3348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.green += span.greenStep; \ 3354e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org span.blue += span.blueStep; \ 3368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.z += span.zStep; \ 3374e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org } 3388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "swrast/s_tritemp.h" 3398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 3438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * XImage, smooth, depth-buffered, PF_DITHER triangle. 3448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 3458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define NAME smooth_DITHER_z_triangle 3464e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define INTERP_Z 1 3478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 3488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_RGB 1 3494e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define SETUP_CODE \ 3504e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org GET_XRB(xrb); \ 3518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com XMesaImage *img = xrb->ximage; 3528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define RENDER_SPAN( span ) \ 3538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLuint i; \ 3548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLint x = span.x, y = YFLIP(xrb, span.y); \ 3558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com XDITHER_SETUP(y); \ 3568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for (i = 0; i < span.end; i++, x++) { \ 3578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const DEPTH_TYPE z = FixedToDepth(span.z); \ 3588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (z < zRow[i]) { \ 3598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com unsigned long p = XDITHER(x, FixedToInt(span.red), \ 3608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com FixedToInt(span.green), FixedToInt(span.blue)); \ 3614e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org XMesaPutPixel(img, x, y, p); \ 3628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com zRow[i] = z; \ 3638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } \ 3648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.red += span.redStep; \ 3654e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org span.green += span.greenStep; \ 3664e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org span.blue += span.blueStep; \ 3678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.z += span.zStep; \ 3684e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org } 3694e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#include "swrast/s_tritemp.h" 3708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3724e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org 3738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 3744e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org * XImage, smooth, depth-buffered, 8-bit PF_LOOKUP triangle. 3758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 3768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define NAME smooth_LOOKUP8_z_triangle 3774e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define INTERP_Z 1 3788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 3798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_RGB 1 3804e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR1(xrb, X, Y) 3818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define PIXEL_TYPE GLubyte 3824e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 3838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SETUP_CODE \ 3848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GET_XRB(xrb); 3854e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define RENDER_SPAN( span ) \ 3868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLuint i; \ 3878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com LOOKUP_SETUP; \ 3888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for (i = 0; i < span.end; i++) { \ 3898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const DEPTH_TYPE z = FixedToDepth(span.z); \ 3908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (z < zRow[i]) { \ 3914e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org pRow[i] = LOOKUP(FixedToInt(span.red), \ 3928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com FixedToInt(span.green), FixedToInt(span.blue)); \ 3938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com zRow[i] = z; \ 3944e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org } \ 3958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.red += span.redStep; \ 3964e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org span.green += span.greenStep; \ 3978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.blue += span.blueStep; \ 3988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.z += span.zStep; \ 3998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 4004e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#include "swrast/s_tritemp.h" 4014e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org 4028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4034e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org 4044e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org/* 4054e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org * XImage, smooth, depth-buffered, 8-bit PF_HPCR triangle. 4068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 4074e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define NAME smooth_HPCR_z_triangle 4088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_Z 1 4094e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 4108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_RGB 1 4114e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR1(xrb, X, Y) 4128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define PIXEL_TYPE GLubyte 4134e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 4144e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define SETUP_CODE \ 4154e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 4168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GET_XRB(xrb); 4174e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define RENDER_SPAN( span ) \ 4188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLuint i; \ 4194e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org GLint x = span.x, y = YFLIP(xrb, span.y); \ 4208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for (i = 0; i < span.end; i++, x++) { \ 4218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const DEPTH_TYPE z = FixedToDepth(span.z); \ 4228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (z < zRow[i]) { \ 4238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com pRow[i] = DITHER_HPCR(x, y, FixedToInt(span.red), \ 4244e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org FixedToInt(span.green), FixedToInt(span.blue) ); \ 4258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com zRow[i] = z; \ 4268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } \ 4278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.red += span.redStep; \ 4284e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org span.green += span.greenStep; \ 4294e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org span.blue += span.blueStep; \ 4308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.z += span.zStep; \ 4314e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org } 4328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "swrast/s_tritemp.h" 4334e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org 4348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 4378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * XImage, flat, depth-buffered, PF_TRUECOLOR triangle. 4388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 4398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define NAME flat_TRUECOLOR_z_triangle 4408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_Z 1 4418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 4428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SETUP_CODE \ 4438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 4448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GET_XRB(xrb); \ 4454e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org XMesaImage *img = xrb->ximage; \ 4468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com unsigned long pixel; \ 4478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com PACK_TRUECOLOR(pixel, v2->color[0], v2->color[1], v2->color[2]); 4484e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define RENDER_SPAN( span ) \ 4498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLuint i; \ 4504e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org GLint x = span.x, y = YFLIP(xrb, span.y); \ 4518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for (i = 0; i < span.end; i++, x++) { \ 4528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const DEPTH_TYPE z = FixedToDepth(span.z); \ 4538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (z < zRow[i]) { \ 4548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com XMesaPutPixel(img, x, y, pixel); \ 4554e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org zRow[i] = z; \ 4568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } \ 4578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.z += span.zStep; \ 4588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 4598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "swrast/s_tritemp.h" 4608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4624e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org 4638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 4644e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org * XImage, flat, depth-buffered, PF_8A8B8G8R triangle. 4658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 4664e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define NAME flat_8A8B8G8R_z_triangle 4674e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define INTERP_Z 1 4684e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 4694e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 4708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define PIXEL_TYPE GLuint 4718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 4728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SETUP_CODE \ 4738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GET_XRB(xrb); \ 4748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLuint p = PACK_8B8G8R( v2->color[0], v2->color[1], v2->color[2] ); 4758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define RENDER_SPAN( span ) \ 4764e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org GLuint i; \ 4778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for (i = 0; i < span.end; i++) { \ 4788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const DEPTH_TYPE z = FixedToDepth(span.z); \ 4798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (z < zRow[i]) { \ 4804e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org pRow[i] = (PIXEL_TYPE) p; \ 4818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com zRow[i] = z; \ 4824e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org } \ 4838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.z += span.zStep; \ 4848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 4854e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#include "swrast/s_tritemp.h" 4868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 4908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * XImage, flat, depth-buffered, PF_8A8R8G8B triangle. 4914e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org */ 492d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org#define NAME flat_8A8R8G8B_z_triangle 493d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org#define INTERP_Z 1 494d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 495d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 496d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org#define PIXEL_TYPE GLuint 4974e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 4988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SETUP_CODE \ 499fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com GET_XRB(xrb); \ 5008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLuint p = PACK_8R8G8B( v2->color[0], v2->color[1], v2->color[2] ); 5018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define RENDER_SPAN( span ) \ 5028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLuint i; \ 5038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for (i = 0; i < span.end; i++) { \ 5048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const DEPTH_TYPE z = FixedToDepth(span.z); \ 5058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (z < zRow[i]) { \ 5068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com pRow[i] = (PIXEL_TYPE) p; \ 5078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com zRow[i] = z; \ 5088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } \ 5098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.z += span.zStep; \ 5104e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org } 5114e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#include "swrast/s_tritemp.h" 5128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5134e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org 5148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 5168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * XImage, flat, depth-buffered, PF_8R8G8B triangle. 5178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 5188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define NAME flat_8R8G8B_z_triangle 5194e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define INTERP_Z 1 5208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 5218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 5228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define PIXEL_TYPE GLuint 5238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 5248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SETUP_CODE \ 5258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GET_XRB(xrb); \ 5268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLuint p = PACK_8R8G8B( v2->color[0], v2->color[1], v2->color[2] ); 5278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define RENDER_SPAN( span ) \ 5288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLuint i; \ 5298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for (i = 0; i < span.end; i++) { \ 5308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com DEPTH_TYPE z = FixedToDepth(span.z); \ 5318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (z < zRow[i]) { \ 5328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com pRow[i] = (PIXEL_TYPE) p; \ 5338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com zRow[i] = z; \ 5348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } \ 535fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com span.z += span.zStep; \ 5368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 5378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "swrast/s_tritemp.h" 5398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 542fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com/* 5438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * XImage, flat, depth-buffered, PF_8R8G8B24 triangle. 5448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 5458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define NAME flat_8R8G8B24_z_triangle 546fa06e528035dd9c4d01c1d1e17e9df1cfe99b855reed@google.com#define INTERP_Z 1 5478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 5484e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR3(xrb, X, Y) 5498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define PIXEL_TYPE bgr_t 5508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 5514e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define SETUP_CODE \ 5524e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org GET_XRB(xrb); \ 5538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const GLubyte *color = v2->color; 5544e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define RENDER_SPAN( span ) \ 5554e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org GLuint i; \ 5568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for (i = 0; i < span.end; i++) { \ 5578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const DEPTH_TYPE z = FixedToDepth(span.z); \ 5588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (z < zRow[i]) { \ 5598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com PIXEL_TYPE *ptr = pRow + i; \ 5608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ptr->r = color[RCOMP]; \ 5614e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org ptr->g = color[GCOMP]; \ 5628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ptr->b = color[BCOMP]; \ 5638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com zRow[i] = z; \ 5648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } \ 5658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.z += span.zStep; \ 5668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 5674e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#include "swrast/s_tritemp.h" 5688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 5728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * XImage, flat, depth-buffered, PF_TRUEDITHER triangle. 5738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 5748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define NAME flat_TRUEDITHER_z_triangle 5758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_Z 1 5768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 5774e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org#define SETUP_CODE \ 5788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 5798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GET_XRB(xrb); \ 5808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com XMesaImage *img = xrb->ximage; 5818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define RENDER_SPAN( span ) \ 5828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLuint i; \ 5838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GLint x = span.x, y = YFLIP(xrb, span.y); \ 5848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for (i = 0; i < span.end; i++, x++) { \ 5858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const DEPTH_TYPE z = FixedToDepth(span.z); \ 5868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (z < zRow[i]) { \ 5874e1d3acc16edb0b502cff157978235f5af627a5amike@reedtribe.org unsigned long p; \ 5888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com PACK_TRUEDITHER(p, x, y, v2->color[0], \ 589d5e05d428647c164080e38dabee94db52c8c4544mike@reedtribe.org v2->color[1], v2->color[2]); \ 5908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com XMesaPutPixel(img, x, y, p); \ 5918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com zRow[i] = z; \ 5928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } \ 5938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com span.z += span.zStep; \ 594d5e05d428647c164080e38dabee94db52c8c4544mike@reedtribe.org } 595d5e05d428647c164080e38dabee94db52c8c4544mike@reedtribe.org#include "swrast/s_tritemp.h" 5968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 597d5e05d428647c164080e38dabee94db52c8c4544mike@reedtribe.org 5988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 599d5e05d428647c164080e38dabee94db52c8c4544mike@reedtribe.org/* 6008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * XImage, flat, depth-buffered, PF_5R6G5B triangle. 6018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 6028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define NAME flat_5R6G5B_z_triangle 6038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define INTERP_Z 1 604d5e05d428647c164080e38dabee94db52c8c4544mike@reedtribe.org#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 605d5e05d428647c164080e38dabee94db52c8c4544mike@reedtribe.org#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR2(xrb, X, Y) 6068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define PIXEL_TYPE GLushort 6073a1f6a06cc706b35d9d6086ffbf5135cbf42bf8atomhudson@google.com#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 6083a1f6a06cc706b35d9d6086ffbf5135cbf42bf8atomhudson@google.com#define SETUP_CODE \ 6093a1f6a06cc706b35d9d6086ffbf5135cbf42bf8atomhudson@google.com GET_XRB(xrb); \ 6103a1f6a06cc706b35d9d6086ffbf5135cbf42bf8atomhudson@google.com GLushort p = PACK_5R6G5B( v2->color[0], v2->color[1], v2->color[2] ); 6113a1f6a06cc706b35d9d6086ffbf5135cbf42bf8atomhudson@google.com#define RENDER_SPAN( span ) \ 6123a1f6a06cc706b35d9d6086ffbf5135cbf42bf8atomhudson@google.com GLuint i; \ 6133a1f6a06cc706b35d9d6086ffbf5135cbf42bf8atomhudson@google.com for (i = 0; i < span.end; i++) { \ 6143a1f6a06cc706b35d9d6086ffbf5135cbf42bf8atomhudson@google.com const DEPTH_TYPE z = FixedToDepth(span.z); \ 6153a1f6a06cc706b35d9d6086ffbf5135cbf42bf8atomhudson@google.com if (z < zRow[i]) { \ 6163a1f6a06cc706b35d9d6086ffbf5135cbf42bf8atomhudson@google.com pRow[i] = (PIXEL_TYPE) p; \ 6173a1f6a06cc706b35d9d6086ffbf5135cbf42bf8atomhudson@google.com zRow[i] = z; \ 6183a1f6a06cc706b35d9d6086ffbf5135cbf42bf8atomhudson@google.com } \ 61947e0a09052eb4c93a4506ebf3c64070fafc3d4b3tomhudson@google.com span.z += span.zStep; \ 6203a1f6a06cc706b35d9d6086ffbf5135cbf42bf8atomhudson@google.com } 621#include "swrast/s_tritemp.h" 622 623 624 625/* 626 * XImage, flat, depth-buffered, PF_DITHER_5R6G5B triangle. 627 */ 628#define NAME flat_DITHER_5R6G5B_z_triangle 629#define INTERP_Z 1 630#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 631#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR2(xrb, X, Y) 632#define PIXEL_TYPE GLushort 633#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 634#define SETUP_CODE \ 635 XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 636 GET_XRB(xrb); \ 637 const GLubyte *color = v2->color; 638#define RENDER_SPAN( span ) \ 639 GLuint i; \ 640 GLint x = span.x, y = YFLIP(xrb, span.y); \ 641 for (i = 0; i < span.end; i++, x++) { \ 642 const DEPTH_TYPE z = FixedToDepth(span.z); \ 643 if (z < zRow[i]) { \ 644 PACK_TRUEDITHER(pRow[i], x, y, color[RCOMP], \ 645 color[GCOMP], color[BCOMP]); \ 646 zRow[i] = z; \ 647 } \ 648 span.z += span.zStep; \ 649 } 650#include "swrast/s_tritemp.h" 651 652 653 654/* 655 * XImage, flat, depth-buffered, 8-bit PF_DITHER triangle. 656 */ 657#define NAME flat_DITHER8_z_triangle 658#define INTERP_Z 1 659#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 660#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR1(xrb, X, Y) 661#define PIXEL_TYPE GLubyte 662#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 663#define SETUP_CODE \ 664 GET_XRB(xrb); \ 665 FLAT_DITHER_SETUP( v2->color[0], v2->color[1], v2->color[2] ); 666#define RENDER_SPAN( span ) \ 667 GLuint i; \ 668 GLint x = span.x, y = YFLIP(xrb, span.y); \ 669 FLAT_DITHER_ROW_SETUP(YFLIP(xrb, y)); \ 670 for (i = 0; i < span.end; i++, x++) { \ 671 const DEPTH_TYPE z = FixedToDepth(span.z); \ 672 if (z < zRow[i]) { \ 673 pRow[i] = (PIXEL_TYPE) FLAT_DITHER(x); \ 674 zRow[i] = z; \ 675 } \ 676 span.z += span.zStep; \ 677 } 678#include "swrast/s_tritemp.h" 679 680 681 682/* 683 * XImage, flat, depth-buffered, PF_DITHER triangle. 684 */ 685#define NAME flat_DITHER_z_triangle 686#define INTERP_Z 1 687#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 688#define SETUP_CODE \ 689 GET_XRB(xrb); \ 690 XMesaImage *img = xrb->ximage; \ 691 FLAT_DITHER_SETUP( v2->color[0], v2->color[1], v2->color[2] ); 692#define RENDER_SPAN( span ) \ 693 GLuint i; \ 694 GLint x = span.x, y = YFLIP(xrb, span.y); \ 695 FLAT_DITHER_ROW_SETUP(y); \ 696 for (i = 0; i < span.end; i++, x++) { \ 697 const DEPTH_TYPE z = FixedToDepth(span.z); \ 698 if (z < zRow[i]) { \ 699 unsigned long p = FLAT_DITHER(x); \ 700 XMesaPutPixel(img, x, y, p); \ 701 zRow[i] = z; \ 702 } \ 703 span.z += span.zStep; \ 704 } 705#include "swrast/s_tritemp.h" 706 707 708 709/* 710 * XImage, flat, depth-buffered, 8-bit PF_HPCR triangle. 711 */ 712#define NAME flat_HPCR_z_triangle 713#define INTERP_Z 1 714#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 715#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR1(xrb, X, Y) 716#define PIXEL_TYPE GLubyte 717#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 718#define SETUP_CODE \ 719 XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 720 GET_XRB(xrb); \ 721 GLubyte r = v2->color[0]; \ 722 GLubyte g = v2->color[1]; \ 723 GLubyte b = v2->color[2]; 724#define RENDER_SPAN( span ) \ 725 GLuint i; \ 726 GLint x = span.x, y = YFLIP(xrb, span.y); \ 727 for (i = 0; i < span.end; i++, x++) { \ 728 const DEPTH_TYPE z = FixedToDepth(span.z); \ 729 if (z < zRow[i]) { \ 730 pRow[i] = (PIXEL_TYPE) DITHER_HPCR(x, y, r, g, b); \ 731 zRow[i] = z; \ 732 } \ 733 span.z += span.zStep; \ 734 } 735#include "swrast/s_tritemp.h" 736 737 738 739/* 740 * XImage, flat, depth-buffered, 8-bit PF_LOOKUP triangle. 741 */ 742#define NAME flat_LOOKUP8_z_triangle 743#define INTERP_Z 1 744#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE 745#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR1(xrb, X, Y) 746#define PIXEL_TYPE GLubyte 747#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 748#define SETUP_CODE \ 749 GET_XRB(xrb); \ 750 LOOKUP_SETUP; \ 751 GLubyte r = v2->color[0]; \ 752 GLubyte g = v2->color[1]; \ 753 GLubyte b = v2->color[2]; \ 754 GLubyte p = LOOKUP(r,g,b); 755#define RENDER_SPAN( span ) \ 756 GLuint i; \ 757 for (i = 0; i < span.end; i++) { \ 758 const DEPTH_TYPE z = FixedToDepth(span.z); \ 759 if (z < zRow[i]) { \ 760 pRow[i] = p; \ 761 zRow[i] = z; \ 762 } \ 763 span.z += span.zStep; \ 764 } 765#include "swrast/s_tritemp.h" 766 767 768 769/* 770 * XImage, smooth, NON-depth-buffered, PF_TRUECOLOR triangle. 771 */ 772#define NAME smooth_TRUECOLOR_triangle 773#define INTERP_RGB 1 774#define SETUP_CODE \ 775 XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 776 GET_XRB(xrb); \ 777 XMesaImage *img = xrb->ximage; 778#define RENDER_SPAN( span ) \ 779 GLuint i; \ 780 GLint x = span.x, y = YFLIP(xrb, span.y); \ 781 for (i = 0; i < span.end; i++, x++) { \ 782 unsigned long p; \ 783 PACK_TRUECOLOR(p, FixedToInt(span.red), \ 784 FixedToInt(span.green), FixedToInt(span.blue)); \ 785 XMesaPutPixel(img, x, y, p); \ 786 span.red += span.redStep; \ 787 span.green += span.greenStep; \ 788 span.blue += span.blueStep; \ 789 } 790#include "swrast/s_tritemp.h" 791 792 793 794/* 795 * XImage, smooth, NON-depth-buffered, PF_8A8B8G8R triangle. 796 */ 797#define NAME smooth_8A8B8G8R_triangle 798#define INTERP_RGB 1 799#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 800#define PIXEL_TYPE GLuint 801#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 802#define SETUP_CODE \ 803 GET_XRB(xrb); 804#define RENDER_SPAN( span ) \ 805 GLuint i; \ 806 for (i = 0; i < span.end; i++) { \ 807 pRow[i] = PACK_8B8G8R(FixedToInt(span.red), \ 808 FixedToInt(span.green), FixedToInt(span.blue) ); \ 809 span.red += span.redStep; \ 810 span.green += span.greenStep; \ 811 span.blue += span.blueStep; \ 812 } 813#include "swrast/s_tritemp.h" 814 815 816 817/* 818 * XImage, smooth, NON-depth-buffered, PF_8A8R8G8B triangle. 819 */ 820#define NAME smooth_8A8R8G8B_triangle 821#define INTERP_RGB 1 822#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 823#define PIXEL_TYPE GLuint 824#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 825#define SETUP_CODE \ 826 GET_XRB(xrb); 827#define RENDER_SPAN( span ) \ 828 GLuint i; \ 829 for (i = 0; i < span.end; i++) { \ 830 pRow[i] = PACK_8R8G8B(FixedToInt(span.red), \ 831 FixedToInt(span.green), FixedToInt(span.blue) ); \ 832 span.red += span.redStep; \ 833 span.green += span.greenStep; \ 834 span.blue += span.blueStep; \ 835 } 836#include "swrast/s_tritemp.h" 837 838 839 840/* 841 * XImage, smooth, NON-depth-buffered, PF_8R8G8B triangle. 842 */ 843#define NAME smooth_8R8G8B_triangle 844#define INTERP_RGB 1 845#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 846#define PIXEL_TYPE GLuint 847#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 848#define SETUP_CODE \ 849 GET_XRB(xrb); 850#define RENDER_SPAN( span ) \ 851 GLuint i; \ 852 for (i = 0; i < span.end; i++) { \ 853 pRow[i] = PACK_8R8G8B(FixedToInt(span.red), \ 854 FixedToInt(span.green), FixedToInt(span.blue) ); \ 855 span.red += span.redStep; \ 856 span.green += span.greenStep; \ 857 span.blue += span.blueStep; \ 858 } 859#include "swrast/s_tritemp.h" 860 861 862 863/* 864 * XImage, smooth, NON-depth-buffered, PF_8R8G8B triangle. 865 */ 866#define NAME smooth_8R8G8B24_triangle 867#define INTERP_RGB 1 868#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR3(xrb, X, Y) 869#define PIXEL_TYPE bgr_t 870#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 871#define SETUP_CODE \ 872 GET_XRB(xrb); 873#define RENDER_SPAN( span ) \ 874 GLuint i; \ 875 PIXEL_TYPE *pixel = pRow; \ 876 for (i = 0; i < span.end; i++, pixel++) { \ 877 pixel->r = FixedToInt(span.red); \ 878 pixel->g = FixedToInt(span.green); \ 879 pixel->b = FixedToInt(span.blue); \ 880 span.red += span.redStep; \ 881 span.green += span.greenStep; \ 882 span.blue += span.blueStep; \ 883 } 884#include "swrast/s_tritemp.h" 885 886 887 888/* 889 * XImage, smooth, NON-depth-buffered, PF_TRUEDITHER triangle. 890 */ 891#define NAME smooth_TRUEDITHER_triangle 892#define INTERP_RGB 1 893#define SETUP_CODE \ 894 XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 895 GET_XRB(xrb); \ 896 XMesaImage *img = xrb->ximage; 897#define RENDER_SPAN( span ) \ 898 GLuint i; \ 899 GLint x = span.x, y = YFLIP(xrb, span.y); \ 900 for (i = 0; i < span.end; i++, x++) { \ 901 unsigned long p; \ 902 PACK_TRUEDITHER(p, x, y, FixedToInt(span.red), \ 903 FixedToInt(span.green), FixedToInt(span.blue)); \ 904 XMesaPutPixel(img, x, y, p ); \ 905 span.red += span.redStep; \ 906 span.green += span.greenStep; \ 907 span.blue += span.blueStep; \ 908 } 909#include "swrast/s_tritemp.h" 910 911 912 913/* 914 * XImage, smooth, NON-depth-buffered, PF_5R6G5B triangle. 915 */ 916#define NAME smooth_5R6G5B_triangle 917#define INTERP_RGB 1 918#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR2(xrb, X, Y) 919#define PIXEL_TYPE GLushort 920#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 921#define SETUP_CODE \ 922 GET_XRB(xrb); 923#define RENDER_SPAN( span ) \ 924 GLuint i; \ 925 for (i = 0; i < span.end; i++) { \ 926 pRow[i] = (PIXEL_TYPE) PACK_5R6G5B(FixedToInt(span.red), \ 927 FixedToInt(span.green), FixedToInt(span.blue)); \ 928 span.red += span.redStep; \ 929 span.green += span.greenStep; \ 930 span.blue += span.blueStep; \ 931 } 932#include "swrast/s_tritemp.h" 933 934 935 936/* 937 * XImage, smooth, NON-depth-buffered, PF_DITHER_5R6G5B triangle. 938 */ 939#define NAME smooth_DITHER_5R6G5B_triangle 940#define INTERP_RGB 1 941#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR2(xrb, X, Y) 942#define PIXEL_TYPE GLushort 943#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 944#define SETUP_CODE \ 945 XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 946 GET_XRB(xrb); 947#define RENDER_SPAN( span ) \ 948 GLuint i; \ 949 GLint x = span.x, y = YFLIP(xrb, span.y); \ 950 for (i = 0; i < span.end; i++, x++) { \ 951 PACK_TRUEDITHER(pRow[i], x, y, FixedToInt(span.red), \ 952 FixedToInt(span.green), FixedToInt(span.blue)); \ 953 span.red += span.redStep; \ 954 span.green += span.greenStep; \ 955 span.blue += span.blueStep; \ 956 } 957#include "swrast/s_tritemp.h" 958 959 960 961/* 962 * XImage, smooth, NON-depth-buffered, 8-bit PF_DITHER triangle. 963 */ 964#define NAME smooth_DITHER8_triangle 965#define INTERP_RGB 1 966#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR1(xrb, X, Y) 967#define PIXEL_TYPE GLubyte 968#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 969#define SETUP_CODE \ 970 GET_XRB(xrb); 971#define RENDER_SPAN( span ) \ 972 GLuint i; \ 973 GLint x = span.x, y = YFLIP(xrb, span.y); \ 974 XDITHER_SETUP(y); \ 975 for (i = 0; i < span.end; i++, x++) { \ 976 pRow[i] = (PIXEL_TYPE) XDITHER(x, FixedToInt(span.red), \ 977 FixedToInt(span.green), FixedToInt(span.blue) ); \ 978 span.red += span.redStep; \ 979 span.green += span.greenStep; \ 980 span.blue += span.blueStep; \ 981 } 982#include "swrast/s_tritemp.h" 983 984 985 986/* 987 * XImage, smooth, NON-depth-buffered, PF_DITHER triangle. 988 */ 989#define NAME smooth_DITHER_triangle 990#define INTERP_RGB 1 991#define SETUP_CODE \ 992 GET_XRB(xrb); \ 993 XMesaImage *img = xrb->ximage; 994#define RENDER_SPAN( span ) \ 995 GLuint i; \ 996 GLint x = span.x, y = YFLIP(xrb, span.y); \ 997 XDITHER_SETUP(y); \ 998 for (i = 0; i < span.end; i++, x++) { \ 999 unsigned long p = XDITHER(x, FixedToInt(span.red), \ 1000 FixedToInt(span.green), FixedToInt(span.blue) ); \ 1001 XMesaPutPixel(img, x, y, p); \ 1002 span.red += span.redStep; \ 1003 span.green += span.greenStep; \ 1004 span.blue += span.blueStep; \ 1005 } 1006#include "swrast/s_tritemp.h" 1007 1008 1009 1010/* 1011 * XImage, smooth, NON-depth-buffered, 8-bit PF_LOOKUP triangle. 1012 */ 1013#define NAME smooth_LOOKUP8_triangle 1014#define INTERP_RGB 1 1015#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR1(xrb, X, Y) 1016#define PIXEL_TYPE GLubyte 1017#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 1018#define SETUP_CODE \ 1019 GET_XRB(xrb); 1020#define RENDER_SPAN( span ) \ 1021 GLuint i; \ 1022 LOOKUP_SETUP; \ 1023 for (i = 0; i < span.end; i++) { \ 1024 pRow[i] = LOOKUP(FixedToInt(span.red), \ 1025 FixedToInt(span.green), FixedToInt(span.blue)); \ 1026 span.red += span.redStep; \ 1027 span.green += span.greenStep; \ 1028 span.blue += span.blueStep; \ 1029 } 1030#include "swrast/s_tritemp.h" 1031 1032 1033 1034/* 1035 * XImage, smooth, NON-depth-buffered, 8-bit PF_HPCR triangle. 1036 */ 1037#define NAME smooth_HPCR_triangle 1038#define INTERP_RGB 1 1039#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR1(xrb, X, Y) 1040#define PIXEL_TYPE GLubyte 1041#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 1042#define SETUP_CODE \ 1043 XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 1044 GET_XRB(xrb); 1045#define RENDER_SPAN( span ) \ 1046 GLuint i; \ 1047 GLint x = span.x, y = YFLIP(xrb, span.y); \ 1048 for (i = 0; i < span.end; i++, x++) { \ 1049 pRow[i] = DITHER_HPCR(x, y, FixedToInt(span.red), \ 1050 FixedToInt(span.green), FixedToInt(span.blue)); \ 1051 span.red += span.redStep; \ 1052 span.green += span.greenStep; \ 1053 span.blue += span.blueStep; \ 1054 } 1055#include "swrast/s_tritemp.h" 1056 1057 1058 1059/* 1060 * XImage, flat, NON-depth-buffered, PF_TRUECOLOR triangle. 1061 */ 1062#define NAME flat_TRUECOLOR_triangle 1063#define SETUP_CODE \ 1064 XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 1065 GET_XRB(xrb); \ 1066 XMesaImage *img = xrb->ximage; \ 1067 unsigned long pixel; \ 1068 PACK_TRUECOLOR(pixel, v2->color[0], v2->color[1], v2->color[2]); 1069#define RENDER_SPAN( span ) \ 1070 GLuint i; \ 1071 GLint x = span.x, y = YFLIP(xrb, span.y); \ 1072 for (i = 0; i < span.end; i++, x++) { \ 1073 XMesaPutPixel(img, x, y, pixel); \ 1074 } 1075#include "swrast/s_tritemp.h" 1076 1077 1078 1079/* 1080 * XImage, flat, NON-depth-buffered, PF_8A8B8G8R triangle. 1081 */ 1082#define NAME flat_8A8B8G8R_triangle 1083#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 1084#define PIXEL_TYPE GLuint 1085#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 1086#define SETUP_CODE \ 1087 GET_XRB(xrb); \ 1088 unsigned long p = PACK_8B8G8R( v2->color[0], \ 1089 v2->color[1], v2->color[2] ); 1090#define RENDER_SPAN( span ) \ 1091 GLuint i; \ 1092 for (i = 0; i < span.end; i++) { \ 1093 pRow[i] = (PIXEL_TYPE) p; \ 1094 } 1095#include "swrast/s_tritemp.h" 1096 1097 1098 1099/* 1100 * XImage, flat, NON-depth-buffered, PF_8A8R8G8B triangle. 1101 */ 1102#define NAME flat_8A8R8G8B_triangle 1103#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 1104#define PIXEL_TYPE GLuint 1105#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 1106#define SETUP_CODE \ 1107 GET_XRB(xrb); \ 1108 unsigned long p = PACK_8R8G8B( v2->color[0], \ 1109 v2->color[1], v2->color[2] ); 1110#define RENDER_SPAN( span ) \ 1111 GLuint i; \ 1112 for (i = 0; i < span.end; i++) { \ 1113 pRow[i] = (PIXEL_TYPE) p; \ 1114 } 1115#include "swrast/s_tritemp.h" 1116 1117 1118 1119/* 1120 * XImage, flat, NON-depth-buffered, PF_8R8G8B triangle. 1121 */ 1122#define NAME flat_8R8G8B_triangle 1123#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR4(xrb, X, Y) 1124#define PIXEL_TYPE GLuint 1125#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 1126#define SETUP_CODE \ 1127 GET_XRB(xrb); \ 1128 unsigned long p = PACK_8R8G8B( v2->color[0], \ 1129 v2->color[1], v2->color[2] ); 1130#define RENDER_SPAN( span ) \ 1131 GLuint i; \ 1132 for (i = 0; i < span.end; i++) { \ 1133 pRow[i] = (PIXEL_TYPE) p; \ 1134 } 1135#include "swrast/s_tritemp.h" 1136 1137 1138 1139/* 1140 * XImage, flat, NON-depth-buffered, PF_8R8G8B24 triangle. 1141 */ 1142#define NAME flat_8R8G8B24_triangle 1143#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR3(xrb, X, Y) 1144#define PIXEL_TYPE bgr_t 1145#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 1146#define SETUP_CODE \ 1147 GET_XRB(xrb); \ 1148 const GLubyte *color = v2->color; 1149#define RENDER_SPAN( span ) \ 1150 GLuint i; \ 1151 PIXEL_TYPE *pixel = pRow; \ 1152 for (i = 0; i < span.end; i++, pixel++) { \ 1153 pixel->r = color[RCOMP]; \ 1154 pixel->g = color[GCOMP]; \ 1155 pixel->b = color[BCOMP]; \ 1156 } 1157#include "swrast/s_tritemp.h" 1158 1159 1160 1161/* 1162 * XImage, flat, NON-depth-buffered, PF_TRUEDITHER triangle. 1163 */ 1164#define NAME flat_TRUEDITHER_triangle 1165#define SETUP_CODE \ 1166 XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 1167 GET_XRB(xrb); \ 1168 XMesaImage *img = xrb->ximage; 1169#define RENDER_SPAN( span ) \ 1170 GLuint i; \ 1171 GLint x = span.x, y = YFLIP(xrb, span.y); \ 1172 for (i = 0; i < span.end; i++, x++) { \ 1173 unsigned long p; \ 1174 PACK_TRUEDITHER(p, x, y, v2->color[0], \ 1175 v2->color[1], v2->color[2] ); \ 1176 XMesaPutPixel(img, x, y, p); \ 1177 } 1178#include "swrast/s_tritemp.h" 1179 1180 1181 1182/* 1183 * XImage, flat, NON-depth-buffered, PF_5R6G5B triangle. 1184 */ 1185#define NAME flat_5R6G5B_triangle 1186#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR2(xrb, X, Y) 1187#define PIXEL_TYPE GLushort 1188#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 1189#define SETUP_CODE \ 1190 GET_XRB(xrb); \ 1191 unsigned long p = PACK_5R6G5B( v2->color[0], \ 1192 v2->color[1], v2->color[2] ); 1193#define RENDER_SPAN( span ) \ 1194 GLuint i; \ 1195 for (i = 0; i < span.end; i++) { \ 1196 pRow[i] = (PIXEL_TYPE) p; \ 1197 } 1198#include "swrast/s_tritemp.h" 1199 1200 1201 1202/* 1203 * XImage, flat, NON-depth-buffered, PF_DITHER_5R6G5B triangle. 1204 */ 1205#define NAME flat_DITHER_5R6G5B_triangle 1206#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR2(xrb, X, Y) 1207#define PIXEL_TYPE GLushort 1208#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 1209#define SETUP_CODE \ 1210 XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 1211 GET_XRB(xrb); \ 1212 const GLubyte *color = v2->color; 1213#define RENDER_SPAN( span ) \ 1214 GLuint i; \ 1215 GLint x = span.x, y = YFLIP(xrb, span.y); \ 1216 for (i = 0; i < span.end; i++, x++) { \ 1217 PACK_TRUEDITHER(pRow[i], x, y, color[RCOMP], \ 1218 color[GCOMP], color[BCOMP]); \ 1219 } 1220#include "swrast/s_tritemp.h" 1221 1222 1223 1224/* 1225 * XImage, flat, NON-depth-buffered, 8-bit PF_DITHER triangle. 1226 */ 1227#define NAME flat_DITHER8_triangle 1228#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR1(xrb, X, Y) 1229#define PIXEL_TYPE GLubyte 1230#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 1231#define SETUP_CODE \ 1232 GET_XRB(xrb); \ 1233 FLAT_DITHER_SETUP( v2->color[0], v2->color[1], v2->color[2] ); 1234#define RENDER_SPAN( span ) \ 1235 GLuint i; \ 1236 GLint x = span.x, y = YFLIP(xrb, span.y); \ 1237 FLAT_DITHER_ROW_SETUP(YFLIP(xrb, y)); \ 1238 for (i = 0; i < span.end; i++, x++) { \ 1239 pRow[i] = (PIXEL_TYPE) FLAT_DITHER(x); \ 1240 } 1241#include "swrast/s_tritemp.h" 1242 1243 1244 1245/* 1246 * XImage, flat, NON-depth-buffered, PF_DITHER triangle. 1247 */ 1248#define NAME flat_DITHER_triangle 1249#define SETUP_CODE \ 1250 GET_XRB(xrb); \ 1251 XMesaImage *img = xrb->ximage; \ 1252 FLAT_DITHER_SETUP( v2->color[0], v2->color[1], v2->color[2] ); 1253#define RENDER_SPAN( span ) \ 1254 GLuint i; \ 1255 GLint x = span.x, y = YFLIP(xrb, span.y); \ 1256 FLAT_DITHER_ROW_SETUP(y); \ 1257 for (i = 0; i < span.end; i++, x++) { \ 1258 unsigned long p = FLAT_DITHER(x); \ 1259 XMesaPutPixel(img, x, y, p ); \ 1260 } 1261#include "swrast/s_tritemp.h" 1262 1263 1264 1265/* 1266 * XImage, flat, NON-depth-buffered, 8-bit PF_HPCR triangle. 1267 */ 1268#define NAME flat_HPCR_triangle 1269#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR1(xrb, X, Y) 1270#define PIXEL_TYPE GLubyte 1271#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 1272#define SETUP_CODE \ 1273 XMesaContext xmesa = XMESA_CONTEXT(ctx); \ 1274 GET_XRB(xrb); \ 1275 GLubyte r = v2->color[0]; \ 1276 GLubyte g = v2->color[1]; \ 1277 GLubyte b = v2->color[2]; 1278#define RENDER_SPAN( span ) \ 1279 GLuint i; \ 1280 GLint x = span.x, y = YFLIP(xrb, span.y); \ 1281 for (i = 0; i < span.end; i++, x++) { \ 1282 pRow[i] = (PIXEL_TYPE) DITHER_HPCR(x, y, r, g, b); \ 1283 } 1284#include "swrast/s_tritemp.h" 1285 1286 1287 1288/* 1289 * XImage, flat, NON-depth-buffered, 8-bit PF_LOOKUP triangle. 1290 */ 1291#define NAME flat_LOOKUP8_triangle 1292#define PIXEL_ADDRESS(X,Y) PIXEL_ADDR1(xrb, X, Y) 1293#define PIXEL_TYPE GLubyte 1294#define BYTES_PER_ROW (xrb->ximage->bytes_per_line) 1295#define SETUP_CODE \ 1296 GET_XRB(xrb); \ 1297 LOOKUP_SETUP; \ 1298 GLubyte r = v2->color[0]; \ 1299 GLubyte g = v2->color[1]; \ 1300 GLubyte b = v2->color[2]; \ 1301 GLubyte p = LOOKUP(r,g,b); 1302#define RENDER_SPAN( span ) \ 1303 GLuint i; \ 1304 for (i = 0; i < span.end; i++) { \ 1305 pRow[i] = (PIXEL_TYPE) p; \ 1306 } 1307#include "swrast/s_tritemp.h" 1308 1309 1310 1311#ifdef DEBUG 1312extern void _xmesa_print_triangle_func( swrast_tri_func triFunc ); 1313void _xmesa_print_triangle_func( swrast_tri_func triFunc ) 1314{ 1315 _mesa_printf("XMesa tri func = "); 1316 if (triFunc ==smooth_TRUECOLOR_z_triangle) 1317 _mesa_printf("smooth_TRUECOLOR_z_triangle\n"); 1318 else if (triFunc ==smooth_8A8B8G8R_z_triangle) 1319 _mesa_printf("smooth_8A8B8G8R_z_triangle\n"); 1320 else if (triFunc ==smooth_8A8R8G8B_z_triangle) 1321 _mesa_printf("smooth_8A8R8G8B_z_triangle\n"); 1322 else if (triFunc ==smooth_8R8G8B_z_triangle) 1323 _mesa_printf("smooth_8R8G8B_z_triangle\n"); 1324 else if (triFunc ==smooth_8R8G8B24_z_triangle) 1325 _mesa_printf("smooth_8R8G8B24_z_triangle\n"); 1326 else if (triFunc ==smooth_TRUEDITHER_z_triangle) 1327 _mesa_printf("smooth_TRUEDITHER_z_triangle\n"); 1328 else if (triFunc ==smooth_5R6G5B_z_triangle) 1329 _mesa_printf("smooth_5R6G5B_z_triangle\n"); 1330 else if (triFunc ==smooth_DITHER_5R6G5B_z_triangle) 1331 _mesa_printf("smooth_DITHER_5R6G5B_z_triangle\n"); 1332 else if (triFunc ==smooth_HPCR_z_triangle) 1333 _mesa_printf("smooth_HPCR_z_triangle\n"); 1334 else if (triFunc ==smooth_DITHER8_z_triangle) 1335 _mesa_printf("smooth_DITHER8_z_triangle\n"); 1336 else if (triFunc ==smooth_LOOKUP8_z_triangle) 1337 _mesa_printf("smooth_LOOKUP8_z_triangle\n"); 1338 else if (triFunc ==flat_TRUECOLOR_z_triangle) 1339 _mesa_printf("flat_TRUECOLOR_z_triangle\n"); 1340 else if (triFunc ==flat_8A8B8G8R_z_triangle) 1341 _mesa_printf("flat_8A8B8G8R_z_triangle\n"); 1342 else if (triFunc ==flat_8A8R8G8B_z_triangle) 1343 _mesa_printf("flat_8A8R8G8B_z_triangle\n"); 1344 else if (triFunc ==flat_8R8G8B_z_triangle) 1345 _mesa_printf("flat_8R8G8B_z_triangle\n"); 1346 else if (triFunc ==flat_8R8G8B24_z_triangle) 1347 _mesa_printf("flat_8R8G8B24_z_triangle\n"); 1348 else if (triFunc ==flat_TRUEDITHER_z_triangle) 1349 _mesa_printf("flat_TRUEDITHER_z_triangle\n"); 1350 else if (triFunc ==flat_5R6G5B_z_triangle) 1351 _mesa_printf("flat_5R6G5B_z_triangle\n"); 1352 else if (triFunc ==flat_DITHER_5R6G5B_z_triangle) 1353 _mesa_printf("flat_DITHER_5R6G5B_z_triangle\n"); 1354 else if (triFunc ==flat_HPCR_z_triangle) 1355 _mesa_printf("flat_HPCR_z_triangle\n"); 1356 else if (triFunc ==flat_DITHER8_z_triangle) 1357 _mesa_printf("flat_DITHER8_z_triangle\n"); 1358 else if (triFunc ==flat_LOOKUP8_z_triangle) 1359 _mesa_printf("flat_LOOKUP8_z_triangle\n"); 1360 else if (triFunc ==smooth_TRUECOLOR_triangle) 1361 _mesa_printf("smooth_TRUECOLOR_triangle\n"); 1362 else if (triFunc ==smooth_8A8B8G8R_triangle) 1363 _mesa_printf("smooth_8A8B8G8R_triangle\n"); 1364 else if (triFunc ==smooth_8A8R8G8B_triangle) 1365 _mesa_printf("smooth_8A8R8G8B_triangle\n"); 1366 else if (triFunc ==smooth_8R8G8B_triangle) 1367 _mesa_printf("smooth_8R8G8B_triangle\n"); 1368 else if (triFunc ==smooth_8R8G8B24_triangle) 1369 _mesa_printf("smooth_8R8G8B24_triangle\n"); 1370 else if (triFunc ==smooth_TRUEDITHER_triangle) 1371 _mesa_printf("smooth_TRUEDITHER_triangle\n"); 1372 else if (triFunc ==smooth_5R6G5B_triangle) 1373 _mesa_printf("smooth_5R6G5B_triangle\n"); 1374 else if (triFunc ==smooth_DITHER_5R6G5B_triangle) 1375 _mesa_printf("smooth_DITHER_5R6G5B_triangle\n"); 1376 else if (triFunc ==smooth_HPCR_triangle) 1377 _mesa_printf("smooth_HPCR_triangle\n"); 1378 else if (triFunc ==smooth_DITHER8_triangle) 1379 _mesa_printf("smooth_DITHER8_triangle\n"); 1380 else if (triFunc ==smooth_LOOKUP8_triangle) 1381 _mesa_printf("smooth_LOOKUP8_triangle\n"); 1382 else if (triFunc ==flat_TRUECOLOR_triangle) 1383 _mesa_printf("flat_TRUECOLOR_triangle\n"); 1384 else if (triFunc ==flat_TRUEDITHER_triangle) 1385 _mesa_printf("flat_TRUEDITHER_triangle\n"); 1386 else if (triFunc ==flat_8A8B8G8R_triangle) 1387 _mesa_printf("flat_8A8B8G8R_triangle\n"); 1388 else if (triFunc ==flat_8A8R8G8B_triangle) 1389 _mesa_printf("flat_8A8R8G8B_triangle\n"); 1390 else if (triFunc ==flat_8R8G8B_triangle) 1391 _mesa_printf("flat_8R8G8B_triangle\n"); 1392 else if (triFunc ==flat_8R8G8B24_triangle) 1393 _mesa_printf("flat_8R8G8B24_triangle\n"); 1394 else if (triFunc ==flat_5R6G5B_triangle) 1395 _mesa_printf("flat_5R6G5B_triangle\n"); 1396 else if (triFunc ==flat_DITHER_5R6G5B_triangle) 1397 _mesa_printf("flat_DITHER_5R6G5B_triangle\n"); 1398 else if (triFunc ==flat_HPCR_triangle) 1399 _mesa_printf("flat_HPCR_triangle\n"); 1400 else if (triFunc ==flat_DITHER8_triangle) 1401 _mesa_printf("flat_DITHER8_triangle\n"); 1402 else if (triFunc ==flat_LOOKUP8_triangle) 1403 _mesa_printf("flat_LOOKUP8_triangle\n"); 1404 else 1405 _mesa_printf("???\n"); 1406} 1407#endif 1408 1409 1410#ifdef DEBUG 1411 1412/* record the current triangle function name */ 1413static const char *triFuncName = NULL; 1414 1415#define USE(triFunc) \ 1416do { \ 1417 triFuncName = #triFunc; \ 1418 return triFunc; \ 1419} while (0) 1420 1421#else 1422 1423#define USE(triFunc) return triFunc 1424 1425#endif 1426 1427 1428/** 1429 * Return pointer to line drawing function, or NULL if we should use a 1430 * swrast fallback. 1431 */ 1432static swrast_tri_func 1433get_triangle_func(GLcontext *ctx) 1434{ 1435 SWcontext *swrast = SWRAST_CONTEXT(ctx); 1436 XMesaContext xmesa = XMESA_CONTEXT(ctx); 1437 int depth = GET_VISUAL_DEPTH(xmesa->xm_visual); 1438 struct xmesa_renderbuffer *xrb; 1439 1440#ifdef DEBUG 1441 triFuncName = NULL; 1442#endif 1443 1444 if ((ctx->DrawBuffer->_ColorDrawBufferMask[0] 1445 & (BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT)) == 0) 1446 return (swrast_tri_func) NULL; 1447 if (ctx->RenderMode != GL_RENDER) return (swrast_tri_func) NULL; 1448 if (ctx->Polygon.SmoothFlag) return (swrast_tri_func) NULL; 1449 if (ctx->Texture._EnabledUnits) return (swrast_tri_func) NULL; 1450 if (swrast->_RasterMask & MULTI_DRAW_BIT) return (swrast_tri_func) NULL; 1451 if (ctx->Polygon.CullFlag && 1452 ctx->Polygon.CullFaceMode == GL_FRONT_AND_BACK) 1453 return (swrast_tri_func) NULL; 1454 1455 xrb = (struct xmesa_renderbuffer *) 1456 ctx->DrawBuffer->_ColorDrawBuffers[0][0]->Wrapped; 1457 1458 if (xrb->ximage) { 1459 if ( ctx->Light.ShadeModel==GL_SMOOTH 1460 && swrast->_RasterMask==DEPTH_BIT 1461 && ctx->Depth.Func==GL_LESS 1462 && ctx->Depth.Mask==GL_TRUE 1463 && ctx->Visual.depthBits == DEFAULT_SOFTWARE_DEPTH_BITS 1464 && ctx->Polygon.StippleFlag==GL_FALSE) { 1465 switch (xmesa->pixelformat) { 1466 case PF_Truecolor: 1467 USE(smooth_TRUECOLOR_z_triangle); 1468 case PF_8A8B8G8R: 1469 USE(smooth_8A8B8G8R_z_triangle); 1470 case PF_8A8R8G8B: 1471 USE(smooth_8A8R8G8B_z_triangle); 1472 case PF_8R8G8B: 1473 USE(smooth_8R8G8B_z_triangle); 1474 case PF_8R8G8B24: 1475 USE(smooth_8R8G8B24_z_triangle); 1476 case PF_Dither_True: 1477 USE(smooth_TRUEDITHER_z_triangle); 1478 case PF_5R6G5B: 1479 USE(smooth_5R6G5B_z_triangle); 1480 case PF_Dither_5R6G5B: 1481 USE(smooth_DITHER_5R6G5B_z_triangle); 1482 case PF_HPCR: 1483 USE(smooth_HPCR_z_triangle); 1484 case PF_Dither: 1485 if (depth == 8) 1486 USE(smooth_DITHER8_z_triangle); 1487 else 1488 USE(smooth_DITHER_z_triangle); 1489 case PF_Lookup: 1490 if (depth == 8) 1491 USE(smooth_LOOKUP8_z_triangle); 1492 else 1493 return (swrast_tri_func) NULL; 1494 default: 1495 return (swrast_tri_func) NULL; 1496 } 1497 } 1498 if ( ctx->Light.ShadeModel==GL_FLAT 1499 && swrast->_RasterMask==DEPTH_BIT 1500 && ctx->Depth.Func==GL_LESS 1501 && ctx->Depth.Mask==GL_TRUE 1502 && ctx->Visual.depthBits == DEFAULT_SOFTWARE_DEPTH_BITS 1503 && ctx->Polygon.StippleFlag==GL_FALSE) { 1504 switch (xmesa->pixelformat) { 1505 case PF_Truecolor: 1506 USE(flat_TRUECOLOR_z_triangle); 1507 case PF_8A8B8G8R: 1508 USE(flat_8A8B8G8R_z_triangle); 1509 case PF_8A8R8G8B: 1510 USE(flat_8A8R8G8B_z_triangle); 1511 case PF_8R8G8B: 1512 USE(flat_8R8G8B_z_triangle); 1513 case PF_8R8G8B24: 1514 USE(flat_8R8G8B24_z_triangle); 1515 case PF_Dither_True: 1516 USE(flat_TRUEDITHER_z_triangle); 1517 case PF_5R6G5B: 1518 USE(flat_5R6G5B_z_triangle); 1519 case PF_Dither_5R6G5B: 1520 USE(flat_DITHER_5R6G5B_z_triangle); 1521 case PF_HPCR: 1522 USE(flat_HPCR_z_triangle); 1523 case PF_Dither: 1524 if (depth == 8) 1525 USE(flat_DITHER8_z_triangle); 1526 else 1527 USE(flat_DITHER_z_triangle); 1528 case PF_Lookup: 1529 if (depth == 8) 1530 USE(flat_LOOKUP8_z_triangle); 1531 else 1532 return (swrast_tri_func) NULL; 1533 default: 1534 return (swrast_tri_func) NULL; 1535 } 1536 } 1537 if ( swrast->_RasterMask==0 /* no depth test */ 1538 && ctx->Light.ShadeModel==GL_SMOOTH 1539 && ctx->Polygon.StippleFlag==GL_FALSE) { 1540 switch (xmesa->pixelformat) { 1541 case PF_Truecolor: 1542 USE(smooth_TRUECOLOR_triangle); 1543 case PF_8A8B8G8R: 1544 USE(smooth_8A8B8G8R_triangle); 1545 case PF_8A8R8G8B: 1546 USE(smooth_8A8R8G8B_triangle); 1547 case PF_8R8G8B: 1548 USE(smooth_8R8G8B_triangle); 1549 case PF_8R8G8B24: 1550 USE(smooth_8R8G8B24_triangle); 1551 case PF_Dither_True: 1552 USE(smooth_TRUEDITHER_triangle); 1553 case PF_5R6G5B: 1554 USE(smooth_5R6G5B_triangle); 1555 case PF_Dither_5R6G5B: 1556 USE(smooth_DITHER_5R6G5B_triangle); 1557 case PF_HPCR: 1558 USE(smooth_HPCR_triangle); 1559 case PF_Dither: 1560 if (depth == 8) 1561 USE(smooth_DITHER8_triangle); 1562 else 1563 USE(smooth_DITHER_triangle); 1564 case PF_Lookup: 1565 if (depth == 8) 1566 USE(smooth_LOOKUP8_triangle); 1567 else 1568 return (swrast_tri_func) NULL; 1569 default: 1570 return (swrast_tri_func) NULL; 1571 } 1572 } 1573 1574 if ( swrast->_RasterMask==0 /* no depth test */ 1575 && ctx->Light.ShadeModel==GL_FLAT 1576 && ctx->Polygon.StippleFlag==GL_FALSE) { 1577 switch (xmesa->pixelformat) { 1578 case PF_Truecolor: 1579 USE(flat_TRUECOLOR_triangle); 1580 case PF_Dither_True: 1581 USE(flat_TRUEDITHER_triangle); 1582 case PF_8A8B8G8R: 1583 USE(flat_8A8B8G8R_triangle); 1584 case PF_8A8R8G8B: 1585 USE(flat_8A8R8G8B_triangle); 1586 case PF_8R8G8B: 1587 USE(flat_8R8G8B_triangle); 1588 case PF_8R8G8B24: 1589 USE(flat_8R8G8B24_triangle); 1590 case PF_5R6G5B: 1591 USE(flat_5R6G5B_triangle); 1592 case PF_Dither_5R6G5B: 1593 USE(flat_DITHER_5R6G5B_triangle); 1594 case PF_HPCR: 1595 USE(flat_HPCR_triangle); 1596 case PF_Dither: 1597 if (depth == 8) 1598 USE(flat_DITHER8_triangle); 1599 else 1600 USE(flat_DITHER_triangle); 1601 case PF_Lookup: 1602 if (depth == 8) 1603 USE(flat_LOOKUP8_triangle); 1604 else 1605 return (swrast_tri_func) NULL; 1606 default: 1607 return (swrast_tri_func) NULL; 1608 } 1609 } 1610 1611 return (swrast_tri_func) NULL; 1612 } 1613 else { 1614 /* draw to pixmap */ 1615 return (swrast_tri_func) NULL; 1616 } 1617} 1618 1619 1620/* Override for the swrast tri-selection function. Try to use one 1621 * of our internal tri functions, otherwise fall back to the 1622 * standard swrast functions. 1623 */ 1624void xmesa_choose_triangle( GLcontext *ctx ) 1625{ 1626 SWcontext *swrast = SWRAST_CONTEXT(ctx); 1627 1628 if (!(swrast->Triangle = get_triangle_func( ctx ))) 1629 _swrast_choose_triangle( ctx ); 1630} 1631 1632