X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fpack.c;h=223bbb5adc1991d3ae2c5651bf70e2fc24a0c6f6;hb=8471f7a5fa1d5c00de9f314eaccd23dd0e62e71b;hp=2111a76040071f05cf44d339e3cee3fb1fa937e0;hpb=818585b9f9ccd55b992e35f4d74120f0e879559f;p=mesa.git diff --git a/src/mesa/main/pack.c b/src/mesa/main/pack.c index 2111a760400..223bbb5adc1 100644 --- a/src/mesa/main/pack.c +++ b/src/mesa/main/pack.c @@ -42,16 +42,16 @@ #endif +#include "errors.h" #include "glheader.h" -#include "colormac.h" #include "enums.h" #include "image.h" -#include "imports.h" + #include "macros.h" #include "mtypes.h" #include "pack.h" #include "pixeltransfer.h" -#include "imports.h" + #include "glformats.h" #include "format_utils.h" #include "format_pack.h" @@ -257,9 +257,9 @@ extract_uint_indexes(GLuint n, GLuint indexes[], GLenum srcFormat, GLenum srcType, const GLvoid *src, const struct gl_pixelstore_attrib *unpack ) { - ASSERT(srcFormat == GL_COLOR_INDEX || srcFormat == GL_STENCIL_INDEX); + assert(srcFormat == GL_COLOR_INDEX || srcFormat == GL_STENCIL_INDEX); - ASSERT(srcType == GL_BITMAP || + assert(srcType == GL_BITMAP || srcType == GL_UNSIGNED_BYTE || srcType == GL_BYTE || srcType == GL_UNSIGNED_SHORT || @@ -461,27 +461,11 @@ extract_uint_indexes(GLuint n, GLuint indexes[], break; default: - _mesa_problem(NULL, "bad srcType in extract_uint_indexes"); - return; + unreachable("bad srcType in extract_uint_indexes"); } } -static inline GLuint -clamp_float_to_uint(GLfloat f) -{ - return f < 0.0F ? 0 : F_TO_I(f); -} - - -static inline GLuint -clamp_half_to_uint(GLhalfARB h) -{ - GLfloat f = _mesa_half_to_float(h); - return f < 0.0F ? 0 : F_TO_I(f); -} - - /* * Unpack a row of stencil data from a client buffer according to * the pixel unpacking parameters. @@ -503,7 +487,7 @@ _mesa_unpack_stencil_span( struct gl_context *ctx, GLuint n, const struct gl_pixelstore_attrib *srcPacking, GLbitfield transferOps ) { - ASSERT(srcType == GL_BITMAP || + assert(srcType == GL_BITMAP || srcType == GL_UNSIGNED_BYTE || srcType == GL_BYTE || srcType == GL_UNSIGNED_SHORT || @@ -516,7 +500,7 @@ _mesa_unpack_stencil_span( struct gl_context *ctx, GLuint n, srcType == GL_FLOAT || srcType == GL_FLOAT_32_UNSIGNED_INT_24_8_REV); - ASSERT(dstType == GL_UNSIGNED_BYTE || + assert(dstType == GL_UNSIGNED_BYTE || dstType == GL_UNSIGNED_SHORT || dstType == GL_UNSIGNED_INT || dstType == GL_FLOAT_32_UNSIGNED_INT_24_8_REV); @@ -601,7 +585,7 @@ _mesa_unpack_stencil_span( struct gl_context *ctx, GLuint n, } break; default: - _mesa_problem(ctx, "bad dstType in _mesa_unpack_stencil_span"); + unreachable("bad dstType in _mesa_unpack_stencil_span"); } free(indexes); @@ -748,7 +732,7 @@ _mesa_pack_stencil_span( struct gl_context *ctx, GLuint n, } break; default: - _mesa_problem(ctx, "bad type in _mesa_pack_index_span"); + unreachable("bad type in _mesa_pack_index_span"); } free(stencil); @@ -796,7 +780,7 @@ _mesa_unpack_depth_span( struct gl_context *ctx, GLuint n, * back to an int type can introduce errors that will show up as * artifacts in things like depth peeling which uses glCopyTexImage. */ - if (ctx->Pixel.DepthScale == 1.0 && ctx->Pixel.DepthBias == 0.0) { + if (ctx->Pixel.DepthScale == 1.0F && ctx->Pixel.DepthBias == 0.0F) { if (srcType == GL_UNSIGNED_INT && dstType == GL_UNSIGNED_SHORT) { const GLuint *src = (const GLuint *) source; GLushort *dst = (GLushort *) dest; @@ -874,8 +858,8 @@ _mesa_unpack_depth_span( struct gl_context *ctx, GLuint n, case GL_UNSIGNED_INT_24_8_EXT: /* GL_EXT_packed_depth_stencil */ if (dstType == GL_UNSIGNED_INT_24_8_EXT && depthMax == 0xffffff && - ctx->Pixel.DepthScale == 1.0 && - ctx->Pixel.DepthBias == 0.0) { + ctx->Pixel.DepthScale == 1.0F && + ctx->Pixel.DepthBias == 0.0F) { const GLuint *src = (const GLuint *) source; GLuint *zValues = (GLuint *) dest; GLuint i; @@ -945,7 +929,7 @@ _mesa_unpack_depth_span( struct gl_context *ctx, GLuint n, { const GLfloat scale = ctx->Pixel.DepthScale; const GLfloat bias = ctx->Pixel.DepthBias; - if (scale != 1.0 || bias != 0.0) { + if (scale != 1.0F || bias != 0.0F) { GLuint i; for (i = 0; i < n; i++) { depthValues[i] = depthValues[i] * scale + bias; @@ -958,7 +942,7 @@ _mesa_unpack_depth_span( struct gl_context *ctx, GLuint n, if (needClamp) { GLuint i; for (i = 0; i < n; i++) { - depthValues[i] = (GLfloat)CLAMP(depthValues[i], 0.0, 1.0); + depthValues[i] = CLAMP(depthValues[i], 0.0F, 1.0F); } } @@ -988,7 +972,7 @@ _mesa_unpack_depth_span( struct gl_context *ctx, GLuint n, else if (dstType == GL_UNSIGNED_SHORT) { GLushort *zValues = (GLushort *) dest; GLuint i; - ASSERT(depthMax <= 0xffff); + assert(depthMax <= 0xffff); for (i = 0; i < n; i++) { zValues[i] = (GLushort) (depthValues[i] * (GLfloat) depthMax); } @@ -1004,7 +988,7 @@ _mesa_unpack_depth_span( struct gl_context *ctx, GLuint n, } } else { - ASSERT(0); + assert(0); } free(depthTemp); @@ -1025,7 +1009,7 @@ _mesa_pack_depth_span( struct gl_context *ctx, GLuint n, GLvoid *dest, return; } - if (ctx->Pixel.DepthScale != 1.0 || ctx->Pixel.DepthBias != 0.0) { + if (ctx->Pixel.DepthScale != 1.0F || ctx->Pixel.DepthBias != 0.0F) { memcpy(depthCopy, depthSpan, n * sizeof(GLfloat)); _mesa_scale_and_bias_depth(ctx, n, depthCopy); depthSpan = depthCopy; @@ -1074,6 +1058,21 @@ _mesa_pack_depth_span( struct gl_context *ctx, GLuint n, GLvoid *dest, } } break; + case GL_UNSIGNED_INT_24_8: + { + const GLdouble scale = (GLdouble) 0xffffff; + GLuint *dst = (GLuint *) dest; + GLuint i; + for (i = 0; i < n; i++) { + GLuint z = (GLuint) (depthSpan[i] * scale); + assert(z <= 0xffffff); + dst[i] = (z << 8); + } + if (dstPacking->SwapBytes) { + _mesa_swap4( (GLuint *) dst, n ); + } + break; + } case GL_UNSIGNED_INT: { GLuint *dst = (GLuint *) dest; @@ -1124,7 +1123,7 @@ _mesa_pack_depth_span( struct gl_context *ctx, GLuint n, GLvoid *dest, } break; default: - _mesa_problem(ctx, "bad type in _mesa_pack_depth_span"); + unreachable("bad type in _mesa_pack_depth_span()"); } free(depthCopy); @@ -1153,7 +1152,7 @@ _mesa_pack_depth_stencil_span(struct gl_context *ctx,GLuint n, return; } - if (ctx->Pixel.DepthScale != 1.0 || ctx->Pixel.DepthBias != 0.0) { + if (ctx->Pixel.DepthScale != 1.0F || ctx->Pixel.DepthBias != 0.0F) { memcpy(depthCopy, depthVals, n * sizeof(GLfloat)); _mesa_scale_and_bias_depth(ctx, n, depthCopy); depthVals = depthCopy; @@ -1264,7 +1263,7 @@ _mesa_unpack_image( GLuint dimensions, for (i = 0; i < width; i++) { if (*s & srcMask) { *d |= dstMask; - } + } if (srcMask == 128) { srcMask = 1; s++; @@ -1306,7 +1305,7 @@ _mesa_unpack_image( GLuint dimensions, } else { dstMask = dstMask >> 1; - } + } } } } @@ -1487,20 +1486,20 @@ _mesa_pack_luminance_from_rgba_integer(GLuint n, case GL_UNSIGNED_BYTE: { GLbyte *dst = (GLbyte *) dstAddr; dst[i] = lum32; + break; } - break; case GL_SHORT: case GL_UNSIGNED_SHORT: { GLshort *dst = (GLshort *) dstAddr; dst[i] = lum32; + break; } - break; case GL_INT: case GL_UNSIGNED_INT: { GLint *dst = (GLint *) dstAddr; dst[i] = lum32; + break; } - break; } } return; @@ -1525,21 +1524,22 @@ _mesa_pack_luminance_from_rgba_integer(GLuint n, GLbyte *dst = (GLbyte *) dstAddr; dst[2*i] = lum32; dst[2*i+1] = alpha; + break; } case GL_SHORT: case GL_UNSIGNED_SHORT: { GLshort *dst = (GLshort *) dstAddr; dst[i] = lum32; dst[2*i+1] = alpha; + break; } - break; case GL_INT: case GL_UNSIGNED_INT: { GLint *dst = (GLint *) dstAddr; dst[i] = lum32; dst[2*i+1] = alpha; + break; } - break; } } return;