aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2012-03-09 10:39:43 +0100
committermarha <marha@users.sourceforge.net>2012-03-09 10:39:43 +0100
commitf7eb7329c8efe023b304d5e66b08d1a998973220 (patch)
tree290de7865db558d7c85ba03e735e4a135ae69aab
parentceca11a64938e803d2e0d8ccfc030357c3a0121c (diff)
parentd483a0007d3a25fbf565436f655fa45b4265628a (diff)
downloadvcxsrv-f7eb7329c8efe023b304d5e66b08d1a998973220.tar.gz
vcxsrv-f7eb7329c8efe023b304d5e66b08d1a998973220.tar.bz2
vcxsrv-f7eb7329c8efe023b304d5e66b08d1a998973220.zip
Merge remote-tracking branch 'origin/released'
Conflicts: libxcb/src/xcb_in.c
-rw-r--r--fontconfig/doc/Makefile.am334
-rw-r--r--fontconfig/fc-case/Makefile.am3
-rw-r--r--fontconfig/fc-glyphname/Makefile.am3
-rw-r--r--fontconfig/fc-lang/Makefile.am3
-rw-r--r--libxcb/src/xcb_in.c14
-rw-r--r--mesalib/src/glsl/loop_unroll.cpp48
-rw-r--r--mesalib/src/mesa/main/pack.c91
-rw-r--r--mesalib/src/mesa/main/pack.h7
-rw-r--r--mesalib/src/mesa/main/readpix.c4
-rw-r--r--mesalib/src/mesa/main/texgetimage.c77
-rw-r--r--pixman/configure.ac2
11 files changed, 324 insertions, 262 deletions
diff --git a/fontconfig/doc/Makefile.am b/fontconfig/doc/Makefile.am
index a29ba2fff..06ec5e9ea 100644
--- a/fontconfig/doc/Makefile.am
+++ b/fontconfig/doc/Makefile.am
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
#
# fontconfig/doc/Makefile.am
#
@@ -21,183 +22,188 @@
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-DOC_SRC = $(srcdir)
-DOC_MODULE = fontconfig
+NULL =
+EXTRA_DIST = \
+ $(BUILT_DOCS) \
+ $(DOC_FUNCS_FNCS) \
+ $(DOC_FUNCS_SGML) \
+ $(HTML_DIR)/* \
+ $(SGML_FILES) \
+ $(check_SCRIPTS) \
+ confdir.sgml.in \
+ func.sgml \
+ $(NULL)
+MAINTAINERCLEANFILES = \
+ $(DOC_FUNCS_SGML) \
+ $(NULL)
+CLEANFILES = \
+ $(BUILT_DOCS) \
+ $(LOCAL_SGML_FILES) \
+ confdir.sgml \
+ func.refs \
+ $(NULL)
+BUILT_SOURCES = \
+ $(NULL)
+SUFFIXES = \
+ .fncs \
+ .sgml \
+ .txt \
+ .html \
+ $(NULL)
+TESTS = \
+ check-missing-doc \
+ $(NULL)
+TESTS_ENVIRONMENT=top_srcdir=${top_srcdir} sh
+#
DOC2HTML = docbook2html
-DOC2TXT = docbook2txt
-DOC2MAN = docbook2man
-DOC2PDF = docbook2pdf
-
-TXT = fontconfig-user.txt fontconfig-devel.txt
-PDF = fontconfig-user.pdf fontconfig-devel.pdf
-HTML_FILES = fontconfig-user.html
+DOC2TXT = docbook2txt
+DOC2MAN = docbook2man
+DOC2PDF = docbook2pdf
+
+DOC_FUNCS_FNCS = \
+ fcatomic.fncs \
+ fcblanks.fncs \
+ fccache.fncs \
+ fccharset.fncs \
+ fcconfig.fncs \
+ fcconstant.fncs \
+ fcdircache.fncs \
+ fcfile.fncs \
+ fcfontset.fncs \
+ fcformat.fncs \
+ fcfreetype.fncs \
+ fcinit.fncs \
+ fclangset.fncs \
+ fcmatrix.fncs \
+ fcobjectset.fncs \
+ fcobjecttype.fncs \
+ fcpattern.fncs \
+ fcstring.fncs \
+ fcstrset.fncs \
+ fcvalue.fncs \
+ $(NULL)
+SGML_FILES = \
+ $(srcdir)/fontconfig-user.sgml \
+ $(srcdir)/fontconfig-devel.sgml \
+ $(NULL)
+LOCAL_SGML_FILES = \
+ local-fontconfig-user.sgml \
+ local-fontconfig-devel.sgml \
+ $(NULL)
+
+DOC_FUNCS_SGML = $(DOC_FUNCS_FNCS:.fncs=.sgml)
+BUILT_DOCS = \
+ $(HTML_FILES) \
+ $(PDF_FILES) \
+ $(TXT_FILES) \
+ $(man3_MANS) \
+ $(man5_MANS) \
+ $(NULL)
+DOCS_DEPS = \
+ $(DOC_FUNCS_SGML) \
+ confdir.sgml \
+ version.sgml \
+ $(NULL)
+
+TXT_FILES = $(SGML_FILES:.sgml=.txt)
+PDF_FILES = $(SGML_FILES:.sgml=.pdf)
+HTML_FILES = \
+ fontconfig-user.html \
+ $(NULL)
HTML_DIR = fontconfig-devel
-SGML = fontconfig-user.sgml fontconfig-devel.sgml
-FNCS_TMPL = ${DOC_SRC}/func.sgml
-
-DOC_FUNCS_FNCS=\
- fcatomic.fncs \
- fcblanks.fncs \
- fccache.fncs \
- fccharset.fncs \
- fcconfig.fncs \
- fcconstant.fncs \
- fcdircache.fncs \
- fcfile.fncs \
- fcfontset.fncs \
- fcformat.fncs \
- fcfreetype.fncs \
- fcinit.fncs \
- fclangset.fncs \
- fcmatrix.fncs \
- fcobjectset.fncs \
- fcobjecttype.fncs \
- fcpattern.fncs \
- fcstring.fncs \
- fcstrset.fncs \
- fcvalue.fncs
-
-DOC_FUNCS_SGML=\
- fcatomic.sgml \
- fcblanks.sgml \
- fccache.sgml \
- fccharset.sgml \
- fcconfig.sgml \
- fcconstant.sgml \
- fcdircache.sgml \
- fcfile.sgml \
- fcfontset.sgml \
- fcformat.sgml \
- fcfreetype.sgml \
- fcinit.sgml \
- fclangset.sgml \
- fcmatrix.sgml \
- fcobjectset.sgml \
- fcobjecttype.sgml \
- fcpattern.sgml \
- fcstring.sgml \
- fcstrset.sgml \
- fcvalue.sgml
-
-man5_MANS=fonts-conf.5
-man3_MANS=$(DOCMAN3)
-
-noinst_PROGRAMS=edit-sgml
-edit_sgml_SOURCES=edit-sgml.c
-
-DOC_FILES=$(TXT) $(PDF) $(HTML_FILES)
-LOCAL_DOCS=$(man3_MANS) $(man5_MANS) $(DOC_FILES) $(HTML_DIR)/*
-
-check_SCRIPTS=check-missing-doc
-TESTS_ENVIRONMENT=top_srcdir=${top_srcdir} sh
-TESTS=check-missing-doc
-
-EXTRA_DIST=$(LOCAL_DOCS) $(SGML) $(DOC_FUNCS_FNCS) $(DOC_FUNCS_SGML) $(check_SCRIPTS) func.sgml confdir.sgml.in
-
-SUFFIXES=.fncs .sgml .txt .html
+#
+noinst_PROGRAMS = \
+ $(NULL)
+##
+edit_sgml_SOURCES = \
+ edit-sgml.c \
+ $(NULL)
+#
+check_SCRIPTS = \
+ check-missing-doc \
+ $(NULL)
+#
+man3_MANS = \
+ $(DOCMAN3) \
+ $(NULL)
+man5_MANS = \
+ fonts-conf.5 \
+ $(NULL)
+#
+doc_DATA = \
+ $(TXT_FILES) \
+ $(PDF_FILES) \
+ $(HTML_FILES) \
+ $(NULL)
+#
+htmldocdir = $(docdir)/$(HTML_DIR)
+htmldoc_DATA = \
+ $(NULL)
if USEDOCBOOK
-
+BUILT_SOURCES += \
+ $(LOCAL_SGML_FILES) \
+ func.refs \
+ $(NULL)
+noinst_PROGRAMS += \
+ edit-sgml \
+ $(NULL)
+htmldoc_DATA += $(HTML_DIR)/*
+
+##
if CROSS_COMPILING
.fncs.sgml:
@echo Warning: cannot rebuild $@ when cross-compiling
else
-.fncs.sgml: ./edit-sgml$(EXEEXT)
- $(RM) $@
- ./edit-sgml$(EXEEXT) $(FNCS_TMPL) < '$<' > $*.sgml
+.fncs.sgml: edit-sgml$(EXEEXT) $(srcdir)/func.sgml
+ -rm $@
+ $(AM_V_GEN) $(builddir)/edit-sgml$(EXEEXT) $(srcdir)/func.sgml < '$<' > $*.sgml
endif
-
-.sgml.txt:
- $(RM) $@
- $(DOC2TXT) $<
-
-.sgml.pdf:
- $(RM) $@
- $(DOC2PDF) $<
-
-$(man3_MANS): func.refs
-
-func.refs: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml
- $(RM) func.refs
- $(DOC2MAN) -o devel-man local-fontconfig-devel.sgml && \
- mv devel-man/manpage.refs func.refs && \
- mv devel-man/*.3 . && \
- $(RM) devel-man/manpage.* && \
- rmdir devel-man
-
-local-fontconfig-devel.sgml: fontconfig-devel.sgml
- $(LN_S) $< $@
-
-$(DOC_FUNCS_SGML): edit-sgml.c $(FNCS_TMPL)
-
+.sgml.txt: $(DOCS_DEPS)
+ -rm $@
+ $(AM_V_GEN) $(DOC2TXT) $<
+.sgml.pdf: $(DOCS_DEPS)
+ -rm $@
+ $(AM_V_GEN) $(DOC2PDF) $<
+.sgml.html: $(DOCS_DEPS)
+ -rm $@
+ $(AM_V_GEN) $(DOC2HTML) -u $< > $@
+##
fonts-conf.5: local-fontconfig-user.sgml version.sgml confdir.sgml
- $(RM) $@
- $(DOC2MAN) local-fontconfig-user.sgml && \
+ -rm $@
+ $(AM_V_GEN) $(DOC2MAN) $< && \
$(RM) manpage.*
-
-local-fontconfig-user.sgml: fontconfig-user.sgml
- $(LN_S) $< $@
-
-all-local: $(LOCAL_DOCS)
-
-clean-local:
- $(RM) $(man3_MANS) $(man5_MANS) $(DOC_FILES) func.refs
- $(RM) -r $(HTML_DIR)
-
-MAINTAINERCLEANFILES = $(DOC_FUNCS_SGML)
-
-$(HTML_DIR): local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml
- $(RM) -r $(HTML_DIR)
- $(DOC2HTML) -V '%use-id-as-filename%' -o $(HTML_DIR) local-fontconfig-devel.sgml
-
-fontconfig-devel.txt: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml
- $(RM) $@
- $(DOC2TXT) local-fontconfig-devel.sgml
- mv local-fontconfig-devel.txt $@
-
-fontconfig-devel.pdf: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml
- $(RM) $@
- $(top_srcdir)/missing --run $(DOC2PDF) $< && mv local-$@ $@ \
- || echo Failed to generate $@ >&2; \
- (test -f $@ || echo $(DOC2PDF) is required to generate this file >> $@)
-
-fontconfig-user.html: local-fontconfig-user.sgml version.sgml confdir.sgml
- $(RM) $@ local-$@ $@.tmp
- $(DOC2HTML) -u local-fontconfig-user.sgml > $@.tmp
- -test -f local-$@ && mv local-$@ $@
- -test -f $@ || mv $@.tmp $@
- -test -f $@.tmp && $(RM) $@.tmp
-
-fontconfig-user.txt: local-fontconfig-user.sgml version.sgml confdir.sgml
- $(RM) $@
- $(DOC2TXT) local-fontconfig-user.sgml
- mv local-fontconfig-user.txt $@
-
-fontconfig-user.pdf: local-fontconfig-user.sgml version.sgml confdir.sgml
- $(RM) $@
- $(top_srcdir)/missing --run $(DOC2PDF) $< && mv local-$@ $@ \
- || echo Failed to generate $@ >&2; \
- (test -f $@ || echo $(DOC2PDF) is required to generate this file >> $@)
-
-STRIPNL=awk '{ if (NR > 1) printf ("\n"); printf ("%s", $$0); }'
-confdir.sgml: ${DOC_SRC}/confdir.sgml.in
- sed "s,@CONFDIR\@,${CONFDIR}," < ${DOC_SRC}/confdir.sgml.in | $(STRIPNL) > confdir.sgml
-
-CLEANFILES=confdir.sgml local-fontconfig-user.sgml local-fontconfig-devel.sgml
-
-htmldoc_DATA = $(HTML_DIR)/*
-
+##
+$(man3_MANS): func.refs
+func.refs: local-fontconfig-devel.sgml $(DOCS_DEPS)
+ -rm $@
+ [ "x$(builddir)" != "x$(srcdir)" ] && \
+ for f in $(DOC_FUNCS_SGML); do \
+ $(RM) $(builddir)/$$f || :; \
+ $(LN_S) $(srcdir)/$$f $(builddir)/$$f; \
+ done || :
+ $(AM_V_GEN) $(DOC2MAN) -o devel-man local-fontconfig-devel.sgml && \
+ mv devel-man/manpage.refs func.refs && \
+ mv devel-man/*.3 . && \
+ $(RM) devel-man/manpage.* && \
+ rmdir devel-man
+confdir.sgml: $(srcdir)/confdir.sgml.in
+ $(AM_V_GEN) sed -e 's,@CONFDIR\@,${CONFDIR},' $< | awk '{if (NR > 1) printf("\n"); printf("%s", $$0);}' > $@
+##
$(HTML_DIR)/*: $(HTML_DIR)
-
+$(HTML_DIR): local-fontconfig-devel.sgml $(DOCS_DEPS)
+ -rm -r $@
+ $(AM_V_GEN) $(DOC2HTML) -V '%use-id-as-filename%' -o $@ local-fontconfig-devel.sgml
+local-fontconfig-user.sgml: $(srcdir)/fontconfig-user.sgml
+ $(AM_V_GEN) $(LN_S) $< $@
+local-fontconfig-devel.sgml: $(srcdir)/fontconfig-devel.sgml
+ $(AM_V_GEN) $(LN_S) $< $@
+#
+all-local: $(BUILT_DOCS) $(HTML_DIR)/*
+clean-local:
+ -rm -r $(HTML_DIR) devel-man
else
-
-htmldoc_DATA = $(srcdir)/$(HTML_DIR)/*
-
+htmldoc_DATA += $(srcdir)/$(HTML_DIR)/*
all-local:
clean-local:
endif
-
-htmldocdir=$(docdir)/$(HTML_DIR)
-
-doc_DATA = $(DOC_FILES)
-
diff --git a/fontconfig/fc-case/Makefile.am b/fontconfig/fc-case/Makefile.am
index 4f255fc71..de657afa8 100644
--- a/fontconfig/fc-case/Makefile.am
+++ b/fontconfig/fc-case/Makefile.am
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
#
# $Id $
#
@@ -61,4 +62,6 @@ $(ALIAS_FILES):
CLEANFILES = $(ALIAS_FILES)
+DISTCLEANFILES = $(TARG)
+
MAINTAINERCLEANFILES = $(TARG)
diff --git a/fontconfig/fc-glyphname/Makefile.am b/fontconfig/fc-glyphname/Makefile.am
index 3799880e5..697b5c3b9 100644
--- a/fontconfig/fc-glyphname/Makefile.am
+++ b/fontconfig/fc-glyphname/Makefile.am
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
#
# $Id $
#
@@ -54,4 +55,6 @@ $(ALIAS_FILES):
CLEANFILES = $(ALIAS_FILES)
+DISTCLEANFILES = $(TARG)
+
MAINTAINERCLEANFILES = $(TARG)
diff --git a/fontconfig/fc-lang/Makefile.am b/fontconfig/fc-lang/Makefile.am
index 1f662c193..d2eca5ba8 100644
--- a/fontconfig/fc-lang/Makefile.am
+++ b/fontconfig/fc-lang/Makefile.am
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
#
# $Id $
#
@@ -53,6 +54,8 @@ $(ALIAS_FILES):
CLEANFILES = $(ALIAS_FILES)
+DISTCLEANFILES = $(TARG)
+
MAINTAINERCLEANFILES = $(TARG)
# NOTE:
diff --git a/libxcb/src/xcb_in.c b/libxcb/src/xcb_in.c
index c6a405e62..d7db8235e 100644
--- a/libxcb/src/xcb_in.c
+++ b/libxcb/src/xcb_in.c
@@ -51,16 +51,6 @@
#define XCB_REPLY 1
#define XCB_XGE_EVENT 35
-#ifdef _MSC_VER
-#ifdef MSG_WAITALL
-#undef MSG_WAITALL
-#endif
-#endif
-
-/* required for compiling for Win32 using MinGW */
-#ifndef MSG_WAITALL
-#define MSG_WAITALL 0
-#endif
struct event_list {
xcb_generic_event_t *event;
@@ -275,7 +265,7 @@ static int read_block(const int fd, void *buf, const ssize_t len)
int done = 0;
while(done < len)
{
- int ret = recv(fd, ((char *) buf) + done, len - done,MSG_WAITALL);
+ int ret = recv(fd, ((char *) buf) + done, len - done, 0);
if(ret > 0)
done += ret;
#ifndef _WIN32
@@ -667,7 +657,7 @@ void _xcb_in_replies_done(xcb_connection_t *c)
int _xcb_in_read(xcb_connection_t *c)
{
- int n = recv(c->fd, c->in.queue + c->in.queue_len, sizeof(c->in.queue) - c->in.queue_len,MSG_WAITALL);
+ int n = recv(c->fd, c->in.queue + c->in.queue_len, sizeof(c->in.queue) - c->in.queue_len, 0);
if(n > 0)
c->in.queue_len += n;
while(read_packet(c))
diff --git a/mesalib/src/glsl/loop_unroll.cpp b/mesalib/src/glsl/loop_unroll.cpp
index d0bcaa670..3434fde62 100644
--- a/mesalib/src/glsl/loop_unroll.cpp
+++ b/mesalib/src/glsl/loop_unroll.cpp
@@ -50,13 +50,44 @@ is_break(ir_instruction *ir)
&& ((ir_loop_jump *) ir)->is_break();
}
+class loop_unroll_count : public ir_hierarchical_visitor {
+public:
+ int nodes;
+ bool fail;
+
+ loop_unroll_count(exec_list *list)
+ {
+ nodes = 0;
+ fail = false;
+
+ run(list);
+ }
+
+ virtual ir_visitor_status visit_enter(ir_assignment *ir)
+ {
+ nodes++;
+ return visit_continue;
+ }
+
+ virtual ir_visitor_status visit_enter(ir_expression *ir)
+ {
+ nodes++;
+ return visit_continue;
+ }
+
+ virtual ir_visitor_status visit_enter(ir_loop *ir)
+ {
+ fail = true;
+ return visit_continue;
+ }
+};
+
ir_visitor_status
loop_unroll_visitor::visit_leave(ir_loop *ir)
{
loop_variable_state *const ls = this->state->get(ir);
int iterations;
- unsigned ir_count;
/* If we've entered a loop that hasn't been analyzed, something really,
* really bad has happened.
@@ -81,17 +112,10 @@ loop_unroll_visitor::visit_leave(ir_loop *ir)
/* Don't try to unroll nested loops and loops with a huge body.
*/
- ir_count = 0;
- foreach_list(node, &ir->body_instructions) {
- ++ir_count;
-
- /* If the loop body gets to huge, do not unroll. */
- if (5*max_iterations < ir_count*iterations)
- return visit_continue;
- /* Do not unroll loops with child loop nodes. */
- if (((ir_instruction *) node)->as_loop())
- return visit_continue;
- }
+ loop_unroll_count count(&ir->body_instructions);
+
+ if (count.fail || count.nodes * iterations > (int)max_iterations * 5)
+ return visit_continue;
if (ls->num_loop_jumps > 1)
return visit_continue;
diff --git a/mesalib/src/mesa/main/pack.c b/mesalib/src/mesa/main/pack.c
index 41485a1bf..4d4b4a825 100644
--- a/mesalib/src/mesa/main/pack.c
+++ b/mesalib/src/mesa/main/pack.c
@@ -5250,3 +5250,94 @@ _mesa_unpack_image( GLuint dimensions,
}
}
+
+
+/**
+ * If we unpack colors from a luminance surface, we'll get pixel colors
+ * such as (l, l, l, a).
+ * When we call _mesa_pack_rgba_span_float(format=GL_LUMINANCE), that
+ * function will compute L=R+G+B before packing. The net effect is we'll
+ * accidentally store luminance values = 3*l.
+ * This function compensates for that by converting (aka rebasing) (l,l,l,a)
+ * to be (l,0,0,a).
+ * It's a similar story for other formats such as LUMINANCE_ALPHA, ALPHA
+ * and INTENSITY.
+ *
+ * Finally, we also need to do this when the actual surface format does
+ * not match the logical surface format. For example, suppose the user
+ * requests a GL_LUMINANCE texture but the driver stores it as RGBA.
+ * Again, we'll get pixel values like (l,l,l,a).
+ */
+void
+_mesa_rebase_rgba_float(GLuint n, GLfloat rgba[][4], GLenum baseFormat)
+{
+ GLuint i;
+
+ switch (baseFormat) {
+ case GL_ALPHA:
+ for (i = 0; i < n; i++) {
+ rgba[i][RCOMP] = 0.0F;
+ rgba[i][GCOMP] = 0.0F;
+ rgba[i][BCOMP] = 0.0F;
+ }
+ break;
+ case GL_INTENSITY:
+ /* fall-through */
+ case GL_LUMINANCE:
+ for (i = 0; i < n; i++) {
+ rgba[i][GCOMP] = 0.0F;
+ rgba[i][BCOMP] = 0.0F;
+ rgba[i][ACOMP] = 1.0F;
+ }
+ break;
+ case GL_LUMINANCE_ALPHA:
+ for (i = 0; i < n; i++) {
+ rgba[i][GCOMP] = 0.0F;
+ rgba[i][BCOMP] = 0.0F;
+ }
+ break;
+ default:
+ /* no-op */
+ ;
+ }
+}
+
+
+/**
+ * As above, but GLuint components.
+ */
+void
+_mesa_rebase_rgba_uint(GLuint n, GLuint rgba[][4], GLenum baseFormat)
+{
+ GLuint i;
+
+ switch (baseFormat) {
+ case GL_ALPHA:
+ for (i = 0; i < n; i++) {
+ rgba[i][RCOMP] = 0;
+ rgba[i][GCOMP] = 0;
+ rgba[i][BCOMP] = 0;
+ }
+ break;
+ case GL_INTENSITY:
+ /* fall-through */
+ case GL_LUMINANCE:
+ for (i = 0; i < n; i++) {
+ rgba[i][GCOMP] = 0;
+ rgba[i][BCOMP] = 0;
+ rgba[i][ACOMP] = 1;
+ }
+ break;
+ case GL_LUMINANCE_ALPHA:
+ for (i = 0; i < n; i++) {
+ rgba[i][GCOMP] = 0;
+ rgba[i][BCOMP] = 0;
+ }
+ break;
+ default:
+ /* no-op */
+ ;
+ }
+}
+
+
diff --git a/mesalib/src/mesa/main/pack.h b/mesalib/src/mesa/main/pack.h
index b1853cd59..cd49c7495 100644
--- a/mesalib/src/mesa/main/pack.h
+++ b/mesalib/src/mesa/main/pack.h
@@ -149,4 +149,11 @@ _mesa_pack_rgba_span_int(struct gl_context *ctx, GLuint n, GLuint rgba[][4],
GLenum dstFormat, GLenum dstType,
GLvoid *dstAddr);
+
+extern void
+_mesa_rebase_rgba_float(GLuint n, GLfloat rgba[][4], GLenum baseFormat);
+
+extern void
+_mesa_rebase_rgba_uint(GLuint n, GLuint rgba[][4], GLenum baseFormat);
+
#endif
diff --git a/mesalib/src/mesa/main/readpix.c b/mesalib/src/mesa/main/readpix.c
index 3384d8a38..491854955 100644
--- a/mesalib/src/mesa/main/readpix.c
+++ b/mesalib/src/mesa/main/readpix.c
@@ -291,10 +291,14 @@ slow_read_rgba_pixels( struct gl_context *ctx,
for (j = 0; j < height; j++) {
if (_mesa_is_integer_format(format)) {
_mesa_unpack_uint_rgba_row(rbFormat, width, map, (GLuint (*)[4]) rgba);
+ _mesa_rebase_rgba_uint(width, (GLuint (*)[4]) rgba,
+ rb->_BaseFormat);
_mesa_pack_rgba_span_int(ctx, width, (GLuint (*)[4]) rgba, format,
type, dst);
} else {
_mesa_unpack_rgba_row(rbFormat, width, map, (GLfloat (*)[4]) rgba);
+ _mesa_rebase_rgba_float(width, (GLfloat (*)[4]) rgba,
+ rb->_BaseFormat);
_mesa_pack_rgba_span_float(ctx, width, (GLfloat (*)[4]) rgba, format,
type, dst, packing, transferOps);
}
diff --git a/mesalib/src/mesa/main/texgetimage.c b/mesalib/src/mesa/main/texgetimage.c
index a02a49156..44a828adf 100644
--- a/mesalib/src/mesa/main/texgetimage.c
+++ b/mesalib/src/mesa/main/texgetimage.c
@@ -266,13 +266,8 @@ get_tex_rgba_compressed(struct gl_context *ctx, GLuint dimensions,
if (baseFormat == GL_LUMINANCE ||
baseFormat == GL_LUMINANCE_ALPHA) {
- /* Set green and blue to zero since the pack function here will
- * compute L=R+G+B.
- */
- GLuint i;
- for (i = 0; i < width * height; i++) {
- tempImage[i * 4 + GCOMP] = tempImage[i * 4 + BCOMP] = 0.0f;
- }
+ _mesa_rebase_rgba_float(width * height, (GLfloat (*)[4]) tempImage,
+ baseFormat);
}
srcRow = tempImage;
@@ -340,76 +335,12 @@ get_tex_rgba_uncompressed(struct gl_context *ctx, GLuint dimensions,
if (is_integer) {
_mesa_unpack_uint_rgba_row(texFormat, width, src, rgba_uint);
-
- if (texImage->_BaseFormat == GL_ALPHA) {
- GLuint col;
- for (col = 0; col < width; col++) {
- rgba_uint[col][RCOMP] = 0;
- rgba_uint[col][GCOMP] = 0;
- rgba_uint[col][BCOMP] = 0;
- }
- }
- else if (texImage->_BaseFormat == GL_LUMINANCE) {
- GLuint col;
- for (col = 0; col < width; col++) {
- rgba_uint[col][GCOMP] = 0;
- rgba_uint[col][BCOMP] = 0;
- rgba_uint[col][ACOMP] = 1;
- }
- }
- else if (texImage->_BaseFormat == GL_LUMINANCE_ALPHA) {
- GLuint col;
- for (col = 0; col < width; col++) {
- rgba_uint[col][GCOMP] = 0;
- rgba_uint[col][BCOMP] = 0;
- }
- }
- else if (texImage->_BaseFormat == GL_INTENSITY) {
- GLuint col;
- for (col = 0; col < width; col++) {
- rgba_uint[col][GCOMP] = 0;
- rgba_uint[col][BCOMP] = 0;
- rgba_uint[col][ACOMP] = 1;
- }
- }
-
+ _mesa_rebase_rgba_uint(width, rgba_uint, texImage->_BaseFormat);
_mesa_pack_rgba_span_int(ctx, width, rgba_uint,
format, type, dest);
} else {
_mesa_unpack_rgba_row(texFormat, width, src, rgba);
-
- if (texImage->_BaseFormat == GL_ALPHA) {
- GLuint col;
- for (col = 0; col < width; col++) {
- rgba[col][RCOMP] = 0.0F;
- rgba[col][GCOMP] = 0.0F;
- rgba[col][BCOMP] = 0.0F;
- }
- }
- else if (texImage->_BaseFormat == GL_LUMINANCE) {
- GLuint col;
- for (col = 0; col < width; col++) {
- rgba[col][GCOMP] = 0.0F;
- rgba[col][BCOMP] = 0.0F;
- rgba[col][ACOMP] = 1.0F;
- }
- }
- else if (texImage->_BaseFormat == GL_LUMINANCE_ALPHA) {
- GLuint col;
- for (col = 0; col < width; col++) {
- rgba[col][GCOMP] = 0.0F;
- rgba[col][BCOMP] = 0.0F;
- }
- }
- else if (texImage->_BaseFormat == GL_INTENSITY) {
- GLuint col;
- for (col = 0; col < width; col++) {
- rgba[col][GCOMP] = 0.0F;
- rgba[col][BCOMP] = 0.0F;
- rgba[col][ACOMP] = 1.0F;
- }
- }
-
+ _mesa_rebase_rgba_float(width, rgba, texImage->_BaseFormat);
_mesa_pack_rgba_span_float(ctx, width, (GLfloat (*)[4]) rgba,
format, type, dest,
&ctx->Pack, transferOps);
diff --git a/pixman/configure.ac b/pixman/configure.ac
index 5eeb6a54e..17e30f5e4 100644
--- a/pixman/configure.ac
+++ b/pixman/configure.ac
@@ -54,7 +54,7 @@ AC_PREREQ([2.57])
m4_define([pixman_major], 0)
m4_define([pixman_minor], 25)
-m4_define([pixman_micro], 1)
+m4_define([pixman_micro], 3)
m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])