aboutsummaryrefslogtreecommitdiff
path: root/mesalib/src/mesa/main
diff options
context:
space:
mode:
Diffstat (limited to 'mesalib/src/mesa/main')
-rw-r--r--mesalib/src/mesa/main/compiler.h6
-rw-r--r--mesalib/src/mesa/main/context.c3
-rw-r--r--mesalib/src/mesa/main/format_unpack.c4
-rw-r--r--mesalib/src/mesa/main/imports.h57
-rw-r--r--mesalib/src/mesa/main/macros.h10
-rw-r--r--mesalib/src/mesa/main/mtypes.h6
-rw-r--r--mesalib/src/mesa/main/pack.c220
-rw-r--r--mesalib/src/mesa/main/pixeltransfer.c10
-rw-r--r--mesalib/src/mesa/main/readpix.c12
-rw-r--r--mesalib/src/mesa/main/shaderapi.c29
-rw-r--r--mesalib/src/mesa/main/texobj.c3
-rw-r--r--mesalib/src/mesa/main/uniform_query.cpp2
12 files changed, 205 insertions, 157 deletions
diff --git a/mesalib/src/mesa/main/compiler.h b/mesalib/src/mesa/main/compiler.h
index 25d981053..bfa06f37d 100644
--- a/mesalib/src/mesa/main/compiler.h
+++ b/mesalib/src/mesa/main/compiler.h
@@ -285,12 +285,6 @@ static INLINE GLuint CPU_TO_LE32(GLuint x)
#endif
-/* This is a macro on IRIX */
-#ifdef _P
-#undef _P
-#endif
-
-
/* Turn off macro checking systems used by other libraries */
#ifdef CHECK
#undef CHECK
diff --git a/mesalib/src/mesa/main/context.c b/mesalib/src/mesa/main/context.c
index bafd250a1..df0452cd1 100644
--- a/mesalib/src/mesa/main/context.c
+++ b/mesalib/src/mesa/main/context.c
@@ -662,6 +662,9 @@ _mesa_init_constants(struct gl_context *ctx)
/* GL_ARB_robustness */
ctx->Const.ResetStrategy = GL_NO_RESET_NOTIFICATION_ARB;
+
+ /* PrimitiveRestart */
+ ctx->Const.PrimitiveRestartInSoftware = GL_FALSE;
}
diff --git a/mesalib/src/mesa/main/format_unpack.c b/mesalib/src/mesa/main/format_unpack.c
index b00e01236..c42bac19c 100644
--- a/mesalib/src/mesa/main/format_unpack.c
+++ b/mesalib/src/mesa/main/format_unpack.c
@@ -2929,7 +2929,7 @@ unpack_uint_z_Z32_FLOAT(const void *src, GLuint *dst, GLuint n)
const float *s = (const float *)src;
GLuint i;
for (i = 0; i < n; i++) {
- dst[i] = FLOAT_TO_UINT(IROUND(CLAMP((s[i]), 0.0F, 1.0F)));
+ dst[i] = FLOAT_TO_UINT(CLAMP(s[i], 0.0F, 1.0F));
}
}
@@ -2940,7 +2940,7 @@ unpack_uint_z_Z32_FLOAT_X24S8(const void *src, GLuint *dst, GLuint n)
GLuint i;
for (i = 0; i < n; i++) {
- dst[i] = FLOAT_TO_UINT(IROUND(CLAMP((s[i].z), 0.0F, 1.0F)));
+ dst[i] = FLOAT_TO_UINT(CLAMP(s[i].z, 0.0F, 1.0F));
}
}
diff --git a/mesalib/src/mesa/main/imports.h b/mesalib/src/mesa/main/imports.h
index aa5eb3200..c0b6cecea 100644
--- a/mesalib/src/mesa/main/imports.h
+++ b/mesalib/src/mesa/main/imports.h
@@ -285,19 +285,47 @@ static inline int GET_FLOAT_BITS( float x )
#endif
-/***
- *** IROUND: return (as an integer) float rounded to nearest integer
- ***/
+/**
+ * Convert float to int by rounding to nearest integer, away from zero.
+ */
+static inline int IROUND(float f)
+{
+ return (int) ((f >= 0.0F) ? (f + 0.5F) : (f - 0.5F));
+}
+
+
+/**
+ * Convert float to int64 by rounding to nearest integer.
+ */
+static inline GLint64 IROUND64(float f)
+{
+ return (GLint64) ((f >= 0.0F) ? (f + 0.5F) : (f - 0.5F));
+}
+
+
+/**
+ * Convert positive float to int by rounding to nearest integer.
+ */
+static inline int IROUND_POS(float f)
+{
+ assert(f >= 0.0F);
+ return (int) (f + 0.5F);
+}
+
+
+/**
+ * Convert float to int using a fast method. The rounding mode may vary.
+ * XXX We could use an x86-64/SSE2 version here.
+ */
#if defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__)
-static inline int iround(float f)
+static inline int F_TO_I(float f)
{
int r;
__asm__ ("fistpl %0" : "=m" (r) : "t" (f) : "st");
return r;
}
-#define IROUND(x) iround(x)
#elif defined(USE_X86_ASM) && defined(_MSC_VER)
-static inline int iround(float f)
+static inline int F_TO_I(float f)
{
int r;
_asm {
@@ -306,9 +334,8 @@ static inline int iround(float f)
}
return r;
}
-#define IROUND(x) iround(x)
#elif defined(__WATCOMC__) && defined(__386__)
-long iround(float f);
+long F_TO_I(float f);
#pragma aux iround = \
"push eax" \
"fistp dword ptr [esp]" \
@@ -316,20 +343,8 @@ long iround(float f);
parm [8087] \
value [eax] \
modify exact [eax];
-#define IROUND(x) iround(x)
-#else
-#define IROUND(f) ((int) (((f) >= 0.0F) ? ((f) + 0.5F) : ((f) - 0.5F)))
-#endif
-
-#define IROUND64(f) ((GLint64) (((f) >= 0.0F) ? ((f) + 0.5F) : ((f) - 0.5F)))
-
-/***
- *** IROUND_POS: return (as an integer) positive float rounded to nearest int
- ***/
-#ifdef DEBUG
-#define IROUND_POS(f) (assert((f) >= 0.0F), IROUND(f))
#else
-#define IROUND_POS(f) (IROUND(f))
+#define F_TO_I(f) IROUND(f)
#endif
diff --git a/mesalib/src/mesa/main/macros.h b/mesalib/src/mesa/main/macros.h
index dbe5b867c..d1df2ce1b 100644
--- a/mesalib/src/mesa/main/macros.h
+++ b/mesalib/src/mesa/main/macros.h
@@ -129,12 +129,12 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256];
#define INT_TO_USHORT(i) ((i) < 0 ? 0 : ((GLushort) ((i) >> 15)))
#define UINT_TO_USHORT(i) ((i) < 0 ? 0 : ((GLushort) ((i) >> 16)))
#define UNCLAMPED_FLOAT_TO_USHORT(us, f) \
- us = ( (GLushort) IROUND( CLAMP((f), 0.0F, 1.0F) * 65535.0F) )
+ us = ( (GLushort) F_TO_I( CLAMP((f), 0.0F, 1.0F) * 65535.0F) )
#define CLAMPED_FLOAT_TO_USHORT(us, f) \
- us = ( (GLushort) IROUND( (f) * 65535.0F) )
+ us = ( (GLushort) F_TO_I( (f) * 65535.0F) )
#define UNCLAMPED_FLOAT_TO_SHORT(s, f) \
- s = ( (GLshort) IROUND( CLAMP((f), -1.0F, 1.0F) * 32767.0F) )
+ s = ( (GLshort) F_TO_I( CLAMP((f), -1.0F, 1.0F) * 32767.0F) )
/***
*** UNCLAMPED_FLOAT_TO_UBYTE: clamp float to [0,1] and map to ubyte in [0,255]
@@ -166,9 +166,9 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256];
} while (0)
#else
#define UNCLAMPED_FLOAT_TO_UBYTE(ub, f) \
- ub = ((GLubyte) IROUND(CLAMP((f), 0.0F, 1.0F) * 255.0F))
+ ub = ((GLubyte) F_TO_I(CLAMP((f), 0.0F, 1.0F) * 255.0F))
#define CLAMPED_FLOAT_TO_UBYTE(ub, f) \
- ub = ((GLubyte) IROUND((f) * 255.0F))
+ ub = ((GLubyte) F_TO_I((f) * 255.0F))
#endif
/*@}*/
diff --git a/mesalib/src/mesa/main/mtypes.h b/mesalib/src/mesa/main/mtypes.h
index c306ac6b9..eefe5e7e9 100644
--- a/mesalib/src/mesa/main/mtypes.h
+++ b/mesalib/src/mesa/main/mtypes.h
@@ -2355,6 +2355,7 @@ struct gl_shader_program
#define GLSL_NOP_VERT 0x20 /**< Force no-op vertex shaders */
#define GLSL_NOP_FRAG 0x40 /**< Force no-op fragment shaders */
#define GLSL_USE_PROG 0x80 /**< Log glUseProgram calls */
+#define GLSL_REPORT_ERRORS 0x100 /**< Print compilation errors */
/**
@@ -2845,6 +2846,11 @@ struct gl_constants
*/
GLboolean GLSLSkipStrictMaxVaryingLimitCheck;
GLboolean GLSLSkipStrictMaxUniformLimitCheck;
+
+ /**
+ * Force software support for primitive restart in the VBO module.
+ */
+ GLboolean PrimitiveRestartInSoftware;
};
diff --git a/mesalib/src/mesa/main/pack.c b/mesalib/src/mesa/main/pack.c
index 4d4b4a825..c25a02e85 100644
--- a/mesalib/src/mesa/main/pack.c
+++ b/mesalib/src/mesa/main/pack.c
@@ -1726,9 +1726,9 @@ _mesa_pack_rgba_span_float(struct gl_context *ctx, GLuint n, GLfloat rgba[][4],
if (dstFormat == GL_RGB) {
GLubyte *dst = (GLubyte *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][RCOMP] * 7.0F) << 5)
- | (IROUND(rgba[i][GCOMP] * 7.0F) << 2)
- | (IROUND(rgba[i][BCOMP] * 3.0F) );
+ dst[i] = (F_TO_I(rgba[i][RCOMP] * 7.0F) << 5)
+ | (F_TO_I(rgba[i][GCOMP] * 7.0F) << 2)
+ | (F_TO_I(rgba[i][BCOMP] * 3.0F) );
}
}
break;
@@ -1736,9 +1736,9 @@ _mesa_pack_rgba_span_float(struct gl_context *ctx, GLuint n, GLfloat rgba[][4],
if (dstFormat == GL_RGB) {
GLubyte *dst = (GLubyte *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][RCOMP] * 7.0F) )
- | (IROUND(rgba[i][GCOMP] * 7.0F) << 3)
- | (IROUND(rgba[i][BCOMP] * 3.0F) << 6);
+ dst[i] = (F_TO_I(rgba[i][RCOMP] * 7.0F) )
+ | (F_TO_I(rgba[i][GCOMP] * 7.0F) << 3)
+ | (F_TO_I(rgba[i][BCOMP] * 3.0F) << 6);
}
}
break;
@@ -1746,9 +1746,9 @@ _mesa_pack_rgba_span_float(struct gl_context *ctx, GLuint n, GLfloat rgba[][4],
if (dstFormat == GL_RGB) {
GLushort *dst = (GLushort *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][RCOMP] * 31.0F) << 11)
- | (IROUND(rgba[i][GCOMP] * 63.0F) << 5)
- | (IROUND(rgba[i][BCOMP] * 31.0F) );
+ dst[i] = (F_TO_I(rgba[i][RCOMP] * 31.0F) << 11)
+ | (F_TO_I(rgba[i][GCOMP] * 63.0F) << 5)
+ | (F_TO_I(rgba[i][BCOMP] * 31.0F) );
}
}
break;
@@ -1756,9 +1756,9 @@ _mesa_pack_rgba_span_float(struct gl_context *ctx, GLuint n, GLfloat rgba[][4],
if (dstFormat == GL_RGB) {
GLushort *dst = (GLushort *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][RCOMP] * 31.0F) )
- | (IROUND(rgba[i][GCOMP] * 63.0F) << 5)
- | (IROUND(rgba[i][BCOMP] * 31.0F) << 11);
+ dst[i] = (F_TO_I(rgba[i][RCOMP] * 31.0F) )
+ | (F_TO_I(rgba[i][GCOMP] * 63.0F) << 5)
+ | (F_TO_I(rgba[i][BCOMP] * 31.0F) << 11);
}
}
break;
@@ -1766,28 +1766,28 @@ _mesa_pack_rgba_span_float(struct gl_context *ctx, GLuint n, GLfloat rgba[][4],
if (dstFormat == GL_RGBA) {
GLushort *dst = (GLushort *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][RCOMP] * 15.0F) << 12)
- | (IROUND(rgba[i][GCOMP] * 15.0F) << 8)
- | (IROUND(rgba[i][BCOMP] * 15.0F) << 4)
- | (IROUND(rgba[i][ACOMP] * 15.0F) );
+ dst[i] = (F_TO_I(rgba[i][RCOMP] * 15.0F) << 12)
+ | (F_TO_I(rgba[i][GCOMP] * 15.0F) << 8)
+ | (F_TO_I(rgba[i][BCOMP] * 15.0F) << 4)
+ | (F_TO_I(rgba[i][ACOMP] * 15.0F) );
}
}
else if (dstFormat == GL_BGRA) {
GLushort *dst = (GLushort *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][BCOMP] * 15.0F) << 12)
- | (IROUND(rgba[i][GCOMP] * 15.0F) << 8)
- | (IROUND(rgba[i][RCOMP] * 15.0F) << 4)
- | (IROUND(rgba[i][ACOMP] * 15.0F) );
+ dst[i] = (F_TO_I(rgba[i][BCOMP] * 15.0F) << 12)
+ | (F_TO_I(rgba[i][GCOMP] * 15.0F) << 8)
+ | (F_TO_I(rgba[i][RCOMP] * 15.0F) << 4)
+ | (F_TO_I(rgba[i][ACOMP] * 15.0F) );
}
}
else if (dstFormat == GL_ABGR_EXT) {
GLushort *dst = (GLushort *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][ACOMP] * 15.0F) << 12)
- | (IROUND(rgba[i][BCOMP] * 15.0F) << 8)
- | (IROUND(rgba[i][GCOMP] * 15.0F) << 4)
- | (IROUND(rgba[i][RCOMP] * 15.0F) );
+ dst[i] = (F_TO_I(rgba[i][ACOMP] * 15.0F) << 12)
+ | (F_TO_I(rgba[i][BCOMP] * 15.0F) << 8)
+ | (F_TO_I(rgba[i][GCOMP] * 15.0F) << 4)
+ | (F_TO_I(rgba[i][RCOMP] * 15.0F) );
}
}
break;
@@ -1795,28 +1795,28 @@ _mesa_pack_rgba_span_float(struct gl_context *ctx, GLuint n, GLfloat rgba[][4],
if (dstFormat == GL_RGBA) {
GLushort *dst = (GLushort *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][RCOMP] * 15.0F) )
- | (IROUND(rgba[i][GCOMP] * 15.0F) << 4)
- | (IROUND(rgba[i][BCOMP] * 15.0F) << 8)
- | (IROUND(rgba[i][ACOMP] * 15.0F) << 12);
+ dst[i] = (F_TO_I(rgba[i][RCOMP] * 15.0F) )
+ | (F_TO_I(rgba[i][GCOMP] * 15.0F) << 4)
+ | (F_TO_I(rgba[i][BCOMP] * 15.0F) << 8)
+ | (F_TO_I(rgba[i][ACOMP] * 15.0F) << 12);
}
}
else if (dstFormat == GL_BGRA) {
GLushort *dst = (GLushort *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][BCOMP] * 15.0F) )
- | (IROUND(rgba[i][GCOMP] * 15.0F) << 4)
- | (IROUND(rgba[i][RCOMP] * 15.0F) << 8)
- | (IROUND(rgba[i][ACOMP] * 15.0F) << 12);
+ dst[i] = (F_TO_I(rgba[i][BCOMP] * 15.0F) )
+ | (F_TO_I(rgba[i][GCOMP] * 15.0F) << 4)
+ | (F_TO_I(rgba[i][RCOMP] * 15.0F) << 8)
+ | (F_TO_I(rgba[i][ACOMP] * 15.0F) << 12);
}
}
else if (dstFormat == GL_ABGR_EXT) {
GLushort *dst = (GLushort *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][ACOMP] * 15.0F) )
- | (IROUND(rgba[i][BCOMP] * 15.0F) << 4)
- | (IROUND(rgba[i][GCOMP] * 15.0F) << 8)
- | (IROUND(rgba[i][RCOMP] * 15.0F) << 12);
+ dst[i] = (F_TO_I(rgba[i][ACOMP] * 15.0F) )
+ | (F_TO_I(rgba[i][BCOMP] * 15.0F) << 4)
+ | (F_TO_I(rgba[i][GCOMP] * 15.0F) << 8)
+ | (F_TO_I(rgba[i][RCOMP] * 15.0F) << 12);
}
}
break;
@@ -1824,28 +1824,28 @@ _mesa_pack_rgba_span_float(struct gl_context *ctx, GLuint n, GLfloat rgba[][4],
if (dstFormat == GL_RGBA) {
GLushort *dst = (GLushort *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][RCOMP] * 31.0F) << 11)
- | (IROUND(rgba[i][GCOMP] * 31.0F) << 6)
- | (IROUND(rgba[i][BCOMP] * 31.0F) << 1)
- | (IROUND(rgba[i][ACOMP] * 1.0F) );
+ dst[i] = (F_TO_I(rgba[i][RCOMP] * 31.0F) << 11)
+ | (F_TO_I(rgba[i][GCOMP] * 31.0F) << 6)
+ | (F_TO_I(rgba[i][BCOMP] * 31.0F) << 1)
+ | (F_TO_I(rgba[i][ACOMP] * 1.0F) );
}
}
else if (dstFormat == GL_BGRA) {
GLushort *dst = (GLushort *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][BCOMP] * 31.0F) << 11)
- | (IROUND(rgba[i][GCOMP] * 31.0F) << 6)
- | (IROUND(rgba[i][RCOMP] * 31.0F) << 1)
- | (IROUND(rgba[i][ACOMP] * 1.0F) );
+ dst[i] = (F_TO_I(rgba[i][BCOMP] * 31.0F) << 11)
+ | (F_TO_I(rgba[i][GCOMP] * 31.0F) << 6)
+ | (F_TO_I(rgba[i][RCOMP] * 31.0F) << 1)
+ | (F_TO_I(rgba[i][ACOMP] * 1.0F) );
}
}
else if (dstFormat == GL_ABGR_EXT) {
GLushort *dst = (GLushort *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][ACOMP] * 31.0F) << 11)
- | (IROUND(rgba[i][BCOMP] * 31.0F) << 6)
- | (IROUND(rgba[i][GCOMP] * 31.0F) << 1)
- | (IROUND(rgba[i][RCOMP] * 1.0F) );
+ dst[i] = (F_TO_I(rgba[i][ACOMP] * 31.0F) << 11)
+ | (F_TO_I(rgba[i][BCOMP] * 31.0F) << 6)
+ | (F_TO_I(rgba[i][GCOMP] * 31.0F) << 1)
+ | (F_TO_I(rgba[i][RCOMP] * 1.0F) );
}
}
break;
@@ -1853,28 +1853,28 @@ _mesa_pack_rgba_span_float(struct gl_context *ctx, GLuint n, GLfloat rgba[][4],
if (dstFormat == GL_RGBA) {
GLushort *dst = (GLushort *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][RCOMP] * 31.0F) )
- | (IROUND(rgba[i][GCOMP] * 31.0F) << 5)
- | (IROUND(rgba[i][BCOMP] * 31.0F) << 10)
- | (IROUND(rgba[i][ACOMP] * 1.0F) << 15);
+ dst[i] = (F_TO_I(rgba[i][RCOMP] * 31.0F) )
+ | (F_TO_I(rgba[i][GCOMP] * 31.0F) << 5)
+ | (F_TO_I(rgba[i][BCOMP] * 31.0F) << 10)
+ | (F_TO_I(rgba[i][ACOMP] * 1.0F) << 15);
}
}
else if (dstFormat == GL_BGRA) {
GLushort *dst = (GLushort *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][BCOMP] * 31.0F) )
- | (IROUND(rgba[i][GCOMP] * 31.0F) << 5)
- | (IROUND(rgba[i][RCOMP] * 31.0F) << 10)
- | (IROUND(rgba[i][ACOMP] * 1.0F) << 15);
+ dst[i] = (F_TO_I(rgba[i][BCOMP] * 31.0F) )
+ | (F_TO_I(rgba[i][GCOMP] * 31.0F) << 5)
+ | (F_TO_I(rgba[i][RCOMP] * 31.0F) << 10)
+ | (F_TO_I(rgba[i][ACOMP] * 1.0F) << 15);
}
}
else if (dstFormat == GL_ABGR_EXT) {
GLushort *dst = (GLushort *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][ACOMP] * 31.0F) )
- | (IROUND(rgba[i][BCOMP] * 31.0F) << 5)
- | (IROUND(rgba[i][GCOMP] * 31.0F) << 10)
- | (IROUND(rgba[i][RCOMP] * 1.0F) << 15);
+ dst[i] = (F_TO_I(rgba[i][ACOMP] * 31.0F) )
+ | (F_TO_I(rgba[i][BCOMP] * 31.0F) << 5)
+ | (F_TO_I(rgba[i][GCOMP] * 31.0F) << 10)
+ | (F_TO_I(rgba[i][RCOMP] * 1.0F) << 15);
}
}
break;
@@ -1882,28 +1882,28 @@ _mesa_pack_rgba_span_float(struct gl_context *ctx, GLuint n, GLfloat rgba[][4],
if (dstFormat == GL_RGBA) {
GLuint *dst = (GLuint *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][RCOMP] * 255.F) << 24)
- | (IROUND(rgba[i][GCOMP] * 255.F) << 16)
- | (IROUND(rgba[i][BCOMP] * 255.F) << 8)
- | (IROUND(rgba[i][ACOMP] * 255.F) );
+ dst[i] = (F_TO_I(rgba[i][RCOMP] * 255.F) << 24)
+ | (F_TO_I(rgba[i][GCOMP] * 255.F) << 16)
+ | (F_TO_I(rgba[i][BCOMP] * 255.F) << 8)
+ | (F_TO_I(rgba[i][ACOMP] * 255.F) );
}
}
else if (dstFormat == GL_BGRA) {
GLuint *dst = (GLuint *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][BCOMP] * 255.F) << 24)
- | (IROUND(rgba[i][GCOMP] * 255.F) << 16)
- | (IROUND(rgba[i][RCOMP] * 255.F) << 8)
- | (IROUND(rgba[i][ACOMP] * 255.F) );
+ dst[i] = (F_TO_I(rgba[i][BCOMP] * 255.F) << 24)
+ | (F_TO_I(rgba[i][GCOMP] * 255.F) << 16)
+ | (F_TO_I(rgba[i][RCOMP] * 255.F) << 8)
+ | (F_TO_I(rgba[i][ACOMP] * 255.F) );
}
}
else if (dstFormat == GL_ABGR_EXT) {
GLuint *dst = (GLuint *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][ACOMP] * 255.F) << 24)
- | (IROUND(rgba[i][BCOMP] * 255.F) << 16)
- | (IROUND(rgba[i][GCOMP] * 255.F) << 8)
- | (IROUND(rgba[i][RCOMP] * 255.F) );
+ dst[i] = (F_TO_I(rgba[i][ACOMP] * 255.F) << 24)
+ | (F_TO_I(rgba[i][BCOMP] * 255.F) << 16)
+ | (F_TO_I(rgba[i][GCOMP] * 255.F) << 8)
+ | (F_TO_I(rgba[i][RCOMP] * 255.F) );
}
}
break;
@@ -1911,28 +1911,28 @@ _mesa_pack_rgba_span_float(struct gl_context *ctx, GLuint n, GLfloat rgba[][4],
if (dstFormat == GL_RGBA) {
GLuint *dst = (GLuint *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][RCOMP] * 255.0F) )
- | (IROUND(rgba[i][GCOMP] * 255.0F) << 8)
- | (IROUND(rgba[i][BCOMP] * 255.0F) << 16)
- | (IROUND(rgba[i][ACOMP] * 255.0F) << 24);
+ dst[i] = (F_TO_I(rgba[i][RCOMP] * 255.0F) )
+ | (F_TO_I(rgba[i][GCOMP] * 255.0F) << 8)
+ | (F_TO_I(rgba[i][BCOMP] * 255.0F) << 16)
+ | (F_TO_I(rgba[i][ACOMP] * 255.0F) << 24);
}
}
else if (dstFormat == GL_BGRA) {
GLuint *dst = (GLuint *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][BCOMP] * 255.0F) )
- | (IROUND(rgba[i][GCOMP] * 255.0F) << 8)
- | (IROUND(rgba[i][RCOMP] * 255.0F) << 16)
- | (IROUND(rgba[i][ACOMP] * 255.0F) << 24);
+ dst[i] = (F_TO_I(rgba[i][BCOMP] * 255.0F) )
+ | (F_TO_I(rgba[i][GCOMP] * 255.0F) << 8)
+ | (F_TO_I(rgba[i][RCOMP] * 255.0F) << 16)
+ | (F_TO_I(rgba[i][ACOMP] * 255.0F) << 24);
}
}
else if (dstFormat == GL_ABGR_EXT) {
GLuint *dst = (GLuint *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][ACOMP] * 255.0F) )
- | (IROUND(rgba[i][BCOMP] * 255.0F) << 8)
- | (IROUND(rgba[i][GCOMP] * 255.0F) << 16)
- | (IROUND(rgba[i][RCOMP] * 255.0F) << 24);
+ dst[i] = (F_TO_I(rgba[i][ACOMP] * 255.0F) )
+ | (F_TO_I(rgba[i][BCOMP] * 255.0F) << 8)
+ | (F_TO_I(rgba[i][GCOMP] * 255.0F) << 16)
+ | (F_TO_I(rgba[i][RCOMP] * 255.0F) << 24);
}
}
break;
@@ -1940,28 +1940,28 @@ _mesa_pack_rgba_span_float(struct gl_context *ctx, GLuint n, GLfloat rgba[][4],
if (dstFormat == GL_RGBA) {
GLuint *dst = (GLuint *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][RCOMP] * 1023.0F) << 22)
- | (IROUND(rgba[i][GCOMP] * 1023.0F) << 12)
- | (IROUND(rgba[i][BCOMP] * 1023.0F) << 2)
- | (IROUND(rgba[i][ACOMP] * 3.0F) );
+ dst[i] = (F_TO_I(rgba[i][RCOMP] * 1023.0F) << 22)
+ | (F_TO_I(rgba[i][GCOMP] * 1023.0F) << 12)
+ | (F_TO_I(rgba[i][BCOMP] * 1023.0F) << 2)
+ | (F_TO_I(rgba[i][ACOMP] * 3.0F) );
}
}
else if (dstFormat == GL_BGRA) {
GLuint *dst = (GLuint *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][BCOMP] * 1023.0F) << 22)
- | (IROUND(rgba[i][GCOMP] * 1023.0F) << 12)
- | (IROUND(rgba[i][RCOMP] * 1023.0F) << 2)
- | (IROUND(rgba[i][ACOMP] * 3.0F) );
+ dst[i] = (F_TO_I(rgba[i][BCOMP] * 1023.0F) << 22)
+ | (F_TO_I(rgba[i][GCOMP] * 1023.0F) << 12)
+ | (F_TO_I(rgba[i][RCOMP] * 1023.0F) << 2)
+ | (F_TO_I(rgba[i][ACOMP] * 3.0F) );
}
}
else if (dstFormat == GL_ABGR_EXT) {
GLuint *dst = (GLuint *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][ACOMP] * 1023.0F) << 22)
- | (IROUND(rgba[i][BCOMP] * 1023.0F) << 12)
- | (IROUND(rgba[i][GCOMP] * 1023.0F) << 2)
- | (IROUND(rgba[i][RCOMP] * 3.0F) );
+ dst[i] = (F_TO_I(rgba[i][ACOMP] * 1023.0F) << 22)
+ | (F_TO_I(rgba[i][BCOMP] * 1023.0F) << 12)
+ | (F_TO_I(rgba[i][GCOMP] * 1023.0F) << 2)
+ | (F_TO_I(rgba[i][RCOMP] * 3.0F) );
}
}
break;
@@ -1969,28 +1969,28 @@ _mesa_pack_rgba_span_float(struct gl_context *ctx, GLuint n, GLfloat rgba[][4],
if (dstFormat == GL_RGBA) {
GLuint *dst = (GLuint *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][RCOMP] * 1023.0F) )
- | (IROUND(rgba[i][GCOMP] * 1023.0F) << 10)
- | (IROUND(rgba[i][BCOMP] * 1023.0F) << 20)
- | (IROUND(rgba[i][ACOMP] * 3.0F) << 30);
+ dst[i] = (F_TO_I(rgba[i][RCOMP] * 1023.0F) )
+ | (F_TO_I(rgba[i][GCOMP] * 1023.0F) << 10)
+ | (F_TO_I(rgba[i][BCOMP] * 1023.0F) << 20)
+ | (F_TO_I(rgba[i][ACOMP] * 3.0F) << 30);
}
}
else if (dstFormat == GL_BGRA) {
GLuint *dst = (GLuint *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][BCOMP] * 1023.0F) )
- | (IROUND(rgba[i][GCOMP] * 1023.0F) << 10)
- | (IROUND(rgba[i][RCOMP] * 1023.0F) << 20)
- | (IROUND(rgba[i][ACOMP] * 3.0F) << 30);
+ dst[i] = (F_TO_I(rgba[i][BCOMP] * 1023.0F) )
+ | (F_TO_I(rgba[i][GCOMP] * 1023.0F) << 10)
+ | (F_TO_I(rgba[i][RCOMP] * 1023.0F) << 20)
+ | (F_TO_I(rgba[i][ACOMP] * 3.0F) << 30);
}
}
else if (dstFormat == GL_ABGR_EXT) {
GLuint *dst = (GLuint *) dstAddr;
for (i=0;i<n;i++) {
- dst[i] = (IROUND(rgba[i][ACOMP] * 1023.0F) )
- | (IROUND(rgba[i][BCOMP] * 1023.0F) << 10)
- | (IROUND(rgba[i][GCOMP] * 1023.0F) << 20)
- | (IROUND(rgba[i][RCOMP] * 3.0F) << 30);
+ dst[i] = (F_TO_I(rgba[i][ACOMP] * 1023.0F) )
+ | (F_TO_I(rgba[i][BCOMP] * 1023.0F) << 10)
+ | (F_TO_I(rgba[i][GCOMP] * 1023.0F) << 20)
+ | (F_TO_I(rgba[i][RCOMP] * 3.0F) << 30);
}
}
break;
@@ -3005,7 +3005,7 @@ extract_float_rgba(GLuint n, GLfloat rgba[][4],
static inline GLuint
clamp_float_to_uint(GLfloat f)
{
- return f < 0.0F ? 0 : IROUND(f);
+ return f < 0.0F ? 0 : F_TO_I(f);
}
@@ -3013,7 +3013,7 @@ static inline GLuint
clamp_half_to_uint(GLhalfARB h)
{
GLfloat f = _mesa_half_to_float(h);
- return f < 0.0F ? 0 : IROUND(f);
+ return f < 0.0F ? 0 : F_TO_I(f);
}
diff --git a/mesalib/src/mesa/main/pixeltransfer.c b/mesalib/src/mesa/main/pixeltransfer.c
index c6172b9fd..fa355eb4a 100644
--- a/mesalib/src/mesa/main/pixeltransfer.c
+++ b/mesalib/src/mesa/main/pixeltransfer.c
@@ -93,10 +93,10 @@ _mesa_map_rgba( const struct gl_context *ctx, GLuint n, GLfloat rgba[][4] )
GLfloat g = CLAMP(rgba[i][GCOMP], 0.0F, 1.0F);
GLfloat b = CLAMP(rgba[i][BCOMP], 0.0F, 1.0F);
GLfloat a = CLAMP(rgba[i][ACOMP], 0.0F, 1.0F);
- rgba[i][RCOMP] = rMap[IROUND(r * rscale)];
- rgba[i][GCOMP] = gMap[IROUND(g * gscale)];
- rgba[i][BCOMP] = bMap[IROUND(b * bscale)];
- rgba[i][ACOMP] = aMap[IROUND(a * ascale)];
+ rgba[i][RCOMP] = rMap[F_TO_I(r * rscale)];
+ rgba[i][GCOMP] = gMap[F_TO_I(g * gscale)];
+ rgba[i][BCOMP] = bMap[F_TO_I(b * bscale)];
+ rgba[i][ACOMP] = aMap[F_TO_I(a * ascale)];
}
}
@@ -235,7 +235,7 @@ _mesa_apply_ci_transfer_ops(const struct gl_context *ctx,
GLuint i;
for (i = 0; i < n; i++) {
const GLuint j = indexes[i] & mask;
- indexes[i] = IROUND(ctx->PixelMaps.ItoI.Map[j]);
+ indexes[i] = F_TO_I(ctx->PixelMaps.ItoI.Map[j]);
}
}
}
diff --git a/mesalib/src/mesa/main/readpix.c b/mesalib/src/mesa/main/readpix.c
index 31acfcbf1..138111049 100644
--- a/mesalib/src/mesa/main/readpix.c
+++ b/mesalib/src/mesa/main/readpix.c
@@ -701,6 +701,12 @@ _mesa_ReadnPixelsARB( GLint x, GLint y, GLsizei width, GLsizei height,
return;
}
+ if (ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
+ _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
+ "glReadPixels(incomplete framebuffer)" );
+ return;
+ }
+
/* Check that the destination format and source buffer are both
* integer-valued or both non-integer-valued.
*/
@@ -715,12 +721,6 @@ _mesa_ReadnPixelsARB( GLint x, GLint y, GLsizei width, GLsizei height,
}
}
- if (ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
- _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
- "glReadPixels(incomplete framebuffer)" );
- return;
- }
-
if (ctx->ReadBuffer->Name != 0 && ctx->ReadBuffer->Visual.samples > 0) {
_mesa_error(ctx, GL_INVALID_OPERATION, "glReadPixels(multisample FBO)");
return;
diff --git a/mesalib/src/mesa/main/shaderapi.c b/mesalib/src/mesa/main/shaderapi.c
index fd793a7ab..6927368de 100644
--- a/mesalib/src/mesa/main/shaderapi.c
+++ b/mesalib/src/mesa/main/shaderapi.c
@@ -83,6 +83,8 @@ get_shader_flags(void)
flags |= GLSL_UNIFORMS;
if (strstr(env, "useprog"))
flags |= GLSL_USE_PROG;
+ if (strstr(env, "errors"))
+ flags |= GLSL_REPORT_ERRORS;
}
return flags;
@@ -627,7 +629,8 @@ get_shader_source(struct gl_context *ctx, GLuint shader, GLsizei maxLength,
/**
- * Set/replace shader source code.
+ * Set/replace shader source code. A helper function used by
+ * glShaderSource[ARB] and glCreateShaderProgramEXT.
*/
static void
shader_source(struct gl_context *ctx, GLuint shader, const GLchar *source)
@@ -672,6 +675,12 @@ compile_shader(struct gl_context *ctx, GLuint shaderObj)
* compilation was successful.
*/
_mesa_glsl_compile_shader(ctx, sh);
+
+ if (sh->CompileStatus == GL_FALSE &&
+ (ctx->Shader.Flags & GLSL_REPORT_ERRORS)) {
+ _mesa_debug(ctx, "Error compiling shader %u:\n%s\n",
+ sh->Name, sh->InfoLog);
+ }
}
@@ -702,6 +711,12 @@ link_program(struct gl_context *ctx, GLuint program)
_mesa_glsl_link_shader(ctx, shProg);
+ if (shProg->LinkStatus == GL_FALSE &&
+ (ctx->Shader.Flags & GLSL_REPORT_ERRORS)) {
+ _mesa_debug(ctx, "Error linking program %u:\n%s\n",
+ shProg->Name, shProg->InfoLog);
+ }
+
/* debug code */
if (0) {
GLuint i;
@@ -1534,6 +1549,10 @@ _mesa_use_shader_program(struct gl_context *ctx, GLenum type,
ctx->Driver.UseProgram(ctx, shProg);
}
+
+/**
+ * For GL_EXT_separate_shader_objects
+ */
void GLAPIENTRY
_mesa_UseShaderProgramEXT(GLenum type, GLuint program)
{
@@ -1570,6 +1589,10 @@ _mesa_UseShaderProgramEXT(GLenum type, GLuint program)
_mesa_use_shader_program(ctx, type, shProg);
}
+
+/**
+ * For GL_EXT_separate_shader_objects
+ */
void GLAPIENTRY
_mesa_ActiveProgramEXT(GLuint program)
{
@@ -1582,6 +1605,10 @@ _mesa_ActiveProgramEXT(GLuint program)
return;
}
+
+/**
+ * For GL_EXT_separate_shader_objects
+ */
GLuint GLAPIENTRY
_mesa_CreateShaderProgramEXT(GLenum type, const GLchar *string)
{
diff --git a/mesalib/src/mesa/main/texobj.c b/mesalib/src/mesa/main/texobj.c
index 365169ddd..a471bad22 100644
--- a/mesalib/src/mesa/main/texobj.c
+++ b/mesalib/src/mesa/main/texobj.c
@@ -558,7 +558,8 @@ _mesa_test_texobj_completeness( const struct gl_context *ctx,
GLuint face;
assert(baseImage->Width2 == baseImage->Height);
for (face = 1; face < 6; face++) {
- assert(t->Image[face][baseLevel]->Width2 ==
+ assert(t->Image[face][baseLevel] == NULL ||
+ t->Image[face][baseLevel]->Width2 ==
t->Image[face][baseLevel]->Height2);
if (t->Image[face][baseLevel] == NULL ||
t->Image[face][baseLevel]->Width2 != baseImage->Width2) {
diff --git a/mesalib/src/mesa/main/uniform_query.cpp b/mesalib/src/mesa/main/uniform_query.cpp
index 08d330a52..f5d998ffb 100644
--- a/mesalib/src/mesa/main/uniform_query.cpp
+++ b/mesalib/src/mesa/main/uniform_query.cpp
@@ -46,6 +46,8 @@ _mesa_GetActiveUniformARB(GLhandleARB program, GLuint index,
struct gl_shader_program *shProg =
_mesa_lookup_shader_program_err(ctx, program, "glGetActiveUniform");
+ ASSERT_OUTSIDE_BEGIN_END(ctx);
+
if (!shProg)
return;