mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-29 05:10:23 +01:00
Merge git://proxy01.pd.intel.com:9419/git/mesa/mesa into crestline
This commit is contained in:
commit
e01ee3da57
23 changed files with 168 additions and 152 deletions
|
|
@ -138,7 +138,7 @@
|
|||
|
||||
|
||||
/* 3DSTATE_DEPTH_SUBRECT_DISABLE, p160 */
|
||||
#define _3DSTATE_DEPTH_SUBRECT_DISABLE (CMD_3D | (0x1c<<24) | (0x11<19) | 0x2)
|
||||
#define _3DSTATE_DEPTH_SUBRECT_DISABLE (CMD_3D | (0x1c<<24) | (0x11<<19) | 0x2)
|
||||
|
||||
/* p161 */
|
||||
#define _3DSTATE_DST_BUF_VARS_CMD (CMD_3D | (0x1d<<24) | (0x85<<16))
|
||||
|
|
|
|||
|
|
@ -813,7 +813,7 @@ static void i915_init_packets( i915ContextPtr i915 )
|
|||
I1_LOAD_S(4) |
|
||||
I1_LOAD_S(5) |
|
||||
I1_LOAD_S(6) |
|
||||
(4));
|
||||
(3));
|
||||
i915->state.Ctx[I915_CTXREG_LIS2] = 0;
|
||||
i915->state.Ctx[I915_CTXREG_LIS4] = 0;
|
||||
i915->state.Ctx[I915_CTXREG_LIS5] = 0;
|
||||
|
|
|
|||
|
|
@ -180,7 +180,7 @@ static void i915_emit_invarient_state( intelContextPtr intel )
|
|||
*/
|
||||
OUT_BATCH(_3DSTATE_LOAD_STATE_IMMEDIATE_1 |
|
||||
I1_LOAD_S(3) |
|
||||
(1));
|
||||
(0));
|
||||
OUT_BATCH(0);
|
||||
|
||||
/* XXX: Use this */
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@
|
|||
|
||||
|
||||
/* 3DSTATE_DEPTH_SUBRECT_DISABLE, p160 */
|
||||
#define _3DSTATE_DEPTH_SUBRECT_DISABLE (CMD_3D | (0x1c<<24) | (0x11<19) | 0x2)
|
||||
#define _3DSTATE_DEPTH_SUBRECT_DISABLE (CMD_3D | (0x1c<<24) | (0x11<<19) | 0x2)
|
||||
|
||||
/* p161 */
|
||||
#define _3DSTATE_DST_BUF_VARS_CMD (CMD_3D | (0x1d<<24) | (0x85<<16))
|
||||
|
|
|
|||
|
|
@ -148,18 +148,25 @@ brwChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
return &_mesa_texformat_ycbcr_rev;
|
||||
|
||||
case GL_COMPRESSED_RGB_FXT1_3DFX:
|
||||
return &_mesa_texformat_rgb_fxt1;
|
||||
case GL_COMPRESSED_RGBA_FXT1_3DFX:
|
||||
return &_mesa_texformat_rgb_fxt1;
|
||||
return &_mesa_texformat_rgba_fxt1;
|
||||
|
||||
case GL_RGB_S3TC:
|
||||
case GL_RGB4_S3TC:
|
||||
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
||||
return &_mesa_texformat_rgb_dxt1;
|
||||
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
||||
return &_mesa_texformat_rgba_dxt1;
|
||||
|
||||
case GL_RGBA_S3TC:
|
||||
case GL_RGBA4_S3TC:
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
||||
return &_mesa_texformat_rgba_dxt3;
|
||||
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
||||
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
||||
return &_mesa_texformat_rgb_dxt1; /* there is no rgba support? */
|
||||
return &_mesa_texformat_rgba_dxt5;
|
||||
|
||||
case GL_DEPTH_COMPONENT:
|
||||
case GL_DEPTH_COMPONENT16:
|
||||
|
|
|
|||
|
|
@ -263,6 +263,23 @@ pass0_make_mask(GLuint mesa_mask)
|
|||
return mask;
|
||||
}
|
||||
|
||||
static GLboolean
|
||||
pass0_opcode_is_tex(enum prog_opcode op)
|
||||
{
|
||||
switch (op) {
|
||||
case OPCODE_TEX:
|
||||
case OPCODE_TXB:
|
||||
case OPCODE_TXD:
|
||||
case OPCODE_TXL:
|
||||
case OPCODE_TXP:
|
||||
return GL_TRUE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
static nvsTexTarget
|
||||
pass0_make_tex_target(GLuint mesa)
|
||||
{
|
||||
|
|
@ -721,7 +738,11 @@ pass0_translate_arith(nouveauShader *nvs, struct gl_program *prog,
|
|||
(inst->SaturateMode != SATURATE_OFF),
|
||||
src[0], src[1], src[2]);
|
||||
nvsinst->tex_unit = inst->TexSrcUnit;
|
||||
nvsinst->tex_target = pass0_make_tex_target(inst->TexSrcTarget);
|
||||
if (pass0_opcode_is_tex(inst->Opcode))
|
||||
nvsinst->tex_target =
|
||||
pass0_make_tex_target(inst->TexSrcTarget);
|
||||
else
|
||||
nvsinst->tex_target = NVS_TEX_TARGET_UNKNOWN;
|
||||
|
||||
ret = GL_TRUE;
|
||||
} else
|
||||
|
|
|
|||
|
|
@ -338,7 +338,7 @@ void r300InitCmdBuf(r300ContextPtr r300)
|
|||
r300->hw.unk4260.cmd[0] = cmdpacket0(0x4260, 3);
|
||||
ALLOC_STATE( shade, always, 5, "shade", 0 );
|
||||
r300->hw.shade.cmd[0] = cmdpacket0(R300_RE_SHADE, 4);
|
||||
ALLOC_STATE( polygon_mode, always, 4, "unk4288", 0 );
|
||||
ALLOC_STATE( polygon_mode, always, 4, "polygon_mode", 0 );
|
||||
r300->hw.polygon_mode.cmd[0] = cmdpacket0(R300_RE_POLYGON_MODE, 3);
|
||||
ALLOC_STATE( fogp, always, 3, "fogp", 0 );
|
||||
r300->hw.fogp.cmd[0] = cmdpacket0(R300_RE_FOG_SCALE, 2);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
/* $XFree86: xc/lib/GL/mesa/src/drv/r300/r300_maos_arrays.c,v 1.3 2003/02/23 23:59:01 dawes Exp $ */
|
||||
/*
|
||||
Copyright (C) The Weather Channel, Inc. 2002. All Rights Reserved.
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
/* $XFree86: xc/lib/GL/mesa/src/drv/r200/r200_maos.h,v 1.1 2002/10/30 12:51:52 alanh Exp $ */
|
||||
/*
|
||||
Copyright (C) The Weather Channel, Inc. 2002. All Rights Reserved.
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
/* $XFree86: xc/lib/GL/mesa/src/drv/r300/r300_tex.c,v 1.2 2002/11/05 17:46:08 tsi Exp $ */
|
||||
/*
|
||||
Copyright (C) The Weather Channel, Inc. 2002. All Rights Reserved.
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
/* $XFree86: xc/lib/GL/mesa/src/drv/r300/r300_tex.h,v 1.1 2002/10/30 12:51:53 alanh Exp $ */
|
||||
/*
|
||||
Copyright (C) The Weather Channel, Inc. 2002. All Rights Reserved.
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
/* $XFree86: xc/lib/GL/mesa/src/drv/r300/r300_texmem.c,v 1.5 2002/12/17 00:32:56 dawes Exp $ */
|
||||
/**************************************************************************
|
||||
|
||||
Copyright (C) Tungsten Graphics 2002. All Rights Reserved.
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
/* $XFree86: xc/lib/GL/mesa/src/drv/r300/r300_texstate.c,v 1.3 2003/02/15 22:18:47 dawes Exp $ */
|
||||
/*
|
||||
Copyright (C) The Weather Channel, Inc. 2002. All Rights Reserved.
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_span.c,v 1.6 2002/10/30 12:51:56 alanh Exp $ */
|
||||
/**************************************************************************
|
||||
|
||||
Copyright (C) The Weather Channel, Inc. 2002. All Rights Reserved.
|
||||
|
|
|
|||
|
|
@ -768,9 +768,7 @@ void viaXMesaWindowMoved(struct via_context *vmesa)
|
|||
drawable);
|
||||
}
|
||||
|
||||
draw_buffer->drawXoff = (GLuint)(((drawable->x * bytePerPixel) & 0x1f) /
|
||||
bytePerPixel);
|
||||
draw_buffer->drawX = drawable->x - draw_buffer->drawXoff;
|
||||
draw_buffer->drawX = drawable->x;
|
||||
draw_buffer->drawY = drawable->y;
|
||||
draw_buffer->drawW = drawable->w;
|
||||
draw_buffer->drawH = drawable->h;
|
||||
|
|
@ -782,9 +780,7 @@ void viaXMesaWindowMoved(struct via_context *vmesa)
|
|||
readable);
|
||||
}
|
||||
|
||||
read_buffer->drawXoff = (GLuint)(((readable->x * bytePerPixel) & 0x1f) /
|
||||
bytePerPixel);
|
||||
read_buffer->drawX = readable->x - read_buffer->drawXoff;
|
||||
read_buffer->drawX = readable->x;
|
||||
read_buffer->drawY = readable->y;
|
||||
read_buffer->drawW = readable->w;
|
||||
read_buffer->drawH = readable->h;
|
||||
|
|
@ -795,13 +791,24 @@ void viaXMesaWindowMoved(struct via_context *vmesa)
|
|||
draw_buffer->drawX * bytePerPixel);
|
||||
|
||||
vmesa->front.origMap = (vmesa->front.map +
|
||||
draw_buffer->drawY * vmesa->front.pitch +
|
||||
draw_buffer->drawX * bytePerPixel);
|
||||
draw_buffer->drawY * vmesa->front.pitch +
|
||||
draw_buffer->drawX * bytePerPixel);
|
||||
|
||||
vmesa->back.orig = vmesa->back.offset;
|
||||
vmesa->depth.orig = vmesa->depth.offset;
|
||||
vmesa->back.origMap = vmesa->back.map;
|
||||
vmesa->depth.origMap = vmesa->depth.map;
|
||||
vmesa->back.orig = (vmesa->back.offset +
|
||||
draw_buffer->drawY * vmesa->back.pitch +
|
||||
draw_buffer->drawX * bytePerPixel);
|
||||
|
||||
vmesa->back.origMap = (vmesa->back.map +
|
||||
draw_buffer->drawY * vmesa->back.pitch +
|
||||
draw_buffer->drawX * bytePerPixel);
|
||||
|
||||
vmesa->depth.orig = (vmesa->depth.offset +
|
||||
draw_buffer->drawY * vmesa->depth.pitch +
|
||||
draw_buffer->drawX * bytePerPixel);
|
||||
|
||||
vmesa->depth.origMap = (vmesa->depth.map +
|
||||
draw_buffer->drawY * vmesa->depth.pitch +
|
||||
draw_buffer->drawX * bytePerPixel);
|
||||
|
||||
viaCalcViewport(vmesa->glCtx);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -104,11 +104,6 @@ struct via_renderbuffer {
|
|||
int drawW;
|
||||
int drawH;
|
||||
|
||||
int drawXoff; /* drawX is 32byte aligned - this is
|
||||
* the delta to the real origin, in
|
||||
* pixel units.
|
||||
*/
|
||||
|
||||
__DRIdrawablePrivate *dPriv;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -187,7 +187,7 @@ static void viaFillBuffer(struct via_context *vmesa,
|
|||
int w = pbox[i].x2 - pbox[i].x1;
|
||||
int h = pbox[i].y2 - pbox[i].y1;
|
||||
|
||||
int offset = (buffer->orig +
|
||||
int offset = (buffer->offset +
|
||||
y * buffer->pitch +
|
||||
x * bytePerPixel);
|
||||
|
||||
|
|
@ -276,7 +276,7 @@ static void viaClear(GLcontext *ctx, GLbitfield mask)
|
|||
|
||||
/* flip top to bottom */
|
||||
cy = dPriv->h - cy - ch;
|
||||
cx += vrb->drawX + vrb->drawXoff;
|
||||
cx += vrb->drawX;
|
||||
cy += vrb->drawY;
|
||||
|
||||
if (!all) {
|
||||
|
|
@ -359,8 +359,8 @@ static void viaDoSwapBuffers(struct via_context *vmesa,
|
|||
GLint w = b->x2 - b->x1;
|
||||
GLint h = b->y2 - b->y1;
|
||||
|
||||
GLuint src = back->orig + y * back->pitch + x * bytePerPixel;
|
||||
GLuint dest = front->orig + y * front->pitch + x * bytePerPixel;
|
||||
GLuint src = back->offset + y * back->pitch + x * bytePerPixel;
|
||||
GLuint dest = front->offset + y * front->pitch + x * bytePerPixel;
|
||||
|
||||
viaBlit(vmesa,
|
||||
bytePerPixel << 3,
|
||||
|
|
@ -747,7 +747,7 @@ static void via_emit_cliprect(struct via_context *vmesa,
|
|||
: HC_HDBFM_RGB565);
|
||||
|
||||
GLuint pitch = buffer->pitch;
|
||||
GLuint offset = buffer->orig;
|
||||
GLuint offset = buffer->offset;
|
||||
|
||||
if (0)
|
||||
fprintf(stderr, "emit cliprect for box %d,%d %d,%d\n",
|
||||
|
|
@ -768,7 +768,7 @@ static void via_emit_cliprect(struct via_context *vmesa,
|
|||
vb[4] = (HC_SubA_HDBBasL << 24) | (offset & 0xFFFFFF);
|
||||
vb[5] = (HC_SubA_HDBBasH << 24) | ((offset & 0xFF000000) >> 24);
|
||||
|
||||
vb[6] = (HC_SubA_HSPXYOS << 24) | ((31 - buffer->drawXoff) << HC_HSPXOS_SHIFT);
|
||||
vb[6] = (HC_SubA_HSPXYOS << 24);
|
||||
vb[7] = (HC_SubA_HDBFM << 24) | HC_HDBLoc_Local | format | pitch;
|
||||
}
|
||||
|
||||
|
|
@ -887,22 +887,18 @@ void viaFlushDmaLocked(struct via_context *vmesa, GLuint flags)
|
|||
struct via_renderbuffer *const vrb =
|
||||
(struct via_renderbuffer *) dPriv->driverPrivate;
|
||||
|
||||
|
||||
for (i = 0; i < vmesa->numClipRects; i++) {
|
||||
drm_clip_rect_t b;
|
||||
|
||||
b.x1 = pbox[i].x1 - (vrb->drawX + vrb->drawXoff);
|
||||
b.x2 = pbox[i].x2 - (vrb->drawX + vrb->drawXoff);
|
||||
b.y1 = pbox[i].y1 - vrb->drawY;
|
||||
b.y2 = pbox[i].y2 - vrb->drawY;
|
||||
b.x1 = pbox[i].x1;
|
||||
b.x2 = pbox[i].x2;
|
||||
b.y1 = pbox[i].y1;
|
||||
b.y2 = pbox[i].y2;
|
||||
|
||||
if (vmesa->scissor &&
|
||||
!intersect_rect(&b, &b, &vmesa->scissorRect))
|
||||
continue;
|
||||
|
||||
b.x1 += vrb->drawXoff;
|
||||
b.x2 += vrb->drawXoff;
|
||||
|
||||
via_emit_cliprect(vmesa, &b);
|
||||
|
||||
if (fire_buffer(vmesa) != 0) {
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@
|
|||
GLuint pitch = vrb->pitch; \
|
||||
GLuint height = dPriv->h; \
|
||||
GLint p = 0; \
|
||||
char *buf = (char *)(vrb->origMap + vrb->drawXoff * vrb->bpp); \
|
||||
char *buf = (char *)(vrb->origMap); \
|
||||
(void) p;
|
||||
|
||||
/* ================================================================
|
||||
|
|
@ -82,7 +82,7 @@
|
|||
__DRIdrawablePrivate *dPriv = vrb->dPriv; \
|
||||
GLuint depth_pitch = vrb->pitch; \
|
||||
GLuint height = dPriv->h; \
|
||||
char *buf = (char *)(vrb->map + (vrb->drawXoff * vrb->bpp/8))
|
||||
char *buf = (char *)(vrb->map)
|
||||
|
||||
#define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS
|
||||
|
||||
|
|
|
|||
|
|
@ -500,10 +500,8 @@ void viaEmitState(struct via_context *vmesa)
|
|||
|
||||
OUT_RING( HC_HEADER2 );
|
||||
OUT_RING( (HC_ParaType_NotTex << 16) );
|
||||
OUT_RING( (HC_SubA_HSPXYOS << 24) |
|
||||
(((32- vrb->drawXoff) & 0x1f) << HC_HSPXOS_SHIFT));
|
||||
OUT_RING( (HC_SubA_HSPXYOS << 24) |
|
||||
(((32 - vrb->drawXoff) & 0x1f) << HC_HSPXOS_SHIFT));
|
||||
OUT_RING( (HC_SubA_HSPXYOS << 24) );
|
||||
OUT_RING( (HC_SubA_HSPXYOS << 24) );
|
||||
|
||||
ADVANCE_RING();
|
||||
}
|
||||
|
|
@ -712,12 +710,8 @@ static void viaColorMask(GLcontext *ctx,
|
|||
}
|
||||
|
||||
|
||||
/* =============================================================
|
||||
*/
|
||||
|
||||
|
||||
/* Using drawXoff like this is incorrect outside of locked regions.
|
||||
* This hardware just isn't capable of private back buffers without
|
||||
/* This hardware just isn't capable of private back buffers without
|
||||
* glitches and/or a hefty locking scheme.
|
||||
*/
|
||||
void viaCalcViewport(GLcontext *ctx)
|
||||
|
|
@ -729,12 +723,10 @@ void viaCalcViewport(GLcontext *ctx)
|
|||
const GLfloat *v = ctx->Viewport._WindowMap.m;
|
||||
GLfloat *m = vmesa->ViewportMatrix.m;
|
||||
|
||||
/* See also via_translate_vertex.
|
||||
*/
|
||||
m[MAT_SX] = v[MAT_SX];
|
||||
m[MAT_TX] = v[MAT_TX] + SUBPIXEL_X + vrb->drawXoff;
|
||||
m[MAT_TX] = v[MAT_TX] + vrb->drawX + SUBPIXEL_X;
|
||||
m[MAT_SY] = - v[MAT_SY];
|
||||
m[MAT_TY] = - v[MAT_TY] + dPriv->h + SUBPIXEL_Y;
|
||||
m[MAT_TY] = - v[MAT_TY] + vrb->drawY + SUBPIXEL_Y + vrb->drawH;
|
||||
m[MAT_SZ] = v[MAT_SZ] * (1.0 / vmesa->depth_max);
|
||||
m[MAT_TZ] = v[MAT_TZ] * (1.0 / vmesa->depth_max);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3877,6 +3877,22 @@ _mesa_pack_stencil_span( const GLcontext *ctx, GLuint n,
|
|||
}
|
||||
}
|
||||
|
||||
#define DEPTH_VALUES(GLTYPE, GLTYPE2FLOAT) \
|
||||
do { \
|
||||
GLuint i; \
|
||||
const GLTYPE *src = (const GLTYPE *)source; \
|
||||
for (i = 0; i < n; i++) { \
|
||||
GLTYPE value = src[i]; \
|
||||
if (srcPacking->SwapBytes) { \
|
||||
if (sizeof(GLTYPE) == 2) { \
|
||||
SWAP2BYTE(value); \
|
||||
} else if (sizeof(GLTYPE) == 4) { \
|
||||
SWAP4BYTE(value); \
|
||||
} \
|
||||
} \
|
||||
depthValues[i] = CLAMP(GLTYPE2FLOAT(value), 0.0F, 1.0F); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
void
|
||||
_mesa_unpack_depth_span( const GLcontext *ctx, GLuint n,
|
||||
|
|
@ -3898,59 +3914,23 @@ _mesa_unpack_depth_span( const GLcontext *ctx, GLuint n,
|
|||
|
||||
switch (srcType) {
|
||||
case GL_BYTE:
|
||||
{
|
||||
GLuint i;
|
||||
const GLubyte *src = (const GLubyte *) source;
|
||||
for (i = 0; i < n; i++) {
|
||||
depthValues[i] = BYTE_TO_FLOAT(src[i]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
DEPTH_VALUES(GLbyte, BYTE_TO_FLOAT);
|
||||
break;
|
||||
case GL_UNSIGNED_BYTE:
|
||||
{
|
||||
GLuint i;
|
||||
const GLubyte *src = (const GLubyte *) source;
|
||||
for (i = 0; i < n; i++) {
|
||||
depthValues[i] = UBYTE_TO_FLOAT(src[i]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
DEPTH_VALUES(GLubyte, UBYTE_TO_FLOAT);
|
||||
break;
|
||||
case GL_SHORT:
|
||||
{
|
||||
GLuint i;
|
||||
const GLshort *src = (const GLshort *) source;
|
||||
for (i = 0; i < n; i++) {
|
||||
depthValues[i] = SHORT_TO_FLOAT(src[i]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
DEPTH_VALUES(GLshort, SHORT_TO_FLOAT);
|
||||
break;
|
||||
case GL_UNSIGNED_SHORT:
|
||||
{
|
||||
GLuint i;
|
||||
const GLushort *src = (const GLushort *) source;
|
||||
for (i = 0; i < n; i++) {
|
||||
depthValues[i] = USHORT_TO_FLOAT(src[i]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
DEPTH_VALUES(GLushort, USHORT_TO_FLOAT);
|
||||
break;
|
||||
case GL_INT:
|
||||
{
|
||||
GLuint i;
|
||||
const GLint *src = (const GLint *) source;
|
||||
for (i = 0; i < n; i++) {
|
||||
depthValues[i] = INT_TO_FLOAT(src[i]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
DEPTH_VALUES(GLint, INT_TO_FLOAT);
|
||||
break;
|
||||
case GL_UNSIGNED_INT:
|
||||
{
|
||||
GLuint i;
|
||||
const GLuint *src = (const GLuint *) source;
|
||||
for (i = 0; i < n; i++) {
|
||||
depthValues[i] = UINT_TO_FLOAT(src[i]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
DEPTH_VALUES(GLuint, UINT_TO_FLOAT);
|
||||
break;
|
||||
case GL_UNSIGNED_INT_24_8_EXT: /* GL_EXT_packed_depth_stencil */
|
||||
if (dstType == GL_UNSIGNED_INT &&
|
||||
depthScale == (GLfloat) 0xffffff &&
|
||||
|
|
@ -3960,7 +3940,11 @@ _mesa_unpack_depth_span( const GLcontext *ctx, GLuint n,
|
|||
GLuint *zValues = (GLuint *) dest;
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
zValues[i] = src[i] & 0xffffff00;
|
||||
GLuint value = src[i];
|
||||
if (srcPacking->SwapBytes) {
|
||||
SWAP4BYTE(value);
|
||||
}
|
||||
zValues[i] = value & 0xffffff00;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
@ -3969,19 +3953,27 @@ _mesa_unpack_depth_span( const GLcontext *ctx, GLuint n,
|
|||
const GLfloat scale = 1.0f / 0xffffff;
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
depthValues[i] = (src[i] >> 8) * scale;
|
||||
GLuint value = src[i];
|
||||
if (srcPacking->SwapBytes) {
|
||||
SWAP4BYTE(value);
|
||||
}
|
||||
depthValues[i] = (value >> 8) * scale;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case GL_FLOAT:
|
||||
_mesa_memcpy(depthValues, source, n * sizeof(GLfloat));
|
||||
break;
|
||||
DEPTH_VALUES(GLfloat, 1*);
|
||||
break;
|
||||
case GL_HALF_FLOAT_ARB:
|
||||
{
|
||||
GLuint i;
|
||||
const GLhalfARB *src = (const GLhalfARB *) source;
|
||||
for (i = 0; i < n; i++) {
|
||||
depthValues[i] = _mesa_half_to_float(src[i]);
|
||||
GLhalfARB value = src[i];
|
||||
if (srcPacking->SwapBytes) {
|
||||
SWAP2BYTE(value);
|
||||
}
|
||||
depthValues[i] = _mesa_half_to_float(value);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -752,44 +752,55 @@ fxt1_quantize_ALPHA1 (GLuint *cc,
|
|||
GLint minColL = 0, maxColL = 0;
|
||||
GLint minColR = 0, maxColR = 0;
|
||||
GLint sumL = 0, sumR = 0;
|
||||
|
||||
GLint nn_comp;
|
||||
/* Our solution here is to find the darkest and brightest colors in
|
||||
* the 4x4 tile and use those as the two representative colors.
|
||||
* There are probably better algorithms to use (histogram-based).
|
||||
*/
|
||||
minSum = 2000; /* big enough */
|
||||
maxSum = -1; /* small enough */
|
||||
for (k = 0; k < N_TEXELS / 2; k++) {
|
||||
GLint sum = 0;
|
||||
for (i = 0; i < n_comp; i++) {
|
||||
sum += input[k][i];
|
||||
}
|
||||
if (minSum > sum) {
|
||||
minSum = sum;
|
||||
minColL = k;
|
||||
}
|
||||
if (maxSum < sum) {
|
||||
maxSum = sum;
|
||||
maxColL = k;
|
||||
}
|
||||
sumL += sum;
|
||||
nn_comp = n_comp;
|
||||
while ((minColL == maxColL) && nn_comp) {
|
||||
minSum = 2000; /* big enough */
|
||||
maxSum = -1; /* small enough */
|
||||
for (k = 0; k < N_TEXELS / 2; k++) {
|
||||
GLint sum = 0;
|
||||
for (i = 0; i < nn_comp; i++) {
|
||||
sum += input[k][i];
|
||||
}
|
||||
if (minSum > sum) {
|
||||
minSum = sum;
|
||||
minColL = k;
|
||||
}
|
||||
if (maxSum < sum) {
|
||||
maxSum = sum;
|
||||
maxColL = k;
|
||||
}
|
||||
sumL += sum;
|
||||
}
|
||||
|
||||
nn_comp--;
|
||||
}
|
||||
minSum = 2000; /* big enough */
|
||||
maxSum = -1; /* small enough */
|
||||
for (; k < N_TEXELS; k++) {
|
||||
GLint sum = 0;
|
||||
for (i = 0; i < n_comp; i++) {
|
||||
sum += input[k][i];
|
||||
}
|
||||
if (minSum > sum) {
|
||||
minSum = sum;
|
||||
minColR = k;
|
||||
}
|
||||
if (maxSum < sum) {
|
||||
maxSum = sum;
|
||||
maxColR = k;
|
||||
}
|
||||
sumR += sum;
|
||||
|
||||
nn_comp = n_comp;
|
||||
while ((minColR == maxColR) && nn_comp) {
|
||||
minSum = 2000; /* big enough */
|
||||
maxSum = -1; /* small enough */
|
||||
for (k = N_TEXELS / 2; k < N_TEXELS; k++) {
|
||||
GLint sum = 0;
|
||||
for (i = 0; i < nn_comp; i++) {
|
||||
sum += input[k][i];
|
||||
}
|
||||
if (minSum > sum) {
|
||||
minSum = sum;
|
||||
minColR = k;
|
||||
}
|
||||
if (maxSum < sum) {
|
||||
maxSum = sum;
|
||||
maxColR = k;
|
||||
}
|
||||
sumR += sum;
|
||||
}
|
||||
|
||||
nn_comp--;
|
||||
}
|
||||
|
||||
/* choose the common vector (yuck!) */
|
||||
|
|
|
|||
|
|
@ -452,7 +452,8 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
|
|||
&& !scaleOrBias
|
||||
&& !zoom
|
||||
&& ctx->Visual.rgbMode
|
||||
&& width <= MAX_WIDTH) {
|
||||
&& width <= MAX_WIDTH
|
||||
&& !unpack->SwapBytes) {
|
||||
/* Special case: directly write 16-bit depth values */
|
||||
GLint row;
|
||||
for (row = 0; row < height; row++) {
|
||||
|
|
@ -472,7 +473,8 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
|
|||
&& !scaleOrBias
|
||||
&& !zoom
|
||||
&& ctx->Visual.rgbMode
|
||||
&& width <= MAX_WIDTH) {
|
||||
&& width <= MAX_WIDTH
|
||||
&& !unpack->SwapBytes) {
|
||||
/* Special case: shift 32-bit values down to Visual.depthBits */
|
||||
const GLint shift = 32 - ctx->DrawBuffer->Visual.depthBits;
|
||||
GLint row;
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ read_depth_pixels( GLcontext *ctx,
|
|||
&& !biasOrScale && !packing->SwapBytes) {
|
||||
/* Special case: directly read 24-bit unsigned depth values. */
|
||||
GLint j;
|
||||
ASSERT(rb->InternalFormat == GL_DEPTH_COMPONENT32);
|
||||
ASSERT(rb->InternalFormat == GL_DEPTH_COMPONENT24);
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_INT);
|
||||
for (j = 0; j < height; j++, y++) {
|
||||
GLuint *dest = (GLuint *)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue