diff options
Diffstat (limited to 'mesalib/src')
-rw-r--r-- | mesalib/src/glsl/ast_to_hir.cpp | 19 | ||||
-rw-r--r-- | mesalib/src/mesa/main/macros.h | 3 | ||||
-rw-r--r-- | mesalib/src/mesa/swrast/s_texfilter.c | 1 |
3 files changed, 17 insertions, 6 deletions
diff --git a/mesalib/src/glsl/ast_to_hir.cpp b/mesalib/src/glsl/ast_to_hir.cpp index feff5865a..192130a99 100644 --- a/mesalib/src/glsl/ast_to_hir.cpp +++ b/mesalib/src/glsl/ast_to_hir.cpp @@ -1849,9 +1849,18 @@ is_varying_var(ir_variable *var, _mesa_glsl_parser_targets target) static void validate_matrix_layout_for_type(struct _mesa_glsl_parse_state *state, YYLTYPE *loc, - const glsl_type *type) + const glsl_type *type, + ir_variable *var) { - if (!type->is_matrix()) { + if (var && !var->is_in_uniform_block()) { + /* Layout qualifiers may only apply to interface blocks and fields in + * them. + */ + _mesa_glsl_error(loc, state, + "uniform block layout qualifiers row_major and " + "column_major may not be applied to variables " + "outside of uniform blocks"); + } else if (!type->is_matrix()) { /* The OpenGL ES 3.0 conformance tests did not originally allow * matrix layout qualifiers on non-matrices. However, the OpenGL * 4.4 and OpenGL ES 3.0 (revision TBD) specifications were @@ -1922,7 +1931,7 @@ validate_binding_qualifier(struct _mesa_glsl_parse_state *state, * with an array of size N, all elements of the array from binding * through binding + N - 1 must be within this range." */ - unsigned limit; + unsigned limit = 0; switch (state->target) { case vertex_shader: limit = ctx->Const.VertexProgram.MaxTextureImageUnits; @@ -2302,7 +2311,7 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual, } if (qual->flags.q.row_major || qual->flags.q.column_major) { - validate_matrix_layout_for_type(state, loc, var->type); + validate_matrix_layout_for_type(state, loc, var->type, var); } } @@ -4476,7 +4485,7 @@ ast_process_structure_or_interface_block(exec_list *instructions, "row_major and column_major can only be " "applied to uniform interface blocks"); } else - validate_matrix_layout_for_type(state, &loc, field_type); + validate_matrix_layout_for_type(state, &loc, field_type, NULL); } if (qual->flags.q.uniform && qual->has_interpolation()) { diff --git a/mesalib/src/mesa/main/macros.h b/mesalib/src/mesa/main/macros.h index ddfeee226..1052f7560 100644 --- a/mesalib/src/mesa/main/macros.h +++ b/mesalib/src/mesa/main/macros.h @@ -607,7 +607,8 @@ COPY_CLEAN_4V_TYPE_AS_FLOAT(GLfloat dst[4], int sz, const GLfloat src[4], UINT_AS_FLT(0), UINT_AS_FLT(1)); break; default: - ASSERT(0); + ASSIGN_4V(dst, 0.0f, 0.0f, 0.0f, 1.0f); /* silence warnings */ + ASSERT(!"Unexpected type in COPY_CLEAN_4V_TYPE_AS_FLOAT macro"); } COPY_SZ_4V(dst, sz, src); } diff --git a/mesalib/src/mesa/swrast/s_texfilter.c b/mesalib/src/mesa/swrast/s_texfilter.c index 0920a640c..312b9ce9b 100644 --- a/mesalib/src/mesa/swrast/s_texfilter.c +++ b/mesalib/src/mesa/swrast/s_texfilter.c @@ -274,6 +274,7 @@ linear_texel_locations(GLenum wrapMode, break; default: _mesa_problem(NULL, "Bad wrap mode"); + *i0 = *i1 = 0; u = 0.0F; break; } |