diff options
Diffstat (limited to 'mesalib')
-rw-r--r-- | mesalib/configure.ac | 2 | ||||
-rw-r--r-- | mesalib/docs/index.html | 7 | ||||
-rw-r--r-- | mesalib/docs/relnotes/9.2.html | 155 | ||||
-rw-r--r-- | mesalib/src/glsl/ast_to_hir.cpp | 29 | ||||
-rw-r--r-- | mesalib/src/glsl/ir.cpp | 1 | ||||
-rw-r--r-- | mesalib/src/glsl/ir.h | 7 | ||||
-rw-r--r-- | mesalib/src/glsl/ir_constant_expression.cpp | 11 | ||||
-rw-r--r-- | mesalib/src/glsl/ir_print_visitor.cpp | 12 | ||||
-rw-r--r-- | mesalib/src/glsl/ir_validate.cpp | 1 | ||||
-rw-r--r-- | mesalib/src/mesa/main/api_validate.c | 51 | ||||
-rw-r--r-- | mesalib/src/mesa/program/ir_to_mesa.cpp | 1 | ||||
-rw-r--r-- | mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 1 | ||||
-rw-r--r-- | mesalib/src/mesa/vbo/vbo_exec_array.c | 12 |
13 files changed, 254 insertions, 36 deletions
diff --git a/mesalib/configure.ac b/mesalib/configure.ac index e20a2289a..b19ab189e 100644 --- a/mesalib/configure.ac +++ b/mesalib/configure.ac @@ -1444,7 +1444,7 @@ egl_platforms=`IFS=', '; echo $with_egl_platforms` for plat in $egl_platforms; do case "$plat" in wayland) - PKG_CHECK_MODULES([WAYLAND], [wayland-client >= 1.0.2 wayland-server >= 1.0.2]) + PKG_CHECK_MODULES([WAYLAND], [wayland-client >= 1.2.0 wayland-server >= 1.2.0]) GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/wayland" WAYLAND_PREFIX=`$PKG_CONFIG --variable=prefix wayland-client` diff --git a/mesalib/docs/index.html b/mesalib/docs/index.html index 30f58ab42..2f04335dc 100644 --- a/mesalib/docs/index.html +++ b/mesalib/docs/index.html @@ -16,6 +16,13 @@ <h1>News</h1> +<h2>August 27, 2013</h2> +<p> +<a href="relnotes/9.2.html">Mesa 9.2</a> is released. +This is a new development release. +See the release notes for more information about the release. +</p> + <h2>August 1, 2013</h2> <p> <a href="relnotes/9.1.6.html">Mesa 9.1.6</a> is released. diff --git a/mesalib/docs/relnotes/9.2.html b/mesalib/docs/relnotes/9.2.html index 1f93b8963..9e1c01522 100644 --- a/mesalib/docs/relnotes/9.2.html +++ b/mesalib/docs/relnotes/9.2.html @@ -14,7 +14,7 @@ <iframe src="../contents.html"></iframe> <div class="content"> -<h1>Mesa 9.2 Release Notes / (date TBD)</h1> +<h1>Mesa 9.2 Release Notes / (August 27, 2013)</h1> <p> Mesa 9.2 is a new development release. @@ -33,7 +33,9 @@ because GL_ARB_compatibility is not supported. <h2>MD5 checksums</h2> <pre> -tbd +4f93c6475ec656fc1f7b93aeffc9b6c4 MesaLib-9.2.0.tar.gz +4185b6aae890bc62a964f4b24cc1aca8 MesaLib-9.2.0.tar.bz2 +3bc5339bc98b9c37777ffd14e3a8eca4 MesaLib-9.2.0.zip </pre> @@ -44,12 +46,14 @@ Note: some of the new features are only available with certain drivers. </p> <ul> -<li>GL_ARB_shading_language_420pack</li> +<li>GL_ARB_shading_language_420pack in all drivers that support GLSL 1.30.</li> <li>GL_ARB_texture_buffer_range</li> <li>GL_ARB_texture_multisample</li> <li>GL_ARB_texture_storage_multisample</li> <li>GL_ARB_texture_query_lod</li> -<li>Enable GL_ARB_texture_storage on radeon, r200, and nouveau</li> +<li>GL_ARB_texture_storage on radeon, r200, and nouveau</li> +<li>GL_EXT_discard_framebuffer in all OpenGL ES (all versions) drivers</li> +<li>GL_EXT_framebuffer_multisample_blit_scaled on i965</li> <li>Added new freedreno gallium driver</li> <li>OSMesa interface for gallium llvmpipe/softpipe drivers</li> <li>Gallium Heads-Up Display (HUD) feature for performance monitoring</li> @@ -59,8 +63,149 @@ Note: some of the new features are only available with certain drivers. <h2>Bug fixes</h2> -<p>TBD -- This list is likely incomplete.</p> +<p>Attempts have been made to <b>not</b> include bugs fixed in previous 9.1 +releases or bugs that were regressions during 9.2 development. This list is +likely incomplete.</p> +<ul> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=41787">Bug 41787</a> - [llvmpipe] stencil broken</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=44618">Bug 44618</a> - Cross-compilation broken by glsl builtin_compiler</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=46632">Bug 46632</a> - Make the alignment checks for the readpixel blit fastpath a bit more lenient</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=47116">Bug 47116</a> - Enemy territory freezes with rs880 and commit fbebd431ec4e2e461a0cbcd5f3a04a000b8f6bbf</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=47248">Bug 47248</a> - autogen missing dependency on flex and bison, causes infinite loop in glsl build</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=48694">Bug 48694</a> - radeonsi_pipe.c:322:7: error: ‘PIPE_CAP_DUAL_SOURCE_BLEND’ undeclared</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=50655">Bug 50655</a> - [r600g][RV670 HD3870] Ioquake games causes GPU lockup (waiting for 0x00003039 last fence id 0x00003030)</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=51471">Bug 51471</a> - [965gm] Corrupted graphics in corners of screen with pixel shaders enabled</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=51782">Bug 51782</a> - mesa-8.0.3: fails to compile against uclibc</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=54240">Bug 54240</a> - [swrast] piglit fbo-generatemipmap-filtering regression</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=55503">Bug 55503</a> - Constant vertex attributes broken</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=55783">Bug 55783</a> - glEnable(GL_FRAMEBUFFER_SRGB) has no effect on the backbuffer</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=55825">Bug 55825</a> - [Bisected i965]Oglc max_values(advanced.fragmentProgram.GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB) causes OOM-killer</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=56920">Bug 56920</a> - [sandybridge][uxa] graphics very glitchy and always flickering</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=57753">Bug 57753</a> - leak in loop_analysis</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=57875">Bug 57875</a> - Second Life viewer bad rendering with git-ec83535</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=58666">Bug 58666</a> - rv670 + llvm = errors.</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=58680">Bug 58680</a> - [IVB] Graphical glitches in 0 A.D</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=58872">Bug 58872</a> - Mac OS X configure: error: Couldn't find clock_gettime</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59322">Bug 59322</a> - r300g MSAA breaks Half-Life 2 in Wine</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59364">Bug 59364</a> - [bisected] Mesa build fails: clientattrib.c:33:22: fatal error: indirect.h: No such file or directory</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59439">Bug 59439</a> - glCopyPixels generates no fragments (occlusion_query_meta_fragments test fails)</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59440">Bug 59440</a> - glBitmap generates no fragments (occlusion_query_meta_fragments test fails)</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59494">Bug 59494</a> - [Bisected]Piglit glean_depthStencil fails</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59592">Bug 59592</a> - Radeon HD 5670: reproducable GPU lockups with htile enabled</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59648">Bug 59648</a> - [SNB/IVB/HSW Bisected]Piglit spec/ARB_uniform_buffer/object_layout-std140-base-size-and-alignment fails</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59701">Bug 59701</a> - lp_test_arit fails on non-sse41 capable machines, breaking make check</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59737">Bug 59737</a> - [bisected] 0d108116bd80b757fb01a84a9f1946ef870b57b8 breaks osmesa when cross compiling</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59740">Bug 59740</a> - [i965 Bisected]Oglc api-error(negative.glEvalMesh) fails</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59851">Bug 59851</a> - AC_ARG_WITH misusage leading to mesa configure failure</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59873">Bug 59873</a> - [swrast] piglit ext_framebuffer_multisample-interpolation 0 centroid-edges regression</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59876">Bug 59876</a> - glGetTexLevelParameteriv broken for indirect rendering</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60038">Bug 60038</a> - [osmesa] [git] building 32-bit mesa on 64 bit fails</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60047">Bug 60047</a> - [softpipe] piglit masked-clear regression</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60052">Bug 60052</a> - [Bisected]Piglit glx_extension_string_sanity fail</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60082">Bug 60082</a> - [ FAILED ] DispatchSanity_test.GL31_CORE</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60086">Bug 60086</a> - Wayland platform backend crashes if there's no back buffer during dri2_swap_buffers</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60098">Bug 60098</a> - [softpipe] Unexpected PIPE_CAP 78 query</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60172">Bug 60172</a> - Planeshift: triangles where grass would be</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60200">Bug 60200</a> - radeon_bo with virtual address referencing mismatch</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60212">Bug 60212</a> - [Bisected] Weston black output</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60524">Bug 60524</a> - [softpipe] piglit depthstencil-render-miplevels 146 s=z24_s8 regression</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60527">Bug 60527</a> - [softpipe] fbo-stencil GL_DEPTH24_STENCIL8 clear regression</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60633">Bug 60633</a> - EXT_texture_sRGB does not work in game The Cave on IvyBridge</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60737">Bug 60737</a> - In GLSL ES, a missing FS precision qualifier does not generate an error</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60866">Bug 60866</a> - GLSL performance issues for uniform buffer objects</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=61036">Bug 61036</a> - Shader fails to build in LLVMpipe, aborts program</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=61200">Bug 61200</a> - insufficient linking of libxatracker.so</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=61635">Bug 61635</a> - glVertexAttribPointer(id, GL_UNSIGNED_BYTE, GL_FALSE,...) does not work</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=62466">Bug 62466</a> - r600g hyperz lockups with KSP 0.19</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=62669">Bug 62669</a> - HyperZ freeze when playing PrBoom-Plus demo with lots of monsters</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=62721">Bug 62721</a> - GPU lockup in Minecraft 1.5.1 with HyperZ</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=62830">Bug 62830</a> - [i965 bisected] Wrong Lightning on Freespace 2 SCP (patch attached)</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=63124">Bug 63124</a> - [r600g] HyperZ lockup on REDWOOD in Half Life 2 Deathmatch</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=63702">Bug 63702</a> - tiling2d in radeon trash vdpau UVD textures</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=64935">Bug 64935</a> - [swrast] s_texfetch.c:1335: set_fetch_functions: Assertion `texImage->FetchTexel' failed.</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=64959">Bug 64959</a> - Cannot build against EGL without X11</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=65112">Bug 65112</a> - glcpp hangs parsing line continuations</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=65958">Bug 65958</a> - GPU Lockup on Trinity 7500G</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=66450">Bug 66450</a> - JUNIPER UVD accelerated playback of MPEG 1/2 streams does not work</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=66606">Bug 66606</a> - [i965 bisected]GLBenchmark 2.5.1/2.7.0 sometimes render error with gnome-session enabling SNA</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=66713">Bug 66713</a> - Team Fortress 2 crashes with r600-sb on HD4850</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=67354">Bug 67354</a> - glsl_parser.cpp is broken with bison 3.0</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=67548">Bug 67548</a> - glGetAttribLocation seems to be broken</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=67927">Bug 67927</a> - R600_DEBUG=sb: Celestia show 2 earths, one wrongly rendered</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=67934">Bug 67934</a> - [SNB/IVB/HSW 9.2 Bisected]Ogles2conform/GL2Tests/glUniform/glUniform.test fails with gnome-session enable compositing</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=68162">Bug 68162</a> - [radeonsi] texture rendering is broken in Source-Engine games</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=68195">Bug 68195</a> - piglit tests vs-struct-pad and fs-struct-pad both fail</li> + +</ul> <h2>Changes</h2> diff --git a/mesalib/src/glsl/ast_to_hir.cpp b/mesalib/src/glsl/ast_to_hir.cpp index 192130a99..52059e4bf 100644 --- a/mesalib/src/glsl/ast_to_hir.cpp +++ b/mesalib/src/glsl/ast_to_hir.cpp @@ -3132,32 +3132,45 @@ ast_declarator_list::hir(exec_list *instructions, } - /* Precision qualifiers only apply to floating point and integer types. + /* Precision qualifiers apply to floating point, integer and sampler + * types. * - * From section 4.5.2 of the GLSL 1.30 spec: + * Section 4.5.2 (Precision Qualifiers) of the GLSL 1.30 spec says: * "Any floating point or any integer declaration can have the type * preceded by one of these precision qualifiers [...] Literal * constants do not have precision qualifiers. Neither do Boolean * variables. * - * In GLSL ES, sampler types are also allowed. + * Section 4.5 (Precision and Precision Qualifiers) of the GLSL 1.30 + * spec also says: * - * From page 87 of the GLSL ES spec: - * "RESOLUTION: Allow sampler types to take a precision qualifier." + * "Precision qualifiers are added for code portability with OpenGL + * ES, not for functionality. They have the same syntax as in OpenGL + * ES." + * + * Section 8 (Built-In Functions) of the GLSL ES 1.00 spec says: + * + * "uniform lowp sampler2D sampler; + * highp vec2 coord; + * ... + * lowp vec4 col = texture2D (sampler, coord); + * // texture2D returns lowp" + * + * From this, we infer that GLSL 1.30 (and later) should allow precision + * qualifiers on sampler types just like float and integer types. */ if (this->type->qualifier.precision != ast_precision_none && !var->type->is_float() && !var->type->is_integer() && !var->type->is_record() - && !(var->type->is_sampler() && state->es_shader) + && !var->type->is_sampler() && !(var->type->is_array() && (var->type->fields.array->is_float() || var->type->fields.array->is_integer()))) { _mesa_glsl_error(&loc, state, "precision qualifiers apply only to floating point" - "%s types", state->es_shader ? ", integer, and sampler" - : "and integer"); + ", integer and sampler types"); } /* From page 17 (page 23 of the PDF) of the GLSL 1.20 spec: diff --git a/mesalib/src/glsl/ir.cpp b/mesalib/src/glsl/ir.cpp index 99dceacf8..c6d96d8da 100644 --- a/mesalib/src/glsl/ir.cpp +++ b/mesalib/src/glsl/ir.cpp @@ -515,6 +515,7 @@ static const char *const operator_strs[] = { "bfm", "ubo_load", "vector_extract", + "fma", "lrp", "bfi", "bitfield_extract", diff --git a/mesalib/src/glsl/ir.h b/mesalib/src/glsl/ir.h index 62e3b27ca..b45e6cbd8 100644 --- a/mesalib/src/glsl/ir.h +++ b/mesalib/src/glsl/ir.h @@ -1169,6 +1169,13 @@ enum ir_expression_operation { */ ir_last_binop = ir_binop_vector_extract, + /** + * \name Fused floating-point multiply-add, part of ARB_gpu_shader5. + */ + /*@{*/ + ir_triop_fma, + /*@}*/ + ir_triop_lrp, /** diff --git a/mesalib/src/glsl/ir_constant_expression.cpp b/mesalib/src/glsl/ir_constant_expression.cpp index 0a725b45b..bf019b955 100644 --- a/mesalib/src/glsl/ir_constant_expression.cpp +++ b/mesalib/src/glsl/ir_constant_expression.cpp @@ -1375,6 +1375,17 @@ ir_expression::constant_expression_value(struct hash_table *variable_context) break; } + case ir_triop_fma: + assert(op[0]->type->base_type == GLSL_TYPE_FLOAT); + assert(op[1]->type->base_type == GLSL_TYPE_FLOAT); + assert(op[2]->type->base_type == GLSL_TYPE_FLOAT); + + for (unsigned c = 0; c < components; c++) { + data.f[c] = op[0]->value.f[c] * op[1]->value.f[c] + + op[2]->value.f[c]; + } + break; + case ir_triop_lrp: { assert(op[0]->type->base_type == GLSL_TYPE_FLOAT); assert(op[1]->type->base_type == GLSL_TYPE_FLOAT); diff --git a/mesalib/src/glsl/ir_print_visitor.cpp b/mesalib/src/glsl/ir_print_visitor.cpp index 541231a33..b5183108d 100644 --- a/mesalib/src/glsl/ir_print_visitor.cpp +++ b/mesalib/src/glsl/ir_print_visitor.cpp @@ -406,7 +406,17 @@ void ir_print_visitor::visit(ir_constant *ir) switch (ir->type->base_type) { case GLSL_TYPE_UINT: printf("%u", ir->value.u[i]); break; case GLSL_TYPE_INT: printf("%d", ir->value.i[i]); break; - case GLSL_TYPE_FLOAT: printf("%f", ir->value.f[i]); break; + case GLSL_TYPE_FLOAT: + if (ir->value.f[i] == 0.0f) + /* 0.0 == -0.0, so print with %f to get the proper sign. */ + printf("%.1f", ir->value.f[i]); + else if (abs(ir->value.f[i]) < 0.000001f) + printf("%a", ir->value.f[i]); + else if (abs(ir->value.f[i]) > 1000000.0f) + printf("%e", ir->value.f[i]); + else + printf("%f", ir->value.f[i]); + break; case GLSL_TYPE_BOOL: printf("%d", ir->value.b[i]); break; default: assert(0); } diff --git a/mesalib/src/glsl/ir_validate.cpp b/mesalib/src/glsl/ir_validate.cpp index ce96f6855..37f26febe 100644 --- a/mesalib/src/glsl/ir_validate.cpp +++ b/mesalib/src/glsl/ir_validate.cpp @@ -522,6 +522,7 @@ ir_validate::visit_leave(ir_expression *ir) && ir->operands[1]->type->is_integer()); break; + case ir_triop_fma: case ir_triop_lrp: assert(ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT); assert(ir->operands[0]->type == ir->operands[1]->type); diff --git a/mesalib/src/mesa/main/api_validate.c b/mesalib/src/mesa/main/api_validate.c index 243bb89d1..002992186 100644 --- a/mesalib/src/mesa/main/api_validate.c +++ b/mesalib/src/mesa/main/api_validate.c @@ -402,9 +402,8 @@ _mesa_validate_DrawElements(struct gl_context *ctx, return GL_FALSE; } - if (count <= 0) { - if (count < 0) - _mesa_error(ctx, GL_INVALID_VALUE, "glDrawElements(count)" ); + if (count < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glDrawElements(count)" ); return GL_FALSE; } @@ -436,6 +435,9 @@ _mesa_validate_DrawElements(struct gl_context *ctx, if (!check_index_bounds(ctx, count, type, indices, basevertex)) return GL_FALSE; + if (count == 0) + return GL_FALSE; + return GL_TRUE; } @@ -456,10 +458,9 @@ _mesa_validate_MultiDrawElements(struct gl_context *ctx, FLUSH_CURRENT(ctx, 0); for (i = 0; i < primcount; i++) { - if (count[i] <= 0) { - if (count[i] < 0) - _mesa_error(ctx, GL_INVALID_VALUE, - "glMultiDrawElements(count)" ); + if (count[i] < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glMultiDrawElements(count)" ); return GL_FALSE; } } @@ -531,9 +532,8 @@ _mesa_validate_DrawRangeElements(struct gl_context *ctx, GLenum mode, return GL_FALSE; } - if (count <= 0) { - if (count < 0) - _mesa_error(ctx, GL_INVALID_VALUE, "glDrawRangeElements(count)" ); + if (count < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glDrawRangeElements(count)" ); return GL_FALSE; } @@ -570,6 +570,9 @@ _mesa_validate_DrawRangeElements(struct gl_context *ctx, GLenum mode, if (!check_index_bounds(ctx, count, type, indices, basevertex)) return GL_FALSE; + if (count == 0) + return GL_FALSE; + return GL_TRUE; } @@ -587,9 +590,8 @@ _mesa_validate_DrawArrays(struct gl_context *ctx, = ctx->TransformFeedback.CurrentObject; FLUSH_CURRENT(ctx, 0); - if (count <= 0) { - if (count < 0) - _mesa_error(ctx, GL_INVALID_VALUE, "glDrawArrays(count)" ); + if (count < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glDrawArrays(count)" ); return GL_FALSE; } @@ -628,6 +630,9 @@ _mesa_validate_DrawArrays(struct gl_context *ctx, xfb_obj->GlesRemainingPrims -= prim_count; } + if (count == 0) + return GL_FALSE; + return GL_TRUE; } @@ -640,10 +645,9 @@ _mesa_validate_DrawArraysInstanced(struct gl_context *ctx, GLenum mode, GLint fi = ctx->TransformFeedback.CurrentObject; FLUSH_CURRENT(ctx, 0); - if (count <= 0) { - if (count < 0) - _mesa_error(ctx, GL_INVALID_VALUE, - "glDrawArraysInstanced(count=%d)", count); + if (count < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glDrawArraysInstanced(count=%d)", count); return GL_FALSE; } @@ -696,6 +700,9 @@ _mesa_validate_DrawArraysInstanced(struct gl_context *ctx, GLenum mode, GLint fi xfb_obj->GlesRemainingPrims -= prim_count; } + if (count == 0) + return GL_FALSE; + return GL_TRUE; } @@ -721,10 +728,9 @@ _mesa_validate_DrawElementsInstanced(struct gl_context *ctx, return GL_FALSE; } - if (count <= 0) { - if (count < 0) - _mesa_error(ctx, GL_INVALID_VALUE, - "glDrawElementsInstanced(count=%d)", count); + if (count < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glDrawElementsInstanced(count=%d)", count); return GL_FALSE; } @@ -761,6 +767,9 @@ _mesa_validate_DrawElementsInstanced(struct gl_context *ctx, return GL_FALSE; } + if (count == 0) + return GL_FALSE; + if (!check_index_bounds(ctx, count, type, indices, basevertex)) return GL_FALSE; diff --git a/mesalib/src/mesa/program/ir_to_mesa.cpp b/mesalib/src/mesa/program/ir_to_mesa.cpp index f612f41ba..340a4497f 100644 --- a/mesalib/src/mesa/program/ir_to_mesa.cpp +++ b/mesalib/src/mesa/program/ir_to_mesa.cpp @@ -1492,6 +1492,7 @@ ir_to_mesa_visitor::visit(ir_expression *ir) case ir_binop_vector_extract: case ir_binop_bfm: + case ir_triop_fma: case ir_triop_bfi: case ir_triop_bitfield_extract: case ir_triop_vector_insert: 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 4e29e4500..37779d4e5 100644 --- a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -1972,6 +1972,7 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir) case ir_unop_find_msb: case ir_unop_find_lsb: case ir_binop_bfm: + case ir_triop_fma: case ir_triop_bfi: case ir_triop_bitfield_extract: case ir_quadop_bitfield_insert: diff --git a/mesalib/src/mesa/vbo/vbo_exec_array.c b/mesalib/src/mesa/vbo/vbo_exec_array.c index bd05cd0c3..1670409d4 100644 --- a/mesalib/src/mesa/vbo/vbo_exec_array.c +++ b/mesalib/src/mesa/vbo/vbo_exec_array.c @@ -1334,6 +1334,16 @@ vbo_validated_multidrawelements(struct gl_context *ctx, GLenum mode, } } + /* Draw primitives individually if one count is zero, so we can easily skip + * that primitive. + */ + for (i = 0; i < primcount; i++) { + if (count[i] == 0) { + fallback = GL_TRUE; + break; + } + } + /* If the index buffer isn't in a VBO, then treating the application's * subranges of the index buffer as one large index buffer may lead to * us reading unmapped memory. @@ -1370,6 +1380,8 @@ vbo_validated_multidrawelements(struct gl_context *ctx, GLenum mode, } else { /* render one prim at a time */ for (i = 0; i < primcount; i++) { + if (count[i] == 0) + continue; ib.count = count[i]; ib.type = type; ib.obj = ctx->Array.ArrayObj->ElementArrayBufferObj; |