aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fontconfig/test/test-migration.c18
-rw-r--r--mesalib/configure.ac18
-rw-r--r--mesalib/docs/GL3.txt10
-rw-r--r--mesalib/docs/relnotes/10.0.html1
-rw-r--r--mesalib/include/GL/gl.h41
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_blitter.c12
-rw-r--r--mesalib/src/glsl/Makefile.am18
-rw-r--r--mesalib/src/glsl/ast_to_hir.cpp1
-rw-r--r--mesalib/src/glsl/builtin_variables.cpp1
-rw-r--r--mesalib/src/glsl/glsl_parser.yy35
-rw-r--r--mesalib/src/glsl/ir.cpp11
-rw-r--r--mesalib/src/glsl/linker.cpp60
-rw-r--r--mesalib/src/glsl/linker.h3
-rw-r--r--mesalib/src/glsl/opt_algebraic.cpp40
-rwxr-xr-xmesalib/src/mapi/glapi/gen/gl_API.xml32
-rw-r--r--mesalib/src/mesa/main/macros.h6
-rw-r--r--mesalib/src/mesa/main/querymatrix.c2
-rw-r--r--mesalib/src/mesa/state_tracker/st_draw.c19
-rwxr-xr-x[-rw-r--r--]xorg-server/glx/glxdricommon.c32
19 files changed, 210 insertions, 150 deletions
diff --git a/fontconfig/test/test-migration.c b/fontconfig/test/test-migration.c
index a0ab83902..970965186 100644
--- a/fontconfig/test/test-migration.c
+++ b/fontconfig/test/test-migration.c
@@ -4,6 +4,11 @@
#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>
+#ifndef HAVE_STRUCT_DIRENT_D_TYPE
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#endif
#include <fontconfig/fontconfig.h>
FcBool
@@ -36,6 +41,9 @@ unlink_dirs(const char *dir)
size_t len = strlen (dir);
char *n = NULL;
FcBool ret = FcTrue;
+#ifndef HAVE_STRUCT_DIRENT_D_TYPE
+ struct stat statb;
+#endif
if (!d)
return FcFalse;
@@ -53,7 +61,17 @@ unlink_dirs(const char *dir)
strcpy (n, dir);
n[len] = '/';
strcpy (&n[len + 1], e->d_name);
+#ifdef HAVE_STRUCT_DIRENT_D_TYPE
if (e->d_type == DT_DIR)
+#else
+ if (stat (n, &statb) == -1)
+ {
+ fprintf (stderr, "E: %s\n", n);
+ ret = FcFalse;
+ break;
+ }
+ if (S_ISDIR (statb.st_mode))
+#endif
{
if (!unlink_dirs (n))
{
diff --git a/mesalib/configure.ac b/mesalib/configure.ac
index 08344c501..dfa35b41b 100644
--- a/mesalib/configure.ac
+++ b/mesalib/configure.ac
@@ -593,6 +593,12 @@ AC_ARG_ENABLE([opencl],
@<:@default=no@:>@])],
[],
[enable_opencl=no])
+AC_ARG_ENABLE([opencl_icd],
+ [AS_HELP_STRING([--enable-opencl-icd],
+ [Build an OpenCL ICD library to be loaded by an ICD implementation
+ @<:@default=no@:>@])],
+ [enable_opencl_icd="$enableval"],
+ [enable_opencl_icd=no])
AC_ARG_ENABLE([xlib-glx],
[AS_HELP_STRING([--enable-xlib-glx],
[make GLX library Xlib-based instead of DRI-based @<:@default=disabled@:>@])],
@@ -1337,8 +1343,8 @@ if test "x$enable_opencl" = xyes; then
AC_MSG_ERROR([cannot enable OpenCL without Gallium])
fi
- if test $GCC_VERSION_MAJOR -lt 4 -o $GCC_VERSION_MAJOR -eq 4 -a $GCC_VERSION_MINOR -lt 6; then
- AC_MSG_ERROR([gcc >= 4.6 is required to build clover])
+ if test $GCC_VERSION_MAJOR -lt 4 -o $GCC_VERSION_MAJOR -eq 4 -a $GCC_VERSION_MINOR -lt 7; then
+ AC_MSG_ERROR([gcc >= 4.7 is required to build clover])
fi
if test "x$have_libclc" = xno; then
@@ -1356,8 +1362,16 @@ if test "x$enable_opencl" = xyes; then
GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS clover"
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS opencl"
enable_gallium_loader=yes
+
+ if test "x$enable_opencl_icd" = xyes; then
+ OPENCL_LIBNAME="MesaOpenCL"
+ else
+ OPENCL_LIBNAME="OpenCL"
+ fi
fi
AM_CONDITIONAL(HAVE_CLOVER, test "x$enable_opencl" = xyes)
+AM_CONDITIONAL(HAVE_CLOVER_ICD, test "x$enable_opencl_icd" = xyes)
+AC_SUBST([OPENCL_LIBNAME])
dnl
dnl Gallium configuration
diff --git a/mesalib/docs/GL3.txt b/mesalib/docs/GL3.txt
index a56e7fead..ff28ea6a8 100644
--- a/mesalib/docs/GL3.txt
+++ b/mesalib/docs/GL3.txt
@@ -64,8 +64,8 @@ Signed normalized textures (GL_EXT_texture_snorm) DONE (i965, r300, r600)
GL 3.2:
Core/compatibility profiles DONE
-GLSL 1.50 in progress
-Geometry shaders (GL_ARB_geometry_shader4) partially done
+GLSL 1.50 DONE (i965)
+Geometry shaders DONE (i965)
BGRA vertex order (GL_ARB_vertex_array_bgra) DONE (i965, r300, r600, swrast)
Base vertex offset(GL_ARB_draw_elements_base_vertex) DONE (i965, r300, r600, swrast)
Frag shader coord (GL_ARB_fragment_coord_conventions) DONE (i965, r300, r600, swrast)
@@ -79,7 +79,7 @@ GLX_ARB_create_context_profile DONE
GL 3.3:
-GLSL 3.30 new features in this version pretty much done
+GLSL 3.30 DONE (i965)
GL_ARB_blend_func_extended DONE (i965, r600, softpipe)
GL_ARB_explicit_attrib_location DONE (i915, i965, r300, r600, swrast)
GL_ARB_occlusion_query2 DONE (i965, r300, r600, swrast)
@@ -157,7 +157,7 @@ ARB_robust_buffer_access_behavior not started
ARB_shader_image_size not started
ARB_shader_storage_buffer_object not started
ARB_stencil_texturing not started
-ARB_texture_buffer_range DONE (nv50, nvc0)
+ARB_texture_buffer_range DONE (nv50, nvc0, i965)
ARB_texture_query_levels DONE (i965)
ARB_texture_storage_multisample DONE (i965)
ARB_texture_view not started
@@ -173,7 +173,7 @@ ARB_clear_texture not started
ARB_enhanced_layouts not started
ARB_multi_bind not started
ARB_query_buffer_object not started
-ARB_texture_mirror_clamp_to_edge not started
+ARB_texture_mirror_clamp_to_edge DONE (i965, nv30, nv50, nvc0, r300, r600, radeonsi, swrast)
ARB_texture_stencil8 not started
ARB_vertex_type_10f_11f_11f_rev not started
diff --git a/mesalib/docs/relnotes/10.0.html b/mesalib/docs/relnotes/10.0.html
index 0b25f49b5..ef550d154 100644
--- a/mesalib/docs/relnotes/10.0.html
+++ b/mesalib/docs/relnotes/10.0.html
@@ -48,6 +48,7 @@ Note: some of the new features are only available with certain drivers.
<li>GL_ARB_conservative_depth on i965.</li>
<li>GL_ARB_texture_gather on i965.</li>
<li>GL_ARB_texture_query_levels on i965.</li>
+<li>GL_ARB_texture_mirror_clamp_to_edge.</li>
<li>GL_KHR_debug</li>
</ul>
diff --git a/mesalib/include/GL/gl.h b/mesalib/include/GL/gl.h
index babb7463e..6b94e3fb0 100644
--- a/mesalib/include/GL/gl.h
+++ b/mesalib/include/GL/gl.h
@@ -2086,26 +2086,6 @@ typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLsh
-#if GL_ARB_shader_objects
-
-#ifndef GL_MESA_shader_debug
-#define GL_MESA_shader_debug 1
-
-#define GL_DEBUG_OBJECT_MESA 0x8759
-#define GL_DEBUG_PRINT_MESA 0x875A
-#define GL_DEBUG_ASSERT_MESA 0x875B
-
-GLAPI GLhandleARB GLAPIENTRY glCreateDebugObjectMESA (void);
-GLAPI void GLAPIENTRY glClearDebugLogMESA (GLhandleARB obj, GLenum logType, GLenum shaderType);
-GLAPI void GLAPIENTRY glGetDebugLogMESA (GLhandleARB obj, GLenum logType, GLenum shaderType, GLsizei maxLength,
- GLsizei *length, GLcharARB *debugLog);
-GLAPI GLsizei GLAPIENTRY glGetDebugLogLengthMESA (GLhandleARB obj, GLenum logType, GLenum shaderType);
-
-#endif /* GL_MESA_shader_debug */
-
-#endif /* GL_ARB_shader_objects */
-
-
/*
* ???. GL_MESA_packed_depth_stencil
* XXX obsolete
@@ -2122,27 +2102,6 @@ GLAPI GLsizei GLAPIENTRY glGetDebugLogLengthMESA (GLhandleARB obj, GLenum logTyp
#endif /* GL_MESA_packed_depth_stencil */
-#ifndef GL_MESA_program_debug
-#define GL_MESA_program_debug 1
-
-#define GL_FRAGMENT_PROGRAM_POSITION_MESA 0x8bb0
-#define GL_FRAGMENT_PROGRAM_CALLBACK_MESA 0x8bb1
-#define GL_FRAGMENT_PROGRAM_CALLBACK_FUNC_MESA 0x8bb2
-#define GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA 0x8bb3
-#define GL_VERTEX_PROGRAM_POSITION_MESA 0x8bb4
-#define GL_VERTEX_PROGRAM_CALLBACK_MESA 0x8bb5
-#define GL_VERTEX_PROGRAM_CALLBACK_FUNC_MESA 0x8bb6
-#define GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA 0x8bb7
-
-typedef void (*GLprogramcallbackMESA)(GLenum target, GLvoid *data);
-
-GLAPI void GLAPIENTRY glProgramCallbackMESA(GLenum target, GLprogramcallbackMESA callback, GLvoid *data);
-
-GLAPI void GLAPIENTRY glGetProgramRegisterfvMESA(GLenum target, GLsizei len, const GLubyte *name, GLfloat *v);
-
-#endif /* GL_MESA_program_debug */
-
-
#ifndef GL_MESA_texture_array
#define GL_MESA_texture_array 1
diff --git a/mesalib/src/gallium/auxiliary/util/u_blitter.c b/mesalib/src/gallium/auxiliary/util/u_blitter.c
index a51b9ef20..096d3bc2b 100644
--- a/mesalib/src/gallium/auxiliary/util/u_blitter.c
+++ b/mesalib/src/gallium/auxiliary/util/u_blitter.c
@@ -535,9 +535,9 @@ static void blitter_restore_textures(struct blitter_context_priv *ctx)
ctx->base.saved_num_sampler_states = ~0;
/* Fragment sampler views. */
- pipe->set_fragment_sampler_views(pipe,
- ctx->base.saved_num_sampler_views,
- ctx->base.saved_sampler_views);
+ pipe->set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0,
+ ctx->base.saved_num_sampler_views,
+ ctx->base.saved_sampler_views);
for (i = 0; i < ctx->base.saved_num_sampler_views; i++)
pipe_sampler_view_reference(&ctx->base.saved_sampler_views[i], NULL);
@@ -1309,7 +1309,7 @@ void util_blitter_blit_generic(struct blitter_context *blitter,
views[0] = src;
views[1] = pipe->create_sampler_view(pipe, src->texture, &templ);
- pipe->set_fragment_sampler_views(pipe, 2, views);
+ pipe->set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0, 2, views);
pipe->bind_sampler_states(pipe, PIPE_SHADER_FRAGMENT, 0, 2, samplers);
pipe_sampler_view_reference(&views[1], NULL);
@@ -1324,13 +1324,13 @@ void util_blitter_blit_generic(struct blitter_context *blitter,
view = pipe->create_sampler_view(pipe, src->texture, &templ);
- pipe->set_fragment_sampler_views(pipe, 1, &view);
+ pipe->set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0, 1, &view);
pipe->bind_sampler_states(pipe, PIPE_SHADER_FRAGMENT,
0, 1, &sampler_state);
pipe_sampler_view_reference(&view, NULL);
} else {
- pipe->set_fragment_sampler_views(pipe, 1, &src);
+ pipe->set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0, 1, &src);
pipe->bind_sampler_states(pipe, PIPE_SHADER_FRAGMENT,
0, 1, &sampler_state);
}
diff --git a/mesalib/src/glsl/Makefile.am b/mesalib/src/glsl/Makefile.am
index cbf253cb5..b9ed5b62b 100644
--- a/mesalib/src/glsl/Makefile.am
+++ b/mesalib/src/glsl/Makefile.am
@@ -32,6 +32,7 @@ AM_CXXFLAGS = $(VISIBILITY_CXXFLAGS)
include Makefile.sources
TESTS = glcpp/tests/glcpp-test \
+ tests/general-ir-test \
tests/optimization-test \
tests/ralloc-test \
tests/sampler-types-test \
@@ -45,12 +46,29 @@ noinst_LTLIBRARIES = libglsl.la libglcpp.la
check_PROGRAMS = \
glcpp/glcpp \
glsl_test \
+ tests/general-ir-test \
tests/ralloc-test \
tests/sampler-types-test \
tests/uniform-initializer-test
noinst_PROGRAMS = glsl_compiler
+tests_general_ir_test_SOURCES = \
+ $(top_srcdir)/src/mesa/main/hash_table.c \
+ $(top_srcdir)/src/mesa/main/imports.c \
+ $(top_srcdir)/src/mesa/program/prog_hash_table.c\
+ $(top_srcdir)/src/mesa/program/symbol_table.c \
+ $(GLSL_SRCDIR)/standalone_scaffolding.cpp \
+ tests/builtin_variable_test.cpp \
+ tests/invalidate_locations_test.cpp \
+ tests/general_ir_test.cpp
+tests_general_ir_test_CFLAGS = \
+ $(PTHREAD_CFLAGS)
+tests_general_ir_test_LDADD = \
+ $(top_builddir)/src/gtest/libgtest.la \
+ $(top_builddir)/src/glsl/libglsl.la \
+ $(PTHREAD_LIBS)
+
tests_uniform_initializer_test_SOURCES = \
$(top_srcdir)/src/mesa/main/hash_table.c \
$(top_srcdir)/src/mesa/main/imports.c \
diff --git a/mesalib/src/glsl/ast_to_hir.cpp b/mesalib/src/glsl/ast_to_hir.cpp
index dfa32d920..b644b22c7 100644
--- a/mesalib/src/glsl/ast_to_hir.cpp
+++ b/mesalib/src/glsl/ast_to_hir.cpp
@@ -4876,7 +4876,6 @@ ast_interface_block::hir(exec_list *instructions,
var_mode);
}
- var->init_interface_type(block_type);
if (state->target == geometry_shader && var_mode == ir_var_shader_in)
handle_geometry_shader_input_decl(state, loc, var);
diff --git a/mesalib/src/glsl/builtin_variables.cpp b/mesalib/src/glsl/builtin_variables.cpp
index 64f34061a..fc1115bc4 100644
--- a/mesalib/src/glsl/builtin_variables.cpp
+++ b/mesalib/src/glsl/builtin_variables.cpp
@@ -890,7 +890,6 @@ builtin_variable_generator::generate_varyings()
this->per_vertex_in.construct_interface_instance();
ir_variable *var = add_variable("gl_in", array(per_vertex_in_type, 0),
ir_var_shader_in, -1);
- var->init_interface_type(per_vertex_in_type);
}
if (state->target == vertex_shader || state->target == geometry_shader) {
const glsl_type *per_vertex_out_type =
diff --git a/mesalib/src/glsl/glsl_parser.yy b/mesalib/src/glsl/glsl_parser.yy
index 00589e28e..0a0708e95 100644
--- a/mesalib/src/glsl/glsl_parser.yy
+++ b/mesalib/src/glsl/glsl_parser.yy
@@ -2372,6 +2372,7 @@ layout_defaults:
| layout_qualifier IN_TOK ';'
{
void *ctx = state;
+ $$ = NULL;
if (state->target != geometry_shader) {
_mesa_glsl_error(& @1, state,
"input layout qualifiers only valid in "
@@ -2380,8 +2381,22 @@ layout_defaults:
_mesa_glsl_error(& @1, state,
"input layout qualifiers must specify a primitive"
" type");
+ } else {
+ /* Make sure this is a valid input primitive type. */
+ switch ($1.prim_type) {
+ case GL_POINTS:
+ case GL_LINES:
+ case GL_LINES_ADJACENCY:
+ case GL_TRIANGLES:
+ case GL_TRIANGLES_ADJACENCY:
+ $$ = new(ctx) ast_gs_input_layout(@1, $1.prim_type);
+ break;
+ default:
+ _mesa_glsl_error(&@1, state,
+ "invalid geometry shader input primitive type");
+ break;
+ }
}
- $$ = new(ctx) ast_gs_input_layout(@1, $1.prim_type);
}
| layout_qualifier OUT_TOK ';'
@@ -2390,8 +2405,22 @@ layout_defaults:
_mesa_glsl_error(& @1, state,
"out layout qualifiers only valid in "
"geometry shaders");
- } else if (!state->out_qualifier->merge_qualifier(& @1, state, $1)) {
- YYERROR;
+ } else {
+ if ($1.flags.q.prim_type) {
+ /* Make sure this is a valid output primitive type. */
+ switch ($1.prim_type) {
+ case GL_POINTS:
+ case GL_LINE_STRIP:
+ case GL_TRIANGLE_STRIP:
+ break;
+ default:
+ _mesa_glsl_error(&@1, state, "invalid geometry shader output "
+ "primitive type");
+ break;
+ }
+ }
+ if (!state->out_qualifier->merge_qualifier(& @1, state, $1))
+ YYERROR;
}
$$ = NULL;
}
diff --git a/mesalib/src/glsl/ir.cpp b/mesalib/src/glsl/ir.cpp
index de9613e8f..54a8e400c 100644
--- a/mesalib/src/glsl/ir.cpp
+++ b/mesalib/src/glsl/ir.cpp
@@ -1603,8 +1603,15 @@ ir_variable::ir_variable(const struct glsl_type *type, const char *name,
this->depth_layout = ir_depth_layout_none;
this->used = false;
- if (type && type->base_type == GLSL_TYPE_SAMPLER)
- this->read_only = true;
+ if (type != NULL) {
+ if (type->base_type == GLSL_TYPE_SAMPLER)
+ this->read_only = true;
+
+ if (type->is_interface())
+ this->init_interface_type(type);
+ else if (type->is_array() && type->fields.array->is_interface())
+ this->init_interface_type(type->fields.array);
+ }
}
diff --git a/mesalib/src/glsl/linker.cpp b/mesalib/src/glsl/linker.cpp
index 9095a4015..b23c31a16 100644
--- a/mesalib/src/glsl/linker.cpp
+++ b/mesalib/src/glsl/linker.cpp
@@ -366,35 +366,38 @@ parse_program_resource_name(const GLchar *name,
void
-link_invalidate_variable_locations(gl_shader *sh, int input_base,
- int output_base)
+link_invalidate_variable_locations(exec_list *ir)
{
- foreach_list(node, sh->ir) {
+ foreach_list(node, ir) {
ir_variable *const var = ((ir_instruction *) node)->as_variable();
if (var == NULL)
continue;
- int base;
- switch (var->mode) {
- case ir_var_shader_in:
- base = input_base;
- break;
- case ir_var_shader_out:
- base = output_base;
- break;
- default:
- continue;
- }
-
- /* Only assign locations for generic attributes / varyings / etc.
+ /* Only assign locations for variables that lack an explicit location.
+ * Explicit locations are set for all built-in variables, generic vertex
+ * shader inputs (via layout(location=...)), and generic fragment shader
+ * outputs (also via layout(location=...)).
*/
- if ((var->location >= base) && !var->explicit_location)
+ if (!var->explicit_location) {
var->location = -1;
+ var->location_frac = 0;
+ }
- if ((var->location == -1) && !var->explicit_location) {
+ /* ir_variable::is_unmatched_generic_inout is used by the linker while
+ * connecting outputs from one stage to inputs of the next stage.
+ *
+ * There are two implicit assumptions here. First, we assume that any
+ * built-in variable (i.e., non-generic in or out) will have
+ * explicit_location set. Second, we assume that any generic in or out
+ * will not have explicit_location set.
+ *
+ * This second assumption will only be valid until
+ * GL_ARB_separate_shader_objects is supported. When that extension is
+ * implemented, this function will need some modifications.
+ */
+ if (!var->explicit_location) {
var->is_unmatched_generic_inout = 1;
- var->location_frac = 0;
} else {
var->is_unmatched_generic_inout = 0;
}
@@ -2057,14 +2060,10 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
}
}
- /* Previous to GLSL version 1.30, different compilation units could mix and
- * match shading language versions. With GLSL 1.30 and later, the versions
- * of all shaders must match.
- *
- * GLSL ES has never allowed mixing of shading language versions.
+ /* In desktop GLSL, different shader versions may be linked together. In
+ * GLSL ES, all shader versions must be the same.
*/
- if ((is_es_prog || max_version >= 130)
- && min_version != max_version) {
+ if (is_es_prog && min_version != max_version) {
linker_error(prog, "all shaders must use same shading "
"language version\n");
goto done;
@@ -2221,18 +2220,15 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
/* Mark all generic shader inputs and outputs as unpaired. */
if (prog->_LinkedShaders[MESA_SHADER_VERTEX] != NULL) {
link_invalidate_variable_locations(
- prog->_LinkedShaders[MESA_SHADER_VERTEX],
- VERT_ATTRIB_GENERIC0, VARYING_SLOT_VAR0);
+ prog->_LinkedShaders[MESA_SHADER_VERTEX]->ir);
}
if (prog->_LinkedShaders[MESA_SHADER_GEOMETRY] != NULL) {
link_invalidate_variable_locations(
- prog->_LinkedShaders[MESA_SHADER_GEOMETRY],
- VARYING_SLOT_VAR0, VARYING_SLOT_VAR0);
+ prog->_LinkedShaders[MESA_SHADER_GEOMETRY]->ir);
}
if (prog->_LinkedShaders[MESA_SHADER_FRAGMENT] != NULL) {
link_invalidate_variable_locations(
- prog->_LinkedShaders[MESA_SHADER_FRAGMENT],
- VARYING_SLOT_VAR0, FRAG_RESULT_DATA0);
+ prog->_LinkedShaders[MESA_SHADER_FRAGMENT]->ir);
}
/* FINISHME: The value of the max_attribute_index parameter is
diff --git a/mesalib/src/glsl/linker.h b/mesalib/src/glsl/linker.h
index 8a0027d2b..887cd33d1 100644
--- a/mesalib/src/glsl/linker.h
+++ b/mesalib/src/glsl/linker.h
@@ -31,8 +31,7 @@ link_function_calls(gl_shader_program *prog, gl_shader *main,
gl_shader **shader_list, unsigned num_shaders);
extern void
-link_invalidate_variable_locations(gl_shader *sh, enum ir_variable_mode mode,
- int generic_base);
+link_invalidate_variable_locations(exec_list *ir);
extern void
link_assign_uniform_locations(struct gl_shader_program *prog);
diff --git a/mesalib/src/glsl/opt_algebraic.cpp b/mesalib/src/glsl/opt_algebraic.cpp
index 3e5802e18..37b2f02c6 100644
--- a/mesalib/src/glsl/opt_algebraic.cpp
+++ b/mesalib/src/glsl/opt_algebraic.cpp
@@ -210,6 +210,34 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
this->mem_ctx = ralloc_parent(ir);
switch (ir->operation) {
+ case ir_unop_abs:
+ if (op_expr[0] == NULL)
+ break;
+
+ switch (op_expr[0]->operation) {
+ case ir_unop_abs:
+ case ir_unop_neg:
+ this->progress = true;
+ temp = new(mem_ctx) ir_expression(ir_unop_abs,
+ ir->type,
+ op_expr[0]->operands[0],
+ NULL);
+ return swizzle_if_required(ir, temp);
+ default:
+ break;
+ }
+ break;
+
+ case ir_unop_neg:
+ if (op_expr[0] == NULL)
+ break;
+
+ if (op_expr[0]->operation == ir_unop_neg) {
+ this->progress = true;
+ return swizzle_if_required(ir, op_expr[0]->operands[0]);
+ }
+ break;
+
case ir_unop_logic_not: {
enum ir_expression_operation new_op = ir_unop_logic_not;
@@ -257,11 +285,9 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
* folding.
*/
if (op_const[0] && !op_const[1])
- reassociate_constant(ir, 0, op_const[0],
- ir->operands[1]->as_expression());
+ reassociate_constant(ir, 0, op_const[0], op_expr[1]);
if (op_const[1] && !op_const[0])
- reassociate_constant(ir, 1, op_const[1],
- ir->operands[0]->as_expression());
+ reassociate_constant(ir, 1, op_const[1], op_expr[0]);
break;
case ir_binop_sub:
@@ -315,11 +341,9 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
* constant folding.
*/
if (op_const[0] && !op_const[1])
- reassociate_constant(ir, 0, op_const[0],
- ir->operands[1]->as_expression());
+ reassociate_constant(ir, 0, op_const[0], op_expr[1]);
if (op_const[1] && !op_const[0])
- reassociate_constant(ir, 1, op_const[1],
- ir->operands[0]->as_expression());
+ reassociate_constant(ir, 1, op_const[1], op_expr[0]);
break;
diff --git a/mesalib/src/mapi/glapi/gen/gl_API.xml b/mesalib/src/mapi/glapi/gen/gl_API.xml
index 0c78c5208..17c322519 100755
--- a/mesalib/src/mapi/glapi/gen/gl_API.xml
+++ b/mesalib/src/mapi/glapi/gen/gl_API.xml
@@ -13027,38 +13027,6 @@
<enum name="RGBA8_SNORM" value="0x8F97"/>
</category>
-<category name="GL_MESA_shader_debug">
- <enum name="DEBUG_OBJECT_MESA" value="0x8759"/>
- <enum name="DEBUG_PRINT_MESA" value="0x875A"/>
- <enum name="DEBUG_ASSERT_MESA" value="0x875B"/>
- <function name="CreateDebugObjectMESA" exec="skip">
- <return type="GLhandleARB"/>
- <glx ignore="true"/>
- </function>
- <function name="ClearDebugLogMESA" exec="skip">
- <param name="obj" type="GLhandleARB"/>
- <param name="logType" type="GLenum"/>
- <param name="shaderType" type="GLenum"/>
- <glx ignore="true"/>
- </function>
- <function name="GetDebugLogMESA" exec="skip">
- <param name="obj" type="GLhandleARB"/>
- <param name="logType" type="GLenum"/>
- <param name="shaderType" type="GLenum"/>
- <param name="maxLength" type="GLsizei"/>
- <param name="length" type="GLsizei *" output="true"/>
- <param name="debugLog" type="GLcharARB *" output="true"/>
- <glx ignore="true"/>
- </function>
- <function name="GetDebugLogLengthMESA" exec="skip">
- <return type="GLsizei"/>
- <param name="obj" type="GLhandleARB"/>
- <param name="logType" type="GLenum"/>
- <param name="shaderType" type="GLenum"/>
- <glx ignore="true"/>
- </function>
-</category>
-
<category name="GL_SGIS_point_parameters">
<enum name="POINT_SIZE_MIN_SGIS" count="1" value="0x8126">
<size name="PointParameterfv" mode="get"/>
diff --git a/mesalib/src/mesa/main/macros.h b/mesalib/src/mesa/main/macros.h
index 880c6564e..379f75663 100644
--- a/mesalib/src/mesa/main/macros.h
+++ b/mesalib/src/mesa/main/macros.h
@@ -193,7 +193,7 @@ static INLINE uint32_t
U_FIXED(float value, uint32_t frac_bits)
{
value *= (1 << frac_bits);
- return value < 0 ? 0 : value;
+ return value < 0.0f ? 0 : (uint32_t) value;
}
/**
@@ -201,10 +201,10 @@ U_FIXED(float value, uint32_t frac_bits)
*
* \param frac_bits The number of bits used to store the fractional part.
*/
-static INLINE uint32_t
+static INLINE int32_t
S_FIXED(float value, uint32_t frac_bits)
{
- return value * (1 << frac_bits);
+ return (int32_t) (value * (1 << frac_bits));
}
/*@}*/
diff --git a/mesalib/src/mesa/main/querymatrix.c b/mesalib/src/mesa/main/querymatrix.c
index aee8aef12..19a8e9201 100644
--- a/mesalib/src/mesa/main/querymatrix.c
+++ b/mesalib/src/mesa/main/querymatrix.c
@@ -38,6 +38,7 @@
#define FLOAT_TO_FIXED(x) ((GLfixed) ((x) * 65536.0))
#if defined(_MSC_VER)
+#if _MSC_VER < 1800 /* Not required on VS2013 and above. */
/* Oddly, the fpclassify() function doesn't exist in such a form
* on MSVC. This is an implementation using slightly different
* lower-level Windows functions.
@@ -70,6 +71,7 @@ fpclassify(double x)
return FP_NAN;
}
}
+#endif /* _MSC_VER < 1800 */
#elif defined(__APPLE__) || defined(__CYGWIN__) || defined(__FreeBSD__) || \
defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || \
diff --git a/mesalib/src/mesa/state_tracker/st_draw.c b/mesalib/src/mesa/state_tracker/st_draw.c
index a440ae2a8..c35723087 100644
--- a/mesalib/src/mesa/state_tracker/st_draw.c
+++ b/mesalib/src/mesa/state_tracker/st_draw.c
@@ -1,8 +1,8 @@
/**************************************************************************
- *
+ *
* Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
* All Rights Reserved.
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
@@ -10,11 +10,11 @@
* distribute, sub license, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
- *
+ *
* The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial portions
* of the Software.
- *
+ *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
@@ -22,7 +22,7 @@
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
+ *
**************************************************************************/
/*
@@ -72,7 +72,7 @@ static GLboolean
all_varyings_in_vbos(const struct gl_client_array *arrays[])
{
GLuint i;
-
+
for (i = 0; i < VERT_ATTRIB_MAX; i++)
if (arrays[i]->StrideB &&
!arrays[i]->InstanceDivisor &&
@@ -104,6 +104,7 @@ setup_index_buffer(struct st_context *st,
ibuffer->offset = pointer_to_offset(ib->ptr);
}
else if (st->indexbuf_uploader) {
+ /* upload indexes from user memory into a real buffer */
if (u_upload_data(st->indexbuf_uploader, 0,
ib->count * ibuffer->index_size, ib->ptr,
&ibuffer->offset, &ibuffer->buffer) != PIPE_OK) {
@@ -222,6 +223,7 @@ st_draw_vbo(struct gl_context *ctx,
}
util_draw_init_info(&info);
+
if (ib) {
/* Get index bounds for user buffers. */
if (!index_bounds_valid)
@@ -256,7 +258,7 @@ st_draw_vbo(struct gl_context *ctx,
/* do actual drawing */
for (i = 0; i < nr_prims; i++) {
- info.mode = translate_prim( ctx, prims[i].mode );
+ info.mode = translate_prim(ctx, prims[i].mode);
info.start = prims[i].start;
info.count = prims[i].count;
info.start_instance = prims[i].base_instance;
@@ -282,8 +284,9 @@ st_draw_vbo(struct gl_context *ctx,
/* don't trim, restarts might be inside index list */
cso_draw_vbo(st->cso_context, &info);
}
- else if (u_trim_pipe_prim(prims[i].mode, &info.count))
+ else if (u_trim_pipe_prim(prims[i].mode, &info.count)) {
cso_draw_vbo(st->cso_context, &info);
+ }
}
if (ib && st->indexbuf_uploader && !_mesa_is_bufferobj(ib->obj)) {
diff --git a/xorg-server/glx/glxdricommon.c b/xorg-server/glx/glxdricommon.c
index 79922154a..50e6419a2 100644..100755
--- a/xorg-server/glx/glxdricommon.c
+++ b/xorg-server/glx/glxdricommon.c
@@ -224,6 +224,14 @@ glxConvertConfigs(const __DRIcoreExtension * core,
static const char dri_driver_path[] = DRI_DRIVER_PATH;
+/* Temporary define to allow building without a dri_interface.h from
+ * updated Mesa. Some day when we don't care about Mesa that old any
+ * more this can be removed.
+ */
+#ifndef __DRI_DRIVER_GET_EXTENSIONS
+#define __DRI_DRIVER_GET_EXTENSIONS "__driDriverGetExtensions"
+#endif
+
void *
glxProbeDriver(const char *driverName,
void **coreExt, const char *coreName, int coreVersion,
@@ -232,7 +240,8 @@ glxProbeDriver(const char *driverName,
int i;
void *driver;
char filename[PATH_MAX];
- const __DRIextension **extensions;
+ char *get_extensions_name;
+ const __DRIextension **extensions = NULL;
#ifdef _MSC_VER
#define DLLNAME "%s%s_dri.dll"
@@ -252,10 +261,25 @@ glxProbeDriver(const char *driverName,
goto cleanup_failure;
}
+ if (asprintf(&get_extensions_name, "%s_%s",
+ __DRI_DRIVER_GET_EXTENSIONS, driverName) != -1) {
+ const __DRIextension **(*get_extensions)(void);
+
+#ifdef _MSC_VER
+ get_extensions = (const __DRIextension **(*get_extensions)(void))GetProcAddress(driver, get_extensions_name);
+#else
+ get_extensions = dlsym(driver, get_extensions_name);
+#endif
+ if (get_extensions)
+ extensions = get_extensions();
+ free(get_extensions_name);
+ }
+
+ if (!extensions)
#ifdef _MSC_VER
- extensions = (const __DRIextension **)GetProcAddress(driver, __DRI_DRIVER_EXTENSIONS);
+ extensions = (const __DRIextension **)GetProcAddress(driver, __DRI_DRIVER_EXTENSIONS);
#else
- extensions = dlsym(driver, __DRI_DRIVER_EXTENSIONS);
+ extensions = dlsym(driver, __DRI_DRIVER_EXTENSIONS);
#endif
if (extensions == NULL) {
LogMessage(X_ERROR, "AIGLX error: %s exports no extensions (%s)\n",
@@ -286,7 +310,7 @@ glxProbeDriver(const char *driverName,
cleanup_failure:
if (driver)
#ifdef _MSC_VER
- FreeLibrary(driver);
+ FreeLibrary(driver);
#else
dlclose(driver);
#endif