aboutsummaryrefslogtreecommitdiff
path: root/mesalib/src/mesa
diff options
context:
space:
mode:
Diffstat (limited to 'mesalib/src/mesa')
-rw-r--r--mesalib/src/mesa/drivers/common/meta.c40
-rw-r--r--mesalib/src/mesa/drivers/common/meta.h40
-rw-r--r--mesalib/src/mesa/drivers/common/meta_blit.c37
-rw-r--r--mesalib/src/mesa/drivers/common/meta_copy_image.c2
-rw-r--r--mesalib/src/mesa/drivers/dri/common/utils.c2
-rw-r--r--mesalib/src/mesa/main/api_arrayelt.c4
-rw-r--r--mesalib/src/mesa/main/atifragshader.c8
-rw-r--r--mesalib/src/mesa/main/attrib.c4
-rw-r--r--mesalib/src/mesa/main/compiler.h2
-rw-r--r--mesalib/src/mesa/main/context.c3
-rw-r--r--mesalib/src/mesa/main/macros.h11
-rw-r--r--mesalib/src/mesa/main/texstore.c4
-rw-r--r--mesalib/src/mesa/program/prog_instruction.c2
-rw-r--r--mesalib/src/mesa/program/prog_optimize.c6
-rw-r--r--mesalib/src/mesa/program/prog_parameter.c2
-rw-r--r--mesalib/src/mesa/state_tracker/st_extensions.c13
-rw-r--r--mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp14
-rw-r--r--mesalib/src/mesa/swrast/s_texfilter.c2
-rw-r--r--mesalib/src/mesa/vbo/vbo_exec_array.c2
19 files changed, 118 insertions, 80 deletions
diff --git a/mesalib/src/mesa/drivers/common/meta.c b/mesalib/src/mesa/drivers/common/meta.c
index 90befd42d..7a8e627ba 100644
--- a/mesalib/src/mesa/drivers/common/meta.c
+++ b/mesalib/src/mesa/drivers/common/meta.c
@@ -396,25 +396,6 @@ _mesa_meta_init(struct gl_context *ctx)
ctx->Meta = CALLOC_STRUCT(gl_meta_state);
}
-static GLenum
-gl_buffer_index_to_drawbuffers_enum(gl_buffer_index bufindex)
-{
- assert(bufindex < BUFFER_COUNT);
-
- if (bufindex >= BUFFER_COLOR0)
- return GL_COLOR_ATTACHMENT0 + bufindex - BUFFER_COLOR0;
- else if (bufindex == BUFFER_FRONT_LEFT)
- return GL_FRONT_LEFT;
- else if (bufindex == BUFFER_FRONT_RIGHT)
- return GL_FRONT_RIGHT;
- else if (bufindex == BUFFER_BACK_LEFT)
- return GL_BACK_LEFT;
- else if (bufindex == BUFFER_BACK_RIGHT)
- return GL_BACK_RIGHT;
-
- return GL_NONE;
-}
-
/**
* Free context meta-op state.
* To be called once during context destruction.
@@ -806,20 +787,9 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state)
}
if (state & MESA_META_DRAW_BUFFERS) {
- int buf, real_color_buffers = 0;
- memset(save->ColorDrawBuffers, 0, sizeof(save->ColorDrawBuffers));
-
- for (buf = 0; buf < ctx->Const.MaxDrawBuffers; buf++) {
- int buf_index = ctx->DrawBuffer->_ColorDrawBufferIndexes[buf];
- if (buf_index == -1)
- continue;
-
- save->ColorDrawBuffers[buf] =
- gl_buffer_index_to_drawbuffers_enum(buf_index);
-
- if (++real_color_buffers >= ctx->DrawBuffer->_NumColorDrawBuffers)
- break;
- }
+ struct gl_framebuffer *fb = ctx->DrawBuffer;
+ memcpy(save->ColorDrawBuffers, fb->ColorDrawBuffer,
+ sizeof(save->ColorDrawBuffers));
}
/* misc */
@@ -1224,7 +1194,7 @@ _mesa_meta_end(struct gl_context *ctx)
_mesa_BindRenderbuffer(GL_RENDERBUFFER, save->RenderbufferName);
if (state & MESA_META_DRAW_BUFFERS) {
- _mesa_DrawBuffers(ctx->Const.MaxDrawBuffers, save->ColorDrawBuffers);
+ _mesa_drawbuffers(ctx, ctx->Const.MaxDrawBuffers, save->ColorDrawBuffers, NULL);
}
ctx->Meta->SaveStackDepth--;
@@ -1250,7 +1220,7 @@ _mesa_meta_in_progress(struct gl_context *ctx)
* Used by the meta-Clear, Draw/CopyPixels and Bitmap functions where the Z
* value comes from the clear value or raster position.
*/
-static INLINE GLfloat
+static inline GLfloat
invert_z(GLfloat normZ)
{
GLfloat objZ = 1.0f - 2.0f * normZ;
diff --git a/mesalib/src/mesa/drivers/common/meta.h b/mesalib/src/mesa/drivers/common/meta.h
index 56ba9bc65..edc3e8c20 100644
--- a/mesalib/src/mesa/drivers/common/meta.h
+++ b/mesalib/src/mesa/drivers/common/meta.h
@@ -235,21 +235,45 @@ struct blit_shader_table {
/**
* Indices in the blit_state->msaa_shaders[] array
*
- * Note that setup_glsl_msaa_blit_shader() assumes that the _INT enums are one
- * more than the non-_INT version and _UINT is one beyond that.
+ * Note that setup_glsl_msaa_blit_shader() assumes that the _INT enums are five
+ * more than the corresponding non-_INT versions and _UINT are five beyond that.
*/
enum blit_msaa_shader {
- BLIT_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE,
- BLIT_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_INT,
- BLIT_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_UINT,
+ BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE,
+ BLIT_2X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE,
+ BLIT_4X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE,
+ BLIT_8X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE,
+ BLIT_16X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE,
+ BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_INT,
+ BLIT_2X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_INT,
+ BLIT_4X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_INT,
+ BLIT_8X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_INT,
+ BLIT_16X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_INT,
+ BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_UINT,
+ BLIT_2X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_UINT,
+ BLIT_4X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_UINT,
+ BLIT_8X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_UINT,
+ BLIT_16X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_UINT,
BLIT_MSAA_SHADER_2D_MULTISAMPLE_COPY,
BLIT_MSAA_SHADER_2D_MULTISAMPLE_COPY_INT,
BLIT_MSAA_SHADER_2D_MULTISAMPLE_COPY_UINT,
BLIT_MSAA_SHADER_2D_MULTISAMPLE_DEPTH_RESOLVE,
BLIT_MSAA_SHADER_2D_MULTISAMPLE_DEPTH_COPY,
- BLIT_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE,
- BLIT_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_INT,
- BLIT_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_UINT,
+ BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE,
+ BLIT_2X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE,
+ BLIT_4X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE,
+ BLIT_8X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE,
+ BLIT_16X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE,
+ BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_INT,
+ BLIT_2X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_INT,
+ BLIT_4X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_INT,
+ BLIT_8X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_INT,
+ BLIT_16X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_INT,
+ BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_UINT,
+ BLIT_2X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_UINT,
+ BLIT_4X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_UINT,
+ BLIT_8X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_UINT,
+ BLIT_16X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_UINT,
BLIT_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_COPY,
BLIT_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_COPY_INT,
BLIT_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_COPY_UINT,
diff --git a/mesalib/src/mesa/drivers/common/meta_blit.c b/mesalib/src/mesa/drivers/common/meta_blit.c
index 955e73f57..fc9848a7a 100644
--- a/mesalib/src/mesa/drivers/common/meta_blit.c
+++ b/mesalib/src/mesa/drivers/common/meta_blit.c
@@ -70,6 +70,16 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
const char *sampler_array_suffix = "";
char *name;
const char *texcoord_type = "vec2";
+ const int samples = MAX2(src_rb->NumSamples, 1);
+ int shader_offset = 0;
+
+ /* We expect only power of 2 samples in source multisample buffer. */
+ assert((samples & (samples - 1)) == 0);
+ while (samples >> (shader_offset + 1)) {
+ shader_offset++;
+ }
+ /* Update the assert if we plan to support more than 16X MSAA. */
+ assert(shader_offset >= 0 && shader_offset <= 4);
if (src_rb) {
src_datatype = _mesa_get_format_datatype(src_rb->Format);
@@ -107,13 +117,15 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
} else {
if (dst_is_msaa)
shader_index = BLIT_MSAA_SHADER_2D_MULTISAMPLE_COPY;
- else
- shader_index = BLIT_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE;
+ else {
+ shader_index = BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE +
+ shader_offset;
+ }
}
if (target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY) {
- shader_index += (BLIT_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE -
- BLIT_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE);
+ shader_index += (BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE -
+ BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE);
sampler_array_suffix = "Array";
texcoord_type = "vec3";
}
@@ -121,19 +133,19 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
default:
_mesa_problem(ctx, "Unkown texture target %s\n",
_mesa_lookup_enum_by_nr(target));
- shader_index = BLIT_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE;
+ shader_index = BLIT_2X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE;
}
/* We rely on the enum being sorted this way. */
- STATIC_ASSERT(BLIT_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_INT ==
- BLIT_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE + 1);
- STATIC_ASSERT(BLIT_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_UINT ==
- BLIT_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE + 2);
+ STATIC_ASSERT(BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_INT ==
+ BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE + 5);
+ STATIC_ASSERT(BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_UINT ==
+ BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE + 10);
if (src_datatype == GL_INT) {
- shader_index++;
+ shader_index += 5;
vec4_prefix = "i";
} else if (src_datatype == GL_UNSIGNED_INT) {
- shader_index += 2;
+ shader_index += 10;
vec4_prefix = "u";
} else {
vec4_prefix = "";
@@ -209,7 +221,6 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
/* You can create 2D_MULTISAMPLE textures with 0 sample count (meaning 1
* sample). Yes, this is ridiculous.
*/
- int samples;
char *sample_resolve;
const char *arb_sample_shading_extension_string;
const char *merge_function;
@@ -217,8 +228,6 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
vec4_prefix,
dst_is_msaa ? "copy" : "resolve");
- samples = MAX2(src_rb->NumSamples, 1);
-
if (dst_is_msaa) {
arb_sample_shading_extension_string = "#extension GL_ARB_sample_shading : enable";
sample_resolve = ralloc_asprintf(mem_ctx, " out_color = texelFetch(texSampler, i%s(texCoords), gl_SampleID);", texcoord_type);
diff --git a/mesalib/src/mesa/drivers/common/meta_copy_image.c b/mesalib/src/mesa/drivers/common/meta_copy_image.c
index c40c2f011..0c204b87d 100644
--- a/mesalib/src/mesa/drivers/common/meta_copy_image.c
+++ b/mesalib/src/mesa/drivers/common/meta_copy_image.c
@@ -74,7 +74,7 @@ make_view(struct gl_context *ctx, struct gl_texture_image *tex_image,
tex_image->Depth,
0, internal_format, tex_format);
- view_tex_obj->MinLevel = 0;
+ view_tex_obj->MinLevel = tex_image->Level;
view_tex_obj->NumLevels = 1;
view_tex_obj->MinLayer = tex_obj->MinLayer;
view_tex_obj->NumLayers = tex_obj->NumLayers;
diff --git a/mesalib/src/mesa/drivers/dri/common/utils.c b/mesalib/src/mesa/drivers/dri/common/utils.c
index e0b3db8cf..f2e63c0b9 100644
--- a/mesalib/src/mesa/drivers/dri/common/utils.c
+++ b/mesalib/src/mesa/drivers/dri/common/utils.c
@@ -238,7 +238,7 @@ driCreateConfigs(mesa_format format,
is_srgb = _mesa_get_format_color_encoding(format) == GL_SRGB;
num_modes = num_depth_stencil_bits * num_db_modes * num_accum_bits * num_msaa_modes;
- configs = calloc(1, (num_modes + 1) * sizeof *configs);
+ configs = calloc(num_modes + 1, sizeof *configs);
if (configs == NULL)
return NULL;
diff --git a/mesalib/src/mesa/main/api_arrayelt.c b/mesalib/src/mesa/main/api_arrayelt.c
index ebeba8883..536326f6e 100644
--- a/mesalib/src/mesa/main/api_arrayelt.c
+++ b/mesalib/src/mesa/main/api_arrayelt.c
@@ -75,7 +75,7 @@ typedef struct {
/** Cast wrapper */
-static INLINE AEcontext *
+static inline AEcontext *
AE_CONTEXT(struct gl_context *ctx)
{
return (AEcontext *) ctx->aelt_context;
@@ -87,7 +87,7 @@ AE_CONTEXT(struct gl_context *ctx)
* in the range [0, 7]. Luckily these type tokens are sequentially
* numbered in gl.h, except for GL_DOUBLE.
*/
-static INLINE int
+static inline int
TYPE_IDX(GLenum t)
{
return t == GL_DOUBLE ? 7 : t & 7;
diff --git a/mesalib/src/mesa/main/atifragshader.c b/mesalib/src/mesa/main/atifragshader.c
index 7077c96f1..1eab7731a 100644
--- a/mesalib/src/mesa/main/atifragshader.c
+++ b/mesalib/src/mesa/main/atifragshader.c
@@ -325,11 +325,11 @@ _mesa_BeginFragmentShaderATI(void)
a start */
for (i = 0; i < MAX_NUM_PASSES_ATI; i++) {
ctx->ATIFragmentShader.Current->Instructions[i] =
- calloc(1, sizeof(struct atifs_instruction) *
- (MAX_NUM_INSTRUCTIONS_PER_PASS_ATI));
+ calloc(sizeof(struct atifs_instruction),
+ MAX_NUM_INSTRUCTIONS_PER_PASS_ATI);
ctx->ATIFragmentShader.Current->SetupInst[i] =
- calloc(1, sizeof(struct atifs_setupinst) *
- (MAX_NUM_FRAGMENT_REGISTERS_ATI));
+ calloc(sizeof(struct atifs_setupinst),
+ MAX_NUM_FRAGMENT_REGISTERS_ATI);
}
/* can't rely on calloc for initialization as it's possible to redefine a shader (?) */
diff --git a/mesalib/src/mesa/main/attrib.c b/mesalib/src/mesa/main/attrib.c
index c656845df..2e289b6f1 100644
--- a/mesalib/src/mesa/main/attrib.c
+++ b/mesalib/src/mesa/main/attrib.c
@@ -1488,6 +1488,10 @@ copy_array_attrib(struct gl_context *ctx,
/* skip ArrayBufferObj */
/* skip IndexBufferObj */
+
+ /* Invalidate draw state. It will be updated during the next draw. */
+ dest->DrawMethod = DRAW_NONE;
+ dest->_DrawArrays = NULL;
}
/**
diff --git a/mesalib/src/mesa/main/compiler.h b/mesalib/src/mesa/main/compiler.h
index 35160223e..813bf1905 100644
--- a/mesalib/src/mesa/main/compiler.h
+++ b/mesalib/src/mesa/main/compiler.h
@@ -151,7 +151,7 @@ extern "C" {
#include <CoreFoundation/CFByteOrder.h>
#define CPU_TO_LE32( x ) CFSwapInt32HostToLittle( x )
#elif (defined(_AIX) || defined(__blrts))
-static INLINE GLuint CPU_TO_LE32(GLuint x)
+static inline GLuint CPU_TO_LE32(GLuint x)
{
return (((x & 0x000000ff) << 24) |
((x & 0x0000ff00) << 8) |
diff --git a/mesalib/src/mesa/main/context.c b/mesalib/src/mesa/main/context.c
index fbdbd680a..8b5693e37 100644
--- a/mesalib/src/mesa/main/context.c
+++ b/mesalib/src/mesa/main/context.c
@@ -653,6 +653,9 @@ _mesa_init_constants(struct gl_constants *consts, gl_api api)
/* GL_ARB_framebuffer_object */
consts->MaxSamples = 0;
+ /* GLSL default if NativeIntegers == FALSE */
+ consts->UniformBooleanTrue = FLT_AS_UINT(1.0f);
+
/* GL_ARB_sync */
consts->MaxServerWaitTimeout = 0x1fff7fffffffULL;
diff --git a/mesalib/src/mesa/main/macros.h b/mesalib/src/mesa/main/macros.h
index 0ba658a9a..7b6148d09 100644
--- a/mesalib/src/mesa/main/macros.h
+++ b/mesalib/src/mesa/main/macros.h
@@ -184,12 +184,19 @@ static inline GLfloat UINT_AS_FLT(GLuint u)
return tmp.f;
}
+static inline unsigned FLT_AS_UINT(float f)
+{
+ fi_type tmp;
+ tmp.f = f;
+ return tmp.u;
+}
+
/**
* Convert a floating point value to an unsigned fixed point value.
*
* \param frac_bits The number of bits used to store the fractional part.
*/
-static INLINE uint32_t
+static inline uint32_t
U_FIXED(float value, uint32_t frac_bits)
{
value *= (1 << frac_bits);
@@ -201,7 +208,7 @@ U_FIXED(float value, uint32_t frac_bits)
*
* \param frac_bits The number of bits used to store the fractional part.
*/
-static INLINE int32_t
+static inline int32_t
S_FIXED(float value, uint32_t frac_bits)
{
return (int32_t) (value * (1 << frac_bits));
diff --git a/mesalib/src/mesa/main/texstore.c b/mesalib/src/mesa/main/texstore.c
index d2aba8ba1..f913e42d3 100644
--- a/mesalib/src/mesa/main/texstore.c
+++ b/mesalib/src/mesa/main/texstore.c
@@ -1634,6 +1634,8 @@ texstore_via_float(TEXSTORE_PARAMS)
}
}
+ free(tmp_row);
+
return GL_TRUE;
}
@@ -1702,6 +1704,8 @@ texstore_rgba_integer(TEXSTORE_PARAMS)
}
}
+ free(tmp_row);
+
return GL_TRUE;
}
diff --git a/mesalib/src/mesa/program/prog_instruction.c b/mesalib/src/mesa/program/prog_instruction.c
index dcfedb77b..dc0a5109f 100644
--- a/mesalib/src/mesa/program/prog_instruction.c
+++ b/mesalib/src/mesa/program/prog_instruction.c
@@ -70,7 +70,7 @@ struct prog_instruction *
_mesa_alloc_instructions(GLuint numInst)
{
return
- calloc(1, numInst * sizeof(struct prog_instruction));
+ calloc(numInst, sizeof(struct prog_instruction));
}
diff --git a/mesalib/src/mesa/program/prog_optimize.c b/mesalib/src/mesa/program/prog_optimize.c
index 6153f5e2c..08c1c3046 100644
--- a/mesalib/src/mesa/program/prog_optimize.c
+++ b/mesalib/src/mesa/program/prog_optimize.c
@@ -260,7 +260,7 @@ _mesa_remove_dead_code_global(struct gl_program *prog)
}
removeInst =
- calloc(1, prog->NumInstructions * sizeof(GLboolean));
+ calloc(prog->NumInstructions, sizeof(GLboolean));
/* Determine which temps are read and written */
for (i = 0; i < prog->NumInstructions; i++) {
@@ -602,7 +602,7 @@ _mesa_remove_dead_code_local(struct gl_program *prog)
GLuint i, arg, rem = 0;
removeInst =
- calloc(1, prog->NumInstructions * sizeof(GLboolean));
+ calloc(prog->NumInstructions, sizeof(GLboolean));
for (i = 0; i < prog->NumInstructions; i++) {
const struct prog_instruction *inst = prog->Instructions + i;
@@ -743,7 +743,7 @@ _mesa_remove_extra_moves(struct gl_program *prog)
}
removeInst =
- calloc(1, prog->NumInstructions * sizeof(GLboolean));
+ calloc(prog->NumInstructions, sizeof(GLboolean));
/*
* Look for sequences such as this:
diff --git a/mesalib/src/mesa/program/prog_parameter.c b/mesalib/src/mesa/program/prog_parameter.c
index 54531d255..f43deba0b 100644
--- a/mesalib/src/mesa/program/prog_parameter.c
+++ b/mesalib/src/mesa/program/prog_parameter.c
@@ -54,7 +54,7 @@ _mesa_new_parameter_list_sized(unsigned size)
/* alloc arrays */
p->Parameters = (struct gl_program_parameter *)
- calloc(1, size * sizeof(struct gl_program_parameter));
+ calloc(size, sizeof(struct gl_program_parameter));
p->ParameterValues = (gl_constant_value (*)[4])
_mesa_align_malloc(size * 4 *sizeof(gl_constant_value), 16);
diff --git a/mesalib/src/mesa/state_tracker/st_extensions.c b/mesalib/src/mesa/state_tracker/st_extensions.c
index 9db648c03..07bd12567 100644
--- a/mesalib/src/mesa/state_tracker/st_extensions.c
+++ b/mesalib/src/mesa/state_tracker/st_extensions.c
@@ -34,6 +34,7 @@
#include "pipe/p_context.h"
#include "pipe/p_defines.h"
#include "pipe/p_screen.h"
+#include "util/u_math.h"
#include "st_context.h"
#include "st_extensions.h"
@@ -274,8 +275,6 @@ void st_init_limits(struct pipe_screen *screen,
c->MinProgramTextureGatherOffset = screen->get_param(screen, PIPE_CAP_MIN_TEXTURE_GATHER_OFFSET);
c->MaxProgramTextureGatherOffset = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_GATHER_OFFSET);
- c->UniformBooleanTrue = ~0;
-
c->MaxTransformFeedbackBuffers =
screen->get_param(screen, PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS);
c->MaxTransformFeedbackBuffers = MIN2(c->MaxTransformFeedbackBuffers, MAX_FEEDBACK_BUFFERS);
@@ -621,7 +620,6 @@ void st_init_extensions(struct pipe_screen *screen,
extensions->NV_fog_distance = GL_TRUE;
extensions->NV_texture_env_combine4 = GL_TRUE;
extensions->NV_texture_rectangle = GL_TRUE;
- extensions->NV_vdpau_interop = GL_TRUE;
extensions->OES_EGL_image = GL_TRUE;
extensions->OES_EGL_image_external = GL_TRUE;
@@ -700,6 +698,8 @@ void st_init_extensions(struct pipe_screen *screen,
}
}
+ consts->UniformBooleanTrue = consts->NativeIntegers ? ~0 : fui(1.0f);
+
/* Below are the cases which cannot be moved into tables easily. */
if (!has_lib_dxtc && !options->force_s3tc_enable) {
@@ -884,4 +884,11 @@ void st_init_extensions(struct pipe_screen *screen,
PIPE_BIND_SAMPLER_VIEW)) {
extensions->ARB_ES3_compatibility = GL_TRUE;
}
+
+ if (screen->get_video_param &&
+ screen->get_video_param(screen, PIPE_VIDEO_PROFILE_UNKNOWN,
+ PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
+ PIPE_VIDEO_CAP_SUPPORTS_INTERLACED)) {
+ extensions->NV_vdpau_interop = GL_TRUE;
+ }
}
diff --git a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index dd9c84f1a..62e4101d1 100644
--- a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -3091,8 +3091,18 @@ glsl_to_tgsi_visitor::visit(ir_discard *ir)
{
if (ir->condition) {
ir->condition->accept(this);
- this->result.negate = ~this->result.negate;
- emit(ir, TGSI_OPCODE_KILL_IF, undef_dst, this->result);
+ st_src_reg condition = this->result;
+
+ /* Convert the bool condition to a float so we can negate. */
+ if (native_integers) {
+ st_src_reg temp = get_temp(ir->condition->type);
+ emit(ir, TGSI_OPCODE_AND, st_dst_reg(temp),
+ condition, st_src_reg_for_float(1.0));
+ condition = temp;
+ }
+
+ condition.negate = ~condition.negate;
+ emit(ir, TGSI_OPCODE_KILL_IF, undef_dst, condition);
} else {
/* unconditional kil */
emit(ir, TGSI_OPCODE_KILL);
diff --git a/mesalib/src/mesa/swrast/s_texfilter.c b/mesalib/src/mesa/swrast/s_texfilter.c
index c3fd900b4..65cf52e21 100644
--- a/mesalib/src/mesa/swrast/s_texfilter.c
+++ b/mesalib/src/mesa/swrast/s_texfilter.c
@@ -804,7 +804,7 @@ get_border_color(const struct gl_sampler_object *samp,
/**
* Put z into texel according to GL_DEPTH_MODE.
*/
-static INLINE void
+static inline void
apply_depth_mode(GLenum depthMode, GLfloat z, GLfloat texel[4])
{
switch (depthMode) {
diff --git a/mesalib/src/mesa/vbo/vbo_exec_array.c b/mesalib/src/mesa/vbo/vbo_exec_array.c
index 3f7058da1..22557e168 100644
--- a/mesalib/src/mesa/vbo/vbo_exec_array.c
+++ b/mesalib/src/mesa/vbo/vbo_exec_array.c
@@ -1313,7 +1313,7 @@ vbo_validated_multidrawelements(struct gl_context *ctx, GLenum mode,
if (primcount == 0)
return;
- prim = calloc(1, primcount * sizeof(*prim));
+ prim = calloc(primcount, sizeof(*prim));
if (prim == NULL) {
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glMultiDrawElements");
return;