ChangeLog | 301 +++++++++++++++ debian/changelog | 7 docs/relnotes-7.7.1.html | 1 src/gallium/drivers/llvmpipe/lp_bld_arit.c | 11 src/gallium/drivers/llvmpipe/lp_bld_tgsi_soa.c | 2 src/gallium/drivers/llvmpipe/lp_debug.h | 71 +++ src/gallium/drivers/llvmpipe/lp_draw_arrays.c | 8 src/gallium/drivers/llvmpipe/lp_jit.c | 2 src/gallium/drivers/llvmpipe/lp_screen.c | 80 +++ src/gallium/drivers/llvmpipe/lp_state_blend.c | 18 src/gallium/drivers/llvmpipe/lp_state_fs.c | 156 ++++--- src/gallium/drivers/llvmpipe/lp_state_rasterizer.c | 9 src/gallium/drivers/llvmpipe/lp_state_surface.c | 2 src/gallium/drivers/llvmpipe/lp_state_vs.c | 13 src/gallium/drivers/softpipe/sp_state_blend.c | 5 src/gallium/drivers/softpipe/sp_state_fs.c | 11 src/gallium/drivers/softpipe/sp_state_rasterizer.c | 9 src/gallium/drivers/softpipe/sp_state_surface.c | 2 src/gallium/drivers/svga/svga_context.c | 1 src/gallium/drivers/svga/svga_context.h | 4 src/gallium/drivers/svga/svga_pipe_blend.c | 7 src/gallium/drivers/svga/svga_pipe_draw.c | 3 src/gallium/drivers/svga/svga_screen_buffer.c | 62 ++- src/gallium/drivers/svga/svga_screen_texture.c | 4 src/gallium/drivers/svga/svga_state_fs.c | 126 +----- src/gallium/drivers/svga/svga_tgsi.h | 1 src/gallium/drivers/svga/svga_tgsi_decl_sm30.c | 15 src/gallium/drivers/svga/svga_tgsi_insn.c | 34 + src/gallium/state_trackers/python/retrace/interpreter.py | 2 src/gallium/state_trackers/xorg/xorg_crtc.c | 4 src/gallium/state_trackers/xorg/xorg_driver.c | 4 src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h | 43 -- src/glx/x11/dri2_glx.c | 13 src/mesa/drivers/dri/r600/r600_context.c | 16 src/mesa/drivers/dri/r600/r600_tex.h | 2 src/mesa/drivers/dri/r600/r700_assembler.c | 15 src/mesa/drivers/windows/gdi/mesa.def | 4 src/mesa/drivers/windows/gdi/wmesa.c | 12 src/mesa/main/api_validate.c | 9 src/mesa/main/context.c | 4 src/mesa/shader/slang/slang_preprocess.c | 32 + src/mesa/state_tracker/st_draw.c | 3 src/mesa/tnl/t_draw.c | 3 src/mesa/vbo/vbo_exec_array.c | 32 - windows/VC8/mesa/gdi/gdi.vcproj | 8 windows/VC8/mesa/mesa/mesa.vcproj | 12 46 files changed, 852 insertions(+), 331 deletions(-)
New commits: commit eef7b39a3618ca77dfb77111b4daad2acf2c1824 Author: Brice Goglin <[email protected]> Date: Mon Feb 1 22:55:49 2010 +0100 Prepare changelog for upload diff --git a/debian/changelog b/debian/changelog index 0e7ebec..4a441c0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,9 @@ -mesa (7.7-3) UNRELEASED; urgency=low +mesa (7.7-3) experimental; urgency=low * Pull from upstream mesa_7_7_branch up to commit f5145a6e. + * Build against libdrm-radeon1 2.4.17 to get DRI2 support. - -- Brice Goglin <[email protected]> Mon, 01 Feb 2010 22:37:33 +0100 + -- Brice Goglin <[email protected]> Mon, 01 Feb 2010 22:55:36 +0100 mesa (7.7-2) experimental; urgency=low commit 04f4a8921b917b428bb63fe152f5b69c314075d0 Author: Brice Goglin <[email protected]> Date: Mon Feb 1 22:38:35 2010 +0100 New upstream snapshot diff --git a/ChangeLog b/ChangeLog index 1206f32..cef81d9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,304 @@ +commit f5145a6ec3e9086988ab8ec004276f845fecc3d9 +Author: Jakob Bornecrantz <[email protected]> +Date: Fri Jan 29 17:11:36 2010 +0100 + + vmware/core: Remove old ioctl structs not used + + Leftover that was never used in this driver + +commit ddedfe12d41808c3caa77649e3a9a6c4c6253d69 +Author: José Fonseca <[email protected]> +Date: Thu Jan 28 20:51:52 2010 +0000 + + svga: Actually call fence_reference in texture downloads. + +commit cb5447f79ca03d29407e8db84166f5bddd8d4c59 +Author: Brian Paul <[email protected]> +Date: Fri Jan 29 08:26:23 2010 -0700 + + glsl: fix preprocessor bug involving //-style comments in macro definitions + + See comments for details. + +commit 9fd3c74724e557bc6ecc851d8552615ab3becfe2 +Author: Brian Paul <[email protected]> +Date: Thu Jan 28 13:05:36 2010 -0700 + + tnl: check that state is validated before drawing + +commit 4d1234e22242529c8d85f5ef0cf826af41a91570 +Author: Brian Paul <[email protected]> +Date: Thu Jan 28 13:05:23 2010 -0700 + + st/mesa: check that state is validated before drawing + +commit 3cba779e16935f7c3a0bfd8af48bd5e015068e96 +Author: Brian Paul <[email protected]> +Date: Thu Jan 28 13:04:16 2010 -0700 + + vbo: fix missing state validation bugs + + Commit 2708ddfb06a36d8568e2aa130bf1f7d551fcd309 caused a few regressions. + We need to check/validate state after calling bind_arrays() because + it might set the _NEW_ARRAYS flag if the varying VP inputs change. + + The symptom of this problem was some attribute arrays being ignored + (or interpreted as constant-valued) in glDrawRangeElements or + glMultiDrawElements. + + A follow-on patch will add some additional asserts to try to catch + this kind of thing in the future. + +commit 23eda89ec89e2bd5bc26077bd56e8d6b5d4040d4 +Author: Brian Paul <[email protected]> +Date: Thu Jan 28 13:02:40 2010 -0700 + + mesa: do state validation in _mesa_valid_to_render() + + ...rather than checking/validating before all the calls to + _mesa_valid_to_render() and valid_to_render(). + + The next patch will actually fix some bugs... + +commit 6e68898b05dc957dc6cb92d2ff060589e5936650 +Author: José Fonseca <[email protected]> +Date: Sat Dec 26 21:05:31 2009 +0000 + + softpipe: Flush draw module when fragment pipeline state changes. + +commit 1befcd5a2ae8588f8d17d2ecea19dd4daccddb00 +Author: José Fonseca <[email protected]> +Date: Sat Dec 26 11:01:05 2009 +0000 + + softpipe: Flush draw module before switching framebuffer. + + Otherwise geometry might end up in the wrong rendertarget. + +commit 12ba3559785fa276b3b4b6fa06cfe551b87aecc3 +Author: José Fonseca <[email protected]> +Date: Mon Nov 23 11:21:11 2009 +0000 + + llvmpipe: Use assert instead of abort. Only verify functions on debug builds. + +commit a0907a645f7d832e7c53d14c2ed88080b456a1a5 +Author: José Fonseca <[email protected]> +Date: Sun Nov 15 06:46:48 2009 -0800 + + llvmpipe: Fix memory leak. + +commit 1acf7a09e762e6d8a26c8f0d919f5efa6df6e71f +Author: José Fonseca <[email protected]> +Date: Tue Nov 10 17:52:53 2009 -0800 + + llvmpipe: Use the generic conversion routine for depths. + + This allows for z32f depth format to work correctly. + +commit 14dc02a1b2c52cf02b7f89885b61f42575834958 +Author: José Fonseca <[email protected]> +Date: Tue Nov 10 17:51:06 2009 -0800 + + llvmpipe: Be more conservative with the supported formats. + + We'll likely support much more formats, but doing this allows to run + more testsuites without immediately hit assertion failures. + +commit 88cf87bd5633c0e8155e4226fc49ab36f1abc335 +Author: José Fonseca <[email protected]> +Date: Mon Dec 28 22:52:41 2009 +0000 + + llvmpipe: Unmapping vertex/index buffers does NOT flush draw module anymore. + + Not since 6094e79f4e3350d123c7532b1c73faa60834a62d. + + Drivers now need to flush draw module explicitely (which explains why + all those previous commits adding draw_flushes calls were necessary). + + This is a good thing, but it's tricky to get this right in face of user buffers + (it's not even clear who has the responsibility to flush when a user buffer + is seen -- statetracker or pipe driver), so just force flush (temporarily) + since it's not a bottleneck now. + +commit 31b3420688dbf7fc2282f0d1fe13e51fe9e1f9b6 +Author: José Fonseca <[email protected]> +Date: Sat Dec 26 15:21:16 2009 +0000 + + llvmpipe: Treat state changes systematically. + + That is: + - check for no op + - update/flush draw module + - update bound state and mark it as dirty + + In particular flushing the draw module is important since it may contain + unflushed primitives which would otherwise be draw with wrong state. + +commit 4e95983fa832cf0808ccab64e9fbfb0fcdde8049 +Author: José Fonseca <[email protected]> +Date: Sat Dec 26 11:00:42 2009 +0000 + + llvmpipe: Flush draw module before switching framebuffer. + + Otherwise geometry will end up in the wrong rendertarget. + +commit 4e506eac8f11a23249a46265b796c4764d9d045e +Author: José Fonseca <[email protected]> +Date: Wed Dec 16 15:06:02 2009 +0000 + + llvmpipe: add LP_DEBUG env var + + Cherry-picked from dec35d04aeb398eef159aaf8cde5e0d04622b811. + +commit 46167149ceac96cf91f2031d2c58346b80f0834d +Author: Brian Paul <[email protected]> +Date: Mon Dec 14 15:27:35 2009 -0700 + + llvmpipe: fix broken TGSI_OPCODE_FRC codegen + +commit 96ec4eb755d0296c807ca5c89383a3b9f9fc1dbe +Author: Brian Paul <[email protected]> +Date: Mon Dec 14 15:24:31 2009 -0700 + + llvmpipe: fix broken lp_build_abs() + +commit e20547042c03e22234c9580f005286552bd4ae18 +Author: José Fonseca <[email protected]> +Date: Tue Dec 15 14:46:43 2009 +0000 + + llvmpipe: Fix yet another copynpaste typo in lp_build_log2_approx. + + Now fslight looks perfect. + +commit 0451d0fd01bdd4ee6a2497a3a1c749446739602e +Author: José Fonseca <[email protected]> +Date: Tue Dec 15 14:15:52 2009 +0000 + + llvmpipe: Fix lp_build_polynomial comment. + +commit aa8b23e077f8c4f4c517e58533a72db0fb861091 +Author: José Fonseca <[email protected]> +Date: Tue Dec 15 13:58:53 2009 +0000 + + llvmpipe: Fix typo in lp_build_log constant. + +commit 4eb48a3af78beda4ee1628d0ecd6a437a0721a72 +Author: José Fonseca <[email protected]> +Date: Tue Dec 15 12:13:43 2009 +0000 + + llvmpipe: Fix bad SI -> FP conversion into lp_build_log2_approx. + + It should be a bitcast as the integer value is actually an encoded FP + already. + +commit 8db8adfd01a1ff1e2a160ae3b0199bd3daa4191a +Author: Jakob Bornecrantz <[email protected]> +Date: Thu Jan 28 17:59:26 2010 +0100 + + st/xorg: Update to new libkms interface but be backwards compatible + +commit 8e240d7e0eb640cc954f6d81119136e2d546d618 +Author: Keith Whitwell <[email protected]> +Date: Mon Aug 10 18:45:07 2009 +0100 + + svga: remove sleep in DEBUG_FLUSH path + +commit 40298bf272c7fbb289b442b4424c2c17402ae322 +Author: José Fonseca <[email protected]> +Date: Thu Jan 28 17:11:02 2010 +0000 + + python/retrace: Dump all vertices for verbosity level 3. + +commit a0518e66b2960d3bab386985e24ccbc9c51abf97 +Author: Brian Paul <[email protected]> +Date: Wed Jan 27 17:08:03 2010 -0700 + + docs: Fixed Windows build for 7.7.1 + +commit 82c76cd16f35f4d903f49761af7eb28a755ad299 +Author: Brian Paul <[email protected]> +Date: Wed Jan 27 16:25:59 2010 -0700 + + windows: assorted build fixes + + These changes were originally submitted by Karl Schultz for Mesa 7.7-rc2 + but weren't applied. + +commit 50e890bc51cfc278378f25cb70be79f1bad0b6b6 +Author: Rodolfo Ribeiro Gomes <[email protected]> +Date: Tue Jan 26 14:20:06 2010 -0700 + + glx: fix possible memory leaks in dri2CreateScreen() + + Original patch fixed up by Brian Paul. + +commit bba95570196dad29880426152a1b7fb77619296d +Author: Alex Deucher <[email protected]> +Date: Wed Jan 27 12:18:02 2010 -0500 + + r600: fix warning + +commit 2041d3e4b76009687bb2a7752c3ee94e5c160357 +Author: Alex Deucher <[email protected]> +Date: Wed Jan 27 12:16:50 2010 -0500 + + r600: rv670 support 8 tex instructions just like other r6xx + + also clarify some other const values. + +commit 77b7b3a1ab36f1dafa905dbe709d0d72dbc9d54d +Author: Andre Maasikas <[email protected]> +Date: Wed Jan 27 11:22:56 2010 +0200 + + r600: increase max texture units to 16 + +commit 0dab80fbfb5703bfbeed691051c353aeca3aaa7a +Author: Andre Maasikas <[email protected]> +Date: Wed Jan 27 10:20:15 2010 +0200 + + r600: fix XPD with writemask + + same variable used for 2 different temp registers + fixes e.g. glsl/bump + +commit e3257912e006120f6ab611e77005eed1a464030a +Author: José Fonseca <[email protected]> +Date: Wed Jan 27 16:25:31 2010 +0000 + + mesa: Warn when indices are out of bounds, but do not skip the draw in debug builds. + + The driver (or preferably the hardware) should handle out of bounds + indices. + + If there are problems then it's better to detect those in the debug + builds. + +commit 15fe4918223f04fa89d523220609abea0cac34e2 +Author: José Fonseca <[email protected]> +Date: Wed Jan 27 15:41:25 2010 +0000 + + svga: Prevent buffer overflow in buffer ranges. + + Do this by extending the nearest range to cover the new range. + + This fixes an access fault in Call of Duty which was doing many disjoint + glBufferSubData calls. + +commit ac597f5acc8886a0c44aaa4f2484f9d569ae5d6d +Author: José Fonseca <[email protected]> +Date: Wed Jan 27 14:45:56 2010 +0000 + + svga: Fix PIPE_LOGICOP_INVERT. + + Actually the current XOR implementation is an INVERT. + + This fixes rectangle selection in Maya. + +commit 5cb255f0d7ab048355b454d69e44ab9735c8921e +Author: Keith Whitwell <[email protected]> +Date: Wed Jan 27 13:48:21 2010 +0000 + + svga: better path for generating white pixels for xor logicop workaround + commit 2f28ca0a27cb0c539affb22c487c4bb44b6d54b4 Author: Dave Airlie <[email protected]> Date: Wed Jan 27 11:46:26 2010 +1000 diff --git a/debian/changelog b/debian/changelog index 656e050..0e7ebec 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +mesa (7.7-3) UNRELEASED; urgency=low + + * Pull from upstream mesa_7_7_branch up to commit f5145a6e. + + -- Brice Goglin <[email protected]> Mon, 01 Feb 2010 22:37:33 +0100 + mesa (7.7-2) experimental; urgency=low [ Julien Cristau ] commit f5145a6ec3e9086988ab8ec004276f845fecc3d9 Author: Jakob Bornecrantz <[email protected]> Date: Fri Jan 29 17:11:36 2010 +0100 vmware/core: Remove old ioctl structs not used Leftover that was never used in this driver diff --git a/src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h b/src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h index 2be7e12..681d6b5 100644 --- a/src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h +++ b/src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h @@ -87,49 +87,6 @@ struct drm_vmw_getparam_arg { /*************************************************************************/ /** - * DRM_VMW_EXTENSION - Query device extensions. - */ - -/** - * struct drm_vmw_extension_rep - * - * @exists: The queried extension exists. - * @driver_ioctl_offset: Ioctl number of the first ioctl in the extension. - * @driver_sarea_offset: Offset to any space in the DRI SAREA - * used by the extension. - * @major: Major version number of the extension. - * @minor: Minor version number of the extension. - * @pl: Patch level version number of the extension. - * - * Output argument to the DRM_VMW_EXTENSION Ioctl. - */ - -struct drm_vmw_extension_rep { - int32_t exists; - uint32_t driver_ioctl_offset; - uint32_t driver_sarea_offset; - uint32_t major; - uint32_t minor; - uint32_t pl; - uint32_t pad64; -}; - -/** - * union drm_vmw_extension_arg - * - * @extension - Ascii name of the extension to be queried. //In - * @rep - Reply as defined above. //Out - * - * Argument to the DRM_VMW_EXTENSION Ioctl. - */ - -union drm_vmw_extension_arg { - char extension[DRM_VMW_EXT_NAME_LEN]; - struct drm_vmw_extension_rep rep; -}; - -/*************************************************************************/ -/** * DRM_VMW_CREATE_CONTEXT - Create a host context. * * Allocates a device unique context id, and queues a create context command commit ddedfe12d41808c3caa77649e3a9a6c4c6253d69 Author: José Fonseca <[email protected]> Date: Thu Jan 28 20:51:52 2010 +0000 svga: Actually call fence_reference in texture downloads. diff --git a/src/gallium/drivers/svga/svga_screen_texture.c b/src/gallium/drivers/svga/svga_screen_texture.c index 9ad4eda..c381988 100644 --- a/src/gallium/drivers/svga/svga_screen_texture.c +++ b/src/gallium/drivers/svga/svga_screen_texture.c @@ -203,7 +203,7 @@ svga_transfer_dma(struct svga_transfer *st, if(transfer == SVGA3D_READ_HOST_VRAM) { svga_screen_flush(screen, &fence); sws->fence_finish(sws, fence, 0); - //sws->fence_reference(sws, &fence, NULL); + sws->fence_reference(sws, &fence, NULL); } } else { @@ -232,7 +232,7 @@ svga_transfer_dma(struct svga_transfer *st, if(y) { svga_screen_flush(screen, &fence); sws->fence_finish(sws, fence, 0); - //sws->fence_reference(sws, &fence, NULL); + sws->fence_reference(sws, &fence, NULL); } hw = sws->buffer_map(sws, st->hwbuf, PIPE_BUFFER_USAGE_CPU_WRITE); commit cb5447f79ca03d29407e8db84166f5bddd8d4c59 Author: Brian Paul <[email protected]> Date: Fri Jan 29 08:26:23 2010 -0700 glsl: fix preprocessor bug involving //-style comments in macro definitions See comments for details. diff --git a/src/mesa/shader/slang/slang_preprocess.c b/src/mesa/shader/slang/slang_preprocess.c index e9a24cc..ba40bad 100644 --- a/src/mesa/shader/slang/slang_preprocess.c +++ b/src/mesa/shader/slang/slang_preprocess.c @@ -914,6 +914,35 @@ parse_if (slang_string *output, const byte *prod, GLuint *pi, GLint *result, pp_ #define PRAGMA_PARAM 1 +/** + * Return the length of the given string, stopping at any C++-style comments. + * This step fixes bugs with macro definitions such as: + * #define PI 3.14159 // this is pi + * The preprocessor includes the comment in the definition of PI so + * when we plug in PI somewhere, we get the comment too. + * This function effectively strips of the // comment from the given string. + * It might also be possible to fix this in the preprocessor grammar. + * This bug is not present in the new Mesa 7.8 preprocessor. + */ +static int +strlen_without_comments(const char *s) +{ + char pred = 0; + int len = 0; + while (*s) { + if (*s == '/' && pred == '/') { + return len - 1; + } + pred = *s; + s++; + len++; + } + return len; +} + + + + static GLboolean preprocess_source (slang_string *output, const char *source, grammar pid, grammar eid, @@ -1055,11 +1084,12 @@ preprocess_source (slang_string *output, const char *source, if (state.cond.top->effective) { slang_string replacement; expand_state es; + int idlen2 = strlen_without_comments((char*)id); pp_annotate (output, ") %s", id); slang_string_init(&replacement); - slang_string_pushs(&replacement, id, idlen); + slang_string_pushs(&replacement, id, idlen2); /* Expand macro replacement. */ es.output = &symbol->replacement; commit 9fd3c74724e557bc6ecc851d8552615ab3becfe2 Author: Brian Paul <[email protected]> Date: Thu Jan 28 13:05:36 2010 -0700 tnl: check that state is validated before drawing diff --git a/src/mesa/tnl/t_draw.c b/src/mesa/tnl/t_draw.c index 9a888ce..b0e31c0 100644 --- a/src/mesa/tnl/t_draw.c +++ b/src/mesa/tnl/t_draw.c @@ -394,6 +394,9 @@ void _tnl_draw_prims( GLcontext *ctx, GLuint max_basevertex = prim->basevertex; GLuint i; + /* Mesa core state should have been validated already */ + assert(ctx->NewState == 0x0); + for (i = 1; i < nr_prims; i++) max_basevertex = MAX2(max_basevertex, prim[i].basevertex); commit 4d1234e22242529c8d85f5ef0cf826af41a91570 Author: Brian Paul <[email protected]> Date: Thu Jan 28 13:05:23 2010 -0700 st/mesa: check that state is validated before drawing diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c index 5c6af11..d3b22db 100644 --- a/src/mesa/state_tracker/st_draw.c +++ b/src/mesa/state_tracker/st_draw.c @@ -569,6 +569,9 @@ st_draw_vbo(GLcontext *ctx, /* sanity check for pointer arithmetic below */ assert(sizeof(arrays[0]->Ptr[0]) == 1); + /* Mesa core state should have been validated already */ + assert(ctx->NewState == 0x0); + st_validate_state(ctx->st); /* must get these after state validation! */ commit 3cba779e16935f7c3a0bfd8af48bd5e015068e96 Author: Brian Paul <[email protected]> Date: Thu Jan 28 13:04:16 2010 -0700 vbo: fix missing state validation bugs Commit 2708ddfb06a36d8568e2aa130bf1f7d551fcd309 caused a few regressions. We need to check/validate state after calling bind_arrays() because it might set the _NEW_ARRAYS flag if the varying VP inputs change. The symptom of this problem was some attribute arrays being ignored (or interpreted as constant-valued) in glDrawRangeElements or glMultiDrawElements. A follow-on patch will add some additional asserts to try to catch this kind of thing in the future. diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c index fdd6b02..d08976c 100644 --- a/src/mesa/vbo/vbo_exec_array.c +++ b/src/mesa/vbo/vbo_exec_array.c @@ -443,6 +443,13 @@ recalculate_input_bindings(GLcontext *ctx) } +/** + * Examine the enabled vertex arrays to set the exec->array.inputs[] values. + * These will point to the arrays to actually use for drawing. Some will + * be user-provided arrays, other will be zero-stride const-valued arrays. + * Note that this might set the _NEW_ARRAY dirty flag so state validation + * must be done after this call. + */ static void bind_arrays(GLcontext *ctx) { @@ -484,9 +491,6 @@ vbo_exec_DrawArrays(GLenum mode, GLint start, GLsizei count) FLUSH_CURRENT( ctx, 0 ); - if (ctx->NewState) - _mesa_update_state( ctx ); - if (!_mesa_valid_to_render(ctx, "glDrawArrays")) { return; } @@ -600,18 +604,16 @@ vbo_validated_drawrangeelements(GLcontext *ctx, GLenum mode, FLUSH_CURRENT( ctx, 0 ); - if (ctx->NewState) - _mesa_update_state( ctx ); - if (!_mesa_valid_to_render(ctx, "glDraw[Range]Elements")) { return; } + bind_arrays( ctx ); + + /* check for dirty state again */ if (ctx->NewState) _mesa_update_state( ctx ); - bind_arrays( ctx ); - ib.count = count; ib.type = type; ib.obj = ctx->Array.ElementArrayBufferObj; @@ -848,16 +850,10 @@ vbo_validated_multidrawelements(GLcontext *ctx, GLenum mode, FLUSH_CURRENT( ctx, 0 ); - if (ctx->NewState) - _mesa_update_state( ctx ); - if (!_mesa_valid_to_render(ctx, "glMultiDrawElements")) { return; } - if (ctx->NewState) - _mesa_update_state( ctx ); - prim = _mesa_calloc(primcount * sizeof(*prim)); if (prim == NULL) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glMultiDrawElements"); @@ -869,6 +865,10 @@ vbo_validated_multidrawelements(GLcontext *ctx, GLenum mode, */ bind_arrays( ctx ); + /* check for dirty state again */ + if (ctx->NewState) + _mesa_update_state( ctx ); + switch (type) { case GL_UNSIGNED_INT: index_type_size = 4; commit 23eda89ec89e2bd5bc26077bd56e8d6b5d4040d4 Author: Brian Paul <[email protected]> Date: Thu Jan 28 13:02:40 2010 -0700 mesa: do state validation in _mesa_valid_to_render() ...rather than checking/validating before all the calls to _mesa_valid_to_render() and valid_to_render(). The next patch will actually fix some bugs... diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c index e71e5a6..013048b 100644 --- a/src/mesa/main/api_validate.c +++ b/src/mesa/main/api_validate.c @@ -190,9 +190,6 @@ _mesa_validate_DrawElements(GLcontext *ctx, return GL_FALSE; } - if (ctx->NewState) - _mesa_update_state(ctx); - if (!check_valid_to_render(ctx, "glDrawElements")) return GL_FALSE; @@ -254,9 +251,6 @@ _mesa_validate_DrawRangeElements(GLcontext *ctx, GLenum mode, return GL_FALSE; } - if (ctx->NewState) - _mesa_update_state(ctx); - if (!check_valid_to_render(ctx, "glDrawRangeElements")) return GL_FALSE; @@ -304,9 +298,6 @@ _mesa_validate_DrawArrays(GLcontext *ctx, return GL_FALSE; } - if (ctx->NewState) - _mesa_update_state(ctx); - if (!check_valid_to_render(ctx, "glDrawArrays")) return GL_FALSE; diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index 87eae96..f5d9a30 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -1580,6 +1580,10 @@ _mesa_set_mvp_with_dp4( GLcontext *ctx, GLboolean _mesa_valid_to_render(GLcontext *ctx, const char *where) { + /* This depends on having up to date derived state (shaders) */ + if (ctx->NewState) + _mesa_update_state(ctx); + if (ctx->Shader.CurrentProgram) { /* using shaders */ if (!ctx->Shader.CurrentProgram->LinkStatus) { commit 6e68898b05dc957dc6cb92d2ff060589e5936650 Author: José Fonseca <[email protected]> Date: Sat Dec 26 21:05:31 2009 +0000 softpipe: Flush draw module when fragment pipeline state changes. diff --git a/src/gallium/drivers/softpipe/sp_state_blend.c b/src/gallium/drivers/softpipe/sp_state_blend.c index efed082..95ab323 100644 --- a/src/gallium/drivers/softpipe/sp_state_blend.c +++ b/src/gallium/drivers/softpipe/sp_state_blend.c @@ -29,6 +29,7 @@ */ #include "util/u_memory.h" +#include "draw/draw_context.h" #include "sp_context.h" #include "sp_state.h" @@ -45,6 +46,8 @@ void softpipe_bind_blend_state( struct pipe_context *pipe, { struct softpipe_context *softpipe = softpipe_context(pipe); + draw_flush(softpipe->draw); + softpipe->blend = (struct pipe_blend_state *)blend; softpipe->dirty |= SP_NEW_BLEND; @@ -62,6 +65,8 @@ void softpipe_set_blend_color( struct pipe_context *pipe, { struct softpipe_context *softpipe = softpipe_context(pipe); + draw_flush(softpipe->draw); + softpipe->blend_color = *blend_color; softpipe->dirty |= SP_NEW_BLEND; diff --git a/src/gallium/drivers/softpipe/sp_state_fs.c b/src/gallium/drivers/softpipe/sp_state_fs.c index b41f7e8..8ea48ed 100644 --- a/src/gallium/drivers/softpipe/sp_state_fs.c +++ b/src/gallium/drivers/softpipe/sp_state_fs.c @@ -69,7 +69,14 @@ softpipe_bind_fs_state(struct pipe_context *pipe, void *fs) { struct softpipe_context *softpipe = softpipe_context(pipe); - softpipe->fs = (struct sp_fragment_shader *) fs; + draw_flush(softpipe->draw); + + if (softpipe->fs == fs) + return; + + draw_flush(softpipe->draw); + + softpipe->fs = fs; softpipe->dirty |= SP_NEW_FS; } @@ -159,6 +166,8 @@ softpipe_set_constant_buffer(struct pipe_context *pipe, assert(shader < PIPE_SHADER_TYPES); assert(index == 0); + draw_flush(softpipe->draw); + /* note: reference counting */ pipe_buffer_reference(&softpipe->constants[shader].buffer, buf ? buf->buffer : NULL); diff --git a/src/gallium/drivers/softpipe/sp_state_rasterizer.c b/src/gallium/drivers/softpipe/sp_state_rasterizer.c index 87b7219..a5b0033 100644 --- a/src/gallium/drivers/softpipe/sp_state_rasterizer.c +++ b/src/gallium/drivers/softpipe/sp_state_rasterizer.c @@ -41,14 +41,17 @@ softpipe_create_rasterizer_state(struct pipe_context *pipe, } void softpipe_bind_rasterizer_state(struct pipe_context *pipe, - void *setup) + void *rasterizer) { struct softpipe_context *softpipe = softpipe_context(pipe); + if (softpipe->rasterizer == rasterizer) + return; + /* pass-through to draw module */ - draw_set_rasterizer_state(softpipe->draw, setup); + draw_set_rasterizer_state(softpipe->draw, rasterizer); - softpipe->rasterizer = (struct pipe_rasterizer_state *)setup; + softpipe->rasterizer = rasterizer; softpipe->dirty |= SP_NEW_RASTERIZER; } commit 1befcd5a2ae8588f8d17d2ecea19dd4daccddb00 Author: José Fonseca <[email protected]> Date: Sat Dec 26 11:01:05 2009 +0000 softpipe: Flush draw module before switching framebuffer. Otherwise geometry might end up in the wrong rendertarget. diff --git a/src/gallium/drivers/softpipe/sp_state_surface.c b/src/gallium/drivers/softpipe/sp_state_surface.c index 794a922..d29b6ae 100644 --- a/src/gallium/drivers/softpipe/sp_state_surface.c +++ b/src/gallium/drivers/softpipe/sp_state_surface.c @@ -48,6 +48,8 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe, struct softpipe_context *sp = softpipe_context(pipe); uint i; + draw_flush(sp->draw); + for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++) { /* check if changing cbuf */ if (sp->framebuffer.cbufs[i] != fb->cbufs[i]) { commit 12ba3559785fa276b3b4b6fa06cfe551b87aecc3 Author: José Fonseca <[email protected]> Date: Mon Nov 23 11:21:11 2009 +0000 llvmpipe: Use assert instead of abort. Only verify functions on debug builds. diff --git a/src/gallium/drivers/llvmpipe/lp_jit.c b/src/gallium/drivers/llvmpipe/lp_jit.c index b5aa7d6..7e019d4 100644 --- a/src/gallium/drivers/llvmpipe/lp_jit.c +++ b/src/gallium/drivers/llvmpipe/lp_jit.c @@ -166,7 +166,7 @@ lp_jit_screen_init(struct llvmpipe_screen *screen) if (LLVMCreateJITCompiler(&screen->engine, screen->provider, 1, &error)) { _debug_printf("%s\n", error); LLVMDisposeMessage(error); - abort(); + assert(0); } screen->target = LLVMGetExecutionEngineTargetData(screen->engine); diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c index 48ec5e1..2b6965d 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_fs.c +++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c @@ -620,10 +620,12 @@ generate_fragment(struct llvmpipe_context *lp, * Translate the LLVM IR into machine code. */ +#ifdef DEBUG if(LLVMVerifyFunction(variant->function, LLVMPrintMessageAction)) { LLVMDumpValue(variant->function); - abort(); + assert(0); } +#endif LLVMRunFunctionPassManager(screen->pass, variant->function); commit a0907a645f7d832e7c53d14c2ed88080b456a1a5 Author: José Fonseca <[email protected]> Date: Sun Nov 15 06:46:48 2009 -0800 llvmpipe: Fix memory leak. diff --git a/src/gallium/drivers/llvmpipe/lp_state_vs.c b/src/gallium/drivers/llvmpipe/lp_state_vs.c index 0e9bc1d..884e387 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_vs.c +++ b/src/gallium/drivers/llvmpipe/lp_state_vs.c @@ -96,5 +96,6 @@ llvmpipe_delete_vs_state(struct pipe_context *pipe, void *vs) (struct lp_vertex_shader *)vs; draw_delete_vertex_shader(llvmpipe->draw, state->draw_data); + FREE( (void *)state->shader.tokens ); FREE( state ); } commit 1acf7a09e762e6d8a26c8f0d919f5efa6df6e71f Author: José Fonseca <[email protected]> Date: Tue Nov 10 17:52:53 2009 -0800 llvmpipe: Use the generic conversion routine for depths. This allows for z32f depth format to work correctly. diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c index 696657e..48ec5e1 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_fs.c +++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c @@ -147,6 +147,20 @@ generate_depth(LLVMBuilderRef builder, format_desc = util_format_description(key->zsbuf_format); assert(format_desc); + /* + * Depths are expected to be between 0 and 1, even if they are stored in + * floats. Setting these bits here will ensure that the lp_build_conv() call + * below won't try to unnecessarily clamp the incoming values. + */ + if(src_type.floating) { + src_type.sign = FALSE; + src_type.norm = TRUE; + } + else { + assert(!src_type.sign); + assert(src_type.norm); + } + /* Pick the depth type. */ dst_type = lp_depth_type(format_desc, src_type.width*src_type.length); @@ -154,14 +168,11 @@ generate_depth(LLVMBuilderRef builder, assert(dst_type.width == src_type.width); assert(dst_type.length == src_type.length); -#if 1 - src = lp_build_clamped_float_to_unsigned_norm(builder, - src_type, - dst_type.width, - src); -#else lp_build_conv(builder, src_type, dst_type, &src, 1, &src, 1); -#endif + + dst_ptr = LLVMBuildBitCast(builder, + dst_ptr, + LLVMPointerType(lp_build_vec_type(dst_type), 0), ""); lp_build_depth_test(builder, &key->depth, commit 14dc02a1b2c52cf02b7f89885b61f42575834958 Author: José Fonseca <[email protected]> Date: Tue Nov 10 17:51:06 2009 -0800 llvmpipe: Be more conservative with the supported formats. We'll likely support much more formats, but doing this allows to run more testsuites without immediately hit assertion failures. diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c index 87fddbd..190dad0 100644 --- a/src/gallium/drivers/llvmpipe/lp_screen.c +++ b/src/gallium/drivers/llvmpipe/lp_screen.c @@ -27,6 +27,7 @@ #include "util/u_memory.h" +#include "util/u_format.h" #include "pipe/p_defines.h" #include "pipe/p_screen.h" @@ -149,17 +150,17 @@ llvmpipe_is_format_supported( struct pipe_screen *_screen, -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected]

