Mesa (master): st/dri: make the GL_ARB_map_buffer_range entrypoints available
Module: Mesa Branch: master Commit: 1664bc1a37ab85c5d1b14d90c4674201c9154382 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1664bc1a37ab85c5d1b14d90c4674201c9154382 Author: Ben Skeggs bske...@redhat.com Date: Wed Aug 26 16:17:37 2009 +1000 st/dri: make the GL_ARB_map_buffer_range entrypoints available --- src/gallium/state_trackers/dri/dri_extensions.c |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/src/gallium/state_trackers/dri/dri_extensions.c b/src/gallium/state_trackers/dri/dri_extensions.c index 7c04c2b..4349a4d 100644 --- a/src/gallium/state_trackers/dri/dri_extensions.c +++ b/src/gallium/state_trackers/dri/dri_extensions.c @@ -33,6 +33,7 @@ #include dri_context.h #include state_tracker/st_context.h +#define need_GL_ARB_map_buffer_range #define need_GL_ARB_multisample #define need_GL_ARB_occlusion_query #define need_GL_ARB_point_parameters @@ -61,6 +62,7 @@ */ const struct dri_extension card_extensions[] = { {GL_ARB_fragment_shader, NULL}, + {GL_ARB_map_buffer_range, GL_ARB_map_buffer_range_functions}, {GL_ARB_multisample, GL_ARB_multisample_functions}, {GL_ARB_multitexture, NULL}, {GL_ARB_occlusion_query, GL_ARB_occlusion_query_functions}, ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): r600: Update vertex fetch shader if necessary
Module: Mesa Branch: master Commit: dadf138ddbaecd7fff239df7961aac25e74f14f6 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=dadf138ddbaecd7fff239df7961aac25e74f14f6 Author: Cooper Yuan coopery...@gmail.com Date: Wed Aug 26 16:21:10 2009 +0800 r600: Update vertex fetch shader if necessary --- src/mesa/drivers/dri/r600/r600_emit.c |3 ++- src/mesa/drivers/dri/r600/r700_vertprog.c | 13 + src/mesa/drivers/dri/r600/r700_vertprog.h |9 - 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/mesa/drivers/dri/r600/r600_emit.c b/src/mesa/drivers/dri/r600/r600_emit.c index be86de1..f8c56e7 100644 --- a/src/mesa/drivers/dri/r600/r600_emit.c +++ b/src/mesa/drivers/dri/r600/r600_emit.c @@ -104,7 +104,8 @@ GLboolean r600DeleteShader(GLcontext * ctx, struct radeon_bo * pbo = (struct radeon_bo *)shaderbo; if (pbo) { - radeon_bo_unmap(pbo); + if (pbo-ptr) + radeon_bo_unmap(pbo); radeon_bo_unref(pbo); /* when bo-cref = 0, bo will be bo_free */ } diff --git a/src/mesa/drivers/dri/r600/r700_vertprog.c b/src/mesa/drivers/dri/r600/r700_vertprog.c index f8f862b..86a67ab 100644 --- a/src/mesa/drivers/dri/r600/r700_vertprog.c +++ b/src/mesa/drivers/dri/r600/r700_vertprog.c @@ -301,6 +301,11 @@ void r700SelectVertexShader(GLcontext *ctx) unsigned int unBit; unsigned int i; +if (context-radeon.NewGLState (_NEW_PROGRAM_CONSTANTS|_NEW_PROGRAM)) +{ + vpc-needUpdateVF = 1; +} + if (context-radeon.radeonScreen-chip_family CHIP_FAMILY_RV770) { vpc-r700AsmCode.bR6xx = 1; @@ -341,6 +346,14 @@ GLboolean r700SetupVertexProgram(GLcontext * ctx) unsigned int unNumParamData; unsigned int ui; +if (vp-needUpdateVF) +{ + vp-loaded = GL_FALSE; + vp-r700Shader.bNeedsAssembly = GL_TRUE; + Process_Vertex_Program_Vfetch_Instructions(vp, (vp-mesa_program)); + r600DeleteShader(ctx, vp-shaderbo); +} + if(GL_FALSE == vp-loaded) { if(vp-r700Shader.bNeedsAssembly == GL_TRUE) diff --git a/src/mesa/drivers/dri/r600/r700_vertprog.h b/src/mesa/drivers/dri/r600/r700_vertprog.h index 4c3b7ee..e2e6502 100644 --- a/src/mesa/drivers/dri/r600/r700_vertprog.h +++ b/src/mesa/drivers/dri/r600/r700_vertprog.h @@ -45,19 +45,18 @@ struct r700_vertex_program { struct gl_vertex_program mesa_program; /* Must be first */ - struct r700_vertex_program *next; +struct r700_vertex_program *next; r700_AssemblerBase r700AsmCode; R700_Shaderr700Shader; - GLboolean translated; +GLboolean translated; GLboolean loaded; +GLboolean needUpdateVF; - /* ... */ - void * shaderbo; - ArrayDesc aos_desc[VERT_ATTRIB_MAX]; +ArrayDesc aos_desc[VERT_ATTRIB_MAX]; }; //Internal ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/xorg: Add support for dirty framebuffer region reporting.
Module: Mesa Branch: master Commit: b2e1b258812167ce8d33f5978f877439e280a1e4 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b2e1b258812167ce8d33f5978f877439e280a1e4 Author: Michel Dänzer daen...@vmware.com Date: Wed Aug 26 13:18:37 2009 +0200 st/xorg: Add support for dirty framebuffer region reporting. Add a BlockHandler which flushes the context and reports the dirty region gathered using the X server damage layer. In the interim, with dirty region reporting only allocate textures for the framebuffer and shared pixmaps (e.g. DRI2 buffers) and fall back to software for other pixmaps. This will be improved in the future. --- src/gallium/state_trackers/xorg/xorg_driver.c | 65 src/gallium/state_trackers/xorg/xorg_exa.c | 14 +- src/gallium/state_trackers/xorg/xorg_tracker.h |8 +++ 3 files changed, 86 insertions(+), 1 deletions(-) diff --git a/src/gallium/state_trackers/xorg/xorg_driver.c b/src/gallium/state_trackers/xorg/xorg_driver.c index 53d1a33..923662b 100644 --- a/src/gallium/state_trackers/xorg/xorg_driver.c +++ b/src/gallium/state_trackers/xorg/xorg_driver.c @@ -54,6 +54,7 @@ #include pciaccess.h +#include pipe/p_context.h #include xorg_tracker.h #include xorg_winsys.h @@ -424,6 +425,44 @@ RestoreHWState(ScrnInfoPtr pScrn) return TRUE; } +static void xorgBlockHandler(int i, pointer blockData, pointer pTimeout, + pointer pReadmask) +{ +ScreenPtr pScreen = screenInfo.screens[i]; +modesettingPtr ms = modesettingPTR(xf86Screens[pScreen-myNum]); + +pScreen-BlockHandler = ms-blockHandler; +pScreen-BlockHandler(i, blockData, pTimeout, pReadmask); +pScreen-BlockHandler = xorgBlockHandler; + +ms-ctx-flush(ms-ctx, PIPE_FLUSH_RENDER_CACHE, NULL); + +#ifdef DRM_MODE_FEATURE_DIRTYFB +{ + RegionPtr dirty = DamageRegion(ms-damage); + unsigned num_cliprects = REGION_NUM_RECTS(dirty); + + if (num_cliprects) { + drmModeClip *clip = alloca(num_cliprects * sizeof(drmModeClip)); + BoxPtr rect = REGION_RECTS(dirty); + int i; + + for (i = 0; i num_cliprects; i++, rect++) { + clip[i].x = rect-x1; + clip[i].y = rect-y1; + clip[i].width = rect-x2 - rect-x1; + clip[i].height = rect-y2 - rect-y1; + } + + /* TODO query connector property to see if this is needed */ + drmModeDirtyFB(ms-fd, ms-fb_id, clip, num_cliprects); + + DamageEmpty(ms-damage); + } +} +#endif +} + static Bool CreateScreenResources(ScreenPtr pScreen) { @@ -460,6 +499,21 @@ CreateScreenResources(ScreenPtr pScreen) AdjustFrame(pScrn-scrnIndex, pScrn-frameX0, pScrn-frameY0, 0); +#ifdef DRM_MODE_FEATURE_DIRTYFB +ms-damage = DamageCreate(NULL, NULL, DamageReportNone, TRUE, + pScreen, rootPixmap); + +if (ms-damage) { + DamageRegister(rootPixmap-drawable, ms-damage); + + xf86DrvMsg(pScrn-scrnIndex, X_INFO, Damage tracking initialized\n); +} else { + xf86DrvMsg(pScrn-scrnIndex, X_ERROR, + Failed to create screen damage record\n); + return FALSE; +} +#endif + return ret; } @@ -536,6 +590,8 @@ ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) fbPictureInit(pScreen, NULL, 0); +ms-blockHandler = pScreen-BlockHandler; +pScreen-BlockHandler = xorgBlockHandler; ms-createScreenResources = pScreen-CreateScreenResources; pScreen-CreateScreenResources = CreateScreenResources; @@ -699,8 +755,17 @@ CloseScreen(int scrnIndex, ScreenPtr pScreen) driCloseScreen(pScreen); #endif +pScreen-BlockHandler = ms-blockHandler; pScreen-CreateScreenResources = ms-createScreenResources; +#ifdef DRM_MODE_FEATURE_DIRTYFB +if (ms-damage) { + DamageUnregister(pScreen-GetScreenPixmap(pScreen)-drawable, ms-damage); + DamageDestroy(ms-damage); + ms-damage = NULL; +} +#endif + if (ms-exa) xorg_exa_close(pScrn); diff --git a/src/gallium/state_trackers/xorg/xorg_exa.c b/src/gallium/state_trackers/xorg/xorg_exa.c index 9f3f82c..3c90c2c 100644 --- a/src/gallium/state_trackers/xorg/xorg_exa.c +++ b/src/gallium/state_trackers/xorg/xorg_exa.c @@ -472,7 +472,11 @@ ExaModifyPixmapHeader(PixmapPtr pPixmap, int width, int height, pipe_texture_reference(priv-tex, NULL); } -if (!priv-tex) { +if (!priv-tex +#ifdef DRM_MODE_FEATURE_DIRTYFB +priv-flags +#endif + ) { struct pipe_texture template; memset(template, 0, sizeof(template)); @@ -488,6 +492,14 @@ ExaModifyPixmapHeader(PixmapPtr pPixmap, int width, int height, priv-tex = exa-scrn-texture_create(exa-scrn, template); } +#ifdef DRM_MODE_FEATURE_DIRTYFB +if (!priv-tex) { + if (pPixData) + pPixmap-devPrivate.ptr = pPixData; + else +
Mesa (master): st/dri: Redo config generation
Module: Mesa Branch: master Commit: aab0bedb8c791531256b9cf4ef165080ccc75e9b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=aab0bedb8c791531256b9cf4ef165080ccc75e9b Author: Jakob Bornecrantz ja...@vmware.com Date: Wed Aug 26 12:26:14 2009 +0200 st/dri: Redo config generation --- src/gallium/state_trackers/dri/dri_drawable.c | 13 ++- src/gallium/state_trackers/dri/dri_screen.c | 126 +++-- 2 files changed, 87 insertions(+), 52 deletions(-) diff --git a/src/gallium/state_trackers/dri/dri_drawable.c b/src/gallium/state_trackers/dri/dri_drawable.c index acec719..62a7e23 100644 --- a/src/gallium/state_trackers/dri/dri_drawable.c +++ b/src/gallium/state_trackers/dri/dri_drawable.c @@ -294,8 +294,14 @@ dri_create_buffer(__DRIscreenPrivate * sPriv, if (drawable == NULL) goto fail; - drawable-color_format = (visual-redBits == 8) ? - PIPE_FORMAT_A8R8G8B8_UNORM : PIPE_FORMAT_R5G6B5_UNORM; + if (visual-redBits == 8) { + if (visual-alphaBits == 8) + drawable-color_format = PIPE_FORMAT_A8R8G8B8_UNORM; + else + drawable-color_format = PIPE_FORMAT_X8R8G8B8_UNORM; + } else { + drawable-color_format = PIPE_FORMAT_R5G6B5_UNORM; + } switch(visual-depthBits) { default: @@ -316,6 +322,9 @@ dri_create_buffer(__DRIscreenPrivate * sPriv, PIPE_FORMAT_Z24S8_UNORM; } break; + case 32: + drawable-depth_format = PIPE_FORMAT_Z32_UNORM; + break; } switch(visual-stencilBits) { diff --git a/src/gallium/state_trackers/dri/dri_screen.c b/src/gallium/state_trackers/dri/dri_screen.c index 212..884b6d5 100644 --- a/src/gallium/state_trackers/dri/dri_screen.c +++ b/src/gallium/state_trackers/dri/dri_screen.c @@ -79,17 +79,17 @@ static const __DRIconfig ** dri_fill_in_modes(struct dri_screen *screen, unsigned pixel_bits) { - __DRIconfig **configs; + __DRIconfig **configs = NULL; unsigned num_modes; - uint8_t depth_bits_array[4]; - uint8_t stencil_bits_array[4]; + uint8_t depth_bits_array[5]; + uint8_t stencil_bits_array[5]; uint8_t msaa_samples_array[1]; unsigned depth_buffer_factor; unsigned back_buffer_factor; unsigned msaa_samples_factor; - GLenum fb_format; - GLenum fb_type; struct pipe_screen *p_screen = screen-pipe_screen; + boolean pf_r5g6b5, pf_a8r8g8b8, pf_x8r8g8b8; + boolean pf_z16, pf_x8z24, pf_z24x8, pf_s8z24, pf_z24s8, pf_z32; static const GLenum back_buffer_modes[] = { GLX_NONE, GLX_SWAP_UNDEFINED_OML, GLX_SWAP_COPY_OML @@ -99,39 +99,51 @@ dri_fill_in_modes(struct dri_screen *screen, stencil_bits_array[0] = 0; depth_buffer_factor = 1; - if (p_screen-is_format_supported(p_screen, PIPE_FORMAT_Z16_UNORM, -PIPE_TEXTURE_2D, -PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0)) { + pf_z16 = p_screen-is_format_supported(p_screen, PIPE_FORMAT_Z16_UNORM, + PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); + pf_z32 = p_screen-is_format_supported(p_screen, PIPE_FORMAT_Z32_UNORM, + PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); + pf_x8z24 = p_screen-is_format_supported(p_screen, PIPE_FORMAT_X8Z24_UNORM, + PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); + pf_z24x8 = p_screen-is_format_supported(p_screen, PIPE_FORMAT_Z24X8_UNORM, + PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); + pf_s8z24 = p_screen-is_format_supported(p_screen, PIPE_FORMAT_S8Z24_UNORM, + PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); + pf_z24s8 = p_screen-is_format_supported(p_screen, PIPE_FORMAT_Z24S8_UNORM, + PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); + pf_r5g6b5 = p_screen-is_format_supported(p_screen, PIPE_FORMAT_R5G6B5_UNORM, +PIPE_TEXTURE_2D, +PIPE_TEXTURE_USAGE_RENDER_TARGET, 0); + pf_a8r8g8b8 = p_screen-is_format_supported(p_screen, PIPE_FORMAT_A8R8G8B8_UNORM, + PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_RENDER_TARGET, 0); + pf_x8r8g8b8 = p_screen-is_format_supported(p_screen, PIPE_FORMAT_X8R8G8B8_UNORM, + PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_RENDER_TARGET, 0); + + if (pf_z16) { depth_bits_array[depth_buffer_factor] = 16;
Mesa (master): st/xorg: Find out correct type for depth stencil buffers
Module: Mesa Branch: master Commit: 23fe960be0d0d27fcd676534c692ab164f854acb URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=23fe960be0d0d27fcd676534c692ab164f854acb Author: Jakob Bornecrantz ja...@vmware.com Date: Wed Aug 26 13:45:31 2009 +0200 st/xorg: Find out correct type for depth stencil buffers --- src/gallium/state_trackers/xorg/xorg_dri2.c| 12 +++- src/gallium/state_trackers/xorg/xorg_tracker.h |2 ++ 2 files changed, 13 insertions(+), 1 deletions(-) diff --git a/src/gallium/state_trackers/xorg/xorg_dri2.c b/src/gallium/state_trackers/xorg/xorg_dri2.c index f089965..e72710b 100644 --- a/src/gallium/state_trackers/xorg/xorg_dri2.c +++ b/src/gallium/state_trackers/xorg/xorg_dri2.c @@ -88,7 +88,8 @@ driCreateBuffers(DrawablePtr pDraw, unsigned int *attachments, int count) struct pipe_texture template; memset(template, 0, sizeof(template)); template.target = PIPE_TEXTURE_2D; - template.format = PIPE_FORMAT_S8Z24_UNORM; + template.format = ms-ds_depth_bits_last ? + PIPE_FORMAT_S8Z24_UNORM : PIPE_FORMAT_Z24S8_UNORM; pf_get_block(template.format, template.block); template.width[0] = pDraw-width; template.height[0] = pDraw-height; @@ -270,6 +271,15 @@ driScreenInit(ScreenPtr pScreen) dri2info.DestroyBuffers = driDestroyBuffers; dri2info.CopyRegion = driCopyRegion; +ms-d_depth_bits_last = +ms-screen-is_format_supported(ms-screen, PIPE_FORMAT_X8Z24_UNORM, +PIPE_TEXTURE_2D, +PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); +ms-ds_depth_bits_last = +ms-screen-is_format_supported(ms-screen, PIPE_FORMAT_S8Z24_UNORM, +PIPE_TEXTURE_2D, +PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); + return DRI2ScreenInit(pScreen, dri2info); } diff --git a/src/gallium/state_trackers/xorg/xorg_tracker.h b/src/gallium/state_trackers/xorg/xorg_tracker.h index da850bb..8c60d50 100644 --- a/src/gallium/state_trackers/xorg/xorg_tracker.h +++ b/src/gallium/state_trackers/xorg/xorg_tracker.h @@ -87,6 +87,8 @@ typedef struct _modesettingRec struct drm_api *api; struct pipe_screen *screen; struct pipe_context *ctx; +boolean d_depth_bits_last; +boolean ds_depth_bits_last; /* exa */ void *exa; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/xorg: Temporary fix for none stencil visuals
Module: Mesa Branch: master Commit: 57230d96ed3dc231c47ed8765f30e0e34e988d31 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=57230d96ed3dc231c47ed8765f30e0e34e988d31 Author: Jakob Bornecrantz ja...@vmware.com Date: Wed Aug 26 14:27:50 2009 +0200 st/xorg: Temporary fix for none stencil visuals Should be replaced with something looking at the proper glx visual for the buffers. --- src/gallium/state_trackers/xorg/xorg_dri2.c | 19 +-- 1 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/gallium/state_trackers/xorg/xorg_dri2.c b/src/gallium/state_trackers/xorg/xorg_dri2.c index e72710b..7d69540 100644 --- a/src/gallium/state_trackers/xorg/xorg_dri2.c +++ b/src/gallium/state_trackers/xorg/xorg_dri2.c @@ -60,6 +60,7 @@ driCreateBuffers(DrawablePtr pDraw, unsigned int *attachments, int count) DRI2BufferPtr buffers; PixmapPtr pPixmap; unsigned stride, handle; +boolean have_depth = FALSE, have_stencil = FALSE; int i; buffers = xcalloc(count, sizeof *buffers); @@ -70,6 +71,16 @@ driCreateBuffers(DrawablePtr pDraw, unsigned int *attachments, int count) if (!privates) goto fail_privates; +for (i = 0; i count; i++) { + if (attachments[i] == DRI2BufferDepth) + have_depth = TRUE; + else if (attachments[i] == DRI2BufferStencil) + have_stencil = TRUE; +} + +if (have_stencil !have_depth) + FatalError(Doesn't support only stencil yet\n); + depth = NULL; for (i = 0; i count; i++) { pPixmap = NULL; @@ -88,8 +99,12 @@ driCreateBuffers(DrawablePtr pDraw, unsigned int *attachments, int count) struct pipe_texture template; memset(template, 0, sizeof(template)); template.target = PIPE_TEXTURE_2D; - template.format = ms-ds_depth_bits_last ? - PIPE_FORMAT_S8Z24_UNORM : PIPE_FORMAT_Z24S8_UNORM; + if (have_stencil) + template.format = ms-ds_depth_bits_last ? + PIPE_FORMAT_S8Z24_UNORM : PIPE_FORMAT_Z24S8_UNORM; + else + template.format = ms-d_depth_bits_last ? + PIPE_FORMAT_X8Z24_UNORM : PIPE_FORMAT_Z24X8_UNORM; pf_get_block(template.format, template.block); template.width[0] = pDraw-width; template.height[0] = pDraw-height; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/dri: Add some debug code
Module: Mesa Branch: master Commit: 53b3cdaee2654895dc90a25376ba29b64d166c54 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=53b3cdaee2654895dc90a25376ba29b64d166c54 Author: Jakob Bornecrantz ja...@vmware.com Date: Wed Aug 26 14:30:54 2009 +0200 st/dri: Add some debug code --- src/gallium/state_trackers/dri/dri_drawable.c |8 ++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/gallium/state_trackers/dri/dri_drawable.c b/src/gallium/state_trackers/dri/dri_drawable.c index 62a7e23..c7ca7f7 100644 --- a/src/gallium/state_trackers/dri/dri_drawable.c +++ b/src/gallium/state_trackers/dri/dri_drawable.c @@ -57,8 +57,10 @@ dri_surface_from_handle(struct drm_api *api, struct pipe_buffer *buf = NULL; buf = api-buffer_from_handle(api, screen, dri2 buffer, handle); - if (!buf) + if (!buf) { + debug_printf(%s: Failed to get buffer from handle\n, __func__); return NULL; + } memset(templat, 0, sizeof(templat)); templat.tex_usage |= PIPE_TEXTURE_USAGE_RENDER_TARGET; @@ -75,8 +77,10 @@ dri_surface_from_handle(struct drm_api *api, /* we don't need the buffer from this point on */ pipe_buffer_reference(buf, NULL); - if (!texture) + if (!texture) { + debug_printf(%s: Failed to blanket the buffer with a texture\n, __func__); return NULL; + } surface = screen-get_tex_surface(screen, texture, 0, 0, 0, PIPE_BUFFER_USAGE_GPU_READ | ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): r600: fix memory leak
Module: Mesa Branch: master Commit: f33853e56d841472f41db9c3c83276c3028a7375 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f33853e56d841472f41db9c3c83276c3028a7375 Author: Alex Deucher alexdeuc...@gmail.com Date: Wed Aug 26 11:09:59 2009 -0400 r600: fix memory leak --- src/mesa/drivers/dri/r600/r700_fragprog.c |3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/src/mesa/drivers/dri/r600/r700_fragprog.c b/src/mesa/drivers/dri/r600/r700_fragprog.c index e4a6d4c..78ce3ae 100644 --- a/src/mesa/drivers/dri/r600/r700_fragprog.c +++ b/src/mesa/drivers/dri/r600/r700_fragprog.c @@ -268,7 +268,8 @@ void r700SelectFragmentShader(GLcontext *ctx) fp-r700AsmCode.bR6xx = 1; } -r700TranslateFragmentShader(fp, (fp-mesa_program)); +if (GL_FALSE == fp-translated) + r700TranslateFragmentShader(fp, (fp-mesa_program)); } void * r700GetActiveFpShaderBo(GLcontext * ctx) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): r600: make reloc_chunk size dynamic
Module: Mesa Branch: master Commit: 490f640cd58d215281076ae6e0e70649db6b0ed5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=490f640cd58d215281076ae6e0e70649db6b0ed5 Author: Alex Deucher alexdeuc...@gmail.com Date: Wed Aug 26 12:17:44 2009 -0400 r600: make reloc_chunk size dynamic --- src/mesa/drivers/dri/r600/r600_cmdbuf.c | 12 +--- src/mesa/drivers/dri/r600/r700_render.c |3 +-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/mesa/drivers/dri/r600/r600_cmdbuf.c b/src/mesa/drivers/dri/r600/r600_cmdbuf.c index 050d7bc..1734b0a 100644 --- a/src/mesa/drivers/dri/r600/r600_cmdbuf.c +++ b/src/mesa/drivers/dri/r600/r600_cmdbuf.c @@ -324,7 +324,7 @@ static int r600_cs_emit(struct radeon_cs *cs) struct drm_radeon_cs_chunk cs_chunk[2]; uint32_t length_dw_reloc_chunk; uint64_t chunk_ptrs[2]; -uint32_t reloc_chunk[256]; +uint32_t *reloc_chunk; int r; int retry = 0; @@ -333,8 +333,11 @@ static int r600_cs_emit(struct radeon_cs *cs) csm-pending_count = 1; -r = r600_cs_process_relocs(cs, (reloc_chunk[0]), length_dw_reloc_chunk); +reloc_chunk = (uint32_t*)calloc(1, cs-crelocs * 4 * 4); + +r = r600_cs_process_relocs(cs, reloc_chunk, length_dw_reloc_chunk); if (r) { + free(reloc_chunk); return 0; } @@ -346,7 +349,7 @@ static int r600_cs_emit(struct radeon_cs *cs) /* reloc chaunk */ cs_chunk[1].chunk_id = RADEON_CHUNK_ID_RELOCS; cs_chunk[1].length_dw = length_dw_reloc_chunk; -cs_chunk[1].chunk_data = (unsigned long)(reloc_chunk[0]); +cs_chunk[1].chunk_data = (unsigned long)reloc_chunk; chunk_ptrs[0] = (uint64_t)(unsigned long)(cs_chunk[0]); chunk_ptrs[1] = (uint64_t)(unsigned long)(cs_chunk[1]); @@ -364,6 +367,7 @@ static int r600_cs_emit(struct radeon_cs *cs) } while (r == -EAGAIN retry 1000); if (r) { + free(reloc_chunk); return r; } @@ -375,6 +379,8 @@ static int r600_cs_emit(struct radeon_cs *cs) cs-csm-vram_write_used = 0; cs-csm-gart_write_used = 0; +free(reloc_chunk); + return 0; } diff --git a/src/mesa/drivers/dri/r600/r700_render.c b/src/mesa/drivers/dri/r600/r700_render.c index d64e921..0b3ceb0 100644 --- a/src/mesa/drivers/dri/r600/r700_render.c +++ b/src/mesa/drivers/dri/r600/r700_render.c @@ -143,8 +143,7 @@ GLboolean r700SyncSurf(context_t *context, R600_OUT_BATCH_RELOC(0, pbo, 0, -read_domain, write_domain, 0); // ??? - +read_domain, write_domain, 0); END_BATCH(); COMMIT_BATCH(); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/xorg: create basic fragment shader
Module: Mesa Branch: master Commit: b324aacf139bc88fa268057158af88f725c50c63 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b324aacf139bc88fa268057158af88f725c50c63 Author: Zack Rusin za...@vmware.com Date: Wed Aug 26 12:14:27 2009 -0400 st/xorg: create basic fragment shader --- src/gallium/state_trackers/xorg/xorg_exa_tgsi.c | 36 ++ 1 files changed, 10 insertions(+), 26 deletions(-) diff --git a/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c b/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c index 710b65e..b428957 100644 --- a/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c +++ b/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c @@ -64,21 +64,9 @@ create_vs(struct pipe_context *ctx, } static void * -create_fs(struct pipe_context *ctx, - unsigned vs_traits) -{ - return NULL; -} - -static struct xorg_shader -xorg_shader_construct(struct exa_context *exa, - int op, - PicturePtr src_picture, - PicturePtr mask_picture, - PicturePtr dst_picture) +create_fs(struct pipe_context *pipe, + unsigned fs_traits) { - struct xorg_shader shader = {0}; -#if 0 struct ureg_program *ureg; struct ureg_src dst_sampler, src_sampler, mask_sampler; struct ureg_src dst_pos, src_pos, mask_pos; @@ -86,10 +74,7 @@ xorg_shader_construct(struct exa_context *exa, ureg = ureg_create(TGSI_PROCESSOR_FRAGMENT); if (ureg == NULL) - return shader; - - if (sid.is_fill) - return shader; + return 0; #if 0 /* unused right now */ dst_sampler = ureg_DECL_sampler(ureg); @@ -105,18 +90,18 @@ xorg_shader_construct(struct exa_context *exa, 1, TGSI_INTERPOLATE_PERSPECTIVE); - if (sid.mask) { + if ((fs_traits FS_MASK)) { mask_sampler = ureg_DECL_sampler(ureg); - src_pos = ureg_DECL_fs_input(ureg, - TGSI_SEMANTIC_POSITION, - 2, - TGSI_INTERPOLATE_PERSPECTIVE); + mask_pos = ureg_DECL_fs_input(ureg, +TGSI_SEMANTIC_POSITION, +2, +TGSI_INTERPOLATE_PERSPECTIVE); } ureg_TEX(ureg, ureg_dst(src), TGSI_TEXTURE_2D, src_pos, src_sampler); - if (sid.mask) { + if ((fs_traits FS_MASK)) { ureg_TEX(ureg, ureg_dst(mask), TGSI_TEXTURE_2D, mask_pos, mask_sampler); /* src IN mask */ @@ -125,8 +110,7 @@ xorg_shader_construct(struct exa_context *exa, ureg_END(ureg); -#endif - return shader; + return ureg_create_shader_and_destroy(ureg, pipe); } struct xorg_shaders * xorg_shaders_create(struct exa_context *exa) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/xorg: create basic vertex shader
Module: Mesa Branch: master Commit: a0966c41a913666f0a6b04bde63162a30b1a1879 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a0966c41a913666f0a6b04bde63162a30b1a1879 Author: Zack Rusin za...@vmware.com Date: Wed Aug 26 12:50:14 2009 -0400 st/xorg: create basic vertex shader --- src/gallium/state_trackers/xorg/xorg_exa_tgsi.c | 40 +++--- src/gallium/state_trackers/xorg/xorg_exa_tgsi.h |5 ++- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c b/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c index b428957..04d8977 100644 --- a/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c +++ b/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c @@ -57,10 +57,33 @@ src_in_mask(struct ureg_program *ureg, } static void * -create_vs(struct pipe_context *ctx, +create_vs(struct pipe_context *pipe, unsigned vs_traits) { - return NULL; + struct ureg_program *ureg; + struct ureg_src src; + struct ureg_dst dst; + + ureg = ureg_create(TGSI_PROCESSOR_VERTEX); + if (ureg == NULL) + return 0; + + if ((vs_traits VS_COMPOSITE)) { + src = ureg_DECL_vs_input(ureg, + TGSI_SEMANTIC_POSITION, 1); + dst = ureg_DECL_output(ureg, TGSI_SEMANTIC_POSITION, 1); + ureg_MOV(ureg, dst, src); + } + if ((vs_traits VS_MASK)) { + src = ureg_DECL_vs_input(ureg, + TGSI_SEMANTIC_POSITION, 2); + dst = ureg_DECL_output(ureg, TGSI_SEMANTIC_POSITION, 2); + ureg_MOV(ureg, dst, src); + } + + ureg_END(ureg); + + return ureg_create_shader_and_destroy(ureg, pipe); } static void * @@ -71,6 +94,7 @@ create_fs(struct pipe_context *pipe, struct ureg_src dst_sampler, src_sampler, mask_sampler; struct ureg_src dst_pos, src_pos, mask_pos; struct ureg_src src, mask; + struct ureg_dst out; ureg = ureg_create(TGSI_PROCESSOR_FRAGMENT); if (ureg == NULL) @@ -90,6 +114,10 @@ create_fs(struct pipe_context *pipe, 1, TGSI_INTERPOLATE_PERSPECTIVE); + out = ureg_DECL_output(ureg, + TGSI_SEMANTIC_COLOR, + 0); + if ((fs_traits FS_MASK)) { mask_sampler = ureg_DECL_sampler(ureg); mask_pos = ureg_DECL_fs_input(ureg, @@ -98,14 +126,14 @@ create_fs(struct pipe_context *pipe, TGSI_INTERPOLATE_PERSPECTIVE); } - ureg_TEX(ureg, ureg_dst(src), -TGSI_TEXTURE_2D, src_pos, src_sampler); - if ((fs_traits FS_MASK)) { ureg_TEX(ureg, ureg_dst(mask), TGSI_TEXTURE_2D, mask_pos, mask_sampler); /* src IN mask */ - src_in_mask(ureg, ureg_dst(src), src, mask); + src_in_mask(ureg, out, src, mask); + } else { + ureg_TEX(ureg, out, + TGSI_TEXTURE_2D, src_pos, src_sampler); } ureg_END(ureg); diff --git a/src/gallium/state_trackers/xorg/xorg_exa_tgsi.h b/src/gallium/state_trackers/xorg/xorg_exa_tgsi.h index f87f035..003e5d8 100644 --- a/src/gallium/state_trackers/xorg/xorg_exa_tgsi.h +++ b/src/gallium/state_trackers/xorg/xorg_exa_tgsi.h @@ -5,8 +5,9 @@ enum xorg_vs_traits { VS_COMPOSITE= 1 0, - VS_FILL = 1 1 - /*VS_TRANSFORM = 1 2*/ + VS_MASK = 1 1, + VS_FILL = 1 2 + /*VS_TRANSFORM = 1 3*/ }; enum xorg_fs_traits { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): r600: add missing radeon_cs_space_set_flush call
Module: Mesa Branch: master Commit: f988c750a9d3baa2c71f9fd1c0493daef93afc86 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f988c750a9d3baa2c71f9fd1c0493daef93afc86 Author: Alex Deucher alexdeuc...@gmail.com Date: Wed Aug 26 13:08:49 2009 -0400 r600: add missing radeon_cs_space_set_flush call fixes crash in etracer reported by kdekorte on IRC --- src/mesa/drivers/dri/r600/r600_cmdbuf.c |3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/src/mesa/drivers/dri/r600/r600_cmdbuf.c b/src/mesa/drivers/dri/r600/r600_cmdbuf.c index 1734b0a..65930ff 100644 --- a/src/mesa/drivers/dri/r600/r600_cmdbuf.c +++ b/src/mesa/drivers/dri/r600/r600_cmdbuf.c @@ -487,6 +487,9 @@ void r600InitCmdBuf(context_t *r600) /* from rcommonInitCmdBuf */ assert(rmesa-cmdbuf.cs != NULL); rmesa-cmdbuf.size = size; + radeon_cs_space_set_flush(rmesa-cmdbuf.cs, + (void (*)(void *))rmesa-glCtx-Driver.Flush, rmesa-glCtx); + if (!rmesa-radeonScreen-kernel_mm) { radeon_cs_set_limit(rmesa-cmdbuf.cs, RADEON_GEM_DOMAIN_VRAM, rmesa-radeonScreen-texSize[0]); radeon_cs_set_limit(rmesa-cmdbuf.cs, RADEON_GEM_DOMAIN_GTT, rmesa-radeonScreen-gartTextures.size); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (mesa_7_5_branch): glsl: fix bug in sampler array indexing
Module: Mesa Branch: mesa_7_5_branch Commit: 04d170794a22d93d58afeb5d0930e06f85964f9a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=04d170794a22d93d58afeb5d0930e06f85964f9a Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 11:39:24 2009 -0600 glsl: fix bug in sampler array indexing Need to add the 'offset' parameter when indexing the parameter array. Before, if we were setting arrays of samplers, we were actually only setting the 0th sampler's value. Because of how progs/glsl/samplers.c is constructed, this wasn't showing up as a failure in the samplers_array output. --- src/mesa/shader/shader_api.c | 10 +++--- 1 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c index 14da974..95b7490 100644 --- a/src/mesa/shader/shader_api.c +++ b/src/mesa/shader/shader_api.c @@ -1624,7 +1624,6 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program, if (param-Type == PROGRAM_SAMPLER) { /* This controls which texture unit which is used by a sampler */ - GLuint texUnit, sampler; GLint i; /* data type for setting samplers must be int */ @@ -1639,8 +1638,9 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program, * common thing... */ for (i = 0; i count; i++) { - sampler = (GLuint) program-Parameters-ParameterValues[index + i][0]; - texUnit = ((GLuint *) values)[i]; + GLuint sampler = +(GLuint) program-Parameters-ParameterValues[index + offset + i][0]; + GLuint texUnit = ((GLuint *) values)[i]; /* check that the sampler (tex unit index) is legal */ if (texUnit = ctx-Const.MaxTextureImageUnits) { @@ -1651,6 +1651,10 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program, /* This maps a sampler to a texture unit: */ if (sampler MAX_SAMPLERS) { +#if 0 +_mesa_printf(Set program %p sampler %d '%s' to unit %u\n, + program, sampler, param-Name, texUnit); +#endif program-SamplerUnits[sampler] = texUnit; } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (mesa_7_5_branch): progs/glsl: change samplers. c to better test sampler/texture indexing
Module: Mesa Branch: mesa_7_5_branch Commit: f6d34c20585ae9b4fb07ec2f2850f04dc9a9bc29 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f6d34c20585ae9b4fb07ec2f2850f04dc9a9bc29 Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 11:53:25 2009 -0600 progs/glsl: change samplers.c to better test sampler/texture indexing Now the left half is yellow and the right half is red, with the gradients going in opposite directions. --- progs/glsl/samplers.c | 16 1 files changed, 12 insertions(+), 4 deletions(-) diff --git a/progs/glsl/samplers.c b/progs/glsl/samplers.c index 113e5bb..87dad5d 100644 --- a/progs/glsl/samplers.c +++ b/progs/glsl/samplers.c @@ -211,10 +211,18 @@ InitTextures(void) for (y = 0; y stripeSize; y++) { for (x = 0; x size; x++) { GLint k = 4 * ((ypos + y) * size + x); -texImage[k + 0] = intensity; -texImage[k + 1] = intensity; -texImage[k + 2] = 0; -texImage[k + 3] = 255; +if (x size / 2) { + texImage[k + 0] = intensity; + texImage[k + 1] = intensity; + texImage[k + 2] = 0; + texImage[k + 3] = 255; +} +else { + texImage[k + 0] = 255 - intensity; + texImage[k + 1] = 0; + texImage[k + 2] = 0; + texImage[k + 3] = 255; +} } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (mesa_7_5_branch): progs/glsl: add special Makefile rule for samplers_array
Module: Mesa Branch: mesa_7_5_branch Commit: 488b3c4d1bc3d830477180759a42dbaf8f5801b0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=488b3c4d1bc3d830477180759a42dbaf8f5801b0 Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 11:55:15 2009 -0600 progs/glsl: add special Makefile rule for samplers_array --- progs/glsl/Makefile |4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/progs/glsl/Makefile b/progs/glsl/Makefile index eedd866..6af7a66 100644 --- a/progs/glsl/Makefile +++ b/progs/glsl/Makefile @@ -32,6 +32,7 @@ DEMO_SOURCES = \ pointcoord.c \ points.c \ samplers.c \ + samplers_array.c \ shadow_sampler.c \ skinning.c \ texaaline.c \ @@ -188,7 +189,8 @@ samplers.o: $(UTIL_HEADERS) samplers: samplers.o $(UTIL_OBJS) -samplers_array.o: $(UTIL_HEADERS) +samplers_array.o: samplers.c $(UTIL_HEADERS) + $(APP_CC) $(CFLAGS) -DSAMPLERS_ARRAY $ -c -o $@ samplers_array: samplers_array.o $(UTIL_OBJS) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): tgsi: check for SOA dependencies in SSE and PPC code generators
Module: Mesa Branch: master Commit: ce723d8d8b011f2efaea6588c42b6d11ee2e7115 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ce723d8d8b011f2efaea6588c42b6d11ee2e7115 Author: Brian Paul bri...@vmware.com Date: Thu Aug 20 10:34:45 2009 -0600 tgsi: check for SOA dependencies in SSE and PPC code generators Fall back to interpreter for now. This doesn't happen very often. --- src/gallium/auxiliary/tgsi/tgsi_ppc.c |4 src/gallium/auxiliary/tgsi/tgsi_sse2.c |4 2 files changed, 8 insertions(+), 0 deletions(-) diff --git a/src/gallium/auxiliary/tgsi/tgsi_ppc.c b/src/gallium/auxiliary/tgsi/tgsi_ppc.c index 2f8b0c4..8466d9b 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_ppc.c +++ b/src/gallium/auxiliary/tgsi/tgsi_ppc.c @@ -1112,6 +1112,10 @@ emit_instruction(struct gen_context *gen, if (inst-Instruction.Saturate != TGSI_SAT_NONE) return 0; + /* need to use extra temps to fix SOA dependencies : */ + if (tgsi_check_soa_dependencies(inst)) + return FALSE; + switch (inst-Instruction.Opcode) { case TGSI_OPCODE_MOV: case TGSI_OPCODE_SWZ: diff --git a/src/gallium/auxiliary/tgsi/tgsi_sse2.c b/src/gallium/auxiliary/tgsi/tgsi_sse2.c index 571f98a..a13368c 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_sse2.c +++ b/src/gallium/auxiliary/tgsi/tgsi_sse2.c @@ -1506,6 +1506,10 @@ emit_instruction( if (inst-Instruction.Saturate != TGSI_SAT_NONE) return FALSE; + /* need to use extra temps to fix SOA dependencies : */ + if (tgsi_check_soa_dependencies(inst)) + return FALSE; + switch (inst-Instruction.Opcode) { case TGSI_OPCODE_ARL: FOR_EACH_DST0_ENABLED_CHANNEL( *inst, chan_index ) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): tgsi: handle SOA dependencies for MOV/SWZ
Module: Mesa Branch: master Commit: 4c7c2942a66f4585faa41ea9810527ea1e92 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4c7c2942a66f4585faa41ea9810527ea1e92 Author: Brian Paul bri...@vmware.com Date: Thu Aug 20 10:28:22 2009 -0600 tgsi: handle SOA dependencies for MOV/SWZ SOA dependencies can happen when a register is used both as a source and destination and the source is swizzled. For example: MOV T, T.yxwz; would expand into: MOV t0, t1; MOV t1, t0; MOV t2, t3; MOV t3, t2; The second instruction will produce the wrong result since we wrote to t0 in the first instruction. We need to use an intermediate temporary to fix this. This will take more work to fix for all TGSI instructions. This seems to happen with MOV instructions more than anything else so fix that case now and warn on others. Fixes piglit glsl-vs-loop test (when not using SSE). See bug 23317. --- src/gallium/auxiliary/tgsi/tgsi_exec.c | 50 +++- src/gallium/auxiliary/tgsi/tgsi_exec.h |4 ++ 2 files changed, 40 insertions(+), 14 deletions(-) diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c index 5cb322a..259894e 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_exec.c +++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c @@ -62,6 +62,9 @@ #define FAST_MATH 1 +/** for tgsi_full_instruction::Flags */ +#define SOA_DEPENDENCY_FLAG 0x1 + #define TILE_TOP_LEFT 0 #define TILE_TOP_RIGHT1 #define TILE_BOTTOM_LEFT 2 @@ -182,7 +185,7 @@ print_temp(const struct tgsi_exec_machine *mach, uint index) * MOV t3, t2; * The second instruction will have the wrong value for t0 if executed as-is. */ -static boolean +boolean tgsi_check_soa_dependencies(const struct tgsi_full_instruction *inst) { uint i, chan; @@ -328,19 +331,24 @@ tgsi_exec_machine_bind_shader( * sizeof(struct tgsi_full_instruction)); maxInstructions += 10; } - memcpy(instructions + numInstructions, -parse.FullToken.FullInstruction, -sizeof(instructions[0])); -#if 0 if (tgsi_check_soa_dependencies(parse.FullToken.FullInstruction)) { -debug_printf(SOA dependency in instruction:\n); -tgsi_dump_instruction(parse.FullToken.FullInstruction, - numInstructions); +uint opcode = parse.FullToken.FullInstruction.Instruction.Opcode; +parse.FullToken.FullInstruction.Flags = SOA_DEPENDENCY_FLAG; +/* XXX we only handle SOA dependencies properly for MOV/SWZ + * at this time! + */ +if (opcode != TGSI_OPCODE_MOV opcode != TGSI_OPCODE_SWZ) { + debug_printf(Warning: SOA dependency in instruction + is not handled:\n); + tgsi_dump_instruction(parse.FullToken.FullInstruction, + numInstructions); +} } -#else - (void) tgsi_check_soa_dependencies; -#endif + + memcpy(instructions + numInstructions, +parse.FullToken.FullInstruction, +sizeof(instructions[0])); numInstructions++; break; @@ -2018,9 +2026,23 @@ exec_instruction( case TGSI_OPCODE_MOV: case TGSI_OPCODE_SWZ: - FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) { - FETCH( r[0], 0, chan_index ); - STORE( r[0], 0, chan_index ); + if (inst-Flags SOA_DEPENDENCY_FLAG) { + /* Do all fetches into temp regs, then do all stores to avoid + * intermediate/accidental clobbering. This could be done all the + * time for MOV but for other instructions we'll need more temps... + */ + FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) { +FETCH( r[chan_index], 0, chan_index ); + } + FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) { +STORE( r[chan_index], 0, chan_index ); + } + } + else { + FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) { +FETCH( r[0], 0, chan_index ); +STORE( r[0], 0, chan_index ); + } } break; diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.h b/src/gallium/auxiliary/tgsi/tgsi_exec.h index da22baa..182e5e2 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_exec.h +++ b/src/gallium/auxiliary/tgsi/tgsi_exec.h @@ -272,6 +272,10 @@ void tgsi_exec_machine_free_data(struct tgsi_exec_machine *mach); +boolean +tgsi_check_soa_dependencies(const struct tgsi_full_instruction *inst); + + static INLINE void tgsi_set_kill_mask(struct tgsi_exec_machine *mach, unsigned mask) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): glsl: Silence gcc uninitialized variable warning.
Module: Mesa Branch: master Commit: f785b35b47926e052571386227eff58db7c084e2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f785b35b47926e052571386227eff58db7c084e2 Author: Vinson Lee v...@vmware.com Date: Mon Aug 24 11:43:02 2009 -0600 glsl: Silence gcc uninitialized variable warning. --- src/mesa/shader/slang/slang_builtin.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/mesa/shader/slang/slang_builtin.c b/src/mesa/shader/slang/slang_builtin.c index 289d946..4e67241 100644 --- a/src/mesa/shader/slang/slang_builtin.c +++ b/src/mesa/shader/slang/slang_builtin.c @@ -436,7 +436,7 @@ emit_statevars(const char *name, int array_len, struct gl_program_parameter_list *paramList) { if (type-type == SLANG_SPEC_ARRAY) { - GLint i, pos; + GLint i, pos = -1; assert(array_len 0); if (strcmp(name, gl_ClipPlane) == 0) { tokens[0] = STATE_CLIPPLANE; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/mesa: flush bitmap cache if Z value changes
Module: Mesa Branch: master Commit: 1aba1baa622116759bfedca87f37e527c0111d16 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1aba1baa622116759bfedca87f37e527c0111d16 Author: Brian Paul bri...@vmware.com Date: Fri Aug 21 10:24:50 2009 -0600 st/mesa: flush bitmap cache if Z value changes When adding a new bitmap to the cache we have to check if the Z value is changing and flush first if it is. This is a modified version of a patch from Justin Dou justin@intel.com --- src/mesa/state_tracker/st_cb_bitmap.c | 16 +++- 1 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c index 8709633..ccf972f 100644 --- a/src/mesa/state_tracker/st_cb_bitmap.c +++ b/src/mesa/state_tracker/st_cb_bitmap.c @@ -94,6 +94,9 @@ struct bitmap_cache GLfloat color[4]; + /** Bitmap's Z position */ + GLfloat zpos; + struct pipe_texture *texture; struct pipe_transfer *trans; @@ -104,6 +107,8 @@ struct bitmap_cache }; +/** Epsilon for Z comparisons */ +#define Z_EPSILON 1e-06 /** @@ -538,9 +543,7 @@ draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z, } /* draw textured quad */ - offset = setup_bitmap_vertex_data(st, x, y, width, height, - ctx-Current.RasterPos[2], - color); + offset = setup_bitmap_vertex_data(st, x, y, width, height, z, color); util_draw_vertex_buffer(pipe, st-bitmap.vbuf, offset, PIPE_PRIM_TRIANGLE_FAN, @@ -647,7 +650,7 @@ st_flush_bitmap_cache(struct st_context *st) draw_bitmap_quad(st-ctx, cache-xpos, cache-ypos, - st-ctx-Current.RasterPos[2], + cache-zpos, BITMAP_CACHE_WIDTH, BITMAP_CACHE_HEIGHT, cache-texture, cache-color); @@ -687,6 +690,7 @@ accum_bitmap(struct st_context *st, { struct bitmap_cache *cache = st-bitmap.cache; int px = -999, py; + const GLfloat z = st-ctx-Current.RasterPos[2]; if (width BITMAP_CACHE_WIDTH || height BITMAP_CACHE_HEIGHT) @@ -697,7 +701,8 @@ accum_bitmap(struct st_context *st, py = y - cache-ypos; if (px 0 || px + width BITMAP_CACHE_WIDTH || py 0 || py + height BITMAP_CACHE_HEIGHT || - !TEST_EQ_4V(st-ctx-Current.RasterColor, cache-color)) { + !TEST_EQ_4V(st-ctx-Current.RasterColor, cache-color) || + ((fabs(z - cache-zpos) Z_EPSILON))) { /* This bitmap would extend beyond cache bounds, or the bitmap * color is changing * so flush and continue. @@ -712,6 +717,7 @@ accum_bitmap(struct st_context *st, py = (BITMAP_CACHE_HEIGHT - height) / 2; cache-xpos = x; cache-ypos = y - py; + cache-zpos = z; cache-empty = GL_FALSE; COPY_4FV(cache-color, st-ctx-Current.RasterColor); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): vbo: fix divide by zero exception
Module: Mesa Branch: master Commit: b9b04872d526ed7955f647542399e110ace0325c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b9b04872d526ed7955f647542399e110ace0325c Author: Brian Paul bri...@vmware.com Date: Mon Aug 24 12:43:57 2009 -0600 vbo: fix divide by zero exception Fixes bug 23489. --- src/mesa/vbo/vbo_exec_draw.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/mesa/vbo/vbo_exec_draw.c b/src/mesa/vbo/vbo_exec_draw.c index c53a4ee..98177a4 100644 --- a/src/mesa/vbo/vbo_exec_draw.c +++ b/src/mesa/vbo/vbo_exec_draw.c @@ -383,7 +383,7 @@ void vbo_exec_vtx_flush( struct vbo_exec_context *exec, } - if (unmap) + if (unmap || exec-vtx.vertex_size == 0) exec-vtx.max_vert = 0; else exec-vtx.max_vert = ((VBO_VERT_BUFFER_SIZE - exec-vtx.buffer_used) / ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): xlib: fix single buffer window resize bug
Module: Mesa Branch: master Commit: b5ecbbe636dd0d2094921c5401e4268694c405ce URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b5ecbbe636dd0d2094921c5401e4268694c405ce Author: Brian Paul bri...@vmware.com Date: Mon Aug 24 12:58:47 2009 -0600 xlib: fix single buffer window resize bug When a single-buffered window was resized the new window size was never detected. This fix that, but there's still a bug which causes window contents corruption for certain window sizes... --- src/gallium/winsys/xlib/xlib_softpipe.c |1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/src/gallium/winsys/xlib/xlib_softpipe.c b/src/gallium/winsys/xlib/xlib_softpipe.c index 44b8464..2a08b82 100644 --- a/src/gallium/winsys/xlib/xlib_softpipe.c +++ b/src/gallium/winsys/xlib/xlib_softpipe.c @@ -303,6 +303,7 @@ xm_flush_frontbuffer(struct pipe_winsys *pws, */ XMesaContext xmctx = (XMesaContext) context_private; xlib_softpipe_display_surface(xmctx-xm_buffer, surf); + xmesa_check_and_update_buffer_size(xmctx, xmctx-xm_buffer); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): docs: recent 7.5.1 bug fixes
Module: Mesa Branch: master Commit: 96f7b422426f8f13f4cedbe280e5dede6b358f2a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=96f7b422426f8f13f4cedbe280e5dede6b358f2a Author: Brian Paul bri...@vmware.com Date: Mon Aug 24 13:02:33 2009 -0600 docs: recent 7.5.1 bug fixes --- docs/relnotes-7.5.1.html |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/docs/relnotes-7.5.1.html b/docs/relnotes-7.5.1.html index 1da086d..77f2dd2 100644 --- a/docs/relnotes-7.5.1.html +++ b/docs/relnotes-7.5.1.html @@ -50,6 +50,8 @@ tbd liFixed minor GLX memory leaks. liFixed some texture env / fragment program state bugs. liFixed some Gallium glBlitFramebuffer() bugs +liEmpty glBegin/glEnd() pair could cause divide by zero (bug 23489) +liFixed Gallium glBitmap() Z position bug /ul ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): progs/glsl: change samplers.c to better test sampler/ texture indexing
Module: Mesa Branch: master Commit: f6d34c20585ae9b4fb07ec2f2850f04dc9a9bc29 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f6d34c20585ae9b4fb07ec2f2850f04dc9a9bc29 Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 11:53:25 2009 -0600 progs/glsl: change samplers.c to better test sampler/texture indexing Now the left half is yellow and the right half is red, with the gradients going in opposite directions. --- progs/glsl/samplers.c | 16 1 files changed, 12 insertions(+), 4 deletions(-) diff --git a/progs/glsl/samplers.c b/progs/glsl/samplers.c index 113e5bb..87dad5d 100644 --- a/progs/glsl/samplers.c +++ b/progs/glsl/samplers.c @@ -211,10 +211,18 @@ InitTextures(void) for (y = 0; y stripeSize; y++) { for (x = 0; x size; x++) { GLint k = 4 * ((ypos + y) * size + x); -texImage[k + 0] = intensity; -texImage[k + 1] = intensity; -texImage[k + 2] = 0; -texImage[k + 3] = 255; +if (x size / 2) { + texImage[k + 0] = intensity; + texImage[k + 1] = intensity; + texImage[k + 2] = 0; + texImage[k + 3] = 255; +} +else { + texImage[k + 0] = 255 - intensity; + texImage[k + 1] = 0; + texImage[k + 2] = 0; + texImage[k + 3] = 255; +} } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): glsl: fix bug in sampler array indexing
Module: Mesa Branch: master Commit: 04d170794a22d93d58afeb5d0930e06f85964f9a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=04d170794a22d93d58afeb5d0930e06f85964f9a Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 11:39:24 2009 -0600 glsl: fix bug in sampler array indexing Need to add the 'offset' parameter when indexing the parameter array. Before, if we were setting arrays of samplers, we were actually only setting the 0th sampler's value. Because of how progs/glsl/samplers.c is constructed, this wasn't showing up as a failure in the samplers_array output. --- src/mesa/shader/shader_api.c | 10 +++--- 1 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c index 14da974..95b7490 100644 --- a/src/mesa/shader/shader_api.c +++ b/src/mesa/shader/shader_api.c @@ -1624,7 +1624,6 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program, if (param-Type == PROGRAM_SAMPLER) { /* This controls which texture unit which is used by a sampler */ - GLuint texUnit, sampler; GLint i; /* data type for setting samplers must be int */ @@ -1639,8 +1638,9 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program, * common thing... */ for (i = 0; i count; i++) { - sampler = (GLuint) program-Parameters-ParameterValues[index + i][0]; - texUnit = ((GLuint *) values)[i]; + GLuint sampler = +(GLuint) program-Parameters-ParameterValues[index + offset + i][0]; + GLuint texUnit = ((GLuint *) values)[i]; /* check that the sampler (tex unit index) is legal */ if (texUnit = ctx-Const.MaxTextureImageUnits) { @@ -1651,6 +1651,10 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program, /* This maps a sampler to a texture unit: */ if (sampler MAX_SAMPLERS) { +#if 0 +_mesa_printf(Set program %p sampler %d '%s' to unit %u\n, + program, sampler, param-Name, texUnit); +#endif program-SamplerUnits[sampler] = texUnit; } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): progs/glsl: add special Makefile rule for samplers_array
Module: Mesa Branch: master Commit: 488b3c4d1bc3d830477180759a42dbaf8f5801b0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=488b3c4d1bc3d830477180759a42dbaf8f5801b0 Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 11:55:15 2009 -0600 progs/glsl: add special Makefile rule for samplers_array --- progs/glsl/Makefile |4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/progs/glsl/Makefile b/progs/glsl/Makefile index eedd866..6af7a66 100644 --- a/progs/glsl/Makefile +++ b/progs/glsl/Makefile @@ -32,6 +32,7 @@ DEMO_SOURCES = \ pointcoord.c \ points.c \ samplers.c \ + samplers_array.c \ shadow_sampler.c \ skinning.c \ texaaline.c \ @@ -188,7 +189,8 @@ samplers.o: $(UTIL_HEADERS) samplers: samplers.o $(UTIL_OBJS) -samplers_array.o: $(UTIL_HEADERS) +samplers_array.o: samplers.c $(UTIL_HEADERS) + $(APP_CC) $(CFLAGS) -DSAMPLERS_ARRAY $ -c -o $@ samplers_array: samplers_array.o $(UTIL_OBJS) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): ARB prog: Set error instead of falling through with incorrect value
Module: Mesa Branch: master Commit: bf7e4b10cbed496a12c8be17531c9cb7da1be177 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=bf7e4b10cbed496a12c8be17531c9cb7da1be177 Author: Brian Paul bri...@vmware.com Date: Mon Aug 24 13:56:01 2009 -0600 ARB prog: Set error instead of falling through with incorrect value If a fragment program only parameter was queried of a vertex program (e.g., GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB) no error would be set and a random value would be returned. This caused 'glxinfo -l' to show the same values for GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB, GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB, GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB, GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB as for GL_MAX_PROGRAM_ENV_PARAMETERS_ARB. This is confusing and incorrect. (cherry picked from master, commit 4bccd693a72a0b42dffc849034263a68e779ca91) --- src/mesa/shader/arbprogram.c |3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/src/mesa/shader/arbprogram.c b/src/mesa/shader/arbprogram.c index 981565a..a033105 100644 --- a/src/mesa/shader/arbprogram.c +++ b/src/mesa/shader/arbprogram.c @@ -985,6 +985,9 @@ _mesa_GetProgramivARB(GLenum target, GLenum pname, GLint *params) _mesa_error(ctx, GL_INVALID_ENUM, glGetProgramivARB(pname)); return; } + } else { + _mesa_error(ctx, GL_INVALID_ENUM, glGetProgramivARB(pname)); + return; } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): Merge branch 'mesa_7_5_branch'
Module: Mesa Branch: master Commit: 476290946e7bd3b7fe5688622127d8c6a9c7f367 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=476290946e7bd3b7fe5688622127d8c6a9c7f367 Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 12:01:23 2009 -0600 Merge branch 'mesa_7_5_branch' --- ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: additional instruction field size assertions
Module: Mesa Branch: master Commit: dd528f0ec18cfbd6f0a5b23b8cb46a97b96ab965 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=dd528f0ec18cfbd6f0a5b23b8cb46a97b96ab965 Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 10:57:18 2009 -0600 mesa: additional instruction field size assertions --- src/mesa/shader/program.c |6 ++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/src/mesa/shader/program.c b/src/mesa/shader/program.c index 4623ff6..963478f 100644 --- a/src/mesa/shader/program.c +++ b/src/mesa/shader/program.c @@ -62,6 +62,12 @@ _mesa_init_program(GLcontext *ctx) ASSERT(ctx-Const.FragmentProgram.MaxUniformComponents / 4 = (1 INST_INDEX_BITS)); + /* If this fails, increase prog_instruction::TexSrcUnit size */ + ASSERT(MAX_TEXTURE_UNITS (1 5)); + + /* If this fails, increase prog_instruction::TexSrcTarget size */ + ASSERT(NUM_TEXTURE_TARGETS (1 3)); + ctx-Program.ErrorPos = -1; ctx-Program.ErrorString = _mesa_strdup(); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: var renaming, new assertion
Module: Mesa Branch: master Commit: f05344fcea329c6dee04356a71323f0b7ac71566 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f05344fcea329c6dee04356a71323f0b7ac71566 Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 10:58:06 2009 -0600 mesa: var renaming, new assertion --- src/mesa/shader/shader_api.c |9 + 1 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c index b52be12..1b604f0 100644 --- a/src/mesa/shader/shader_api.c +++ b/src/mesa/shader/shader_api.c @@ -1553,10 +1553,11 @@ _mesa_update_shader_textures_used(struct gl_program *prog) for (s = 0; s MAX_SAMPLERS; s++) { if (prog-SamplersUsed (1 s)) { - GLuint u = prog-SamplerUnits[s]; - GLuint t = prog-SamplerTargets[s]; - assert(u MAX_TEXTURE_IMAGE_UNITS); - prog-TexturesUsed[u] |= (1 t); + GLuint unit = prog-SamplerUnits[s]; + GLuint tgt = prog-SamplerTargets[s]; + assert(unit MAX_TEXTURE_IMAGE_UNITS); + assert(tgt NUM_TEXTURE_TARGETS); + prog-TexturesUsed[unit] |= (1 tgt); } } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): i965: clean up texture target switches
Module: Mesa Branch: master Commit: f8b344114f4475ba267cbba320ab1c1d755d30a6 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f8b344114f4475ba267cbba320ab1c1d755d30a6 Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 11:05:04 2009 -0600 i965: clean up texture target switches --- src/mesa/drivers/dri/i965/brw_wm_emit.c | 12 ++-- 1 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_wm_emit.c b/src/mesa/drivers/dri/i965/brw_wm_emit.c index 5f29ca1..268f796 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_emit.c +++ b/src/mesa/drivers/dri/i965/brw_wm_emit.c @@ -735,10 +735,14 @@ static void emit_tex( struct brw_wm_compile *c, emit = WRITEMASK_XY; nr = 2; break; - default: + case TEXTURE_3D_INDEX: + case TEXTURE_CUBE_INDEX: emit = WRITEMASK_XYZ; nr = 3; break; + default: + /* unexpected target */ + abort(); } if (inst-tex_shadow) { @@ -810,11 +814,15 @@ static void emit_txb( struct brw_wm_compile *c, brw_MOV(p, brw_message_reg(4), arg[1]); brw_MOV(p, brw_message_reg(6), brw_imm_f(0)); break; - default: + case TEXTURE_3D_INDEX: + case TEXTURE_CUBE_INDEX: brw_MOV(p, brw_message_reg(2), arg[0]); brw_MOV(p, brw_message_reg(4), arg[1]); brw_MOV(p, brw_message_reg(6), arg[2]); break; + default: + /* unexpected target */ + abort(); } brw_MOV(p, brw_message_reg(8), arg[3]); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): i965: added texture unit sanity check
Module: Mesa Branch: master Commit: af7315e58b8bfe230f7b4c5a8d5b669d67aab9f0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=af7315e58b8bfe230f7b4c5a8d5b669d67aab9f0 Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 12:07:52 2009 -0600 i965: added texture unit sanity check Check that all the textures needed by the current fragment program actually exist and are valid. --- src/mesa/drivers/dri/i965/brw_state_upload.c | 13 + 1 files changed, 13 insertions(+), 0 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c index 95d42d2..414620d 100644 --- a/src/mesa/drivers/dri/i965/brw_state_upload.c +++ b/src/mesa/drivers/dri/i965/brw_state_upload.c @@ -322,6 +322,19 @@ void brw_validate_state( struct brw_context *brw ) } } } + + /* Make sure that the textures which are referenced by the current +* brw fragment program are actually present/valid. +* If this fails, we can experience GPU lock-ups. +*/ + { + const struct brw_fragment_program *fp; + fp = brw_fragment_program_const(brw-fragment_program); + if (fp) { + assert((fp-tex_units_used ctx-Texture._EnabledUnits) +== fp-tex_units_used); + } + } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): i965: keep track of which texture units the fragment shader accesses
Module: Mesa Branch: master Commit: 34da6024e3097684110cd1fd4da0f25adc415cd6 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=34da6024e3097684110cd1fd4da0f25adc415cd6 Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 12:07:03 2009 -0600 i965: keep track of which texture units the fragment shader accesses We'll use this for debug/sanity checking. --- src/mesa/drivers/dri/i965/brw_context.h |3 +++ src/mesa/drivers/dri/i965/brw_wm_fp.c | 18 +++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index 847c44e..26a64d6 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -174,6 +174,9 @@ struct brw_fragment_program { dri_bo *const_buffer;/** Program constant buffer/surface */ GLboolean use_const_buffer; + + /** for debugging, which texture units are referenced */ + GLbitfield tex_units_used; }; diff --git a/src/mesa/drivers/dri/i965/brw_wm_fp.c b/src/mesa/drivers/dri/i965/brw_wm_fp.c index 4ee2e97..c512126 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_fp.c +++ b/src/mesa/drivers/dri/i965/brw_wm_fp.c @@ -42,6 +42,12 @@ #include shader/prog_statevars.h +/** An invalid texture target */ +#define TEX_TARGET_NONE NUM_TEXTURE_TARGETS + +/** An invalid texture unit */ +#define TEX_UNIT_NONE BRW_MAX_TEX_UNIT + #define FIRST_INTERNAL_TEMP MAX_NV_FRAGMENT_PROGRAM_TEMPS #define X0 @@ -199,8 +205,14 @@ static struct prog_instruction * emit_tex_op(struct brw_wm_compile *c, { struct prog_instruction *inst = get_fp_inst(c); - assert(tex_src_unit BRW_MAX_TEX_UNIT); - assert(tex_src_target NUM_TEXTURE_TARGETS); + assert(tex_src_unit BRW_MAX_TEX_UNIT || + tex_src_unit == TEX_UNIT_NONE); + assert(tex_src_target NUM_TEXTURE_TARGETS || + tex_src_target == TEX_TARGET_NONE); + + /* update mask of which texture units are referenced by this program */ + if (tex_src_unit != TEX_UNIT_NONE) + c-fp-tex_units_used |= (1 tex_src_unit); memset(inst, 0, sizeof(*inst)); @@ -226,7 +238,7 @@ static struct prog_instruction * emit_op(struct brw_wm_compile *c, struct prog_src_register src2 ) { return emit_tex_op(c, op, dest, saturate, - 0, 0, 0, /* tex unit, target, shadow */ + TEX_UNIT_NONE, TEX_TARGET_NONE, 0, /* unit, tgt, shadow */ src0, src1, src2); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): progs/glsl: asst. changes in shtest.c
Module: Mesa Branch: master Commit: 72052210516b4cb0e082e0c56822cd33b1562630 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=72052210516b4cb0e082e0c56822cd33b1562630 Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 12:16:07 2009 -0600 progs/glsl: asst. changes in shtest.c --- progs/glsl/shtest.c | 19 --- 1 files changed, 16 insertions(+), 3 deletions(-) diff --git a/progs/glsl/shtest.c b/progs/glsl/shtest.c index fa477d9..628a7dd 100644 --- a/progs/glsl/shtest.c +++ b/progs/glsl/shtest.c @@ -107,10 +107,18 @@ RandomUniformValues(void) { GLuint i; for (i = 0; i NumUniforms; i++) { - if (Uniforms[i].type == GL_FLOAT) { + switch (Uniforms[i].type) { + case GL_FLOAT: Uniforms[i].value[0] = RandomFloat(0.0, 1.0); - } - else { + break; + case GL_SAMPLER_1D: + case GL_SAMPLER_2D: + case GL_SAMPLER_3D: + case GL_SAMPLER_CUBE: + case GL_SAMPLER_2D_RECT_ARB: + /* don't change sampler values - random values are bad */ + break; + default: Uniforms[i].value[0] = RandomFloat(-1.0, 2.0); Uniforms[i].value[1] = RandomFloat(-1.0, 2.0); Uniforms[i].value[2] = RandomFloat(-1.0, 2.0); @@ -595,10 +603,15 @@ Init(void) Program = LinkShaders(vertShader, fragShader); linkTime = GetShaderLinkTime(); + printf(Read vert shader %s\n, VertShaderFile); + printf(Read frag shader %s\n, FragShaderFile); + printf(Time to compile vertex shader: %fs\n, vertTime); printf(Time to compile fragment shader: %fs\n, fragTime); printf(Time to link shaders: %fs\n, linkTime); + assert(ValidateShaderProgram(Program)); + glUseProgram(Program); NumUniforms = GetUniforms(Program, Uniforms); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (mesa_7_5_branch): glsl: signal that the program needs to be re-translated when samplers change
Module: Mesa Branch: mesa_7_5_branch Commit: babb5ba9a977d23ddae828521401eae312bdb619 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=babb5ba9a977d23ddae828521401eae312bdb619 Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 14:29:50 2009 -0600 glsl: signal that the program needs to be re-translated when samplers change --- src/mesa/shader/shader_api.c | 19 +++ 1 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c index 95b7490..c36fc27 100644 --- a/src/mesa/shader/shader_api.c +++ b/src/mesa/shader/shader_api.c @@ -1624,6 +1624,7 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program, if (param-Type == PROGRAM_SAMPLER) { /* This controls which texture unit which is used by a sampler */ + GLboolean changed = GL_FALSE; GLint i; /* data type for setting samplers must be int */ @@ -1655,13 +1656,23 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program, _mesa_printf(Set program %p sampler %d '%s' to unit %u\n, program, sampler, param-Name, texUnit); #endif -program-SamplerUnits[sampler] = texUnit; +if (program-SamplerUnits[sampler] != texUnit) { + program-SamplerUnits[sampler] = texUnit; + changed = GL_TRUE; +} } } - _mesa_update_shader_textures_used(program); - - FLUSH_VERTICES(ctx, _NEW_TEXTURE); + if (changed) { + /* When a sampler's value changes it usually requires rewriting + * a GPU program's TEX instructions since there may not be a + * sampler-texture lookup table. We signal this with the + * ProgramStringNotify() callback. + */ + FLUSH_VERTICES(ctx, _NEW_TEXTURE | _NEW_PROGRAM); + _mesa_update_shader_textures_used(program); + ctx-Driver.ProgramStringNotify(ctx, program-Target, program); + } } else { /* ordinary uniform variable */ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (mesa_7_5_branch): docs: document sampler array bug fix
Module: Mesa Branch: mesa_7_5_branch Commit: d09d03aa42586dd3332863b9b159c497b0cb529b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d09d03aa42586dd3332863b9b159c497b0cb529b Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 12:04:35 2009 -0600 docs: document sampler array bug fix --- docs/relnotes-7.5.1.html |1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/docs/relnotes-7.5.1.html b/docs/relnotes-7.5.1.html index 77f2dd2..1a32757 100644 --- a/docs/relnotes-7.5.1.html +++ b/docs/relnotes-7.5.1.html @@ -52,6 +52,7 @@ tbd liFixed some Gallium glBlitFramebuffer() bugs liEmpty glBegin/glEnd() pair could cause divide by zero (bug 23489) liFixed Gallium glBitmap() Z position bug +liSetting arrays of sampler uniforms did not work /ul ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): glsl: asst. clean-ups in set_program_uniform()
Module: Mesa Branch: master Commit: 6df38e6f5a6d8f0b86928cb2b52c09d1fbe6bbff URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6df38e6f5a6d8f0b86928cb2b52c09d1fbe6bbff Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 14:35:45 2009 -0600 glsl: asst. clean-ups in set_program_uniform() Remove redunant type check for samplers (assert instead). Move some local vars. Update comments. --- src/mesa/shader/shader_api.c | 21 +++-- 1 files changed, 7 insertions(+), 14 deletions(-) diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c index 1b604f0..23aca30 100644 --- a/src/mesa/shader/shader_api.c +++ b/src/mesa/shader/shader_api.c @@ -1612,10 +1612,8 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program, GLenum type, GLsizei count, GLint elems, const void *values) { - struct gl_program_parameter *param = + const struct gl_program_parameter *param = program-Parameters-Parameters[index]; - const GLboolean isUniformBool = is_boolean_type(param-DataType); - const GLboolean areIntValues = is_integer_type(type); assert(offset = 0); assert(elems = 1); @@ -1635,17 +1633,10 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program, /* This controls which texture unit which is used by a sampler */ GLint i; - /* data type for setting samplers must be int */ - if (type != GL_INT) { - _mesa_error(ctx, GL_INVALID_OPERATION, - glUniform(only glUniform1i can be used - to set sampler uniforms)); - return; - } + /* this should have been caught by the compatible_types() check */ + ASSERT(type == GL_INT); - /* XXX arrays of samplers haven't been tested much, but it's not a - * common thing... - */ + /* loop over number of samplers to change */ for (i = 0; i count; i++) { GLuint sampler = (GLuint) program-Parameters-ParameterValues[index + offset + i][0]; @@ -1674,9 +1665,11 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program, } else { /* ordinary uniform variable */ - GLsizei k, i; + const GLboolean isUniformBool = is_boolean_type(param-DataType); + const GLboolean areIntValues = is_integer_type(type); const GLint slots = (param-Size + 3) / 4; const GLint typeSize = sizeof_glsl_type(param-DataType); + GLsizei k, i; if (param-Size typeSize) { /* an array */ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): i965: clean-up tex target switches
Module: Mesa Branch: master Commit: 81a101b5be0b3b98b745af33b2b0a72125e3137c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=81a101b5be0b3b98b745af33b2b0a72125e3137c Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 14:43:45 2009 -0600 i965: clean-up tex target switches --- src/mesa/drivers/dri/i965/brw_wm_glsl.c | 12 ++-- 1 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_wm_glsl.c b/src/mesa/drivers/dri/i965/brw_wm_glsl.c index 2a31077..c68056d 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_glsl.c +++ b/src/mesa/drivers/dri/i965/brw_wm_glsl.c @@ -2648,11 +2648,15 @@ static void emit_txb(struct brw_wm_compile *c, brw_MOV(p, brw_message_reg(3), src[1]); brw_MOV(p, brw_message_reg(4), brw_imm_f(0)); break; - default: + case TEXTURE_3D_INDEX: + case TEXTURE_CUBE_INDEX: brw_MOV(p, brw_message_reg(2), src[0]); brw_MOV(p, brw_message_reg(3), src[1]); brw_MOV(p, brw_message_reg(4), src[2]); break; + default: +/* invalid target */ +abort(); } brw_MOV(p, brw_message_reg(5), src[3]); /* bias */ brw_MOV(p, brw_message_reg(6), brw_imm_f(0));/* ref (unused?) */ @@ -2711,10 +2715,14 @@ static void emit_tex(struct brw_wm_compile *c, emit = WRITEMASK_XY; nr = 2; break; - default: + case TEXTURE_3D_INDEX: + case TEXTURE_CUBE_INDEX: emit = WRITEMASK_XYZ; nr = 3; break; + default: + /* invalid target */ + abort(); } msg_len = 1; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): i965: fix incorrect tex unit in emit_tex() and emit_txb()
Module: Mesa Branch: master Commit: a9a6399cd32ffe47b98d5171225fe7143552ca27 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a9a6399cd32ffe47b98d5171225fe7143552ca27 Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 14:46:58 2009 -0600 i965: fix incorrect tex unit in emit_tex() and emit_txb() The instructions we're translating already went through the brw_wm_pass_fp() function which does the sampler-texture unit mapping. We were applying the sample-unit mapping a second time in the GLSL texture emitters. Often, this made no difference but other times it could lead to accessing an invalid texture and could cause a GPU lockup. --- src/mesa/drivers/dri/i965/brw_wm_glsl.c |6 -- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_wm_glsl.c b/src/mesa/drivers/dri/i965/brw_wm_glsl.c index c68056d..7c210ab 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_glsl.c +++ b/src/mesa/drivers/dri/i965/brw_wm_glsl.c @@ -2623,7 +2623,8 @@ static void emit_txb(struct brw_wm_compile *c, { struct brw_compile *p = c-func; struct brw_reg dst[4], src[4], payload_reg; -GLuint unit = c-fp-program.Base.SamplerUnits[inst-TexSrcUnit]; +/* Note: TexSrcUnit was already looked up through SamplerTextures[] */ +const GLuint unit = inst-TexSrcUnit; GLuint i; GLuint msg_type; @@ -2689,7 +2690,8 @@ static void emit_tex(struct brw_wm_compile *c, { struct brw_compile *p = c-func; struct brw_reg dst[4], src[4], payload_reg; -GLuint unit = c-fp-program.Base.SamplerUnits[inst-TexSrcUnit]; +/* Note: TexSrcUnit was already looked up through SamplerTextures[] */ +const GLuint unit = inst-TexSrcUnit; GLuint msg_len; GLuint i, nr; GLuint emit; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): i965: init the tex_units_used field
Module: Mesa Branch: master Commit: b2b220e6225fdd673ea7b9fdda00e98423263fc3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b2b220e6225fdd673ea7b9fdda00e98423263fc3 Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 14:47:50 2009 -0600 i965: init the tex_units_used field --- src/mesa/drivers/dri/i965/brw_wm_fp.c |1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_wm_fp.c b/src/mesa/drivers/dri/i965/brw_wm_fp.c index c512126..123fe84 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_fp.c +++ b/src/mesa/drivers/dri/i965/brw_wm_fp.c @@ -1102,6 +1102,7 @@ void brw_wm_pass_fp( struct brw_wm_compile *c ) c-delta_xy = src_undef(); c-pixel_w = src_undef(); c-nr_fp_insns = 0; + c-fp-tex_units_used = 0x0; /* Emit preamble instructions. This is where special instructions such as * WM_CINTERP, WM_LINTERP, WM_PINTERP and WM_WPOSXY are emitted to ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): docs: document sampler array bug fix
Module: Mesa Branch: master Commit: d09d03aa42586dd3332863b9b159c497b0cb529b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d09d03aa42586dd3332863b9b159c497b0cb529b Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 12:04:35 2009 -0600 docs: document sampler array bug fix --- docs/relnotes-7.5.1.html |1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/docs/relnotes-7.5.1.html b/docs/relnotes-7.5.1.html index 77f2dd2..1a32757 100644 --- a/docs/relnotes-7.5.1.html +++ b/docs/relnotes-7.5.1.html @@ -52,6 +52,7 @@ tbd liFixed some Gallium glBlitFramebuffer() bugs liEmpty glBegin/glEnd() pair could cause divide by zero (bug 23489) liFixed Gallium glBitmap() Z position bug +liSetting arrays of sampler uniforms did not work /ul ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): Merge branch 'mesa_7_5_branch'
Module: Mesa Branch: master Commit: 38f56411067d51ad0de0ea73498964baaacea90b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=38f56411067d51ad0de0ea73498964baaacea90b Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 14:49:15 2009 -0600 Merge branch 'mesa_7_5_branch' --- ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): glsl: signal that the program needs to be re-translated when samplers change
Module: Mesa Branch: master Commit: babb5ba9a977d23ddae828521401eae312bdb619 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=babb5ba9a977d23ddae828521401eae312bdb619 Author: Brian Paul bri...@vmware.com Date: Wed Aug 26 14:29:50 2009 -0600 glsl: signal that the program needs to be re-translated when samplers change --- src/mesa/shader/shader_api.c | 19 +++ 1 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c index 95b7490..c36fc27 100644 --- a/src/mesa/shader/shader_api.c +++ b/src/mesa/shader/shader_api.c @@ -1624,6 +1624,7 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program, if (param-Type == PROGRAM_SAMPLER) { /* This controls which texture unit which is used by a sampler */ + GLboolean changed = GL_FALSE; GLint i; /* data type for setting samplers must be int */ @@ -1655,13 +1656,23 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program, _mesa_printf(Set program %p sampler %d '%s' to unit %u\n, program, sampler, param-Name, texUnit); #endif -program-SamplerUnits[sampler] = texUnit; +if (program-SamplerUnits[sampler] != texUnit) { + program-SamplerUnits[sampler] = texUnit; + changed = GL_TRUE; +} } } - _mesa_update_shader_textures_used(program); - - FLUSH_VERTICES(ctx, _NEW_TEXTURE); + if (changed) { + /* When a sampler's value changes it usually requires rewriting + * a GPU program's TEX instructions since there may not be a + * sampler-texture lookup table. We signal this with the + * ProgramStringNotify() callback. + */ + FLUSH_VERTICES(ctx, _NEW_TEXTURE | _NEW_PROGRAM); + _mesa_update_shader_textures_used(program); + ctx-Driver.ProgramStringNotify(ctx, program-Target, program); + } } else { /* ordinary uniform variable */ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): radeon/r200/r300: Fix swtcl flushing not to invalidate dma region.
Module: Mesa Branch: master Commit: 97029c1860e8a99448ac157408e71bea3aa2559f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=97029c1860e8a99448ac157408e71bea3aa2559f Author: Pauli Nieminen suok...@gmail.com Date: Wed Aug 26 22:24:25 2009 +0300 radeon/r200/r300: Fix swtcl flushing not to invalidate dma region. We were check command buffer sizes too alte so allocated dma regions were freed before relocations so space checking failed. --- src/mesa/drivers/dri/r200/r200_swtcl.c | 22 ++-- src/mesa/drivers/dri/r300/r300_swtcl.c | 37 ++-- .../drivers/dri/radeon/radeon_common_context.h |1 + src/mesa/drivers/dri/radeon/radeon_dma.c |7 src/mesa/drivers/dri/radeon/radeon_swtcl.c | 31 +++- 5 files changed, 75 insertions(+), 23 deletions(-) diff --git a/src/mesa/drivers/dri/r200/r200_swtcl.c b/src/mesa/drivers/dri/r200/r200_swtcl.c index 13bd6ac..6b7279e 100644 --- a/src/mesa/drivers/dri/r200/r200_swtcl.c +++ b/src/mesa/drivers/dri/r200/r200_swtcl.c @@ -204,7 +204,21 @@ static void r200SetVertexFormat( GLcontext *ctx ) static void r200RenderStart( GLcontext *ctx ) { + const int vertex_array_size = 7; + const int prim_size = 3; + r200ContextPtr rmesa = R200_CONTEXT( ctx ); r200SetVertexFormat( ctx ); + if (RADEON_DEBUG DEBUG_VERTS) + fprintf(stderr, %s\n, __func__); + if (!rmesa-radeon.swtcl.primitive_counter) { + if (rcommonEnsureCmdBufSpace(rmesa-radeon, + radeonCountStateEmitSize(rmesa-radeon) + + vertex_array_size + prim_size, + __FUNCTION__)) +rmesa-radeon.swtcl.primitive_counter = 0; + else +rmesa-radeon.swtcl.primitive_counter = 1; + } } @@ -268,9 +282,8 @@ void r200ChooseVertexState( GLcontext *ctx ) void r200_swtcl_flush(GLcontext *ctx, uint32_t current_offset) { r200ContextPtr rmesa = R200_CONTEXT(ctx); - rcommonEnsureCmdBufSpace(rmesa-radeon, - radeonCountStateEmitSize(rmesa-radeon) + (12*sizeof(int)), - __FUNCTION__); + if (RADEON_DEBUG DEBUG_VERTS) + fprintf(stderr, %s\n, __func__); radeonEmitState(rmesa-radeon); @@ -284,6 +297,8 @@ void r200_swtcl_flush(GLcontext *ctx, uint32_t current_offset) rmesa-radeon.swtcl.hw_primitive, rmesa-radeon.swtcl.numverts); + rmesa-radeon.swtcl.primitive_counter = 0; + } /**/ @@ -890,6 +905,7 @@ void r200InitSwtcl( GLcontext *ctx ) init_rast_tab(); firsttime = 0; } + rmesa-radeon.swtcl.primitive_counter = 0; tnl-Driver.Render.Start = r200RenderStart; tnl-Driver.Render.Finish = r200RenderFinish; diff --git a/src/mesa/drivers/dri/r300/r300_swtcl.c b/src/mesa/drivers/dri/r300/r300_swtcl.c index 9d6f756..18af51e 100644 --- a/src/mesa/drivers/dri/r300/r300_swtcl.c +++ b/src/mesa/drivers/dri/r300/r300_swtcl.c @@ -83,6 +83,9 @@ void r300ChooseSwtclVertexFormat(GLcontext *ctx, GLuint *_InputsRead, GLuint *_ rmesa-swtcl.coloroffset = rmesa-swtcl.specoffset = 0; rmesa-radeon.swtcl.vertex_attr_count = 0; + if (RADEON_DEBUG DEBUG_VERTS) + fprintf(stderr, %s\n, __func__); + /* We always want non Ndc coords format */ VB-AttribPtr[VERT_ATTRIB_POS] = VB-ClipPtr; @@ -462,6 +465,8 @@ static void r300ChooseRenderState( GLcontext *ctx ) r300ContextPtr rmesa = R300_CONTEXT(ctx); GLuint index = 0; GLuint flags = ctx-_TriangleCaps; + if (RADEON_DEBUG DEBUG_VERTS) + fprintf(stderr, %s\n, __func__); if (flags DD_TRI_UNFILLED) index |= R300_UNFILLED_BIT; @@ -489,6 +494,8 @@ static void r300ChooseRenderState( GLcontext *ctx ) void r300RenderStart(GLcontext *ctx) { + if (RADEON_DEBUG DEBUG_VERTS) + fprintf(stderr, %s\n, __func__); r300ContextPtr rmesa = R300_CONTEXT( ctx ); r300ChooseRenderState(ctx); @@ -501,6 +508,19 @@ void r300RenderStart(GLcontext *ctx) r300UpdateShaderStates(rmesa); + const int vertex_size = 7; + const int prim_size = 3; + + if (!rmesa-radeon.swtcl.primitive_counter) { + if (rcommonEnsureCmdBufSpace(rmesa-radeon, + radeonCountStateEmitSize(rmesa-radeon) + + + vertex_size + prim_size, + __FUNCTION__)) + rmesa-radeon.swtcl.primitive_counter = 0; + else + rmesa-radeon.swtcl.primitive_counter = 1; + } + r300EmitCacheFlush(rmesa); /* investigate if we can put back flush optimisation if needed */ @@ -516,6 +536,8 @@ void r300RenderFinish(GLcontext *ctx) static void r300RasterPrimitive( GLcontext *ctx, GLuint hwprim ) {
Mesa (master): radeon: Make RADEON_CMDBUF more fine grained.
Module: Mesa Branch: master Commit: e0e76edf97d391f0c4be58b9d8b91bed0be56734 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e0e76edf97d391f0c4be58b9d8b91bed0be56734 Author: Pauli Nieminen suok...@gmail.com Date: Thu Aug 27 00:05:57 2009 +0300 radeon: Make RADEON_CMDBUF more fine grained. --- src/mesa/drivers/dri/radeon/radeon_common.c | 10 -- 1 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c b/src/mesa/drivers/dri/radeon/radeon_common.c index e0be15f..9b301cd 100644 --- a/src/mesa/drivers/dri/radeon/radeon_common.c +++ b/src/mesa/drivers/dri/radeon/radeon_common.c @@ -85,6 +85,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include radeon_mipmap_tree.h #include radeon_queryobj.h +/** + * Enable verbose debug output for emit code. + * 0 no output + * 1 most output + * 2 also print state alues + */ #define DEBUG_CMDBUF 0 /* = @@ -906,7 +912,7 @@ static void radeon_print_state_atom_prekmm(radeonContextPtr radeon, struct radeo fprintf(stderr, emit %s %d/%d\n, state-name, dwords, state-cmd_size); - if (RADEON_DEBUG DEBUG_VERBOSE) { + if (DEBUG_CMDBUF 1 RADEON_DEBUG DEBUG_VERBOSE) { if (dwords state-cmd_size) dwords = state-cmd_size; @@ -943,7 +949,7 @@ static void radeon_print_state_atom(radeonContextPtr radeon, struct radeon_state fprintf(stderr, emit %s %d/%d\n, state-name, dwords, state-cmd_size); - if (RADEON_DEBUG DEBUG_VERBOSE) { + if (DEBUG_CMDBUF 1 RADEON_DEBUG DEBUG_VERBOSE) { if (dwords state-cmd_size) dwords = state-cmd_size; for (i = 0; i state-cmd_size;) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): radeon: Fix loop en condition so debug output doesn' t flood meaningless values.
Module: Mesa Branch: master Commit: 47d4b9ff70c82956a77e8ea7a6abccaa0a9f9083 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=47d4b9ff70c82956a77e8ea7a6abccaa0a9f9083 Author: Pauli Nieminen suok...@gmail.com Date: Thu Aug 27 00:07:05 2009 +0300 radeon: Fix loop en condition so debug output doesn't flood meaningless values. --- src/mesa/drivers/dri/radeon/radeon_common.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c b/src/mesa/drivers/dri/radeon/radeon_common.c index 9b301cd..0894372 100644 --- a/src/mesa/drivers/dri/radeon/radeon_common.c +++ b/src/mesa/drivers/dri/radeon/radeon_common.c @@ -952,7 +952,7 @@ static void radeon_print_state_atom(radeonContextPtr radeon, struct radeon_state if (DEBUG_CMDBUF 1 RADEON_DEBUG DEBUG_VERBOSE) { if (dwords state-cmd_size) dwords = state-cmd_size; - for (i = 0; i state-cmd_size;) { + for (i = 0; i dwords;) { packet0 = state-cmd[i]; reg = (packet0 0x1FFF) 2; count = ((packet0 0x3FFF) 16) + 1; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): Merge branch 'fix_r300_swtcl' into push_master
Module: Mesa Branch: master Commit: 74b55970dc25d6b2a65f385fd298f141176cd4d3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=74b55970dc25d6b2a65f385fd298f141176cd4d3 Author: Pauli Nieminen suok...@gmail.com Date: Thu Aug 27 00:08:30 2009 +0300 Merge branch 'fix_r300_swtcl' into push_master --- ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl_softpipe: Make winsys and pipe screen per display.
Module: Mesa Branch: master Commit: c06699dd121a3f3820f6f9e3bf7829fd574cf8d2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c06699dd121a3f3820f6f9e3bf7829fd574cf8d2 Author: Chia-I Wu olva...@gmail.com Date: Wed Aug 26 15:42:35 2009 +0800 egl_softpipe: Make winsys and pipe screen per display. This is to allow a driver to drive multiple displays. Remove the use of _EGL_PLATFORM_X along the way. Signed-off-by: Chia-I Wu olva...@gmail.com --- src/gallium/winsys/egl_xlib/Makefile |2 +- src/gallium/winsys/egl_xlib/egl_xlib.c | 102 2 files changed, 77 insertions(+), 27 deletions(-) diff --git a/src/gallium/winsys/egl_xlib/Makefile b/src/gallium/winsys/egl_xlib/Makefile index a33a50e..3efb7ed 100644 --- a/src/gallium/winsys/egl_xlib/Makefile +++ b/src/gallium/winsys/egl_xlib/Makefile @@ -37,7 +37,7 @@ UNUSED_LIBS = \ $(TOP)/src/mesa/libmesagallium.a \ -LOCAL_CFLAGS = -D_EGL_PLATFORM_X=1 +LOCAL_CFLAGS = .c.o: diff --git a/src/gallium/winsys/egl_xlib/egl_xlib.c b/src/gallium/winsys/egl_xlib/egl_xlib.c index 96f460f..d02f825 100644 --- a/src/gallium/winsys/egl_xlib/egl_xlib.c +++ b/src/gallium/winsys/egl_xlib/egl_xlib.c @@ -33,6 +33,7 @@ #include dlfcn.h +#include X11/Xlib.h #include X11/Xutil.h #include pipe/p_compiler.h @@ -61,8 +62,15 @@ struct xlib_egl_driver { _EGLDriver Base; /** base class */ - EGLint apis; +}; + + +/** driver data of _EGLDisplay */ +struct xlib_egl_display +{ + Display *Dpy; + struct pipe_winsys *winsys; struct pipe_screen *screen; }; @@ -95,6 +103,12 @@ struct xlib_egl_surface }; +static void +flush_frontbuffer(struct pipe_winsys *pws, + struct pipe_surface *psurf, + void *context_private); + + /** cast wrapper */ static INLINE struct xlib_egl_driver * xlib_egl_driver(_EGLDriver *drv) @@ -103,6 +117,13 @@ xlib_egl_driver(_EGLDriver *drv) } +static INLINE struct xlib_egl_display * +xlib_egl_display(_EGLDisplay *dpy) +{ + return (struct xlib_egl_display *) dpy-DriverData; +} + + static INLINE struct xlib_egl_surface * lookup_surface(_EGLSurface *surf) { @@ -132,7 +153,7 @@ bitcount(unsigned int n) * Create the EGLConfigs. (one per X visual) */ static void -create_configs(_EGLDriver *drv, _EGLDisplay *disp) +create_configs(struct xlib_egl_display *xdpy, _EGLDisplay *disp) { static const EGLint all_apis = (EGL_OPENGL_ES_BIT | EGL_OPENGL_ES2_BIT | @@ -142,8 +163,8 @@ create_configs(_EGLDriver *drv, _EGLDisplay *disp) int num_visuals, i; /* get list of all X visuals, create an EGL config for each */ - visTemplate.screen = DefaultScreen(disp-Xdpy); - visInfo = XGetVisualInfo(disp-Xdpy, VisualScreenMask, + visTemplate.screen = DefaultScreen(xdpy-Dpy); + visInfo = XGetVisualInfo(xdpy-Dpy, VisualScreenMask, visTemplate, num_visuals); if (!visInfo) { printf(egl_xlib.c: couldn't get any X visuals\n); @@ -185,6 +206,8 @@ create_configs(_EGLDriver *drv, _EGLDisplay *disp) _eglAddConfig(disp, config); } + + XFree(visInfo); } @@ -193,21 +216,46 @@ create_configs(_EGLDriver *drv, _EGLDisplay *disp) */ static EGLBoolean xlib_eglInitialize(_EGLDriver *drv, _EGLDisplay *dpy, - EGLint *minor, EGLint *major) + EGLint *major, EGLint *minor) { struct xlib_egl_driver *xdrv = xlib_egl_driver(drv); - - if (!dpy-Xdpy) { - dpy-Xdpy = XOpenDisplay(NULL); + struct xlib_egl_display *xdpy; + + xdpy = CALLOC_STRUCT(xlib_egl_display); + if (!xdpy) + return _eglError(EGL_BAD_ALLOC, eglInitialize); + + xdpy-Dpy = (Display *) dpy-NativeDisplay; + if (!xdpy-Dpy) { + xdpy-Dpy = XOpenDisplay(NULL); + if (!xdpy-Dpy) { + free(xdpy); + return EGL_FALSE; + } } - create_configs(drv, dpy); + /* create winsys and pipe screen */ + xdpy-winsys = create_sw_winsys(); + if (!xdpy-winsys) { + free(xdpy); + return _eglError(EGL_BAD_ALLOC, eglInitialize); + } + xdpy-winsys-flush_frontbuffer = flush_frontbuffer; + xdpy-screen = softpipe_create_screen(xdpy-winsys); + if (!xdpy-screen) { + free(xdpy-winsys); + free(xdpy); + return _eglError(EGL_BAD_ALLOC, eglInitialize); + } + dpy-DriverData = (void *) xdpy; dpy-ClientAPIsMask = xdrv-apis; + create_configs(xdpy, dpy); + /* we're supporting EGL 1.4 */ - *minor = 1; - *major = 4; + *major = 1; + *minor = 4; return EGL_TRUE; } @@ -219,8 +267,18 @@ xlib_eglInitialize(_EGLDriver *drv, _EGLDisplay *dpy, static EGLBoolean xlib_eglTerminate(_EGLDriver *drv, _EGLDisplay *dpy) { + struct xlib_egl_display *xdpy = xlib_egl_display(dpy); + _eglReleaseDisplayResources(drv, dpy); _eglCleanupDisplay(dpy); + + xdpy-screen-destroy(xdpy-screen); + free(xdpy-winsys); + + if (!dpy-NativeDisplay) + XCloseDisplay(xdpy-Dpy); +
Mesa (master): egl: Remove Xdpy from EGLDisplay.
Module: Mesa Branch: master Commit: e1d978775f982a450bd84588a4f9567d6bbccebd URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e1d978775f982a450bd84588a4f9567d6bbccebd Author: Chia-I Wu olva...@gmail.com Date: Wed Aug 26 16:06:39 2009 +0800 egl: Remove Xdpy from EGLDisplay. It is not used anymore. Signed-off-by: Chia-I Wu olva...@gmail.com --- src/egl/main/egldisplay.c |3 --- src/egl/main/egldisplay.h |8 2 files changed, 0 insertions(+), 11 deletions(-) diff --git a/src/egl/main/egldisplay.c b/src/egl/main/egldisplay.c index 2c271ef..896d60d 100644 --- a/src/egl/main/egldisplay.c +++ b/src/egl/main/egldisplay.c @@ -81,9 +81,6 @@ _eglNewDisplay(NativeDisplayType nativeDisplay) _EGLDisplay *dpy = (_EGLDisplay *) calloc(1, sizeof(_EGLDisplay)); if (dpy) { dpy-NativeDisplay = nativeDisplay; -#if defined(_EGL_PLATFORM_X) - dpy-Xdpy = (Display *) nativeDisplay; -#endif dpy-DriverName = _eglPreloadDriver(dpy); if (!dpy-DriverName) { diff --git a/src/egl/main/egldisplay.h b/src/egl/main/egldisplay.h index c7a41cd..6575fdf 100644 --- a/src/egl/main/egldisplay.h +++ b/src/egl/main/egldisplay.h @@ -1,10 +1,6 @@ #ifndef EGLDISPLAY_INCLUDED #define EGLDISPLAY_INCLUDED -#ifdef _EGL_PLATFORM_X -#include X11/Xlib.h -#endif - #include egltypedefs.h #include egldefines.h #include eglcontext.h @@ -54,10 +50,6 @@ struct _egl_display /* lists of linked contexts and surface */ _EGLContext *ContextList; _EGLSurface *SurfaceList; - -#ifdef _EGL_PLATFORM_X - Display *Xdpy; -#endif }; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: gitignore
Module: Mesa Branch: master Commit: cefe9c4f394ff7007d33d932191e2fcaf9d08e87 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cefe9c4f394ff7007d33d932191e2fcaf9d08e87 Author: Younes Manton youne...@gmail.com Date: Wed Aug 26 20:13:11 2009 -0400 mesa: gitignore --- progs/demos/.gitignore |1 + progs/egl/.gitignore |1 + 2 files changed, 2 insertions(+), 0 deletions(-) diff --git a/progs/demos/.gitignore b/progs/demos/.gitignore index f3c7091..5dd974b 100644 --- a/progs/demos/.gitignore +++ b/progs/demos/.gitignore @@ -63,3 +63,4 @@ tunnel2 vao_demo Windows winpos +*.rgb diff --git a/progs/egl/.gitignore b/progs/egl/.gitignore index f417aef..7a13d46 100644 --- a/progs/egl/.gitignore +++ b/progs/egl/.gitignore @@ -6,6 +6,7 @@ eglinfo eglscreen egltri peglgears +xeglbindtex xeglgears xeglthreads xegl_tri ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): radeon: fix max indx/vertex emission due to state checker
Module: Mesa Branch: master Commit: 20d9204fbd71aebf870834b612579419d2c278b5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=20d9204fbd71aebf870834b612579419d2c278b5 Author: Dave Airlie airl...@itt42.(none) Date: Fri Jul 24 11:46:20 2009 +1000 radeon: fix max indx/vertex emission due to state checker --- .../drivers/dri/radeon/radeon_common_context.h |3 ++- src/mesa/drivers/dri/radeon/radeon_ioctl.c |3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/radeon/radeon_common_context.h b/src/mesa/drivers/dri/radeon/radeon_common_context.h index 5c4b4ab..07a0c4c 100644 --- a/src/mesa/drivers/dri/radeon/radeon_common_context.h +++ b/src/mesa/drivers/dri/radeon/radeon_common_context.h @@ -355,7 +355,8 @@ struct radeon_tcl_info { struct radeon_ioctl { GLuint vertex_offset; -struct radeon_bo *bo; + GLuint vertex_max; + struct radeon_bo *bo; GLuint vertex_size; }; diff --git a/src/mesa/drivers/dri/radeon/radeon_ioctl.c b/src/mesa/drivers/dri/radeon/radeon_ioctl.c index afdb5e7..1bda9cb 100644 --- a/src/mesa/drivers/dri/radeon/radeon_ioctl.c +++ b/src/mesa/drivers/dri/radeon/radeon_ioctl.c @@ -273,7 +273,7 @@ GLushort *radeonAllocEltsOpenEnded( r100ContextPtr rmesa, } else { OUT_BATCH(rmesa-ioctl.vertex_offset); } - OUT_BATCH(0x); + OUT_BATCH(rmesa-ioctl.vertex_max); OUT_BATCH(vertex_format); OUT_BATCH(primitive | RADEON_CP_VC_CNTL_PRIM_WALK_IND | @@ -342,6 +342,7 @@ void radeonEmitAOS( r100ContextPtr rmesa, rmesa-ioctl.bo = rmesa-radeon.tcl.aos[0].bo; rmesa-ioctl.vertex_offset = (rmesa-radeon.tcl.aos[0].offset + offset * rmesa-radeon.tcl.aos[0].stride * 4); + rmesa-ioctl.vertex_max = rmesa-radeon.tcl.aos[0].count; #else BATCH_LOCALS(rmesa-radeon); uint32_t voffset; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): ARB prog: Change handling of program parameter limits
Module: Mesa Branch: master Commit: eabe12df44a41e97fb5736959e8864ddbd01be14 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=eabe12df44a41e97fb5736959e8864ddbd01be14 Author: Ian Romanick ian.d.roman...@intel.com Date: Mon Aug 24 12:54:48 2009 -0700 ARB prog: Change handling of program parameter limits Several changes are made to program parameter limits. Several of the non-NATIVE limits are set higher. All of the NATIVE limits are set to zero in the core Mesa code. Each driver must set the actual value in its context creation routine. If the NATIVE value remains zero, this indicates that hardware shaders may not be supported. Each of the preceeding changes matches the bahavior of Apple's shader assembler, so it seems safe. Finally, we limit the value of MaxEnvParams to be no greater than MaxNativeAttribs. At least one case has been found where an application does the wrong thing if MaxNativeAttribs MaxEnvParams. See also bugzilla #23490. --- src/mesa/drivers/dri/i915/i915_context.c |3 ++ src/mesa/drivers/dri/i965/brw_context.c | 27 ++- src/mesa/main/config.h | 56 +- src/mesa/main/context.c | 22 ++- 4 files changed, 80 insertions(+), 28 deletions(-) diff --git a/src/mesa/drivers/dri/i915/i915_context.c b/src/mesa/drivers/dri/i915/i915_context.c index bb08cf8..be47ace 100644 --- a/src/mesa/drivers/dri/i915/i915_context.c +++ b/src/mesa/drivers/dri/i915/i915_context.c @@ -166,6 +166,9 @@ i915CreateContext(const __GLcontextModes * mesaVis, ctx-Const.FragmentProgram.MaxNativeTexIndirections = I915_MAX_TEX_INDIRECT; ctx-Const.FragmentProgram.MaxNativeAddressRegs = 0; /* I don't think we have one */ + ctx-Const.FragmentProgram.MaxEnvParams = + MIN2(ctx-Const.FragmentProgram.MaxNativeParameters, + ctx-Const.FragmentProgram.MaxEnvParams); ctx-FragmentProgram._MaintainTexEnvProgram = GL_TRUE; diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index 4dbe551..21c0ad1 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -126,7 +126,32 @@ GLboolean brwCreateContext( const __GLcontextModes *mesaVis, /* We want the GLSL compiler to emit code that uses condition codes */ ctx-Shader.EmitCondCodes = GL_TRUE; -/*ctx-Const.MaxNativeVertexProgramTemps = 32; */ + ctx-Const.VertexProgram.MaxNativeInstructions = (16 * 1024); + ctx-Const.VertexProgram.MaxAluInstructions = 0; + ctx-Const.VertexProgram.MaxTexInstructions = 0; + ctx-Const.VertexProgram.MaxTexIndirections = 0; + ctx-Const.VertexProgram.MaxNativeAluInstructions = 0; + ctx-Const.VertexProgram.MaxNativeTexInstructions = 0; + ctx-Const.VertexProgram.MaxNativeTexIndirections = 0; + ctx-Const.VertexProgram.MaxNativeAttribs = 16; + ctx-Const.VertexProgram.MaxNativeTemps = 256; + ctx-Const.VertexProgram.MaxNativeAddressRegs = 1; + ctx-Const.VertexProgram.MaxNativeParameters = 96; + ctx-Const.VertexProgram.MaxEnvParams = + MIN2(ctx-Const.VertexProgram.MaxNativeParameters, + ctx-Const.VertexProgram.MaxEnvParams); + + ctx-Const.FragmentProgram.MaxNativeInstructions = (16 * 1024); + ctx-Const.FragmentProgram.MaxNativeAluInstructions = (16 * 1024); + ctx-Const.FragmentProgram.MaxNativeTexInstructions = (16 * 1024); + ctx-Const.FragmentProgram.MaxNativeTexIndirections = (16 * 1024); + ctx-Const.FragmentProgram.MaxNativeAttribs = 12; + ctx-Const.FragmentProgram.MaxNativeTemps = 256; + ctx-Const.FragmentProgram.MaxNativeAddressRegs = 0; + ctx-Const.FragmentProgram.MaxNativeParameters = 64; + ctx-Const.FragmentProgram.MaxEnvParams = + MIN2(ctx-Const.FragmentProgram.MaxNativeParameters, + ctx-Const.FragmentProgram.MaxEnvParams); brw_init_state( brw ); diff --git a/src/mesa/main/config.h b/src/mesa/main/config.h index e4995c3..8a09efd 100644 --- a/src/mesa/main/config.h +++ b/src/mesa/main/config.h @@ -170,9 +170,48 @@ /** For GL_EXT_texture_lod_bias (typically MAX_TEXTURE_LEVELS - 1) */ #define MAX_TEXTURE_LOD_BIAS 12.0 +/** For any program target/extension */ +/*...@{*/ +#define MAX_PROGRAM_INSTRUCTIONS (16 * 1024) + +/** + * Per-program constants (power of two) + * + * \c MAX_PROGRAM_LOCAL_PARAMS and \c MAX_UNIFORMS are just the assmebly shader + * and GLSL shader names for the same thing. They should \b always have the + * same value. Each refers to the number of vec4 values supplied as + * per-program parameters. + */ +/*...@{*/ +#define MAX_PROGRAM_LOCAL_PARAMS 1024 +#define MAX_UNIFORMS 1024 +/*...@}*/ + +/** + * Per-context constants (power of two) + * + * \note + * This value should always be less than or equal to \c MAX_PROGRAM_LOCAL_PARAMS + * and \c MAX_VERTEX_PROGRAM_PARAMS. Otherwise some applications will make + * incorrect assumptions. + */ +#define MAX_PROGRAM_ENV_PARAMS 256 +
Mesa (master): i965: Increase assmebly shader program parameter limits
Module: Mesa Branch: master Commit: 09c73c74376ed6b12e343c89b4eac94285439860 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=09c73c74376ed6b12e343c89b4eac94285439860 Author: Ian Romanick ian.d.roman...@intel.com Date: Wed Aug 26 22:04:23 2009 -0700 i965: Increase assmebly shader program parameter limits Increase the number of native program parameters to the same values exposed by GLSL. --- src/mesa/drivers/dri/i965/brw_context.c |4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index 21c0ad1..3c5b848 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -136,7 +136,7 @@ GLboolean brwCreateContext( const __GLcontextModes *mesaVis, ctx-Const.VertexProgram.MaxNativeAttribs = 16; ctx-Const.VertexProgram.MaxNativeTemps = 256; ctx-Const.VertexProgram.MaxNativeAddressRegs = 1; - ctx-Const.VertexProgram.MaxNativeParameters = 96; + ctx-Const.VertexProgram.MaxNativeParameters = 1024; ctx-Const.VertexProgram.MaxEnvParams = MIN2(ctx-Const.VertexProgram.MaxNativeParameters, ctx-Const.VertexProgram.MaxEnvParams); @@ -148,7 +148,7 @@ GLboolean brwCreateContext( const __GLcontextModes *mesaVis, ctx-Const.FragmentProgram.MaxNativeAttribs = 12; ctx-Const.FragmentProgram.MaxNativeTemps = 256; ctx-Const.FragmentProgram.MaxNativeAddressRegs = 0; - ctx-Const.FragmentProgram.MaxNativeParameters = 64; + ctx-Const.FragmentProgram.MaxNativeParameters = 1024; ctx-Const.FragmentProgram.MaxEnvParams = MIN2(ctx-Const.FragmentProgram.MaxNativeParameters, ctx-Const.FragmentProgram.MaxEnvParams); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): radeon: fix scissor calcs.
Module: Mesa Branch: master Commit: 82ff3190de3cd6cf4a514bac00ae02597abfb963 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=82ff3190de3cd6cf4a514bac00ae02597abfb963 Author: Dave Airlie airl...@redhat.com Date: Thu Aug 27 15:36:35 2009 +1000 radeon: fix scissor calcs. For non-FBOs we need to invert, for FBOs the scissors are non-inverted. no matter what we need to clamp them to the buffer sizes. --- src/mesa/drivers/dri/radeon/radeon_common.c | 35 +++--- 1 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c b/src/mesa/drivers/dri/radeon/radeon_common.c index 0894372..bed75f3 100644 --- a/src/mesa/drivers/dri/radeon/radeon_common.c +++ b/src/mesa/drivers/dri/radeon/radeon_common.c @@ -231,26 +231,31 @@ void radeonSetCliprects(radeonContextPtr radeon) void radeonUpdateScissor( GLcontext *ctx ) { radeonContextPtr rmesa = RADEON_CONTEXT(ctx); + GLint x = ctx-Scissor.X, y = ctx-Scissor.Y; + GLsizei w = ctx-Scissor.Width, h = ctx-Scissor.Height; + int x1, y1, x2, y2; - if ( !ctx-DrawBuffer-Name ) { - __DRIdrawablePrivate *dPriv = radeon_get_drawable(rmesa); - - int x = ctx-Scissor.X; - int y = dPriv-h - ctx-Scissor.Y - ctx-Scissor.Height; - int w = ctx-Scissor.X + ctx-Scissor.Width - 1; - int h = dPriv-h - ctx-Scissor.Y - 1; + if (!ctx-DrawBuffer) + return; - rmesa-state.scissor.rect.x1 = x + dPriv-x; - rmesa-state.scissor.rect.y1 = y + dPriv-y; - rmesa-state.scissor.rect.x2 = w + dPriv-x + 1; - rmesa-state.scissor.rect.y2 = h + dPriv-y + 1; + if ( !ctx-DrawBuffer-Name ) { + x1 = x; + y1 = ctx-DrawBuffer-Height - (y + h); + x2 = x + w - 1; + y2 = y1 + h - 1; } else { - rmesa-state.scissor.rect.x1 = ctx-Scissor.X; - rmesa-state.scissor.rect.y1 = ctx-Scissor.Y; - rmesa-state.scissor.rect.x2 = ctx-Scissor.X + ctx-Scissor.Width; - rmesa-state.scissor.rect.y2 = ctx-Scissor.Y + ctx-Scissor.Height; + x1 = x; + y1 = y; + x2 = x + w - 1; + y2 = y + h - 1; + } + rmesa-state.scissor.rect.x1 = CLAMP(x1, 0, ctx-DrawBuffer-Width - 1); + rmesa-state.scissor.rect.y1 = CLAMP(y1, 0, ctx-DrawBuffer-Height - 1); + rmesa-state.scissor.rect.x2 = CLAMP(x2, 0, ctx-DrawBuffer-Width - 1); + rmesa-state.scissor.rect.y2 = CLAMP(y2, 0, ctx-DrawBuffer-Height - 1); + radeonRecalcScissorRects( rmesa ); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit