1bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez/* 2bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * Copyright (C) 2009 Francisco Jerez. 3bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * All Rights Reserved. 4bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * 5bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * Permission is hereby granted, free of charge, to any person obtaining 6bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * a copy of this software and associated documentation files (the 7bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * "Software"), to deal in the Software without restriction, including 8bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * without limitation the rights to use, copy, modify, merge, publish, 9bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * distribute, sublicense, and/or sell copies of the Software, and to 10bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * permit persons to whom the Software is furnished to do so, subject to 11bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * the following conditions: 12bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * 13bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * The above copyright notice and this permission notice (including the 14bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * next paragraph) shall be included in all copies or substantial 15bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * portions of the Software. 16bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * 17bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 20bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 21bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 22bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 23bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * 25bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez */ 26bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 27bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#ifndef __NOUVEAU_UTIL_H__ 28bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define __NOUVEAU_UTIL_H__ 29bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 30bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "main/formats.h" 31bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "main/colormac.h" 32bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 33bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic inline unsigned 34bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezpack_rgba_i(gl_format f, uint8_t c[]) 35bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 36bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez switch (f) { 37bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez case MESA_FORMAT_ARGB8888: 38bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return PACK_COLOR_8888(c[ACOMP], c[RCOMP], c[GCOMP], c[BCOMP]); 39bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez case MESA_FORMAT_ARGB8888_REV: 40bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return PACK_COLOR_8888(c[BCOMP], c[GCOMP], c[RCOMP], c[ACOMP]); 41bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez case MESA_FORMAT_XRGB8888: 42bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return PACK_COLOR_8888(0, c[RCOMP], c[GCOMP], c[BCOMP]); 43bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez case MESA_FORMAT_XRGB8888_REV: 44bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return PACK_COLOR_8888(c[BCOMP], c[GCOMP], c[RCOMP], 0); 45bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez case MESA_FORMAT_RGBA8888: 46bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return PACK_COLOR_8888(c[RCOMP], c[GCOMP], c[BCOMP], c[ACOMP]); 47bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez case MESA_FORMAT_RGBA8888_REV: 48bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return PACK_COLOR_8888(c[ACOMP], c[BCOMP], c[GCOMP], c[RCOMP]); 49bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez case MESA_FORMAT_RGB565: 50bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return PACK_COLOR_565(c[RCOMP], c[GCOMP], c[BCOMP]); 51bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez default: 52bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez assert(0); 53bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez } 54bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 55bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 56bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic inline unsigned 57bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezpack_zs_i(gl_format f, uint32_t z, uint8_t s) 58bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 59bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez switch (f) { 60bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez case MESA_FORMAT_Z24_S8: 61bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return (z & 0xffffff00) | (s & 0xff); 62bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez case MESA_FORMAT_Z24_X8: 63bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return (z & 0xffffff00); 64bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez case MESA_FORMAT_Z16: 65bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return (z & 0xffff0000) >> 16; 66bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez default: 67bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez assert(0); 68bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez } 69bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 70bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 71bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic inline unsigned 72bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezpack_rgba_f(gl_format f, float c[]) 73bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 74bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return pack_rgba_i(f, (uint8_t []) { 75bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez FLOAT_TO_UBYTE(c[RCOMP]), 76bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez FLOAT_TO_UBYTE(c[GCOMP]), 77bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez FLOAT_TO_UBYTE(c[BCOMP]), 78bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez FLOAT_TO_UBYTE(c[ACOMP]) }); 79bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 80bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 81bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic inline unsigned 82093dc9e548537e6c77e33064a584f849ad90dfa5Dave Airliepack_rgba_clamp_f(gl_format f, float c[]) 83093dc9e548537e6c77e33064a584f849ad90dfa5Dave Airlie{ 8481a86aea4f0990a1b8795f9e00e7a6c4ba368281Dave Airlie GLubyte bytes[4]; 8581a86aea4f0990a1b8795f9e00e7a6c4ba368281Dave Airlie _mesa_unclamped_float_rgba_to_ubyte(bytes, c); 8681a86aea4f0990a1b8795f9e00e7a6c4ba368281Dave Airlie return pack_rgba_i(f, bytes); 87093dc9e548537e6c77e33064a584f849ad90dfa5Dave Airlie} 88093dc9e548537e6c77e33064a584f849ad90dfa5Dave Airlie 89093dc9e548537e6c77e33064a584f849ad90dfa5Dave Airliestatic inline unsigned 90bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezpack_zs_f(gl_format f, float z, uint8_t s) 91bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 92bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return pack_zs_i(f, FLOAT_TO_UINT(z), s); 93bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 94bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 95bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez/* Integer base-2 logarithm, rounded towards zero. */ 96bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic inline unsigned 97bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezlog2i(unsigned i) 98bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 99bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez unsigned r = 0; 100bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 101bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez if (i & 0xffff0000) { 102bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez i >>= 16; 103bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez r += 16; 104bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez } 105bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez if (i & 0x0000ff00) { 106bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez i >>= 8; 107bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez r += 8; 108bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez } 109bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez if (i & 0x000000f0) { 110bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez i >>= 4; 111bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez r += 4; 112bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez } 113bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez if (i & 0x0000000c) { 114bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez i >>= 2; 115bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez r += 2; 116bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez } 117bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez if (i & 0x00000002) { 118bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez r += 1; 119bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez } 120bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return r; 121bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 122bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 123bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic inline unsigned 124bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezalign(unsigned x, unsigned m) 125bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 126bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return (x + m - 1) & ~(m - 1); 127bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 128bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 129bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic inline void 130bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezget_scissors(struct gl_framebuffer *fb, int *x, int *y, int *w, int *h) 131bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 132bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez *w = fb->_Xmax - fb->_Xmin; 133bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez *h = fb->_Ymax - fb->_Ymin; 134bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez *x = fb->_Xmin; 135bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez *y = (fb->Name ? fb->_Ymin : 136bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez /* Window system FBO: Flip the Y coordinate. */ 137bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez fb->Height - fb->_Ymax); 138bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 139bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 140bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic inline void 141f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergget_viewport_scale(struct gl_context *ctx, float a[16]) 142bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 143bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez struct gl_viewport_attrib *vp = &ctx->Viewport; 144bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez struct gl_framebuffer *fb = ctx->DrawBuffer; 145bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 146bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez a[MAT_SX] = (float)vp->Width / 2; 147bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 148bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez if (fb->Name) 149bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez a[MAT_SY] = (float)vp->Height / 2; 150bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez else 151bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez /* Window system FBO: Flip the Y coordinate. */ 152bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez a[MAT_SY] = - (float)vp->Height / 2; 153bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 154bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez a[MAT_SZ] = fb->_DepthMaxF * (vp->Far - vp->Near) / 2; 155bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 156bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 157bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic inline void 158f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergget_viewport_translate(struct gl_context *ctx, float a[4]) 159bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 160bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez struct gl_viewport_attrib *vp = &ctx->Viewport; 161bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez struct gl_framebuffer *fb = ctx->DrawBuffer; 162bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 163bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez a[0] = (float)vp->Width / 2 + vp->X; 164bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 165bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez if (fb->Name) 166bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez a[1] = (float)vp->Height / 2 + vp->Y; 167bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez else 168bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez /* Window system FBO: Flip the Y coordinate. */ 169bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez a[1] = fb->Height - (float)vp->Height / 2 - vp->Y; 170bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 171bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez a[2] = fb->_DepthMaxF * (vp->Far + vp->Near) / 2; 172bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 173bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 1747269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerezstatic inline GLboolean 1757269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerezis_color_operand(int op) 1767269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez{ 1777269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez return op == GL_SRC_COLOR || op == GL_ONE_MINUS_SRC_COLOR; 1787269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez} 1797269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez 1807269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerezstatic inline GLboolean 1817269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerezis_negative_operand(int op) 1827269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez{ 1837269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez return op == GL_ONE_MINUS_SRC_COLOR || op == GL_ONE_MINUS_SRC_ALPHA; 1847269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez} 1857269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez 1867269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerezstatic inline GLboolean 1877269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerezis_texture_source(int s) 1887269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez{ 1897269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez return s == GL_TEXTURE || (s >= GL_TEXTURE0 && s <= GL_TEXTURE31); 1907269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez} 1917269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez 192c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerezstatic inline struct gl_texgen * 193c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerezget_texgen_coord(struct gl_texture_unit *u, int i) 194c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez{ 195c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez return ((struct gl_texgen *[]) 196c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez { &u->GenS, &u->GenT, &u->GenR, &u->GenQ }) [i]; 197c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez} 198c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez 199c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerezstatic inline float * 200c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerezget_texgen_coeff(struct gl_texgen *c) 201c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez{ 202c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez if (c->Mode == GL_OBJECT_LINEAR) 203c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez return c->ObjectPlane; 204c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez else if (c->Mode == GL_EYE_LINEAR) 205c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez return c->EyePlane; 206c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez else 207c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez return NULL; 208c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez} 209c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez 2106d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotnýstatic inline unsigned 2116d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotnýget_format_blocksx(gl_format format, 2126d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotný unsigned x) 2136d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotný{ 2146d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotný GLuint blockwidth; 2156d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotný GLuint blockheight; 2166d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotný _mesa_get_format_block_size(format, &blockwidth, &blockheight); 2176d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotný return (x + blockwidth - 1) / blockwidth; 2186d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotný} 2196d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotný 2206d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotnýstatic inline unsigned 2216d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotnýget_format_blocksy(gl_format format, 2226d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotný unsigned y) 2236d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotný{ 2246d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotný GLuint blockwidth; 2256d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotný GLuint blockheight; 2266d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotný _mesa_get_format_block_size(format, &blockwidth, &blockheight); 2276d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotný return (y + blockheight - 1) / blockheight; 2286d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotný} 2296d5efe96ee710ca1dd5f745f74a5bbfa4fd42fd9Viktor Novotný 230bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#endif 231