aboutsummaryrefslogtreecommitdiff
path: root/mesalib/src
diff options
context:
space:
mode:
Diffstat (limited to 'mesalib/src')
-rw-r--r--mesalib/src/gallium/Automake.inc27
-rw-r--r--mesalib/src/glsl/ast_to_hir.cpp12
-rw-r--r--mesalib/src/glsl/ir.h9
-rw-r--r--mesalib/src/glsl/ir_print_visitor.cpp4
-rw-r--r--mesalib/src/glsl/link_uniforms.cpp4
-rw-r--r--mesalib/src/glsl/link_varyings.cpp3
-rw-r--r--mesalib/src/mesa/drivers/common/meta.h4
-rw-r--r--mesalib/src/mesa/drivers/common/meta_blit.c15
-rw-r--r--mesalib/src/mesa/drivers/dri/common/dri_util.c4
-rw-r--r--mesalib/src/mesa/state_tracker/st_program.c30
-rw-r--r--mesalib/src/mesa/x86/common_x86.c2
11 files changed, 73 insertions, 41 deletions
diff --git a/mesalib/src/gallium/Automake.inc b/mesalib/src/gallium/Automake.inc
index 70921ecd8..97735abe0 100644
--- a/mesalib/src/gallium/Automake.inc
+++ b/mesalib/src/gallium/Automake.inc
@@ -56,9 +56,6 @@ GALLIUM_DRI_LINKER_FLAGS = \
-shrext .so \
-module \
-avoid-version \
-if HAVE_LD_VERSION_SCRIPT
- -Wl,--version-script=$(top_srcdir)/src/gallium/targets/dri.sym \
-endif
$(GC_SECTIONS)
GALLIUM_VDPAU_LINKER_FLAGS = \
@@ -66,9 +63,6 @@ GALLIUM_VDPAU_LINKER_FLAGS = \
-module \
-no-undefined \
-version-number $(VDPAU_MAJOR):$(VDPAU_MINOR) \
-if HAVE_LD_VERSION_SCRIPT
- -Wl,--version-script=$(top_srcdir)/src/gallium/targets/vdpau.sym \
-endif
$(GC_SECTIONS) \
$(LD_NO_UNDEFINED)
@@ -77,9 +71,6 @@ GALLIUM_XVMC_LINKER_FLAGS = \
-module \
-no-undefined \
-version-number $(XVMC_MAJOR):$(XVMC_MINOR) \
-if HAVE_LD_VERSION_SCRIPT
- -Wl,--version-script=$(top_srcdir)/src/gallium/targets/xvmc.sym \
-endif
$(GC_SECTIONS) \
$(LD_NO_UNDEFINED)
@@ -88,12 +79,24 @@ GALLIUM_OMX_LINKER_FLAGS = \
-module \
-no-undefined \
-avoid-version \
-if HAVE_LD_VERSION_SCRIPT
- -Wl,--version-script=$(top_srcdir)/src/gallium/targets/omx.sym \
-endif
$(GC_SECTIONS) \
$(LD_NO_UNDEFINED)
+if HAVE_LD_VERSION_SCRIPT
+GALLIUM_DRI_LINKER_FLAGS += \
+ -Wl,--version-script=$(top_srcdir)/src/gallium/targets/dri.sym
+
+GALLIUM_VDPAU_LINKER_FLAGS += \
+ -Wl,--version-script=$(top_srcdir)/src/gallium/targets/vdpau.sym
+
+GALLIUM_XVMC_LINKER_FLAGS += \
+ -Wl,--version-script=$(top_srcdir)/src/gallium/targets/xvmc.sym
+
+GALLIUM_OMX_LINKER_FLAGS += \
+ -Wl,--version-script=$(top_srcdir)/src/gallium/targets/omx.sym
+endif
+
+
GALLIUM_COMMON_LIB_DEPS = \
-lm \
$(CLOCK_LIB) \
diff --git a/mesalib/src/glsl/ast_to_hir.cpp b/mesalib/src/glsl/ast_to_hir.cpp
index 0128b3f4e..f230a70a3 100644
--- a/mesalib/src/glsl/ast_to_hir.cpp
+++ b/mesalib/src/glsl/ast_to_hir.cpp
@@ -3078,7 +3078,7 @@ validate_identifier(const char *identifier, YYLTYPE loc,
* OpenGL, and may not be declared in a shader as either a
* variable or a function."
*/
- if (strncmp(identifier, "gl_", 3) == 0) {
+ if (is_gl_identifier(identifier)) {
_mesa_glsl_error(&loc, state,
"identifier `%s' uses reserved `gl_' prefix",
identifier);
@@ -3651,11 +3651,15 @@ ast_declarator_list::hir(exec_list *instructions,
* instruction stream.
*/
exec_list initializer_instructions;
+
+ /* Examine var name here since var may get deleted in the next call */
+ bool var_is_gl_id = is_gl_identifier(var->name);
+
ir_variable *earlier =
get_variable_being_redeclared(var, decl->get_location(), state,
false /* allow_all_redeclarations */);
if (earlier != NULL) {
- if (strncmp(var->name, "gl_", 3) == 0 &&
+ if (var_is_gl_id &&
earlier->data.how_declared == ir_var_declared_in_block) {
_mesa_glsl_error(&loc, state,
"`%s' has already been redeclared using "
@@ -5399,7 +5403,7 @@ ast_interface_block::hir(exec_list *instructions,
ir_variable *earlier =
get_variable_being_redeclared(var, loc, state,
true /* allow_all_redeclarations */);
- if (strncmp(var->name, "gl_", 3) != 0 || earlier == NULL) {
+ if (!is_gl_identifier(var->name) || earlier == NULL) {
_mesa_glsl_error(&loc, state,
"redeclaration of gl_PerVertex can only "
"include built-in variables");
@@ -5634,7 +5638,7 @@ detect_conflicting_assignments(struct _mesa_glsl_parse_state *state,
gl_FragColor_assigned = true;
else if (strcmp(var->name, "gl_FragData") == 0)
gl_FragData_assigned = true;
- else if (strncmp(var->name, "gl_", 3) != 0) {
+ else if (!is_gl_identifier(var->name)) {
if (state->stage == MESA_SHADER_FRAGMENT &&
var->data.mode == ir_var_shader_out) {
user_defined_fs_output_assigned = true;
diff --git a/mesalib/src/glsl/ir.h b/mesalib/src/glsl/ir.h
index ef4a12d60..80609829e 100644
--- a/mesalib/src/glsl/ir.h
+++ b/mesalib/src/glsl/ir.h
@@ -2342,6 +2342,15 @@ prototype_string(const glsl_type *return_type, const char *name,
const char *
mode_string(const ir_variable *var);
+/**
+ * Built-in / reserved GL variables names start with "gl_"
+ */
+static inline bool
+is_gl_identifier(const char *s)
+{
+ return s && s[0] == 'g' && s[1] == 'l' && s[2] == '_';
+}
+
extern "C" {
#endif /* __cplusplus */
diff --git a/mesalib/src/glsl/ir_print_visitor.cpp b/mesalib/src/glsl/ir_print_visitor.cpp
index 0a7695ae1..c4a6f9c9f 100644
--- a/mesalib/src/glsl/ir_print_visitor.cpp
+++ b/mesalib/src/glsl/ir_print_visitor.cpp
@@ -146,7 +146,7 @@ print_type(FILE *f, const glsl_type *t)
print_type(f, t->fields.array);
fprintf(f, " %u)", t->length);
} else if ((t->base_type == GLSL_TYPE_STRUCT)
- && (strncmp("gl_", t->name, 3) != 0)) {
+ && !is_gl_identifier(t->name)) {
fprintf(f, "%s@%p", t->name, (void *) t);
} else {
fprintf(f, "%s", t->name);
@@ -430,7 +430,7 @@ void ir_print_visitor::visit(ir_constant *ir)
case GLSL_TYPE_FLOAT:
if (ir->value.f[i] == 0.0f)
/* 0.0 == -0.0, so print with %f to get the proper sign. */
- fprintf(f, "%.1f", ir->value.f[i]);
+ fprintf(f, "%f", ir->value.f[i]);
else if (fabs(ir->value.f[i]) < 0.000001f)
fprintf(f, "%a", ir->value.f[i]);
else if (fabs(ir->value.f[i]) > 1000000.0f)
diff --git a/mesalib/src/glsl/link_uniforms.cpp b/mesalib/src/glsl/link_uniforms.cpp
index c7147e0ee..ba66053ed 100644
--- a/mesalib/src/glsl/link_uniforms.cpp
+++ b/mesalib/src/glsl/link_uniforms.cpp
@@ -848,7 +848,7 @@ link_assign_uniform_locations(struct gl_shader_program *prog)
/* FINISHME: Update code to process built-in uniforms!
*/
- if (strncmp("gl_", var->name, 3) == 0) {
+ if (is_gl_identifier(var->name)) {
uniform_size.num_shader_uniform_components +=
var->type->component_slots();
continue;
@@ -900,7 +900,7 @@ link_assign_uniform_locations(struct gl_shader_program *prog)
/* FINISHME: Update code to process built-in uniforms!
*/
- if (strncmp("gl_", var->name, 3) == 0)
+ if (is_gl_identifier(var->name))
continue;
parcel.set_and_process(prog, var);
diff --git a/mesalib/src/glsl/link_varyings.cpp b/mesalib/src/glsl/link_varyings.cpp
index 71998dfa9..686329857 100644
--- a/mesalib/src/glsl/link_varyings.cpp
+++ b/mesalib/src/glsl/link_varyings.cpp
@@ -77,8 +77,7 @@ cross_validate_types_and_qualifiers(struct gl_shader_program *prog,
* correspondence between the vertex language and the
* fragment language."
*/
- if (!output->type->is_array()
- || (strncmp("gl_", output->name, 3) != 0)) {
+ if (!output->type->is_array() || !is_gl_identifier(output->name)) {
linker_error(prog,
"%s shader output `%s' declared as type `%s', "
"but %s shader input declared as type `%s'\n",
diff --git a/mesalib/src/mesa/drivers/common/meta.h b/mesalib/src/mesa/drivers/common/meta.h
index 007f1040b..765f8dfe4 100644
--- a/mesalib/src/mesa/drivers/common/meta.h
+++ b/mesalib/src/mesa/drivers/common/meta.h
@@ -270,7 +270,7 @@ struct blit_state
struct fb_tex_blit_state
{
GLint baseLevelSave, maxLevelSave;
- GLuint sampler, samplerSave;
+ GLuint sampler, samplerSave, stencilSamplingSave;
GLuint tempTex;
};
@@ -407,7 +407,7 @@ _mesa_meta_fb_tex_blit_begin(const struct gl_context *ctx,
struct fb_tex_blit_state *blit);
extern void
-_mesa_meta_fb_tex_blit_end(const struct gl_context *ctx, GLenum target,
+_mesa_meta_fb_tex_blit_end(struct gl_context *ctx, GLenum target,
struct fb_tex_blit_state *blit);
extern GLboolean
diff --git a/mesalib/src/mesa/drivers/common/meta_blit.c b/mesalib/src/mesa/drivers/common/meta_blit.c
index 707269dd6..5929619f3 100644
--- a/mesalib/src/mesa/drivers/common/meta_blit.c
+++ b/mesalib/src/mesa/drivers/common/meta_blit.c
@@ -273,7 +273,7 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
samples);
} else {
ralloc_asprintf_append(&sample_resolve,
- " out_color = sample_%d_0 / %f;\n",
+ " gl_FragColor = sample_%d_0 / %f;\n",
samples, (float)samples);
}
}
@@ -446,6 +446,7 @@ blitframebuffer_texture(struct gl_context *ctx,
fb_tex_blit.baseLevelSave = texObj->BaseLevel;
fb_tex_blit.maxLevelSave = texObj->MaxLevel;
+ fb_tex_blit.stencilSamplingSave = texObj->StencilSampling;
if (glsl_version) {
setup_glsl_blit_framebuffer(ctx, blit, rb, target);
@@ -576,7 +577,7 @@ _mesa_meta_fb_tex_blit_begin(const struct gl_context *ctx,
}
void
-_mesa_meta_fb_tex_blit_end(const struct gl_context *ctx, GLenum target,
+_mesa_meta_fb_tex_blit_end(struct gl_context *ctx, GLenum target,
struct fb_tex_blit_state *blit)
{
/* Restore texture object state, the texture binding will
@@ -585,6 +586,16 @@ _mesa_meta_fb_tex_blit_end(const struct gl_context *ctx, GLenum target,
if (target != GL_TEXTURE_RECTANGLE_ARB) {
_mesa_TexParameteri(target, GL_TEXTURE_BASE_LEVEL, blit->baseLevelSave);
_mesa_TexParameteri(target, GL_TEXTURE_MAX_LEVEL, blit->maxLevelSave);
+
+ if (ctx->Extensions.ARB_stencil_texturing) {
+ const struct gl_texture_object *texObj =
+ _mesa_get_current_tex_object(ctx, target);
+
+ if (texObj->StencilSampling != blit->stencilSamplingSave)
+ _mesa_TexParameteri(target, GL_DEPTH_STENCIL_TEXTURE_MODE,
+ blit->stencilSamplingSave ?
+ GL_STENCIL_INDEX : GL_DEPTH_COMPONENT);
+ }
}
_mesa_BindSampler(ctx->Texture.CurrentUnit, blit->samplerSave);
diff --git a/mesalib/src/mesa/drivers/dri/common/dri_util.c b/mesalib/src/mesa/drivers/dri/common/dri_util.c
index 248c36165..471287909 100644
--- a/mesalib/src/mesa/drivers/dri/common/dri_util.c
+++ b/mesalib/src/mesa/drivers/dri/common/dri_util.c
@@ -52,7 +52,7 @@
#include "main/errors.h"
#include "main/macros.h"
-PUBLIC const char __dri2ConfigOptions[] =
+const char __dri2ConfigOptions[] =
DRI_CONF_BEGIN
DRI_CONF_SECTION_PERFORMANCE
DRI_CONF_VBLANK_MODE(DRI_CONF_VBLANK_DEF_INTERVAL_1)
@@ -732,7 +732,7 @@ driSwapBuffers(__DRIdrawable *pdp)
/** Core interface */
const __DRIcoreExtension driCoreExtension = {
- .base = { __DRI_CORE, __DRI_CORE_VERSION },
+ .base = { __DRI_CORE, 1 },
.createNewScreen = NULL,
.destroyScreen = driDestroyScreen,
diff --git a/mesalib/src/mesa/state_tracker/st_program.c b/mesalib/src/mesa/state_tracker/st_program.c
index f9887a2c4..26eb9786d 100644
--- a/mesalib/src/mesa/state_tracker/st_program.c
+++ b/mesalib/src/mesa/state_tracker/st_program.c
@@ -679,32 +679,36 @@ st_translate_fragment_program(struct st_context *st,
outputsWritten &= ~(1 << FRAG_RESULT_STENCIL);
}
+ if (outputsWritten & BITFIELD64_BIT(FRAG_RESULT_SAMPLE_MASK)) {
+ fs_output_semantic_name[fs_num_outputs] = TGSI_SEMANTIC_SAMPLEMASK;
+ fs_output_semantic_index[fs_num_outputs] = 0;
+ outputMapping[FRAG_RESULT_SAMPLE_MASK] = fs_num_outputs;
+ fs_num_outputs++;
+ outputsWritten &= ~(1 << FRAG_RESULT_SAMPLE_MASK);
+ }
+
/* handle remaining outputs (color) */
for (attr = 0; attr < FRAG_RESULT_MAX; attr++) {
if (outputsWritten & BITFIELD64_BIT(attr)) {
- int semantic = TGSI_SEMANTIC_COLOR;
switch (attr) {
case FRAG_RESULT_DEPTH:
case FRAG_RESULT_STENCIL:
+ case FRAG_RESULT_SAMPLE_MASK:
/* handled above */
assert(0);
break;
case FRAG_RESULT_COLOR:
- write_all = GL_TRUE;
- break;
- case FRAG_RESULT_SAMPLE_MASK:
- semantic = TGSI_SEMANTIC_SAMPLEMASK;
+ write_all = GL_TRUE; /* fallthrough */
+ default:
+ assert(attr == FRAG_RESULT_COLOR ||
+ (FRAG_RESULT_DATA0 <= attr && attr < FRAG_RESULT_MAX));
+ fs_output_semantic_name[fs_num_outputs] = TGSI_SEMANTIC_COLOR;
+ fs_output_semantic_index[fs_num_outputs] = numColors;
+ outputMapping[attr] = fs_num_outputs;
+ numColors++;
break;
}
- assert(attr == FRAG_RESULT_COLOR ||
- attr == FRAG_RESULT_SAMPLE_MASK ||
- (FRAG_RESULT_DATA0 <= attr && attr < FRAG_RESULT_MAX));
- fs_output_semantic_name[fs_num_outputs] = semantic;
- fs_output_semantic_index[fs_num_outputs] = numColors;
- outputMapping[attr] = fs_num_outputs;
- numColors++;
-
fs_num_outputs++;
}
}
diff --git a/mesalib/src/mesa/x86/common_x86.c b/mesalib/src/mesa/x86/common_x86.c
index 261f49170..b401c354a 100644
--- a/mesalib/src/mesa/x86/common_x86.c
+++ b/mesalib/src/mesa/x86/common_x86.c
@@ -52,6 +52,8 @@
#if !defined(bit_SSE4_1) && defined(bit_SSE41)
/* XXX: clang defines bit_SSE41 instead of bit_SSE4_1 */
#define bit_SSE4_1 bit_SSE41
+#elif !defined(bit_SSE4_1) && !defined(bit_SSE41)
+#define bit_SSE4_1 0x00080000
#endif
#endif