diff options
Diffstat (limited to 'mesalib/src/mesa')
-rw-r--r-- | mesalib/src/mesa/drivers/common/meta.c | 40 | ||||
-rw-r--r-- | mesalib/src/mesa/drivers/common/meta.h | 40 | ||||
-rw-r--r-- | mesalib/src/mesa/drivers/common/meta_blit.c | 37 | ||||
-rw-r--r-- | mesalib/src/mesa/drivers/common/meta_copy_image.c | 2 | ||||
-rw-r--r-- | mesalib/src/mesa/drivers/dri/common/utils.c | 2 | ||||
-rw-r--r-- | mesalib/src/mesa/main/api_arrayelt.c | 4 | ||||
-rw-r--r-- | mesalib/src/mesa/main/atifragshader.c | 8 | ||||
-rw-r--r-- | mesalib/src/mesa/main/attrib.c | 4 | ||||
-rw-r--r-- | mesalib/src/mesa/main/compiler.h | 2 | ||||
-rw-r--r-- | mesalib/src/mesa/main/context.c | 3 | ||||
-rw-r--r-- | mesalib/src/mesa/main/macros.h | 11 | ||||
-rw-r--r-- | mesalib/src/mesa/main/texstore.c | 4 | ||||
-rw-r--r-- | mesalib/src/mesa/program/prog_instruction.c | 2 | ||||
-rw-r--r-- | mesalib/src/mesa/program/prog_optimize.c | 6 | ||||
-rw-r--r-- | mesalib/src/mesa/program/prog_parameter.c | 2 | ||||
-rw-r--r-- | mesalib/src/mesa/state_tracker/st_extensions.c | 13 | ||||
-rw-r--r-- | mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 14 | ||||
-rw-r--r-- | mesalib/src/mesa/swrast/s_texfilter.c | 2 | ||||
-rw-r--r-- | mesalib/src/mesa/vbo/vbo_exec_array.c | 2 |
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 947efac1f..e1880f59b 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; |