Mesa (master): scons: export drawllvm after actually checking that llvm is present
Module: Mesa Branch: master Commit: 08e2eab8a430402c12a551c539bbc68f1f857def URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=08e2eab8a430402c12a551c539bbc68f1f857def Author: Zack Rusin Date: Wed Feb 10 00:07:51 2010 -0500 scons: export drawllvm after actually checking that llvm is present --- SConstruct | 13 ++--- 1 files changed, 6 insertions(+), 7 deletions(-) diff --git a/SConstruct b/SConstruct index fa67d14..2e00ec4 100644 --- a/SConstruct +++ b/SConstruct @@ -83,6 +83,11 @@ machine = env['machine'] platform = env['platform'] drawllvm = 'llvmpipe' in env['drivers'] +# LLVM support in the Draw module +if drawllvm: +env.Tool('llvm') +if not env.has_key('LLVM_VERSION'): + drawllvm = False # derived options x86 = machine == 'x86' @@ -168,13 +173,7 @@ if dri: # LLVM support in the Draw module if drawllvm: - # See also http://www.scons.org/wiki/UsingPkgConfig -# currently --ldflags --libsdisabled since the driver will force the correct linkage -env.Tool('llvm') -if not env.has_key('LLVM_VERSION'): - drawllvm = False - else: - env.Append(CPPDEFINES = ['DRAW_LLVM']) +env.Append(CPPDEFINES = ['DRAW_LLVM']) # libGL if platform in ('linux', 'freebsd', 'darwin'): ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl_dri2: Only allocate config if we're going to keep it
Module: Mesa Branch: master Commit: c19dab7c5929bc70633002111bbb2b496a90899e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c19dab7c5929bc70633002111bbb2b496a90899e Author: Kristian Høgsberg Date: Tue Feb 9 21:01:04 2010 -0500 egl_dri2: Only allocate config if we're going to keep it Small optimization. --- src/egl/drivers/dri2/egl_dri2.c | 67 ++- 1 files changed, 31 insertions(+), 36 deletions(-) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 08e7e01..5d36c49 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -107,7 +107,7 @@ EGLint dri2_to_egl_attribute_map[] = { EGL_RED_SIZE, /* __DRI_ATTRIB_RED_SIZE */ EGL_GREEN_SIZE, /* __DRI_ATTRIB_GREEN_SIZE */ EGL_BLUE_SIZE, /* __DRI_ATTRIB_BLUE_SIZE */ - 0, /* __DRI_ATTRIB_LUMINANCE_SIZE */ + EGL_LUMINANCE_SIZE, /* __DRI_ATTRIB_LUMINANCE_SIZE */ EGL_ALPHA_SIZE, /* __DRI_ATTRIB_ALPHA_SIZE */ 0, /* __DRI_ATTRIB_ALPHA_MASK_SIZE */ EGL_DEPTH_SIZE, /* __DRI_ATTRIB_DEPTH_SIZE */ @@ -157,24 +157,17 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id, { struct dri2_egl_config *conf; struct dri2_egl_display *dri2_dpy; + _EGLConfig base; unsigned int attrib, value, double_buffer; EGLint key, bind_to_texture_rgb, bind_to_texture_rgba; int i; dri2_dpy = disp->DriverData; - conf = malloc(sizeof *conf); - if (conf == NULL) - return; - - conf->dri_config = dri_config; - _eglInitConfig(&conf->base, disp, id); + _eglInitConfig(&base, disp, id); i = 0; while (dri2_dpy->core->indexConfigAttrib(dri_config, i++, &attrib, &value)) { switch (attrib) { - case 0: -break; - case __DRI_ATTRIB_RENDER_TYPE: if (value & __DRI_ATTRIB_RGBA_BIT) value = EGL_RGB_BUFFER; @@ -182,7 +175,7 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id, value = EGL_LUMINANCE_BUFFER; else /* not valid */; -_eglSetConfigKey(&conf->base, EGL_COLOR_BUFFER_TYPE, value); +_eglSetConfigKey(&base, EGL_COLOR_BUFFER_TYPE, value); break; case __DRI_ATTRIB_CONFIG_CAVEAT: @@ -192,7 +185,7 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id, value = EGL_SLOW_CONFIG; else value = EGL_NONE; -_eglSetConfigKey(&conf->base, EGL_CONFIG_CAVEAT, value); +_eglSetConfigKey(&base, EGL_CONFIG_CAVEAT, value); break; case __DRI_ATTRIB_BIND_TO_TEXTURE_RGB: @@ -210,7 +203,7 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id, default: key = dri2_to_egl_attribute_map[attrib]; if (key != 0) - _eglSetConfigKey(&conf->base, key, value); + _eglSetConfigKey(&base, key, value); break; } } @@ -222,44 +215,45 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id, * we ignore all double buffer configs and manipulate the buffer we * return in the getBuffer callback to get the behaviour we want. */ - if (double_buffer) { - free(conf); + if (double_buffer) return; - } - - /* EGL_SWAP_BEHAVIOR_PRESERVED_BIT */ if (visual != NULL) { - if (depth != _eglGetConfigKey(&conf->base, EGL_BUFFER_SIZE)) { -free(conf); + if (depth != _eglGetConfigKey(&base, EGL_BUFFER_SIZE)) return; - } - _eglSetConfigKey(&conf->base, EGL_SURFACE_TYPE, - EGL_WINDOW_BIT | EGL_PIXMAP_BIT | EGL_PBUFFER_BIT); - _eglSetConfigKey(&conf->base, EGL_NATIVE_VISUAL_ID, visual->visual_id); - _eglSetConfigKey(&conf->base, EGL_NATIVE_VISUAL_TYPE, visual->_class); + _eglSetConfigKey(&base, EGL_SURFACE_TYPE, + EGL_WINDOW_BIT | EGL_PIXMAP_BIT | EGL_PBUFFER_BIT | + EGL_SWAP_BEHAVIOR_PRESERVED_BIT); + + _eglSetConfigKey(&base, EGL_NATIVE_VISUAL_ID, visual->visual_id); + _eglSetConfigKey(&base, EGL_NATIVE_VISUAL_TYPE, visual->_class); } else { - _eglSetConfigKey(&conf->base, EGL_SURFACE_TYPE, + _eglSetConfigKey(&base, EGL_SURFACE_TYPE, EGL_PIXMAP_BIT | EGL_PBUFFER_BIT); } - _eglSetConfigKey(&conf->base, EGL_BIND_TO_TEXTURE_RGB, bind_to_texture_rgb); - if (_eglGetConfigKey(&conf->base, EGL_ALPHA_SIZE) > 0) - _eglSetConfigKey(&conf->base, + _eglSetConfigKey(&base, EGL_NATIVE_RENDERABLE, EGL_TRUE); + _eglSetConfigKey(&base, EGL_BIND_TO_TEXTURE_RGB, bind_to_texture_rgb); + if (_eglGetConfigKey(&base, EGL_ALPHA_SIZE) > 0) + _eglSetConfigKey(&base, EGL_BIND_TO_TEXTURE_RGBA, bind_to_texture_rgba); /* EGL_OPENGL_ES_BIT, EGL_OPENVG_BIT, EGL_OPENGL_ES2
Mesa (master): egl_dri2: Initialize config attributes with visual id and class from X
Module: Mesa Branch: master Commit: c3c1a7e1d9357a6ba5b8092b3b0b9c873737e53d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c3c1a7e1d9357a6ba5b8092b3b0b9c873737e53d Author: Kristian Høgsberg Date: Tue Feb 9 20:49:40 2010 -0500 egl_dri2: Initialize config attributes with visual id and class from X --- src/egl/drivers/dri2/egl_dri2.c | 74 ++ 1 files changed, 58 insertions(+), 16 deletions(-) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index a1a89e9..08e7e01 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -87,7 +87,6 @@ struct dri2_egl_surface __DRIbuffer buffers[5]; int buffer_count; xcb_xfixes_region_t region; - int have_back; int have_fake_front; int swap_interval; }; @@ -153,7 +152,8 @@ EGLint dri2_to_egl_attribute_map[] = { }; static void -dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id) +dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id, + int depth, xcb_visualtype_t *visual) { struct dri2_egl_config *conf; struct dri2_egl_display *dri2_dpy; @@ -215,21 +215,39 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id) } } - /* EGL_SWAP_BEHAVIOR_PRESERVED_BIT */ + /* In EGL, double buffer or not isn't a config attribute. Pixmaps +* surfaces are always single buffered, pbuffer surfaces are always +* back buffers and windows can be either, selected by passing an +* attribute at window surface construction time. To support this +* we ignore all double buffer configs and manipulate the buffer we +* return in the getBuffer callback to get the behaviour we want. */ - /* FIXME: Figure out how to get the visual ID and types */ if (double_buffer) { + free(conf); + return; + } + + /* EGL_SWAP_BEHAVIOR_PRESERVED_BIT */ + + if (visual != NULL) { + if (depth != _eglGetConfigKey(&conf->base, EGL_BUFFER_SIZE)) { +free(conf); +return; + } + _eglSetConfigKey(&conf->base, EGL_SURFACE_TYPE, EGL_WINDOW_BIT | EGL_PIXMAP_BIT | EGL_PBUFFER_BIT); - _eglSetConfigKey(&conf->base, EGL_NATIVE_VISUAL_ID, 0x21); - _eglSetConfigKey(&conf->base, EGL_NATIVE_VISUAL_TYPE, - XCB_VISUAL_CLASS_TRUE_COLOR); + _eglSetConfigKey(&conf->base, EGL_NATIVE_VISUAL_ID, visual->visual_id); + _eglSetConfigKey(&conf->base, EGL_NATIVE_VISUAL_TYPE, visual->_class); } else { _eglSetConfigKey(&conf->base, EGL_SURFACE_TYPE, EGL_PIXMAP_BIT | EGL_PBUFFER_BIT); } + _eglSetConfigKey(&conf->base, EGL_BIND_TO_TEXTURE_RGB, bind_to_texture_rgb); - _eglSetConfigKey(&conf->base, EGL_BIND_TO_TEXTURE_RGBA, bind_to_texture_rgba); + if (_eglGetConfigKey(&conf->base, EGL_ALPHA_SIZE) > 0) + _eglSetConfigKey(&conf->base, + EGL_BIND_TO_TEXTURE_RGBA, bind_to_texture_rgba); /* EGL_OPENGL_ES_BIT, EGL_OPENVG_BIT, EGL_OPENGL_ES2_BIT */ _eglSetConfigKey(&conf->base, EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT); @@ -261,7 +279,6 @@ dri2_process_buffers(struct dri2_egl_surface *dri2_surf, dri2_surf->buffer_count = count; dri2_surf->have_fake_front = 0; - dri2_surf->have_back = 0; /* This assumes the DRI2 buffer attachment tokens matches the * __DRIbuffer tokens. */ @@ -271,10 +288,14 @@ dri2_process_buffers(struct dri2_egl_surface *dri2_surf, dri2_surf->buffers[i].pitch = buffers[i].pitch; dri2_surf->buffers[i].cpp = buffers[i].cpp; dri2_surf->buffers[i].flags = buffers[i].flags; + + /* We only use the DRI drivers single buffer configs. This + * means that if we try to render to a window, DRI2 will give us + * the fake front buffer, which we'll use as a back buffer. + * Note that EGL doesn't require that several clients rendering + * to the same window must see the same aux buffers. */ if (dri2_surf->buffers[i].attachment == __DRI_BUFFER_FAKE_FRONT_LEFT) dri2_surf->have_fake_front = 1; - if (dri2_surf->buffers[i].attachment == __DRI_BUFFER_BACK_LEFT) - dri2_surf->have_back = 1; } if (dri2_surf->region != XCB_NONE) @@ -448,7 +469,9 @@ dri2_initialize(_EGLDriver *drv, _EGLDisplay *disp, xcb_generic_error_t *error; drm_magic_t magic; xcb_screen_iterator_t s; - int i; + xcb_depth_iterator_t d; + xcb_visualtype_t *visuals; + int i, j, id; dri2_dpy = malloc(sizeof *dri2_dpy); if (!dri2_dpy) @@ -608,8 +631,27 @@ dri2_initialize(_EGLDriver *drv, _EGLDisplay *disp, if (!dri2_bind_extensions(dri2_dpy, dri2_core_extensions, extensions)) goto cleanup_dri_screen; - for (i = 0; driver_configs[i]; i++) - dri2_add_config(disp, driver_configs[i], i + 1); + s = xcb_setup_roots_iterator(x
Mesa (master): eglinfo: Also print visual type, assuming X visual types
Module: Mesa Branch: master Commit: 368bb3dc2b640f862b857b2329499cad34a78846 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=368bb3dc2b640f862b857b2329499cad34a78846 Author: Kristian Høgsberg Date: Tue Feb 9 19:59:33 2010 -0500 eglinfo: Also print visual type, assuming X visual types This may not make a lot of sense for non-X EGL, but for EGL under X it's very useful. --- progs/egl/eglinfo.c | 15 ++- 1 files changed, 10 insertions(+), 5 deletions(-) diff --git a/progs/egl/eglinfo.c b/progs/egl/eglinfo.c index 9664667..37bc22e 100644 --- a/progs/egl/eglinfo.c +++ b/progs/egl/eglinfo.c @@ -37,6 +37,10 @@ #define MAX_MODES 1000 #define MAX_SCREENS 10 +/* These are X visual types, so if you're running eglinfo under + * something not X, they probably don't make sense. */ +static const char *vnames[] = { "SG", "GS", "SC", "PC", "TC", "DC" }; + /** * Print table of all available configurations. */ @@ -49,15 +53,15 @@ PrintConfigs(EGLDisplay d) eglGetConfigs(d, configs, MAX_CONFIGS, &numConfigs); printf("Configurations:\n"); - printf(" bf lv colorbuffer dp st msvis cav bi renderable supported\n"); - printf(" id sz l r g b a th cl ns bid eat nd gl es es2 vg surfaces \n"); + printf(" bf lv colorbuffer dp st msvis cav bi renderable supported\n"); + printf(" id sz l r g b a th cl ns bid eat nd gl es es2 vg surfaces \n"); printf("-\n"); for (i = 0; i < numConfigs; i++) { EGLint id, size, level; EGLint red, green, blue, alpha; EGLint depth, stencil; EGLint renderable, surfaces; - EGLint vid, caveat, bindRgb, bindRgba; + EGLint vid, vtype, caveat, bindRgb, bindRgba; EGLint samples, sampleBuffers; char surfString[100] = ""; @@ -72,6 +76,7 @@ PrintConfigs(EGLDisplay d) eglGetConfigAttrib(d, configs[i], EGL_DEPTH_SIZE, &depth); eglGetConfigAttrib(d, configs[i], EGL_STENCIL_SIZE, &stencil); eglGetConfigAttrib(d, configs[i], EGL_NATIVE_VISUAL_ID, &vid); + eglGetConfigAttrib(d, configs[i], EGL_NATIVE_VISUAL_TYPE, &vtype); eglGetConfigAttrib(d, configs[i], EGL_CONFIG_CAVEAT, &caveat); eglGetConfigAttrib(d, configs[i], EGL_BIND_TO_TEXTURE_RGB, &bindRgb); @@ -95,11 +100,11 @@ PrintConfigs(EGLDisplay d) if (strlen(surfString) > 0) surfString[strlen(surfString) - 1] = 0; - printf("0x%02x %2d %2d %2d %2d %2d %2d %2d %2d %2d%2d 0x%03x ", + printf("0x%02x %2d %2d %2d %2d %2d %2d %2d %2d %2d%2d 0x%02x%s ", id, size, level, red, green, blue, alpha, depth, stencil, - samples, sampleBuffers, vid); + samples, sampleBuffers, vid, vtype < 6 ? vnames[vtype] : "--"); printf(" %c %c %c %c %c %c %s\n", (caveat != EGL_NONE) ? 'y' : ' ', (bindRgba) ? 'a' : (bindRgb) ? 'y' : ' ', ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl_dri2: Allow pbuffer and pixmap surfaces for all configs
Module: Mesa Branch: master Commit: 360faf80ca763e195425ee7cadfee64002c8cd98 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=360faf80ca763e195425ee7cadfee64002c8cd98 Author: Kristian Høgsberg Date: Tue Feb 9 16:06:23 2010 -0500 egl_dri2: Allow pbuffer and pixmap surfaces for all configs --- src/egl/drivers/dri2/egl_dri2.c | 15 +++ 1 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 04d698e..a1a89e9 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -217,20 +217,19 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id) /* EGL_SWAP_BEHAVIOR_PRESERVED_BIT */ + /* FIXME: Figure out how to get the visual ID and types */ if (double_buffer) { - /* FIXME: Figure out how to get the visual ID and types */ - _eglSetConfigKey(&conf->base, EGL_SURFACE_TYPE, EGL_WINDOW_BIT); + _eglSetConfigKey(&conf->base, EGL_SURFACE_TYPE, + EGL_WINDOW_BIT | EGL_PIXMAP_BIT | EGL_PBUFFER_BIT); _eglSetConfigKey(&conf->base, EGL_NATIVE_VISUAL_ID, 0x21); _eglSetConfigKey(&conf->base, EGL_NATIVE_VISUAL_TYPE, XCB_VISUAL_CLASS_TRUE_COLOR); } else { - _eglSetConfigKey(&conf->base, - EGL_SURFACE_TYPE, EGL_PIXMAP_BIT | EGL_PBUFFER_BIT); - _eglSetConfigKey(&conf->base, - EGL_BIND_TO_TEXTURE_RGB, bind_to_texture_rgb); - _eglSetConfigKey(&conf->base, - EGL_BIND_TO_TEXTURE_RGBA, bind_to_texture_rgba); + _eglSetConfigKey(&conf->base, EGL_SURFACE_TYPE, + EGL_PIXMAP_BIT | EGL_PBUFFER_BIT); } + _eglSetConfigKey(&conf->base, EGL_BIND_TO_TEXTURE_RGB, bind_to_texture_rgb); + _eglSetConfigKey(&conf->base, EGL_BIND_TO_TEXTURE_RGBA, bind_to_texture_rgba); /* EGL_OPENGL_ES_BIT, EGL_OPENVG_BIT, EGL_OPENGL_ES2_BIT */ _eglSetConfigKey(&conf->base, EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (mesa_7_7_branch): st/xorg: fix a silly offset bug in xv
Module: Mesa Branch: mesa_7_7_branch Commit: 2d3262d47d57d71a55e5c61d4910c1f38cb0bb8c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2d3262d47d57d71a55e5c61d4910c1f38cb0bb8c Author: Zack Rusin Date: Tue Feb 9 21:12:57 2010 -0500 st/xorg: fix a silly offset bug in xv we were multiplying the difference in the wrong direction. --- src/gallium/state_trackers/xorg/xorg_xv.c | 11 +-- 1 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/gallium/state_trackers/xorg/xorg_xv.c b/src/gallium/state_trackers/xorg/xorg_xv.c index 5f6d749..eb5ce88 100644 --- a/src/gallium/state_trackers/xorg/xorg_xv.c +++ b/src/gallium/state_trackers/xorg/xorg_xv.c @@ -389,6 +389,9 @@ draw_yuv(struct xorg_xv_port_priv *port, { struct pipe_texture **textures = port->yuv[port->current_set]; + /*debug_printf(" draw_yuv([%d, %d, %d ,%d], [%d, %d, %d, %d])\n", +src_x, src_y, src_w, src_h, +dst_x, dst_y, dst_w, dst_h);*/ renderer_draw_yuv(port->r, src_x, src_y, src_w, src_h, dst_x, dst_y, dst_w, dst_h, @@ -490,6 +493,9 @@ display_video(ScrnInfoPtr pScrn, struct xorg_xv_port_priv *pPriv, int id, exaMoveInPixmap(pPixmap); dst = exaGetPixmapDriverPrivate(pPixmap); + /*debug_printf("display_video([%d, %d, %d, %d], [%d, %d, %d, %d])\n", + src_x, src_y, src_w, src_h, dstX, dstY, dst_w, dst_h);*/ + if (dst && !dst->tex) { xorg_exa_set_shared_usage(pPixmap); pScrn->pScreen->ModifyPixmapHeader(pPixmap, 0, 0, 0, 0, 0, NULL); @@ -540,8 +546,9 @@ display_video(ScrnInfoPtr pScrn, struct xorg_xv_port_priv *pPriv, int id, offset_w = dst_w - w; offset_h = dst_h - h; - draw_yuv(pPriv, src_x + offset_x*diff_x, src_y + offset_y*diff_y, - src_w - offset_w*diff_x, src_h - offset_h*diff_x, + draw_yuv(pPriv, + src_x + offset_x*diff_x, src_y + offset_y*diff_y, + src_w - offset_w*diff_x, src_h - offset_h*diff_y, x, y, w, h); pbox++; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): radeon: Fix printf formatings to match te values.
Module: Mesa Branch: master Commit: 77e6fb17d96ed9d9b3c2f52999e93da12a466405 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=77e6fb17d96ed9d9b3c2f52999e93da12a466405 Author: Pauli Nieminen Date: Wed Feb 10 03:20:02 2010 +0200 radeon: Fix printf formatings to match te values. --- src/mesa/drivers/dri/radeon/radeon_fbo.c |2 +- src/mesa/drivers/dri/radeon/radeon_texture.c |2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/radeon/radeon_fbo.c b/src/mesa/drivers/dri/radeon/radeon_fbo.c index 01fe933..56dcc50 100644 --- a/src/mesa/drivers/dri/radeon/radeon_fbo.c +++ b/src/mesa/drivers/dri/radeon/radeon_fbo.c @@ -530,7 +530,7 @@ radeon_render_texture(GLcontext * ctx, GLuint imageOffset; radeon_print(RADEON_TEXTURE, RADEON_TRACE, - "%s(%p, fb %p, rrb %p, att att)\n", + "%s(%p, fb %p, rrb %p, att %p)\n", __func__, ctx, fb, rrb, att); (void) fb; diff --git a/src/mesa/drivers/dri/radeon/radeon_texture.c b/src/mesa/drivers/dri/radeon/radeon_texture.c index 9179a3f..9b9d90b 100644 --- a/src/mesa/drivers/dri/radeon/radeon_texture.c +++ b/src/mesa/drivers/dri/radeon/radeon_texture.c @@ -284,7 +284,7 @@ void radeonGenerateMipmap(GLcontext* ctx, GLenum target, struct gl_texture_objec radeon_print(RADEON_TEXTURE, RADEON_TRACE, "%s(%p, target %s, tex %p)\n", - __func__, _mesa_lookup_enum_by_nr(target), + __func__, ctx, _mesa_lookup_enum_by_nr(target), texObj); if (bo && radeon_bo_is_referenced_by_cs(bo, rmesa->cmdbuf.cs)) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): radeon: Define EXT_framebuffer_object constants to match hw.
Module: Mesa Branch: master Commit: 42026a8ccf4f02d4648d65763e18d8bf98eb9bfd URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=42026a8ccf4f02d4648d65763e18d8bf98eb9bfd Author: Pauli Nieminen Date: Wed Feb 10 03:00:12 2010 +0200 radeon: Define EXT_framebuffer_object constants to match hw. This hides the assertion failure in glean/fbo test. Underlying problem when same texture is set twice to different attachments will cause assertion. --- src/mesa/drivers/dri/r200/r200_context.c |2 ++ src/mesa/drivers/dri/r300/r300_context.c |3 +++ src/mesa/drivers/dri/r600/r600_context.c |2 ++ src/mesa/drivers/dri/radeon/radeon_context.c |2 ++ 4 files changed, 9 insertions(+), 0 deletions(-) diff --git a/src/mesa/drivers/dri/r200/r200_context.c b/src/mesa/drivers/dri/r200/r200_context.c index 8986191..6ecd46e 100644 --- a/src/mesa/drivers/dri/r200/r200_context.c +++ b/src/mesa/drivers/dri/r200/r200_context.c @@ -360,6 +360,7 @@ GLboolean r200CreateContext( const __GLcontextModes *glVisual, ctx->Const.Max3DTextureLevels = 9; ctx->Const.MaxCubeTextureLevels = 12; ctx->Const.MaxTextureRectSize = 2048; + ctx->Const.MaxRenderbufferSize = 2048; ctx->Const.MaxTextureMaxAnisotropy = 16.0; @@ -390,6 +391,7 @@ GLboolean r200CreateContext( const __GLcontextModes *glVisual, ctx->Const.VertexProgram.MaxNativeAddressRegs = 1; ctx->Const.MaxDrawBuffers = 1; + ctx->Const.MaxColorAttachments = 1; _mesa_set_mvp_with_dp4( ctx, GL_TRUE ); diff --git a/src/mesa/drivers/dri/r300/r300_context.c b/src/mesa/drivers/dri/r300/r300_context.c index 7c21efb..fe2ed22 100644 --- a/src/mesa/drivers/dri/r300/r300_context.c +++ b/src/mesa/drivers/dri/r300/r300_context.c @@ -345,11 +345,13 @@ static void r300InitConstValues(GLcontext *ctx, radeonScreenPtr screen) ctx->Const.MaxTextureLevels = 13; ctx->Const.MaxCubeTextureLevels = 13; ctx->Const.MaxTextureRectSize = 4096; + ctx->Const.MaxRenderbufferSize = 4096; } else { ctx->Const.MaxTextureLevels = 12; ctx->Const.MaxCubeTextureLevels = 12; ctx->Const.MaxTextureRectSize = 2048; + ctx->Const.MaxRenderbufferSize = 2048; } ctx->Const.MinPointSize = 1.0; @@ -363,6 +365,7 @@ static void r300InitConstValues(GLcontext *ctx, radeonScreenPtr screen) ctx->Const.MaxLineWidthAA = R300_LINESIZE_MAX; ctx->Const.MaxDrawBuffers = 1; + ctx->Const.MaxColorAttachments = 1; /* currently bogus data */ if (r300->options.hw_tcl_enabled) { diff --git a/src/mesa/drivers/dri/r600/r600_context.c b/src/mesa/drivers/dri/r600/r600_context.c index 5b7d7c2..f575e74 100644 --- a/src/mesa/drivers/dri/r600/r600_context.c +++ b/src/mesa/drivers/dri/r600/r600_context.c @@ -270,6 +270,8 @@ static void r600InitConstValues(GLcontext *ctx, radeonScreenPtr screen) ctx->Const.MaxLineWidthAA = 0x / 8.0; ctx->Const.MaxDrawBuffers = 1; /* hw supports 8 */ + ctx->Const.MaxColorAttachments = 1; + ctx->Const.MaxRenderbufferSize = 4096; /* 256 for reg-based consts, inline consts also supported */ ctx->Const.VertexProgram.MaxInstructions = 8192; /* in theory no limit */ diff --git a/src/mesa/drivers/dri/radeon/radeon_context.c b/src/mesa/drivers/dri/radeon/radeon_context.c index 475e93b..4625af1 100644 --- a/src/mesa/drivers/dri/radeon/radeon_context.c +++ b/src/mesa/drivers/dri/radeon/radeon_context.c @@ -317,6 +317,8 @@ r100CreateContext( const __GLcontextModes *glVisual, rmesa->boxes = 0; ctx->Const.MaxDrawBuffers = 1; + ctx->Const.MaxColorAttachments = 1; + ctx->Const.MaxRenderbufferSize = 2048; _mesa_set_mvp_with_dp4( ctx, GL_TRUE ); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: move all limit/ constant assertions into check_context_limits()
Module: Mesa Branch: master Commit: 4bce2fb30e9cfb58831016e0bdda73abedd0a078 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4bce2fb30e9cfb58831016e0bdda73abedd0a078 Author: Brian Paul Date: Tue Feb 9 18:05:42 2010 -0700 mesa: move all limit/constant assertions into check_context_limits() --- src/mesa/main/context.c | 60 +++--- 1 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index 591aa11..2165af2 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -495,12 +495,6 @@ _mesa_init_constants(GLcontext *ctx) { assert(ctx); - assert(MAX_TEXTURE_LEVELS >= MAX_3D_TEXTURE_LEVELS); - assert(MAX_TEXTURE_LEVELS >= MAX_CUBE_TEXTURE_LEVELS); - - /* Max texture size should be <= max viewport size (render to texture) */ - assert((1 << (MAX_TEXTURE_LEVELS - 1)) <= MAX_WIDTH); - /* Constants, may be overriden (usually only reduced) by device drivers */ ctx->Const.MaxTextureLevels = MAX_TEXTURE_LEVELS; ctx->Const.Max3DTextureLevels = MAX_3D_TEXTURE_LEVELS; @@ -571,26 +565,6 @@ _mesa_init_constants(GLcontext *ctx) /* GL_EXT_provoking_vertex */ ctx->Const.QuadsFollowProvokingVertexConvention = GL_TRUE; - - /* sanity checks */ - ASSERT(ctx->Const.MaxTextureUnits == MIN2(ctx->Const.MaxTextureImageUnits, - ctx->Const.MaxTextureCoordUnits)); - ASSERT(ctx->Const.FragmentProgram.MaxLocalParams <= MAX_PROGRAM_LOCAL_PARAMS); - ASSERT(ctx->Const.VertexProgram.MaxLocalParams <= MAX_PROGRAM_LOCAL_PARAMS); - ASSERT(ctx->Const.MaxCombinedTextureImageUnits <= MAX_COMBINED_TEXTURE_IMAGE_UNITS); - ASSERT(ctx->Const.MaxTextureCoordUnits <= MAX_COMBINED_TEXTURE_IMAGE_UNITS); - ASSERT(MAX_COMBINED_TEXTURE_IMAGE_UNITS <= 32); /* GLbitfield size limit */ - - ASSERT(MAX_NV_FRAGMENT_PROGRAM_TEMPS <= MAX_PROGRAM_TEMPS); - ASSERT(MAX_NV_VERTEX_PROGRAM_TEMPS <= MAX_PROGRAM_TEMPS); - ASSERT(MAX_NV_VERTEX_PROGRAM_INPUTS <= VERT_ATTRIB_MAX); - ASSERT(MAX_NV_VERTEX_PROGRAM_OUTPUTS <= VERT_RESULT_MAX); - - /* check that we don't exceed the size of various bitfields */ - ASSERT(VERT_RESULT_MAX <= - (8 * sizeof(ctx->VertexProgram._Current->Base.OutputsWritten))); - ASSERT(FRAG_ATTRIB_MAX <= - (8 * sizeof(ctx->FragmentProgram._Current->Base.InputsRead))); } @@ -601,17 +575,36 @@ _mesa_init_constants(GLcontext *ctx) static void check_context_limits(GLcontext *ctx) { - /* Many context limits/constants are limited by the size of -* internal arrays. -*/ + /* check that we don't exceed the size of various bitfields */ + assert(VERT_RESULT_MAX <= + (8 * sizeof(ctx->VertexProgram._Current->Base.OutputsWritten))); + assert(FRAG_ATTRIB_MAX <= + (8 * sizeof(ctx->FragmentProgram._Current->Base.InputsRead))); + + assert(MAX_COMBINED_TEXTURE_IMAGE_UNITS <= 8 * sizeof(GLbitfield)); + + /* shader-related checks */ + assert(ctx->Const.FragmentProgram.MaxLocalParams <= MAX_PROGRAM_LOCAL_PARAMS); + assert(ctx->Const.VertexProgram.MaxLocalParams <= MAX_PROGRAM_LOCAL_PARAMS); + + assert(MAX_NV_FRAGMENT_PROGRAM_TEMPS <= MAX_PROGRAM_TEMPS); + assert(MAX_NV_VERTEX_PROGRAM_TEMPS <= MAX_PROGRAM_TEMPS); + assert(MAX_NV_VERTEX_PROGRAM_INPUTS <= VERT_ATTRIB_MAX); + assert(MAX_NV_VERTEX_PROGRAM_OUTPUTS <= VERT_RESULT_MAX); + + /* Texture unit checks */ assert(ctx->Const.MaxTextureImageUnits <= MAX_TEXTURE_IMAGE_UNITS); assert(ctx->Const.MaxTextureCoordUnits <= MAX_TEXTURE_COORD_UNITS); assert(ctx->Const.MaxTextureUnits <= MAX_TEXTURE_IMAGE_UNITS); assert(ctx->Const.MaxTextureUnits <= MAX_TEXTURE_COORD_UNITS); - + assert(ctx->Const.MaxTextureUnits == MIN2(ctx->Const.MaxTextureImageUnits, + ctx->Const.MaxTextureCoordUnits)); + assert(ctx->Const.MaxCombinedTextureImageUnits <= MAX_COMBINED_TEXTURE_IMAGE_UNITS); + assert(ctx->Const.MaxTextureCoordUnits <= MAX_COMBINED_TEXTURE_IMAGE_UNITS); /* number of coord units cannot be greater than number of image units */ assert(ctx->Const.MaxTextureCoordUnits <= ctx->Const.MaxTextureImageUnits); + /* Texture size checks */ assert(ctx->Const.MaxTextureLevels <= MAX_TEXTURE_LEVELS); assert(ctx->Const.Max3DTextureLevels <= MAX_3D_TEXTURE_LEVELS); assert(ctx->Const.MaxCubeTextureLevels <= MAX_CUBE_TEXTURE_LEVELS); @@ -622,6 +615,13 @@ check_context_limits(GLcontext *ctx) assert((1 << (ctx->Const.MaxCubeTextureLevels - 1)) <= MAX_WIDTH); assert((1 << (ctx->Const.Max3DTextureLevels - 1)) <= MAX_WIDTH); + /* Texture level checks */ + assert(MAX_TEXTURE_LEVELS >= MAX_3D_TEXTURE_LEVELS); + assert(MAX_TEXTURE_LEVELS >= MAX_CUBE_TEXTURE_LEVELS); + + /* Max texture size should be <= max viewport size (render to texture) */ + assert((1 << (MAX_TEXTURE_LEVELS - 1)) <= MAX_WIDTH); + assert(ctx->Const.MaxViewportWidth <= MAX_WIDT
Mesa (master): Drop incorrectly revived files during the ' gallium-nopointsizeminmax' merge.
Module: Mesa Branch: master Commit: 96100f39be32a2c5148f8ace35c22b6dcc30f75f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=96100f39be32a2c5148f8ace35c22b6dcc30f75f Author: Francisco Jerez Date: Wed Feb 10 00:36:22 2010 +0100 Drop incorrectly revived files during the 'gallium-nopointsizeminmax' merge. --- src/gallium/drivers/nv10/nv10_state.c | 590 - src/gallium/drivers/nv20/nv20_state.c | 583 2 files changed, 0 insertions(+), 1173 deletions(-) diff --git a/src/gallium/drivers/nv10/nv10_state.c b/src/gallium/drivers/nv10/nv10_state.c deleted file mode 100644 index 6f674d6..000 --- a/src/gallium/drivers/nv10/nv10_state.c +++ /dev/null @@ -1,590 +0,0 @@ -#include "draw/draw_context.h" -#include "pipe/p_state.h" -#include "pipe/p_defines.h" -#include "pipe/p_shader_tokens.h" -#include "pipe/p_inlines.h" - -#include "tgsi/tgsi_parse.h" - -#include "nv10_context.h" -#include "nv10_state.h" - -static void * -nv10_blend_state_create(struct pipe_context *pipe, - const struct pipe_blend_state *cso) -{ - struct nv10_blend_state *cb; - - cb = MALLOC(sizeof(struct nv10_blend_state)); - - cb->b_enable = cso->blend_enable ? 1 : 0; - cb->b_srcfunc = ((nvgl_blend_func(cso->alpha_src_factor)<<16) | -(nvgl_blend_func(cso->rgb_src_factor))); - cb->b_dstfunc = ((nvgl_blend_func(cso->alpha_dst_factor)<<16) | -(nvgl_blend_func(cso->rgb_dst_factor))); - - cb->c_mask = (((cso->colormask & PIPE_MASK_A) ? (0x01<<24) : 0) | - ((cso->colormask & PIPE_MASK_R) ? (0x01<<16) : 0) | - ((cso->colormask & PIPE_MASK_G) ? (0x01<< 8) : 0) | - ((cso->colormask & PIPE_MASK_B) ? (0x01<< 0) : 0)); - - cb->d_enable = cso->dither ? 1 : 0; - - return (void *)cb; -} - -static void -nv10_blend_state_bind(struct pipe_context *pipe, void *blend) -{ - struct nv10_context *nv10 = nv10_context(pipe); - - nv10->blend = (struct nv10_blend_state*)blend; - - nv10->dirty |= NV10_NEW_BLEND; -} - -static void -nv10_blend_state_delete(struct pipe_context *pipe, void *hwcso) -{ - FREE(hwcso); -} - - -static INLINE unsigned -wrap_mode(unsigned wrap) { - unsigned ret; - - switch (wrap) { - case PIPE_TEX_WRAP_REPEAT: - ret = NV10TCL_TX_FORMAT_WRAP_S_REPEAT; - break; - case PIPE_TEX_WRAP_MIRROR_REPEAT: - ret = NV10TCL_TX_FORMAT_WRAP_S_MIRRORED_REPEAT; - break; - case PIPE_TEX_WRAP_CLAMP_TO_EDGE: - ret = NV10TCL_TX_FORMAT_WRAP_S_CLAMP_TO_EDGE; - break; - case PIPE_TEX_WRAP_CLAMP_TO_BORDER: - ret = NV10TCL_TX_FORMAT_WRAP_S_CLAMP_TO_BORDER; - break; - case PIPE_TEX_WRAP_CLAMP: - ret = NV10TCL_TX_FORMAT_WRAP_S_CLAMP; - break; - case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE: - case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER: - case PIPE_TEX_WRAP_MIRROR_CLAMP: - default: - NOUVEAU_ERR("unknown wrap mode: %d\n", wrap); - ret = NV10TCL_TX_FORMAT_WRAP_S_REPEAT; - break; - } - - return ret >> NV10TCL_TX_FORMAT_WRAP_S_SHIFT; -} - -static void * -nv10_sampler_state_create(struct pipe_context *pipe, - const struct pipe_sampler_state *cso) -{ - struct nv10_sampler_state *ps; - uint32_t filter = 0; - - ps = MALLOC(sizeof(struct nv10_sampler_state)); - - ps->wrap = ((wrap_mode(cso->wrap_s) << NV10TCL_TX_FORMAT_WRAP_S_SHIFT) | - (wrap_mode(cso->wrap_t) << NV10TCL_TX_FORMAT_WRAP_T_SHIFT)); - - ps->en = 0; - if (cso->max_anisotropy > 1.0) { - /* no idea, binary driver sets it, works without it.. meh.. */ - ps->wrap |= (1 << 5); - -/* if (cso->max_anisotropy >= 16.0) { - ps->en |= NV10TCL_TX_ENABLE_ANISO_16X; - } else - if (cso->max_anisotropy >= 12.0) { - ps->en |= NV10TCL_TX_ENABLE_ANISO_12X; - } else - if (cso->max_anisotropy >= 10.0) { - ps->en |= NV10TCL_TX_ENABLE_ANISO_10X; - } else - if (cso->max_anisotropy >= 8.0) { - ps->en |= NV10TCL_TX_ENABLE_ANISO_8X; - } else - if (cso->max_anisotropy >= 6.0) { - ps->en |= NV10TCL_TX_ENABLE_ANISO_6X; - } else - if (cso->max_anisotropy >= 4.0) { - ps->en |= NV10TCL_TX_ENABLE_ANISO_4X; - } else { - ps->en |= NV10TCL_TX_ENABLE_ANISO_2X; - }*/ - } - - switch (cso->mag_img_filter) { - case PIPE_TEX_FILTER_LINEAR: - filter |= NV10TCL_TX_FILTER_MAGNIFY_L
Mesa (master): r300g: One less assert.
Module: Mesa Branch: master Commit: dbc13401915b345df584a621b1b2aaa9030bfac5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=dbc13401915b345df584a621b1b2aaa9030bfac5 Author: Corbin Simpson Date: Tue Feb 9 13:58:53 2010 -0800 r300g: One less assert. This entire codepath needs to be cleaned to be more pliant towards shader failure. --- src/gallium/drivers/r300/r300_tgsi_to_rc.c |1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/src/gallium/drivers/r300/r300_tgsi_to_rc.c b/src/gallium/drivers/r300/r300_tgsi_to_rc.c index a88a947..1c82fcc 100644 --- a/src/gallium/drivers/r300/r300_tgsi_to_rc.c +++ b/src/gallium/drivers/r300/r300_tgsi_to_rc.c @@ -146,7 +146,6 @@ static unsigned translate_opcode(unsigned opcode) } debug_printf("r300: Unknown TGSI/RC opcode: %i\n", opcode); -assert(0); return RC_OPCODE_ILLEGAL_OPCODE; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): r300g: Don't write non-existent bit on non-r500.
Module: Mesa Branch: master Commit: 8c85002951e29462a7c2852b4b59fe0d438da137 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8c85002951e29462a7c2852b4b59fe0d438da137 Author: Corbin Simpson Date: Tue Feb 9 13:53:30 2010 -0800 r300g: Don't write non-existent bit on non-r500. Might help with compiz being funky with MRTs. --- src/gallium/drivers/r300/r300_emit.c | 15 +++ 1 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/r300/r300_emit.c b/src/gallium/drivers/r300/r300_emit.c index ae83511..de6ba65 100644 --- a/src/gallium/drivers/r300/r300_emit.c +++ b/src/gallium/drivers/r300/r300_emit.c @@ -381,6 +381,7 @@ void r500_emit_fs_constant_buffer(struct r300_context* r300, void r300_emit_fb_state(struct r300_context* r300, void* state) { struct pipe_framebuffer_state* fb = (struct pipe_framebuffer_state*)state; +struct r300_screen* r300screen = r300_screen(r300->context.screen); struct r300_texture* tex; struct pipe_surface* surf; int i; @@ -399,10 +400,16 @@ void r300_emit_fb_state(struct r300_context* r300, void* state) /* Set the number of colorbuffers. */ if (fb->nr_cbufs > 1) { -OUT_CS_REG(R300_RB3D_CCTL, -R300_RB3D_CCTL_NUM_MULTIWRITES(fb->nr_cbufs) | -R300_RB3D_CCTL_INDEPENDENT_COLOR_CHANNEL_MASK_ENABLE | -R300_RB3D_CCTL_INDEPENDENT_COLORFORMAT_ENABLE_ENABLE); +if (r300screen->caps->is_r500) { +OUT_CS_REG(R300_RB3D_CCTL, +R300_RB3D_CCTL_NUM_MULTIWRITES(fb->nr_cbufs) | +R300_RB3D_CCTL_INDEPENDENT_COLORFORMAT_ENABLE_ENABLE | +R300_RB3D_CCTL_INDEPENDENT_COLOR_CHANNEL_MASK_ENABLE); +} else { +OUT_CS_REG(R300_RB3D_CCTL, +R300_RB3D_CCTL_NUM_MULTIWRITES(fb->nr_cbufs) | +R300_RB3D_CCTL_INDEPENDENT_COLORFORMAT_ENABLE_ENABLE); +} } else { OUT_CS_REG(R300_RB3D_CCTL, 0x0); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): r300g: Correct colorbuffer measurements.
Module: Mesa Branch: master Commit: 67b60b99348f50ead92e617a5085422da9d8c022 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=67b60b99348f50ead92e617a5085422da9d8c022 Author: Corbin Simpson Date: Tue Feb 9 13:50:54 2010 -0800 r300g: Correct colorbuffer measurements. Also clarify changes from pointminmax. --- src/gallium/drivers/r300/r300_screen.c |4 ++- src/gallium/drivers/r300/r300_state.c | 41 +-- src/gallium/drivers/r300/r300_texture.c |1 - 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/gallium/drivers/r300/r300_screen.c b/src/gallium/drivers/r300/r300_screen.c index da4ec54..13cd04a 100644 --- a/src/gallium/drivers/r300/r300_screen.c +++ b/src/gallium/drivers/r300/r300_screen.c @@ -186,8 +186,10 @@ static float r300_get_paramf(struct pipe_screen* pscreen, int param) * rendering limits. 2048 pixels should be enough for anybody. */ if (r300screen->caps->is_r500) { return 4096.0f; +} else if (r300screen->caps->is_r400) { +return 4021.0f; } else { -return 2048.0f; +return 2560.0f; } case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: return 16.0f; diff --git a/src/gallium/drivers/r300/r300_state.c b/src/gallium/drivers/r300/r300_state.c index d07e908..5fe9285 100644 --- a/src/gallium/drivers/r300/r300_state.c +++ b/src/gallium/drivers/r300/r300_state.c @@ -493,6 +493,8 @@ static void const struct pipe_framebuffer_state* state) { struct r300_context* r300 = r300_context(pipe); +struct r300_screen* r300screen = r300_screen(pipe->screen); +unsigned max_width, max_height; uint32_t zbuffer_bpp = 0; r300->fb_state.size = (10 * state->nr_cbufs) + @@ -505,6 +507,20 @@ static void return; } +if (r300screen->caps->is_r500) { +max_width = max_height = 4096; +} else if (r300screen->caps->is_r400) { +max_width = max_height = 4021; +} else { +max_width = max_height = 2560; +} + +if (state->width > max_width || state->height > max_height) { +debug_printf("r300: Implementation error: Render targets are too " +"big in %s, refusing to bind framebuffer state!\n", __FUNCTION__); +return; +} + if (r300->draw) { draw_flush(r300->draw); } @@ -607,6 +623,7 @@ static void r300_set_polygon_stipple(struct pipe_context* pipe, static void* r300_create_rs_state(struct pipe_context* pipe, const struct pipe_rasterizer_state* state) { +struct r300_screen* r300screen = r300_screen(pipe->screen); struct r300_rs_state* rs = CALLOC_STRUCT(r300_rs_state); /* Copy rasterizer state for Draw. */ @@ -621,20 +638,28 @@ static void* r300_create_rs_state(struct pipe_context* pipe, /* If bypassing TCL, or if no TCL engine is present, turn off the HW TCL. * Else, enable HW TCL and force Draw's TCL off. */ if (state->bypass_vs_clip_and_viewport || -!r300_screen(pipe->screen)->caps->has_tcl) { +!r300screen->caps->has_tcl) { rs->vap_control_status |= R300_VAP_TCL_BYPASS; } rs->point_size = pack_float_16_6x(state->point_size) | (pack_float_16_6x(state->point_size) << R300_POINTSIZE_X_SHIFT); -/* set hw limits - clamping done by state tracker in vs or point_size - XXX always need to emit this? */ -rs->point_minmax = -((int)(0.0 * 6.0) << - R300_GA_POINT_MINMAX_MIN_SHIFT) | -((int)(4096.0 * 6.0) << - R300_GA_POINT_MINMAX_MAX_SHIFT); +/* Point minimum and maximum sizes. This register has to be emitted, + * and it'd be a step backwards to put it in invariant state. */ +if (r300screen->caps->is_r500) { +rs->point_minmax = +((int)(0.0 * 6.0) << R300_GA_POINT_MINMAX_MIN_SHIFT) | +((int)(4096.0 * 6.0) << R300_GA_POINT_MINMAX_MAX_SHIFT); +} else if (r300screen->caps->is_r500) { +rs->point_minmax = +((int)(0.0 * 6.0) << R300_GA_POINT_MINMAX_MIN_SHIFT) | +((int)(4021.0 * 6.0) << R300_GA_POINT_MINMAX_MAX_SHIFT); +} else { +rs->point_minmax = +((int)(0.0 * 6.0) << R300_GA_POINT_MINMAX_MIN_SHIFT) | +((int)(2560.0 * 6.0) << R300_GA_POINT_MINMAX_MAX_SHIFT); +} rs->line_control = pack_float_16_6x(state->line_width) | R300_GA_LINE_CNTL_END_TYPE_COMP; diff --git a/src/gallium/drivers/r300/r300_texture.c b/src/gallium/drivers/r300/r300_texture.c index 67bf8ce..417a573 100644 --- a/src/gallium/drivers/r300/r300_texture.c +++ b/src/gallium/drivers/r300/r300_texture.c @@ -80,7 +80,6 @@ static void r300_setup_texture_state(struct r300_screen* screen, struct r300_tex state->format2 |= R500_TXHEIGHT_BIT11; } } -asse
Mesa (master): r300g: Be ever-so-slightly more useful on bad shaders.
Module: Mesa Branch: master Commit: 5a27a77d009b44dcd2eb35c3b66bd88cf5005d24 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5a27a77d009b44dcd2eb35c3b66bd88cf5005d24 Author: Corbin Simpson Date: Tue Feb 9 13:50:38 2010 -0800 r300g: Be ever-so-slightly more useful on bad shaders. --- src/gallium/drivers/r300/r300_tgsi_to_rc.c |4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/src/gallium/drivers/r300/r300_tgsi_to_rc.c b/src/gallium/drivers/r300/r300_tgsi_to_rc.c index 941ec17..a88a947 100644 --- a/src/gallium/drivers/r300/r300_tgsi_to_rc.c +++ b/src/gallium/drivers/r300/r300_tgsi_to_rc.c @@ -29,6 +29,7 @@ #include "tgsi/tgsi_scan.h" #include "tgsi/tgsi_util.h" +#include "util/u_debug.h" static unsigned translate_opcode(unsigned opcode) { @@ -144,7 +145,8 @@ static unsigned translate_opcode(unsigned opcode) case TGSI_OPCODE_KIL: return RC_OPCODE_KIL; } -fprintf(stderr, "Unknown opcode: %i\n", opcode); +debug_printf("r300: Unknown TGSI/RC opcode: %i\n", opcode); +assert(0); return RC_OPCODE_ILLEGAL_OPCODE; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl_dri2: Implement eglBindTexImage()
Module: Mesa Branch: master Commit: bba5a98dfde705d898ada1c8eac41cc7c6275fe2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=bba5a98dfde705d898ada1c8eac41cc7c6275fe2 Author: Kristian Høgsberg Date: Tue Feb 9 15:49:28 2010 -0500 egl_dri2: Implement eglBindTexImage() --- src/egl/drivers/dri2/egl_dri2.c | 85 ++ 1 files changed, 76 insertions(+), 9 deletions(-) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index b43e911..04d698e 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -58,15 +58,16 @@ struct dri2_egl_driver struct dri2_egl_display { - xcb_connection_t *conn; - int dri2_major; - int dri2_minor; - __DRIscreen *dri_screen; - void *driver; - __DRIcoreExtension *core; - __DRIdri2Extension *dri2; - __DRI2flushExtension *flush; - int fd; + xcb_connection_t *conn; + int dri2_major; + int dri2_minor; + __DRIscreen *dri_screen; + void *driver; + __DRIcoreExtension *core; + __DRIdri2Extension *dri2; + __DRI2flushExtension *flush; + __DRItexBufferExtension *tex_buffer; + int fd; __DRIdri2LoaderExtension loader_extension; const __DRIextension *extensions[2]; @@ -389,6 +390,7 @@ static struct dri2_extension_match dri2_driver_extensions[] = { static struct dri2_extension_match dri2_core_extensions[] = { { __DRI2_FLUSH, 1, offsetof(struct dri2_egl_display, flush) }, + { __DRI_TEX_BUFFER, 2, offsetof(struct dri2_egl_display, tex_buffer) }, { NULL } }; @@ -964,6 +966,69 @@ dri2_copy_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf, return EGL_TRUE; } +static EGLBoolean +dri2_bind_tex_image(_EGLDriver *drv, + _EGLDisplay *disp, _EGLSurface *surf, EGLint buffer) +{ + struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); + struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surf); + struct dri2_egl_context *dri2_ctx; + _EGLContext *ctx; + GLint format, target; + + ctx = _eglGetCurrentContext(); + dri2_ctx = dri2_egl_context(ctx); + + if (buffer != EGL_BACK_BUFFER) { + _eglError(EGL_BAD_PARAMETER, "eglBindTexImage"); + return EGL_FALSE; + } + + /* We allow binding pixmaps too... Not conformat, but we can do it +* for free and it's useful for X compositors. Supposedly there's +* a EGL_NOKIA_texture_from_pixmap extension that allows that, but +* I couldn't find it at this time. */ + if (dri2_surf->base.Type & (EGL_PBUFFER_BIT | EGL_PIXMAP_BIT) == 0) { + _eglError(EGL_BAD_SURFACE, "eglBindTexImage"); + return EGL_FALSE; + } + + switch (dri2_surf->base.TextureFormat) { + case EGL_TEXTURE_RGB: + format = __DRI_TEXTURE_FORMAT_RGB; + break; + case EGL_TEXTURE_RGBA: + format = __DRI_TEXTURE_FORMAT_RGBA; + break; + default: + _eglError(EGL_BAD_MATCH, "eglBindTexImage"); + return EGL_FALSE; + } + + switch (dri2_surf->base.TextureTarget) { + case EGL_TEXTURE_2D: + target = GL_TEXTURE_2D; + break; + default: + _eglError(EGL_BAD_PARAMETER, "eglBindTexImage"); + return EGL_FALSE; + } + + (*dri2_dpy->tex_buffer->setTexBuffer2)(dri2_ctx->dri_context, + target, format, + dri2_surf->dri_drawable); + + return dri2_surf->base.BoundToTexture = EGL_TRUE; +} + +static EGLBoolean +dri2_release_tex_image(_EGLDriver *drv, + _EGLDisplay *disp, _EGLSurface *surf, EGLint buffer) +{ + return EGL_TRUE; +} + + /** * This is the main entrypoint into the driver, called by libEGL. * Create a new _EGLDriver object and init its dispatch table. @@ -991,6 +1056,8 @@ _eglMain(const char *args) dri2_drv->base.API.WaitClient = dri2_wait_client; dri2_drv->base.API.WaitNative = dri2_wait_native; dri2_drv->base.API.CopyBuffers = dri2_copy_buffers; + dri2_drv->base.API.BindTexImage = dri2_bind_tex_image; + dri2_drv->base.API.ReleaseTexImage = dri2_release_tex_image; dri2_drv->base.Name = "DRI2"; dri2_drv->base.Unload = dri2_unload; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): configure.ac: Enable egl demos when --enable-egl is passed
Module: Mesa Branch: master Commit: 1ebc5681545786c247aacec8198a0fccef93b5d8 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1ebc5681545786c247aacec8198a0fccef93b5d8 Author: Kristian Høgsberg Date: Tue Feb 9 15:54:59 2010 -0500 configure.ac: Enable egl demos when --enable-egl is passed --- configure.ac |4 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/configure.ac b/configure.ac index a273a16..27405bb 100644 --- a/configure.ac +++ b/configure.ac @@ -924,6 +924,10 @@ if test "x$enable_egl" = xyes; then EGL_DRIVERS_DIRS="$EGL_DRIVERS_DIRS dri2" fi fi + +if test "$with_demos" = yes; then +PROGRAM_DIRS="$PROGRAM_DIRS egl" +fi fi AC_SUBST([EGL_LIB_DEPS]) AC_SUBST([EGL_DRIVERS_DIRS]) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): xeglgears: Add test case for eglBindTexImage()
Module: Mesa Branch: master Commit: ab487f7ffab6fc00f29c140d4f30c5ca2e008f9b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ab487f7ffab6fc00f29c140d4f30c5ca2e008f9b Author: Kristian Høgsberg Date: Tue Feb 9 15:52:30 2010 -0500 xeglgears: Add test case for eglBindTexImage() --- progs/egl/xeglgears.c | 99 + 1 files changed, 75 insertions(+), 24 deletions(-) diff --git a/progs/egl/xeglgears.c b/progs/egl/xeglgears.c index 9fdf474..efb63ef 100644 --- a/progs/egl/xeglgears.c +++ b/progs/egl/xeglgears.c @@ -237,6 +237,7 @@ gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width, static void draw(void) { + glClearColor(0.2, 0.2, 0.2, 0.2); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); @@ -319,8 +320,6 @@ init(void) glEndList(); glEnable(GL_NORMALIZE); - - glClearColor(0.2, 0.2, 0.2, 0.0); } @@ -529,6 +528,43 @@ egl_manager_destroy(struct egl_manager *eman) free(eman); } +enum { GEARS_WINDOW, GEARS_PIXMAP, GEARS_PBUFFER_COPY, GEARS_PBUFFER_TEXTURE }; + +static void +texture_gears(struct egl_manager *eman) +{ + static const GLint verts[12] = + { -5, -6, -10, 5, -6, -10, -5, 4, 10, 5, 4, 10 }; + static const GLint tex_coords[8] = { 0, 0, 1, 0, 0, 1, 1, 1 }; + static const GLuint indices[4] = { 0, 1, 2, 3 }; + + eglMakeCurrent(eman->dpy, eman->pix, eman->pix, eman->ctx); + + glClearColor(0, 0, 0, 0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glEnable(GL_TEXTURE_2D); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glVertexPointer(3, GL_INT, 0, verts); + glTexCoordPointer(2, GL_INT, 0, tex_coords); + + eglBindTexImage(eman->dpy, eman->pbuf, EGL_BACK_BUFFER); + + glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_INT, indices); + + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + glDisable(GL_TEXTURE_2D); + + eglReleaseTexImage(eman->dpy, eman->pbuf, EGL_BACK_BUFFER); +} + static void event_loop(struct egl_manager *eman, EGLint surface_type, EGLint w, EGLint h) { @@ -597,17 +633,25 @@ event_loop(struct egl_manager *eman, EGLint surface_type, EGLint w, EGLint h) if (angle > 3600.0) angle -= 3600.0; +if (surface_type == GEARS_PBUFFER_TEXTURE) +eglMakeCurrent(eman->dpy, eman->pbuf, eman->pbuf, eman->ctx); + draw(); switch (surface_type) { - case EGL_WINDOW_BIT: + case GEARS_WINDOW: eglSwapBuffers(eman->dpy, eman->win); break; - case EGL_PBUFFER_BIT: -eglWaitClient(); -if (!eglCopyBuffers(eman->dpy, eman->pbuf, eman->xpix)) - break; + case GEARS_PBUFFER_TEXTURE: + case GEARS_PBUFFER_COPY: + if (surface_type == GEARS_PBUFFER_TEXTURE) { + texture_gears(eman); + } else { + if (!eglCopyBuffers(eman->dpy, eman->pbuf, eman->xpix)) + break; + } + eglWaitClient(); /* fall through */ - case EGL_PIXMAP_BIT: + case GEARS_PIXMAP: eglWaitClient(); for (x = 0; x < w; x += orig_w) { for (y = 0; y < h; y += orig_h) { @@ -645,7 +689,8 @@ usage(void) printf(" -fullscreen run in fullscreen mode\n"); printf(" -info display OpenGL renderer info\n"); printf(" -pixmap use pixmap surface\n"); - printf(" -pbufferuse pbuffer surface\n"); + printf(" -pbuffer-copy use pbuffer surface and eglCopyBuffers\n"); + printf(" -pbuffer-textureuse pbuffer surface and eglBindTexImage\n"); } @@ -657,7 +702,7 @@ main(int argc, char *argv[]) char *dpyName = NULL; struct egl_manager *eman; EGLint attribs[] = { - EGL_SURFACE_TYPE, 0, /* filled later */ + EGL_SURFACE_TYPE, EGL_WINDOW_BIT, /* may be changed later */ EGL_RED_SIZE, 1, EGL_GREEN_SIZE, 1, EGL_BLUE_SIZE, 1, @@ -666,7 +711,7 @@ main(int argc, char *argv[]) EGL_NONE }; char win_title[] = "xeglgears (window/pixmap/pbuffer)"; - EGLint surface_type = EGL_WINDOW_BIT; + EGLint surface_type = GEARS_WINDOW; GLboolean printInfo = GL_FALSE; GLboolean fullscreen = GL_FALSE; EGLBoolean ret; @@ -684,10 +729,16 @@ main(int argc, char *argv[]) fullscreen = GL_TRUE; } else if (strcmp(argv[i], "-pixmap") == 0) { - surface_type = EGL_PIXMAP_BIT; + surface_type = GEARS_PIXMAP; +attribs[1] = EGL_PIXMAP_BIT; } - else if (strcmp
Mesa (master): dri_interface: Introduce DRI tokens for the texBuffer texture formats
Module: Mesa Branch: master Commit: debf00e5fc3828f63e0f99d72c7fa6cd6ce012c5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=debf00e5fc3828f63e0f99d72c7fa6cd6ce012c5 Author: Kristian Høgsberg Date: Tue Feb 9 15:26:14 2010 -0500 dri_interface: Introduce DRI tokens for the texBuffer texture formats This used to take GLX tokens, but the DRI interface can't depend on GLX defines. We fix this by introducing DRI tokens that have the same value as the GLX texture format tokens. --- include/GL/internal/dri_interface.h |7 +++ include/GL/internal/glcore.h |4 src/gallium/state_trackers/dri/dri_drawable.c |2 +- src/mesa/drivers/dri/intel/intel_tex_image.c |8 src/mesa/drivers/dri/r200/r200_texstate.c |8 src/mesa/drivers/dri/r300/r300_texstate.c |8 src/mesa/drivers/dri/r600/r600_texstate.c |6 +++--- src/mesa/drivers/dri/radeon/radeon_texstate.c |8 8 files changed, 27 insertions(+), 24 deletions(-) diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h index ec6238f..58540d6 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h @@ -230,6 +230,13 @@ struct __DRItexOffsetExtensionRec { }; +/* Valid values for format in the setTexBuffer2 function below. These + * values match the GLX tokens for compatibility reasons, but we + * define them here since the DRI interface can't depend on GLX. */ +#define __DRI_TEXTURE_FORMAT_NONE0x20D8 +#define __DRI_TEXTURE_FORMAT_RGB 0x20D9 +#define __DRI_TEXTURE_FORMAT_RGBA0x20DA + #define __DRI_TEX_BUFFER "DRI_TexBuffer" #define __DRI_TEX_BUFFER_VERSION 2 struct __DRItexBufferExtensionRec { diff --git a/include/GL/internal/glcore.h b/include/GL/internal/glcore.h index 18f6576..547b111 100644 --- a/include/GL/internal/glcore.h +++ b/include/GL/internal/glcore.h @@ -178,8 +178,4 @@ typedef struct __GLcontextModesRec { #define GLX_TEXTURE_2D_BIT_EXT 0x0002 #define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x0004 -#define GLX_TEXTURE_FORMAT_NONE_EXT0x20D8 -#define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9 -#define GLX_TEXTURE_FORMAT_RGBA_EXT0x20DA - #endif /* __gl_core_h_ */ diff --git a/src/gallium/state_trackers/dri/dri_drawable.c b/src/gallium/state_trackers/dri/dri_drawable.c index f7ed660..ff21f2f 100644 --- a/src/gallium/state_trackers/dri/dri_drawable.c +++ b/src/gallium/state_trackers/dri/dri_drawable.c @@ -268,7 +268,7 @@ void dri2_set_tex_buffer2(__DRIcontext *pDRICtx, GLint target, void dri2_set_tex_buffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv) { - dri2_set_tex_buffer2(pDRICtx, target, GLX_TEXTURE_FORMAT_RGBA_EXT, dPriv); + dri2_set_tex_buffer2(pDRICtx, target, __DRI_TEXTURE_FORMAT_RGBA, dPriv); } void diff --git a/src/mesa/drivers/dri/intel/intel_tex_image.c b/src/mesa/drivers/dri/intel/intel_tex_image.c index 6402141..d63292e 100644 --- a/src/mesa/drivers/dri/intel/intel_tex_image.c +++ b/src/mesa/drivers/dri/intel/intel_tex_image.c @@ -728,7 +728,7 @@ intelSetTexOffset(__DRIcontext *pDRICtx, GLint texname, void intelSetTexBuffer2(__DRIcontext *pDRICtx, GLint target, - GLint glx_texture_format, + GLint texture_format, __DRIdrawable *dPriv) { struct gl_framebuffer *fb = dPriv->driverPrivate; @@ -758,7 +758,7 @@ intelSetTexBuffer2(__DRIcontext *pDRICtx, GLint target, if (rb->region == NULL) return; - if (glx_texture_format == GLX_TEXTURE_FORMAT_RGB_EXT) + if (texture_format == __DRI_TEXTURE_FORMAT_RGB) internalFormat = GL_RGB; else internalFormat = GL_RGBA; @@ -788,7 +788,7 @@ intelSetTexBuffer2(__DRIcontext *pDRICtx, GLint target, intelImage->face = target_to_face(target); intelImage->level = level; - if (glx_texture_format == GLX_TEXTURE_FORMAT_RGB_EXT) + if (texture_format == __DRI_TEXTURE_FORMAT_RGB) texImage->TexFormat = MESA_FORMAT_XRGB; else texImage->TexFormat = MESA_FORMAT_ARGB; @@ -808,7 +808,7 @@ intelSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv) /* The old interface didn't have the format argument, so copy our * implementation's behavior at the time. */ - intelSetTexBuffer2(pDRICtx, target, GLX_TEXTURE_FORMAT_RGBA_EXT, dPriv); + intelSetTexBuffer2(pDRICtx, target, __DRI_TEXTURE_FORMAT_RGBA, dPriv); } diff --git a/src/mesa/drivers/dri/r200/r200_texstate.c b/src/mesa/drivers/dri/r200/r200_texstate.c index 458de08..9ccf30c 100644 --- a/src/mesa/drivers/dri/r200/r200_texstate.c +++ b/src/mesa/drivers/dri/r200/r200_texstate.c @@ -764,7 +764,7 @@ void r200SetTexOffset(__DRIcontext * pDRICtx, GLint texname, } } -void r200SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_format, +void r200SetTexBuffer2(__DRIcontext *pDRICtx, GLi
Mesa (master): egl_dri2: Use a helper function for looking up and binding extensions
Module: Mesa Branch: master Commit: 8c593d3ea9fa137290480e73aeebcf807c920f50 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8c593d3ea9fa137290480e73aeebcf807c920f50 Author: Kristian Høgsberg Date: Tue Feb 9 10:57:43 2010 -0500 egl_dri2: Use a helper function for looking up and binding extensions --- src/egl/drivers/dri2/egl_dri2.c | 79 +- 1 files changed, 52 insertions(+), 27 deletions(-) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 9237889..b43e911 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -375,6 +375,56 @@ static const char dri_driver_format[] = "%.*s/%.*s_dri.so"; static const char dri_driver_path[] = DEFAULT_DRIVER_DIR; +struct dri2_extension_match { + const char *name; + int version; + int offset; +}; + +static struct dri2_extension_match dri2_driver_extensions[] = { + { __DRI_CORE, 1, offsetof(struct dri2_egl_display, core) }, + { __DRI_DRI2, 1, offsetof(struct dri2_egl_display, dri2) }, + { NULL } +}; + +static struct dri2_extension_match dri2_core_extensions[] = { + { __DRI2_FLUSH, 1, offsetof(struct dri2_egl_display, flush) }, + { NULL } +}; + +static EGLBoolean +dri2_bind_extensions(struct dri2_egl_display *dri2_dpy, +struct dri2_extension_match *matches, +const __DRIextension **extensions) +{ + int i, j, ret = EGL_TRUE; + void *field; + + for (i = 0; extensions[i]; i++) { + _eglLog(_EGL_DEBUG, "DRI2: found extension `%s'", extensions[i]->name); + for (j = 0; matches[j].name; j++) { +if (strcmp(extensions[i]->name, matches[j].name) == 0 && +extensions[i]->version >= matches[j].version) { + field = ((char *) dri2_dpy + matches[j].offset); + *(const __DRIextension **) field = extensions[i]; + _eglLog(_EGL_INFO, "DRI2: found extension %s version %d", + extensions[i]->name, extensions[i]->version); +} + } + } + + for (j = 0; matches[j].name; j++) { + field = ((char *) dri2_dpy + matches[j].offset); + if (*(const __DRIextension **) field == NULL) { +_eglLog(_EGL_FATAL, "DRI2: did not find extension %s version %d", +matches[j].name, matches[j].version); +ret = EGL_FALSE; + } + } + + return ret; +} + /** * Called via eglInitialize(), GLX_drv->API.Initialize(). */ @@ -497,24 +547,8 @@ dri2_initialize(_EGLDriver *drv, _EGLDisplay *disp, goto cleanup_driver; } - for (i = 0; extensions[i]; i++) { - _eglLog(_EGL_DEBUG, "DRI2: found driver extension `%s'", - extensions[i]->name); - if (strcmp(extensions[i]->name, __DRI_CORE) == 0) -dri2_dpy->core = (__DRIcoreExtension *) extensions[i]; - if (strcmp(extensions[i]->name, __DRI_DRI2) == 0) -dri2_dpy->dri2 = (__DRIdri2Extension *) extensions[i]; - } - - if (dri2_dpy->core == NULL) { - _eglLog(_EGL_FATAL, "DRI2: driver has no core extension"); - goto cleanup_driver; - } - - if (dri2_dpy->dri2 == NULL) { - _eglLog(_EGL_FATAL, "DRI2: driver has no dri2 extension"); + if (!dri2_bind_extensions(dri2_dpy, dri2_driver_extensions, extensions)) goto cleanup_driver; - } snprintf(path, sizeof path, "%.*s", xcb_dri2_connect_device_name_length (connect), @@ -570,17 +604,8 @@ dri2_initialize(_EGLDriver *drv, _EGLDisplay *disp, } extensions = dri2_dpy->core->getExtensions(dri2_dpy->dri_screen); - for (i = 0; extensions[i]; i++) { - _eglLog(_EGL_DEBUG, "DRI2: found core extension `%s'", - extensions[i]->name); - if ((strcmp(extensions[i]->name, __DRI2_FLUSH) == 0)) -dri2_dpy->flush = (__DRI2flushExtension *) extensions[i]; - } - - if (dri2_dpy->flush == NULL) { - _eglLog(_EGL_FATAL, "DRI2: driver doesn't support the flush extension"); + if (!dri2_bind_extensions(dri2_dpy, dri2_core_extensions, extensions)) goto cleanup_dri_screen; - } for (i = 0; driver_configs[i]; i++) dri2_add_config(disp, driver_configs[i], i + 1); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (mesa_7_7_branch): vmware: Update vmwgfx_drm.h to kernel version.
Module: Mesa Branch: mesa_7_7_branch Commit: 3470d821baf5ffb9ab2e01edba5efe71e23088f1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3470d821baf5ffb9ab2e01edba5efe71e23088f1 Author: Thomas Hellstrom Date: Tue Feb 9 22:54:15 2010 +0100 vmware: Update vmwgfx_drm.h to kernel version. Signed-off-by: Thomas Hellstrom --- src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h |8 1 files changed, 8 insertions(+), 0 deletions(-) diff --git a/src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h b/src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h index 1457966..47914bd 100644 --- a/src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h +++ b/src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h @@ -260,15 +260,23 @@ union drm_vmw_surface_reference_arg { * to the nearest kernel tick. * @fence_rep: User-space address of a struct drm_vmw_fence_rep cast to an * uint64_t. + * @version: Allows expanding the execbuf ioctl parameters without breaking + * backwards compatibility, since user-space will always tell the kernel + * which version it uses. + * @flags: Execbuf flags. None currently. * * Argument to the DRM_VMW_EXECBUF Ioctl. */ +#define DRM_VMW_EXECBUF_VERSION 0 + struct drm_vmw_execbuf_arg { uint64_t commands; uint32_t command_size; uint32_t throttle_us; uint64_t fence_rep; +uint32_t version; +uint32_t flags; }; /** ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (refs/head/gallium-dynamicstencilref): docs: fix up documentation for stencil ref value changes
Module: Mesa Branch: refs/head/gallium-dynamicstencilref Commit: 98f8c4d0bb702c69fcddb504ddb702abc3aacc06 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=98f8c4d0bb702c69fcddb504ddb702abc3aacc06 Author: Roland Scheidegger Date: Tue Feb 9 21:48:43 2010 +0100 docs: fix up documentation for stencil ref value changes Also fix and clarify depth/stencil/alpha documentation a bit. --- src/gallium/docs/source/context.rst |5 +++-- src/gallium/docs/source/cso/dsa.rst | 15 +-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/gallium/docs/source/context.rst b/src/gallium/docs/source/context.rst index a766957..9080add 100644 --- a/src/gallium/docs/source/context.rst +++ b/src/gallium/docs/source/context.rst @@ -49,8 +49,9 @@ Non-CSO State These pieces of state are too small, variable, and/or trivial to have CSO objects. They all follow simple, one-method binding calls, e.g. -``set_edgeflags``. - +``set_blend_color``. +* ``set_stencil_ref`` sets the stencil front and back reference values + which are used as comparison values in stencil test. * ``set_blend_color`` * ``set_clip_state`` * ``set_polygon_stipple`` diff --git a/src/gallium/docs/source/cso/dsa.rst b/src/gallium/docs/source/cso/dsa.rst index 12abaa9..1bbe381 100644 --- a/src/gallium/docs/source/cso/dsa.rst +++ b/src/gallium/docs/source/cso/dsa.rst @@ -11,9 +11,9 @@ they are all stored in one structure. During actual execution, the order of operations done on fragments is always: +* Alpha * Stencil * Depth -* Alpha Depth Members - @@ -28,15 +28,18 @@ func Stencil Members --- -XXX document valuemask, writemask - enabled Whether the stencil test is enabled. For the second stencil, whether the -two-sided stencil is enabled. +two-sided stencil is enabled. If two-sided stencil is disabled, the other +fields for the second array member are not valid. func The stencil test function. One of PIPE_FUNC. -ref_value -Stencil test reference value; used for certain functions. +valuemask +Stencil test value mask; this is ANDed with the value in the stencil +buffer and the reference value before doing the stencil comparison test. +writemask +Stencil test writemask; this controls which bits of the stencil buffer +are written. fail_op The operation to carry out if the stencil test fails. One of PIPE_STENCIL_OP. ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallium/auxiliary: add -D__STDC_CONSTANT_MACROS
Module: Mesa Branch: master Commit: ed46e90f05195350c6861e9d3a4315cce86a9b3c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ed46e90f05195350c6861e9d3a4315cce86a9b3c Author: Brian Paul Date: Tue Feb 9 13:10:05 2010 -0700 gallium/auxiliary: add -D__STDC_CONSTANT_MACROS Not sure why this is needed now, after the gallivm re-org. --- src/gallium/auxiliary/Makefile |3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/src/gallium/auxiliary/Makefile b/src/gallium/auxiliary/Makefile index 02c65a9..507ca6e 100644 --- a/src/gallium/auxiliary/Makefile +++ b/src/gallium/auxiliary/Makefile @@ -166,6 +166,9 @@ CPP_SOURCES += \ endif +LIBRARY_DEFINES += -D__STDC_CONSTANT_MACROS + + include ../Makefile.template ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): llvmpipe: lp_tile_surface.c isn't committed yet
Module: Mesa Branch: master Commit: aa4ed6a0e61d4d1997c3602a1813eb14f41146f2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=aa4ed6a0e61d4d1997c3602a1813eb14f41146f2 Author: Brian Paul Date: Tue Feb 9 13:07:58 2010 -0700 llvmpipe: lp_tile_surface.c isn't committed yet --- src/gallium/drivers/llvmpipe/Makefile |1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/Makefile b/src/gallium/drivers/llvmpipe/Makefile index e880042..be38a43 100644 --- a/src/gallium/drivers/llvmpipe/Makefile +++ b/src/gallium/drivers/llvmpipe/Makefile @@ -37,7 +37,6 @@ C_SOURCES = \ lp_surface.c \ lp_tex_sample_llvm.c \ lp_texture.c \ - lp_tile_surface.c \ lp_tile_soa.c CPP_SOURCES = \ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): llvmpipe: remove .s rule (already in Makefile.template)
Module: Mesa Branch: master Commit: 822d951b5d3e07db0dd5cd609ebe2e9a7750f027 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=822d951b5d3e07db0dd5cd609ebe2e9a7750f027 Author: Brian Paul Date: Tue Feb 9 13:08:23 2010 -0700 llvmpipe: remove .s rule (already in Makefile.template) --- src/gallium/drivers/llvmpipe/Makefile |5 - 1 files changed, 0 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/Makefile b/src/gallium/drivers/llvmpipe/Makefile index be38a43..3173251 100644 --- a/src/gallium/drivers/llvmpipe/Makefile +++ b/src/gallium/drivers/llvmpipe/Makefile @@ -48,11 +48,6 @@ lp_tile_soa.c: lp_tile_soa.py ../../auxiliary/util/u_format_parse.py ../../auxil python lp_tile_soa.py ../../auxiliary/util/u_format.csv > $@ -# to make a .s file to inspect assembly code -.c.s: - $(CC) -S $(INCLUDES) $(DEFINES) $(CFLAGS) $(LIBRARY_DEFINES) $< - - testprogs := lp_test_format\ lp_test_blend \ lp_test_conv ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): radeon: Add some debug output for fbo support
Module: Mesa Branch: master Commit: 4767d27ee32cc30ee00ab5265ecbb8eeefcab8c9 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4767d27ee32cc30ee00ab5265ecbb8eeefcab8c9 Author: Pauli Nieminen Date: Tue Feb 9 21:37:19 2010 +0200 radeon: Add some debug output for fbo support --- src/mesa/drivers/dri/radeon/radeon_common.h |7 +++ src/mesa/drivers/dri/radeon/radeon_fbo.c | 53 ++ src/mesa/drivers/dri/radeon/radeon_span.c|8 src/mesa/drivers/dri/radeon/radeon_texture.c | 12 ++ 4 files changed, 80 insertions(+), 0 deletions(-) diff --git a/src/mesa/drivers/dri/radeon/radeon_common.h b/src/mesa/drivers/dri/radeon/radeon_common.h index f31f08e..cd01c99 100644 --- a/src/mesa/drivers/dri/radeon/radeon_common.h +++ b/src/mesa/drivers/dri/radeon/radeon_common.h @@ -48,6 +48,9 @@ void radeon_check_front_buffer_rendering(GLcontext *ctx); static inline struct radeon_renderbuffer *radeon_renderbuffer(struct gl_renderbuffer *rb) { struct radeon_renderbuffer *rrb = (struct radeon_renderbuffer *)rb; + radeon_print(RADEON_MEMORY, RADEON_TRACE, + "%s(rb %p)\n", + __func__, rb); if (rrb && rrb->base.ClassID == RADEON_RB_CLASS) return rrb; else @@ -56,6 +59,10 @@ static inline struct radeon_renderbuffer *radeon_renderbuffer(struct gl_renderbu static inline struct radeon_renderbuffer *radeon_get_renderbuffer(struct gl_framebuffer *fb, int att_index) { + radeon_print(RADEON_MEMORY, RADEON_TRACE, + "%s(fb %p, index %d)\n", + __func__, fb, att_index); + if (att_index >= 0) return radeon_renderbuffer(fb->Attachment[att_index].Renderbuffer); else diff --git a/src/mesa/drivers/dri/radeon/radeon_fbo.c b/src/mesa/drivers/dri/radeon/radeon_fbo.c index e780b9e..01fe933 100644 --- a/src/mesa/drivers/dri/radeon/radeon_fbo.c +++ b/src/mesa/drivers/dri/radeon/radeon_fbo.c @@ -29,6 +29,7 @@ #include "main/imports.h" #include "main/macros.h" #include "main/mtypes.h" +#include "main/enums.h" #include "main/fbobject.h" #include "main/framebuffer.h" #include "main/renderbuffer.h" @@ -56,6 +57,10 @@ radeon_delete_renderbuffer(struct gl_renderbuffer *rb) { struct radeon_renderbuffer *rrb = radeon_renderbuffer(rb); + radeon_print(RADEON_TEXTURE, RADEON_TRACE, + "%s(rb %p, rrb %p) \n", + __func__, rb, rrb); + ASSERT(rrb); if (rrb && rrb->bo) { @@ -68,6 +73,10 @@ static void * radeon_get_pointer(GLcontext *ctx, struct gl_renderbuffer *rb, GLint x, GLint y) { + radeon_print(RADEON_TEXTURE, RADEON_TRACE, + "%s(%p, rb %p) \n", + __func__, ctx, rb); + return NULL; } @@ -85,6 +94,10 @@ radeon_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb, GLboolean software_buffer = GL_FALSE; int cpp; + radeon_print(RADEON_TEXTURE, RADEON_TRACE, + "%s(%p, rb %p) \n", + __func__, ctx, rb); + ASSERT(rb->Name != 0); switch (internalFormat) { case GL_R3_G3_B2: @@ -200,6 +213,10 @@ radeon_alloc_window_storage(GLcontext * ctx, struct gl_renderbuffer *rb, rb->Width = width; rb->Height = height; rb->InternalFormat = internalFormat; + radeon_print(RADEON_TEXTURE, RADEON_TRACE, + "%s(%p, rb %p) \n", + __func__, ctx, rb); + return GL_TRUE; } @@ -212,6 +229,10 @@ radeon_resize_buffers(GLcontext *ctx, struct gl_framebuffer *fb, struct radeon_framebuffer *radeon_fb = (struct radeon_framebuffer*)fb; int i; + radeon_print(RADEON_TEXTURE, RADEON_TRACE, + "%s(%p, fb %p) \n", + __func__, ctx, fb); + _mesa_resize_framebuffer(ctx, fb, width, height); fb->Initialized = GL_TRUE; /* XXX remove someday */ @@ -252,6 +273,11 @@ radeon_create_renderbuffer(gl_format format, __DRIdrawable *driDrawPriv) struct radeon_renderbuffer *rrb; rrb = CALLOC_STRUCT(radeon_renderbuffer); + +radeon_print(RADEON_TEXTURE, RADEON_TRACE, + "%s( rrb %p ) \n", + __func__, rrb); + if (!rrb) return NULL; @@ -331,6 +357,11 @@ radeon_new_renderbuffer(GLcontext * ctx, GLuint name) struct radeon_renderbuffer *rrb; rrb = CALLOC_STRUCT(radeon_renderbuffer); + + radeon_print(RADEON_TEXTURE, RADEON_TRACE, + "%s(%p, rrb %p) \n", + __func__, ctx, rrb); + if (!rrb) return NULL; @@ -348,6 +379,11 @@ static void radeon_bind_framebuffer(GLcontext * ctx, GLenum target, struct gl_framebuffer *fb, struct gl_framebuffer *fbread) { + radeon_print(RADEON_TEXTURE, RADEON_TRACE, + "%s(%p, fb %p, target %s) \n", + __func__, ctx, fb, + _mesa_lookup_enum_by_nr(target)); + if (target == GL_FRAMEBUFFER_EXT || target == GL_DRAW_FRAMEBUFFER_EXT) { radeon_draw_buffer(ctx, fb
Mesa (master): r200: Fix UMS notto emit stp.
Module: Mesa Branch: master Commit: 9e587dbd78bdcf8608bce7cb3dcd05d9527b641e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9e587dbd78bdcf8608bce7cb3dcd05d9527b641e Author: Pauli Nieminen Date: Mon Feb 8 11:49:10 2010 +0200 r200: Fix UMS notto emit stp. Polgon stipples are handled by kernel in UMS. Mark the state as never to be emited for UMS. --- src/mesa/drivers/dri/r200/r200_state_init.c |5 - 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/src/mesa/drivers/dri/r200/r200_state_init.c b/src/mesa/drivers/dri/r200/r200_state_init.c index e06437b..1606553 100644 --- a/src/mesa/drivers/dri/r200/r200_state_init.c +++ b/src/mesa/drivers/dri/r200/r200_state_init.c @@ -894,7 +894,10 @@ void r200InitState( r200ContextPtr rmesa ) } } - ALLOC_STATE( stp, polygon_stipple, STP_STATE_SIZE, "STP/stp", 0 ); + if (rmesa->radeon.radeonScreen->kernel_mm) + ALLOC_STATE( stp, polygon_stipple, STP_STATE_SIZE, "STP/stp", 0 ); + else + ALLOC_STATE( stp, never, STP_STATE_SIZE, "STP/stp", 0 ); for (i = 0; i < 6; i++) if (rmesa->radeon.radeonScreen->kernel_mm) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/mesa: fix wrong initialization of MaxPointSize
Module: Mesa Branch: master Commit: dd7be07c9685012b3e9fdfbaa13dc638abf6a9d1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=dd7be07c9685012b3e9fdfbaa13dc638abf6a9d1 Author: Roland Scheidegger Date: Mon Feb 8 18:48:08 2010 +0100 st/mesa: fix wrong initialization of MaxPointSize --- src/mesa/state_tracker/st_extensions.c |4 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 7684ccd..cf31a0c 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -114,6 +114,10 @@ void st_init_limits(struct st_context *st) = _maxf(1.0f, screen->get_paramf(screen, PIPE_CAP_MAX_POINT_WIDTH)); c->MaxPointSizeAA = _maxf(1.0f, screen->get_paramf(screen, PIPE_CAP_MAX_POINT_WIDTH_AA)); + /* called after _mesa_create_context/_mesa_init_point, fix default user +* settable max point size up +*/ + st->ctx->Point.MaxSize = MAX2(c->MaxPointSize, c->MaxPointSizeAA); /* these are not queryable. Note that GL basically mandates a 1.0 minimum * for non-aa sizes, but we can go down to 0.0 for aa points. */ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallium: add point size clamp to implementation limits in vertex shader
Module: Mesa Branch: master Commit: 2c326e72664e65166c68b027b26aaf373f3be36d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2c326e72664e65166c68b027b26aaf373f3be36d Author: Roland Scheidegger Date: Thu Feb 4 19:23:09 2010 +0100 gallium: add point size clamp to implementation limits in vertex shader The point size min/max registers (unused by mesa state tracker) were removed since most hardware couldn't do much with them. However, we don't want to have to rely on hw to do point size clamping correctly to implementation dependent limits, hence have to do that in the vertex shader. This should also solve a potential problem with (non-AA) points smaller than 1.0 which according to OGL still have size 1.0. Note that OGL point rendering is odd, in particular point sprites are rasterized differently to points. Some hardware might support those different modes, but in any case the different clamping values used for smooth/multisampled/sprite enabled points might help a bit for hw which rasterizes points the same as point sprites. Also tweak mesa's ff to vertex shader translation so don't have to clamp twice in case of point attenuation. --- src/mesa/main/ffvertex_prog.c|2 +- src/mesa/shader/prog_statevars.c | 64 ++ src/mesa/shader/prog_statevars.h |2 + src/mesa/state_tracker/st_extensions.c |5 ++ src/mesa/state_tracker/st_mesa_to_tgsi.c | 36 + 5 files changed, 108 insertions(+), 1 deletions(-) diff --git a/src/mesa/main/ffvertex_prog.c b/src/mesa/main/ffvertex_prog.c index 2d1db29..867a552 100644 --- a/src/mesa/main/ffvertex_prog.c +++ b/src/mesa/main/ffvertex_prog.c @@ -1496,7 +1496,7 @@ static void build_texture_transform( struct tnl_program *p ) static void build_atten_pointsize( struct tnl_program *p ) { struct ureg eye = get_eye_position_z(p); - struct ureg state_size = register_param1(p, STATE_POINT_SIZE); + struct ureg state_size = register_param2(p, STATE_INTERNAL, STATE_POINT_SIZE_CLAMPED); struct ureg state_attenuation = register_param1(p, STATE_POINT_ATTENUATION); struct ureg out = register_output(p, VERT_RESULT_PSIZ); struct ureg ut = get_temp(p); diff --git a/src/mesa/shader/prog_statevars.c b/src/mesa/shader/prog_statevars.c index 058d4bb..460ecd4 100644 --- a/src/mesa/shader/prog_statevars.c +++ b/src/mesa/shader/prog_statevars.c @@ -444,6 +444,61 @@ _mesa_fetch_state(GLcontext *ctx, const gl_state_index state[], value[3] = (GLfloat)(ctx->Fog.Density * ONE_DIV_SQRT_LN2); return; + case STATE_POINT_SIZE_CLAMPED: + { + /* this includes implementation dependent limits, to avoid +* another potentially necessary clamp. +* Note: for sprites, point smooth (point AA) is ignored +* and we'll clamp to MinPointSizeAA and MaxPointSize, because we +* expect drivers will want to say their minimum for AA size is 0.0 +* but for non-AA it's 1.0 (because normal points with size below 1.0 +* need to get rounded up to 1.0, hence never disappear). GL does +* not specify max clamp size for sprites, other than it needs to be +* at least as large as max AA size, hence use non-AA size there. +*/ +GLfloat minImplSize; +GLfloat maxImplSize; +if (ctx->Point.PointSprite) { + minImplSize = ctx->Const.MinPointSizeAA; + maxImplSize = ctx->Const.MaxPointSize; +} +else if (ctx->Point.SmoothFlag || ctx->Multisample._Enabled) { + minImplSize = ctx->Const.MinPointSizeAA; + maxImplSize = ctx->Const.MaxPointSizeAA; +} +else { + minImplSize = ctx->Const.MinPointSize; + maxImplSize = ctx->Const.MaxPointSize; +} +value[0] = ctx->Point.Size; +value[1] = ctx->Point.MinSize >= minImplSize ? ctx->Point.MinSize : minImplSize; +value[2] = ctx->Point.MaxSize <= maxImplSize ? ctx->Point.MaxSize : maxImplSize; +value[3] = ctx->Point.Threshold; + } + return; + case STATE_POINT_SIZE_IMPL_CLAMP: + { + /* for implementation clamp only in vs */ +GLfloat minImplSize; +GLfloat maxImplSize; +if (ctx->Point.PointSprite) { + minImplSize = ctx->Const.MinPointSizeAA; + maxImplSize = ctx->Const.MaxPointSize; +} +else if (ctx->Point.SmoothFlag || ctx->Multisample._Enabled) { + minImplSize = ctx->Const.MinPointSizeAA; + maxImplSize = ctx->Const.MaxPointSizeAA; +} +else { + minImplSize = ctx->Const.MinPointSize; + maxImplSize = ctx->Const.MaxPointSize; +} +value[0] = ctx->Point.Size; +value[1] = minImplSize; +
Mesa (master): Merge branch 'gallium-nopointsizeminmax'
Module: Mesa Branch: master Commit: 653a83445f94620673f747a4ace6847a2c7fdb4d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=653a83445f94620673f747a4ace6847a2c7fdb4d Author: Roland Scheidegger Date: Tue Feb 9 19:32:21 2010 +0100 Merge branch 'gallium-nopointsizeminmax' Conflicts: src/gallium/drivers/nv10/nv10_state.c src/gallium/drivers/nv20/nv20_state.c src/gallium/drivers/nv50/nv50_program.c --- ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): docs: clean up TGSI_SEMANTIC_PSIZE description
Module: Mesa Branch: master Commit: 8091e73cc2142945c297191a9b746be71360ef26 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8091e73cc2142945c297191a9b746be71360ef26 Author: Roland Scheidegger Date: Wed Feb 3 18:27:32 2010 +0100 docs: clean up TGSI_SEMANTIC_PSIZE description there was some confusion between point size state and point size output. --- src/gallium/docs/source/tgsi.rst |6 ++ 1 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/gallium/docs/source/tgsi.rst b/src/gallium/docs/source/tgsi.rst index ebee490..ef06844 100644 --- a/src/gallium/docs/source/tgsi.rst +++ b/src/gallium/docs/source/tgsi.rst @@ -1231,10 +1231,8 @@ TGSI_SEMANTIC_PSIZE """ PSIZE, or point size, is used to specify point sizes per-vertex. It should -be in ``(p, n, x, f)`` format, where ``p`` is the point size, ``n`` is the minimum -size, ``x`` is the maximum size, and ``f`` is the fade threshold. - -XXX this is arb_vp. is this what we actually do? should double-check... +be in ``(s, 0, 0, 1)`` format, where ``s`` is the (possibly clamped) point size. +Only the first component matters when writing from the vertex shader. When using this semantic, be sure to set the appropriate state in the :ref:`rasterizer` first. ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallium: add point_quad_rasterization bit to rasterizer state
Module: Mesa Branch: master Commit: 68f93ea3eb83cfad014b8ec93cec3564c1aa9833 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=68f93ea3eb83cfad014b8ec93cec3564c1aa9833 Author: Roland Scheidegger Date: Thu Feb 4 21:35:28 2010 +0100 gallium: add point_quad_rasterization bit to rasterizer state This determines if points should be rasterized according to GL point rules or as normal quads (GL point sprites / d3d points / d3d point sprites). --- src/gallium/auxiliary/draw/draw_pipe_wide_point.c |1 + src/gallium/docs/source/cso/rasterizer.rst| 14 -- src/gallium/drivers/nv30/nv30_state.c |2 +- src/gallium/drivers/nv40/nv40_state.c |2 +- src/gallium/drivers/nv50/nv50_state.c |2 +- src/gallium/drivers/softpipe/sp_video_context.c |1 + src/gallium/drivers/svga/svga_pipe_rasterizer.c |1 + src/gallium/drivers/trace/tr_dump_state.c |1 + src/gallium/include/pipe/p_state.h|1 + src/mesa/state_tracker/st_atom_rasterizer.c |3 ++- 10 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_pipe_wide_point.c b/src/gallium/auxiliary/draw/draw_pipe_wide_point.c index d9d4d2a..fdabce7 100644 --- a/src/gallium/auxiliary/draw/draw_pipe_wide_point.c +++ b/src/gallium/auxiliary/draw/draw_pipe_wide_point.c @@ -128,6 +128,7 @@ static void set_texcoords(const struct widepoint_stage *wide, static void widepoint_point( struct draw_stage *stage, struct prim_header *header ) { + /* XXX should take point_quad_rasterization into account? */ const struct widepoint_stage *wide = widepoint_stage(stage); const unsigned pos = draw_current_shader_position_output(stage->draw); const boolean sprite = (boolean) stage->draw->rasterizer->sprite_coord_enable; diff --git a/src/gallium/docs/source/cso/rasterizer.rst b/src/gallium/docs/source/cso/rasterizer.rst index 721229d..00d65fc 100644 --- a/src/gallium/docs/source/cso/rasterizer.rst +++ b/src/gallium/docs/source/cso/rasterizer.rst @@ -85,8 +85,10 @@ point_size sprite_coord_enable Specifies if a coord has its texture coordinates replaced or not. This is a packed bitfield containing the enable for all coords - if all are 0 -point sprites are effectively disabled. If any coord is non-zero, -point_smooth should be disabled. +point sprites are effectively disabled, though points may still be +rendered slightly different according to point_quad_rasterization. +If any coord is non-zero, point_smooth should be disabled, and +point_quad_rasterization enabled. If enabled, the four vertices of the resulting quad will be assigned texture coordinates, according to sprite_coord_mode. sprite_coord_mode @@ -103,6 +105,14 @@ sprite_coord_mode Note that when geometry shaders are available, this state could be removed. A special geometry shader defined by the state tracker could convert the incoming points into quads with the proper texture coords. +point_quad_rasterization +This determines if points should be rasterized as quads or points. +d3d always uses quad rasterization for points, regardless if point sprites +are enabled or not, but OGL has different rules. If point_quad_rasterization +is set, point_smooth should be disabled, and points will be rendered as +squares even if multisample is enabled. +sprite_coord_enable should be zero if point_quad_rasterization is not +enabled. scissor Whether the scissor test is enabled. diff --git a/src/gallium/drivers/nv30/nv30_state.c b/src/gallium/drivers/nv30/nv30_state.c index ab9fc52..66096de 100644 --- a/src/gallium/drivers/nv30/nv30_state.c +++ b/src/gallium/drivers/nv30/nv30_state.c @@ -391,7 +391,7 @@ nv30_rasterizer_state_create(struct pipe_context *pipe, } so_method(so, rankine, NV34TCL_POINT_SPRITE, 1); - if (cso->sprite_coord_enable) { + if (cso->point_quad_rasterization) { unsigned psctl = (1 << 0), i; for (i = 0; i < 8; i++) { diff --git a/src/gallium/drivers/nv40/nv40_state.c b/src/gallium/drivers/nv40/nv40_state.c index a5c5e29..5084c48 100644 --- a/src/gallium/drivers/nv40/nv40_state.c +++ b/src/gallium/drivers/nv40/nv40_state.c @@ -401,7 +401,7 @@ nv40_rasterizer_state_create(struct pipe_context *pipe, } so_method(so, curie, NV40TCL_POINT_SPRITE, 1); - if (cso->sprite_coord_enable) { + if (cso->point_quad_rasterization) { unsigned psctl = (1 << 0), i; for (i = 0; i < 8; i++) { diff --git a/src/gallium/drivers/nv50/nv50_state.c b/src/gallium/drivers/nv50/nv50_state.c index cbe2f34..f19a21d 100644 --- a/src/gallium/drivers/nv50/nv50_state.c +++ b/src/gallium/drivers/nv50/nv50_state.c @@ -318,7 +318,7 @@ nv50_rasterizer_state_create(struct pipe_context *pipe, so_data (so, fui(cso->point_size
Mesa (master): docs: fix point sprite documentation
Module: Mesa Branch: master Commit: c2b85e335dd798facb8ec43a4bb00fe0e05cf863 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c2b85e335dd798facb8ec43a4bb00fe0e05cf863 Author: Roland Scheidegger Date: Wed Feb 3 17:39:47 2010 +0100 docs: fix point sprite documentation --- src/gallium/docs/source/cso/rasterizer.rst | 19 ++- 1 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/gallium/docs/source/cso/rasterizer.rst b/src/gallium/docs/source/cso/rasterizer.rst index 89c3c06..721229d 100644 --- a/src/gallium/docs/source/cso/rasterizer.rst +++ b/src/gallium/docs/source/cso/rasterizer.rst @@ -82,17 +82,18 @@ point_size_per_vertex Whether vertices have a point size element. point_size The size of points, if not specified per-vertex. -point_sprite -Whether points are drawn as sprites (textured quads). This is mutually -exclusive with point_smooth. Note that sprite_coord_mode set to -PIPE_SPRITE_COORD_NONE for all coords and point_sprite enabled is basically -equivalent to point_sprite disabled. +sprite_coord_enable +Specifies if a coord has its texture coordinates replaced or not. This +is a packed bitfield containing the enable for all coords - if all are 0 +point sprites are effectively disabled. If any coord is non-zero, +point_smooth should be disabled. +If enabled, the four vertices of the resulting quad will be assigned +texture coordinates, according to sprite_coord_mode. sprite_coord_mode Specifies how the value for each shader output should be computed when -drawing sprites. If PIPE_SPRITE_COORD_NONE, don't change the vertex -shader output. Otherwise, the four vertices of the resulting quad will -be assigned texture coordinates. For PIPE_SPRITE_COORD_LOWER_LEFT, the -lower left vertex will have coordinate (0,0,0,1). +drawing sprites, for each coord which has sprite_coord_enable set. +For PIPE_SPRITE_COORD_LOWER_LEFT, the lower left vertex will have +coordinate (0,0,0,1). For PIPE_SPRITE_COORD_UPPER_LEFT, the upper-left vertex will have coordinate (0,0,0,1). This state is needed by the 'draw' module because that's where each ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallium: clean up point sprite rasterizer state
Module: Mesa Branch: master Commit: 4a4daa75a85db22cd37ebd533ebbccb427e07077 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4a4daa75a85db22cd37ebd533ebbccb427e07077 Author: Roland Scheidegger Date: Wed Feb 3 17:25:14 2010 +0100 gallium: clean up point sprite rasterizer state Don't need sprite coord origin per coord. Also, don't need separate sprite enable bit - if all coords have it diabled, then there are no point sprites (technically, there's a distinction in pre-GL3, but it only differs in having more leniency in clamping to max size, something the state tracker would need to handle and the hardware won't bother anyway). Also, use packed field for the per-coord enables. All in all, should save 3 dwords in rasterizer state (from 10 down to 7). --- src/gallium/auxiliary/draw/draw_pipe_validate.c|6 ++-- src/gallium/auxiliary/draw/draw_pipe_wide_point.c | 16 +++- src/gallium/docs/source/cso/rasterizer.rst |7 - src/gallium/drivers/i965/brw_sf.c | 17 +++-- src/gallium/drivers/i965/brw_sf_state.c|2 +- src/gallium/drivers/nv10/nv10_state.c |4 +- src/gallium/drivers/nv20/nv20_state.c |4 +- src/gallium/drivers/nv30/nv30_state.c |4 +- src/gallium/drivers/nv40/nv40_state.c |4 +- src/gallium/drivers/nv50/nv50_program.c| 14 -- src/gallium/drivers/nv50/nv50_state.c |2 +- src/gallium/drivers/softpipe/sp_video_context.c|3 +- src/gallium/drivers/svga/svga_pipe_rasterizer.c|2 +- src/gallium/drivers/trace/tr_dump_state.c |5 +-- src/gallium/include/pipe/p_defines.h |5 +-- src/gallium/include/pipe/p_state.h |4 +- .../state_trackers/python/retrace/interpreter.py |2 +- src/mesa/state_tracker/st_atom_rasterizer.c| 25 ++- 18 files changed, 64 insertions(+), 62 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_pipe_validate.c b/src/gallium/auxiliary/draw/draw_pipe_validate.c index bea90e5..ac29634 100644 --- a/src/gallium/auxiliary/draw/draw_pipe_validate.c +++ b/src/gallium/auxiliary/draw/draw_pipe_validate.c @@ -105,7 +105,7 @@ draw_need_pipeline(const struct draw_context *draw, return TRUE; /* point sprites */ - if (rasterizer->point_sprite && draw->pipeline.point_sprite) + if (rasterizer->sprite_coord_enable && draw->pipeline.point_sprite) return TRUE; } @@ -165,7 +165,7 @@ static struct draw_stage *validate_pipeline( struct draw_stage *stage ) && !draw->rasterizer->line_smooth); /* drawing large points? */ - if (draw->rasterizer->point_sprite && draw->pipeline.point_sprite) + if (draw->rasterizer->sprite_coord_enable && draw->pipeline.point_sprite) wide_points = TRUE; else if (draw->rasterizer->point_smooth && draw->pipeline.aapoint) wide_points = FALSE; @@ -197,7 +197,7 @@ static struct draw_stage *validate_pipeline( struct draw_stage *stage ) precalc_flat = 1; } - if (wide_points || draw->rasterizer->point_sprite) { + if (wide_points || draw->rasterizer->sprite_coord_enable) { draw->pipeline.wide_point->next = next; next = draw->pipeline.wide_point; } diff --git a/src/gallium/auxiliary/draw/draw_pipe_wide_point.c b/src/gallium/auxiliary/draw/draw_pipe_wide_point.c index f723e65..d9d4d2a 100644 --- a/src/gallium/auxiliary/draw/draw_pipe_wide_point.c +++ b/src/gallium/auxiliary/draw/draw_pipe_wide_point.c @@ -69,8 +69,9 @@ struct widepoint_stage { float ybias; uint texcoord_slot[PIPE_MAX_SHADER_OUTPUTS]; - uint texcoord_mode[PIPE_MAX_SHADER_OUTPUTS]; + uint texcoord_enable[PIPE_MAX_SHADER_OUTPUTS]; uint num_texcoords; + uint texcoord_mode; int psize_slot; @@ -96,10 +97,10 @@ static void set_texcoords(const struct widepoint_stage *wide, { uint i; for (i = 0; i < wide->num_texcoords; i++) { - if (wide->texcoord_mode[i] != PIPE_SPRITE_COORD_NONE) { + if (wide->texcoord_enable[i]) { uint j = wide->texcoord_slot[i]; v->data[j][0] = tc[0]; - if (wide->texcoord_mode[i] == PIPE_SPRITE_COORD_LOWER_LEFT) + if (wide->texcoord_mode == PIPE_SPRITE_COORD_LOWER_LEFT) v->data[j][1] = 1.0f - tc[1]; else v->data[j][1] = tc[1]; @@ -129,7 +130,7 @@ static void widepoint_point( struct draw_stage *stage, { const struct widepoint_stage *wide = widepoint_stage(stage); const unsigned pos = draw_current_shader_position_output(stage->draw); - const boolean sprite = (boolean) stage->draw->rasterizer->point_sprite; + const boolean sprite = (boolean) stage->draw->rasterizer->sprite_coord_enable; float half_size; float left_adj, right_adj, bot_adj, top_adj; @@ -222,21 +223,22 @@ static void widepoint_first_point( struct draw_stage *stage, /* XXX we won't
Mesa (master): gallium: remove point_size_min and point_size_max from rasterizer state
Module: Mesa Branch: master Commit: a407636efb6c32cee81b9a1525dbc804aacd957b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a407636efb6c32cee81b9a1525dbc804aacd957b Author: Roland Scheidegger Date: Tue Jan 12 15:54:13 2010 +0100 gallium: remove point_size_min and point_size_max from rasterizer state The state tracker is responsible for clamping to any graphics API enforced size min/max limits for both the static point_size setting as well as per vertex point size (in the vertex shader). Note that mesa state tracker didn't actually use these values. --- src/gallium/auxiliary/draw/draw_pipe_wide_point.c | 11 --- src/gallium/docs/source/cso/rasterizer.rst|4 src/gallium/drivers/i965/brw_sf_state.c |4 +--- src/gallium/drivers/r300/r300_state.c |8 +--- src/gallium/drivers/svga/svga_context.h |3 +-- src/gallium/drivers/svga/svga_pipe_rasterizer.c |2 -- src/gallium/drivers/svga/svga_screen.c|2 +- src/gallium/drivers/svga/svga_state_rss.c |5 +++-- src/gallium/drivers/trace/tr_dump_state.c |2 -- src/gallium/include/pipe/p_state.h|2 -- src/mesa/state_tracker/st_atom_rasterizer.c |3 --- 11 files changed, 11 insertions(+), 35 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_pipe_wide_point.c b/src/gallium/auxiliary/draw/draw_pipe_wide_point.c index 8dc50c0..f723e65 100644 --- a/src/gallium/auxiliary/draw/draw_pipe_wide_point.c +++ b/src/gallium/auxiliary/draw/draw_pipe_wide_point.c @@ -64,8 +64,6 @@ struct widepoint_stage { struct draw_stage stage; float half_point_size; - float point_size_min; - float point_size_max; float xbias; float ybias; @@ -151,13 +149,6 @@ static void widepoint_point( struct draw_stage *stage, /* point size is either per-vertex or fixed size */ if (wide->psize_slot >= 0) { half_size = header->v[0]->data[wide->psize_slot][0]; - - /* XXX: temporary -- do this in the vertex shader?? - */ - half_size = CLAMP(half_size, -wide->point_size_min, -wide->point_size_max); - half_size *= 0.5f; } else { @@ -222,8 +213,6 @@ static void widepoint_first_point( struct draw_stage *stage, struct draw_context *draw = stage->draw; wide->half_point_size = 0.5f * draw->rasterizer->point_size; - wide->point_size_min = draw->rasterizer->point_size_min; - wide->point_size_max = draw->rasterizer->point_size_max; wide->xbias = 0.0; wide->ybias = 0.0; diff --git a/src/gallium/docs/source/cso/rasterizer.rst b/src/gallium/docs/source/cso/rasterizer.rst index 4d8e170..5ffd600 100644 --- a/src/gallium/docs/source/cso/rasterizer.rst +++ b/src/gallium/docs/source/cso/rasterizer.rst @@ -82,10 +82,6 @@ point_size_per_vertex Whether vertices have a point size element. point_size The size of points, if not specified per-vertex. -point_size_min -The minimum size of points. -point_size_max -The maximum size of points. point_sprite Whether points are drawn as sprites (textured quads) sprite_coord_mode diff --git a/src/gallium/drivers/i965/brw_sf_state.c b/src/gallium/drivers/i965/brw_sf_state.c index 25dc2b5..663a688 100644 --- a/src/gallium/drivers/i965/brw_sf_state.c +++ b/src/gallium/drivers/i965/brw_sf_state.c @@ -126,9 +126,7 @@ sf_unit_populate_key(struct brw_context *brw, struct brw_sf_unit_key *key) key->point_sprite = rast->point_sprite; key->point_attenuated = rast->point_size_per_vertex; - key->point_size = CLAMP(rast->point_size, - rast->point_size_min, - rast->point_size_max); + key->point_size = rast->point_size; } static enum pipe_error diff --git a/src/gallium/drivers/r300/r300_state.c b/src/gallium/drivers/r300/r300_state.c index 78764dd..435e613 100644 --- a/src/gallium/drivers/r300/r300_state.c +++ b/src/gallium/drivers/r300/r300_state.c @@ -618,10 +618,12 @@ static void* r300_create_rs_state(struct pipe_context* pipe, rs->point_size = pack_float_16_6x(state->point_size) | (pack_float_16_6x(state->point_size) << R300_POINTSIZE_X_SHIFT); -rs->point_minmax = -((int)(state->point_size_min * 6.0) << +/* set hw limits - clamping done by state tracker in vs or point_size + XXX always need to emit this? */ +rs->point_minmax = +((int)(0.0 * 6.0) << R300_GA_POINT_MINMAX_MIN_SHIFT) | -((int)(state->point_size_max * 6.0) << +((int)(4096.0 * 6.0) << R300_GA_POINT_MINMAX_MAX_SHIFT); rs->line_control = pack_float_16_6x(state->line_width) | diff --git a/src/gallium/drivers/svga/svga_context.h b/src/gallium/drivers/svga/svga_context.h index 66259fd..e2a9603 100644 --- a/src/gallium/drivers/svga/svga_context.h +++ b/src/gallium/drivers/svga/svga_context.h @@ -37,6 +37,7 @@ #define SVGA_TEX_
Mesa (master): docs: fix typo: s/osdemo/osdemos/
Module: Mesa Branch: master Commit: b0613d87672ea08bb3b9cd56dee714fe413b670e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b0613d87672ea08bb3b9cd56dee714fe413b670e Author: Brian Paul Date: Tue Feb 9 11:21:41 2010 -0700 docs: fix typo: s/osdemo/osdemos/ (cherry picked from commit 0371956d66cdc8a1629753fca9cb3cdc49b0d145) --- docs/osmesa.html |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/docs/osmesa.html b/docs/osmesa.html index 629d054..525da4d 100644 --- a/docs/osmesa.html +++ b/docs/osmesa.html @@ -26,7 +26,7 @@ more information about the API functions. -There are several examples of OSMesa in the progs/osdemo/ +There are several examples of OSMesa in the progs/osdemos/ directory. ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (mesa_7_7_branch): docs: fix typo: s/osdemo/osdemos/
Module: Mesa Branch: mesa_7_7_branch Commit: 0371956d66cdc8a1629753fca9cb3cdc49b0d145 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0371956d66cdc8a1629753fca9cb3cdc49b0d145 Author: Brian Paul Date: Tue Feb 9 11:21:15 2010 -0700 docs: fix typo: s/osdemo/osdemos/ --- docs/osmesa.html |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/docs/osmesa.html b/docs/osmesa.html index 629d054..525da4d 100644 --- a/docs/osmesa.html +++ b/docs/osmesa.html @@ -26,7 +26,7 @@ more information about the API functions. -There are several examples of OSMesa in the progs/osdemo/ +There are several examples of OSMesa in the progs/osdemos/ directory. ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (gallium-nopointsizeminmax): st/mesa: fix wrong initialization of MaxPointSize
Module: Mesa Branch: gallium-nopointsizeminmax Commit: dd7be07c9685012b3e9fdfbaa13dc638abf6a9d1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=dd7be07c9685012b3e9fdfbaa13dc638abf6a9d1 Author: Roland Scheidegger Date: Mon Feb 8 18:48:08 2010 +0100 st/mesa: fix wrong initialization of MaxPointSize --- src/mesa/state_tracker/st_extensions.c |4 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 7684ccd..cf31a0c 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -114,6 +114,10 @@ void st_init_limits(struct st_context *st) = _maxf(1.0f, screen->get_paramf(screen, PIPE_CAP_MAX_POINT_WIDTH)); c->MaxPointSizeAA = _maxf(1.0f, screen->get_paramf(screen, PIPE_CAP_MAX_POINT_WIDTH_AA)); + /* called after _mesa_create_context/_mesa_init_point, fix default user +* settable max point size up +*/ + st->ctx->Point.MaxSize = MAX2(c->MaxPointSize, c->MaxPointSizeAA); /* these are not queryable. Note that GL basically mandates a 1.0 minimum * for non-aa sizes, but we can go down to 0.0 for aa points. */ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallium: Adding the %.s rule to generate asm code
Module: Mesa Branch: master Commit: a8f4904fb33f4fe5da560f85ecf003601e0ec06a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a8f4904fb33f4fe5da560f85ecf003601e0ec06a Author: Chris Li Date: Fri Feb 5 21:25:17 2010 -0800 gallium: Adding the %.s rule to generate asm code Signed-off-by: José Fonseca --- src/gallium/Makefile.template |3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/src/gallium/Makefile.template b/src/gallium/Makefile.template index 35f603a..5d9d2db 100644 --- a/src/gallium/Makefile.template +++ b/src/gallium/Makefile.template @@ -53,6 +53,9 @@ install: # RULES # +%.s: %.c + $(CC) -S $(INCLUDES) $(DEFINES) $(CFLAGS) $(LIBRARY_DEFINES) $< -o $@ + %.o: %.c $(CC) -c $(INCLUDES) $(DEFINES) $(CFLAGS) $(LIBRARY_DEFINES) $< -o $@ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): llvmpipe: Make llvm unit test depend on libllvmpipe.a
Module: Mesa Branch: master Commit: 8b6ec94aec2d0f18a862fd50bfeb2cc89a0d23d3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8b6ec94aec2d0f18a862fd50bfeb2cc89a0d23d3 Author: Chris Li Date: Fri Feb 5 19:41:32 2010 -0800 llvmpipe: Make llvm unit test depend on libllvmpipe.a Signed-off-by: José Fonseca --- src/gallium/drivers/llvmpipe/Makefile |5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/Makefile b/src/gallium/drivers/llvmpipe/Makefile index 7e7b620..e880042 100644 --- a/src/gallium/drivers/llvmpipe/Makefile +++ b/src/gallium/drivers/llvmpipe/Makefile @@ -60,8 +60,7 @@ testprogs := lp_test_format \ LIBS += $(GL_LIB_DEPS) -L. -lllvmpipe -L../../auxiliary/ -lgallium -$(testprogs): lp_test_% : lp_test_%.o lp_test_main.o - $(LD) $^ -o $@ -Wl,--start-group $(LIBS) -Wl,--end-group - +$(testprogs): lp_test_% : lp_test_%.o lp_test_main.o libllvmpipe.a + $(LD) $(filter %.o,$^) -o $@ -Wl,--start-group $(LIBS) -Wl,--end-group default: $(testprogs) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallium: Using the proper pattern rules for Makefile template.
Module: Mesa Branch: master Commit: 62d1e40e0d672cc84708cd8a99f26ee5917c6aef URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=62d1e40e0d672cc84708cd8a99f26ee5917c6aef Author: Chris Li Date: Fri Feb 5 21:22:39 2010 -0800 gallium: Using the proper pattern rules for Makefile template. The .o.c rule is consider obsolete. Signed-off-by: José Fonseca --- src/gallium/Makefile.template |6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gallium/Makefile.template b/src/gallium/Makefile.template index 1364235..35f603a 100644 --- a/src/gallium/Makefile.template +++ b/src/gallium/Makefile.template @@ -53,13 +53,13 @@ install: # RULES # -.c.o: +%.o: %.c $(CC) -c $(INCLUDES) $(DEFINES) $(CFLAGS) $(LIBRARY_DEFINES) $< -o $@ -.cpp.o: +%.o: %.cpp $(CXX) -c $(INCLUDES) $(DEFINES) $(CXXFLAGS) $(LIBRARY_DEFINES) $< -o $@ -.S.o: +%.o: %.S $(CC) -c $(INCLUDES) $(DEFINES) $(CFLAGS) $(LIBRARY_DEFINES) $< -o $@ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): vmware/core: Use correct flags in scanout code
Module: Mesa Branch: master Commit: 6a4cd124af9175832e506888e504d9195bf614b7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6a4cd124af9175832e506888e504d9195bf614b7 Author: Jakob Bornecrantz Date: Sat Feb 6 01:29:47 2010 +0100 vmware/core: Use correct flags in scanout code --- .../winsys/drm/vmware/core/vmw_screen_ioctl.c |8 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gallium/winsys/drm/vmware/core/vmw_screen_ioctl.c b/src/gallium/winsys/drm/vmware/core/vmw_screen_ioctl.c index f2de2c3..5d81fa8 100644 --- a/src/gallium/winsys/drm/vmware/core/vmw_screen_ioctl.c +++ b/src/gallium/winsys/drm/vmware/core/vmw_screen_ioctl.c @@ -176,12 +176,12 @@ vmw_ioctl_surface_create(struct vmw_winsys_screen *vws, memset(&s_arg, 0, sizeof(s_arg)); if (vws->use_old_scanout_flag && - (req->flags & SVGA3D_SURFACE_HINT_SCANOUT)) { - req->flags = (uint32_t) (flags & ~SVGA3D_SURFACE_HINT_SCANOUT); + (flags & SVGA3D_SURFACE_HINT_SCANOUT)) { + req->flags = (uint32_t) flags; req->scanout = false; - } else if (req->flags & SVGA3D_SURFACE_HINT_SCANOUT) { + } else if (flags & SVGA3D_SURFACE_HINT_SCANOUT) { req->flags = (uint32_t) (flags & ~SVGA3D_SURFACE_HINT_SCANOUT); - req->scanout = false; + req->scanout = true; } else { req->flags = (uint32_t) flags; req->scanout = false; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): vmware/core: Support drm interface version 1.0.0
Module: Mesa Branch: master Commit: 6ef1d6040738f5a3d93644a782ee7b600b8420b6 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6ef1d6040738f5a3d93644a782ee7b600b8420b6 Author: Jakob Bornecrantz Date: Sat Feb 6 01:30:29 2010 +0100 vmware/core: Support drm interface version 1.0.0 --- .../winsys/drm/vmware/core/vmw_screen_dri.c|2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/gallium/winsys/drm/vmware/core/vmw_screen_dri.c b/src/gallium/winsys/drm/vmware/core/vmw_screen_dri.c index b7c02f6..1dcbc41 100644 --- a/src/gallium/winsys/drm/vmware/core/vmw_screen_dri.c +++ b/src/gallium/winsys/drm/vmware/core/vmw_screen_dri.c @@ -50,7 +50,7 @@ static struct dri1_api_version ddx_compat = { 0, 0, 0 }; static struct dri1_api_version dri_required = { 4, 0, 0 }; static struct dri1_api_version dri_compat = { 4, 0, 0 }; static struct dri1_api_version drm_required = { 0, 1, 0 }; -static struct dri1_api_version drm_compat = { 0, 0, 0 }; +static struct dri1_api_version drm_compat = { 1, 0, 0 }; static struct dri1_api_version drm_scanout = { 0, 9, 0 }; static boolean ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): vmware/core: Handle new scanout field
Module: Mesa Branch: master Commit: 6ffb6318a05f0e6405645a155cd32e5cfbdbc2ff URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6ffb6318a05f0e6405645a155cd32e5cfbdbc2ff Author: Jakob Bornecrantz Date: Sat Feb 6 01:21:36 2010 +0100 vmware/core: Handle new scanout field --- src/gallium/winsys/drm/vmware/core/vmw_screen.c|5 - src/gallium/winsys/drm/vmware/core/vmw_screen.h|4 +++- .../winsys/drm/vmware/core/vmw_screen_dri.c| 12 +++- .../winsys/drm/vmware/core/vmw_screen_ioctl.c | 18 +- 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/gallium/winsys/drm/vmware/core/vmw_screen.c b/src/gallium/winsys/drm/vmware/core/vmw_screen.c index 911eec5..6cc9b38 100644 --- a/src/gallium/winsys/drm/vmware/core/vmw_screen.c +++ b/src/gallium/winsys/drm/vmware/core/vmw_screen.c @@ -37,13 +37,16 @@ * module. */ struct vmw_winsys_screen * -vmw_winsys_create( int fd ) +vmw_winsys_create( int fd, boolean use_old_scanout_flag ) { struct vmw_winsys_screen *vws = CALLOC_STRUCT(vmw_winsys_screen); if (!vws) goto out_no_vws; vws->ioctl.drm_fd = fd; + vws->use_old_scanout_flag = use_old_scanout_flag; + debug_printf("%s: use_old_scanout_flag == %s\n", __FUNCTION__, + use_old_scanout_flag ? "true" : "false"); if (!vmw_ioctl_init(vws)) goto out_no_ioctl; diff --git a/src/gallium/winsys/drm/vmware/core/vmw_screen.h b/src/gallium/winsys/drm/vmware/core/vmw_screen.h index f1d6986..d3f2c2c 100644 --- a/src/gallium/winsys/drm/vmware/core/vmw_screen.h +++ b/src/gallium/winsys/drm/vmware/core/vmw_screen.h @@ -52,6 +52,8 @@ struct vmw_winsys_screen { struct svga_winsys_screen base; + boolean use_old_scanout_flag; + struct { volatile uint32_t *fifo_map; uint64_t last_fence; @@ -131,7 +133,7 @@ boolean vmw_winsys_screen_init_svga(struct vmw_winsys_screen *vws); void vmw_ioctl_cleanup(struct vmw_winsys_screen *vws); void vmw_pools_cleanup(struct vmw_winsys_screen *vws); -struct vmw_winsys_screen *vmw_winsys_create(int fd); +struct vmw_winsys_screen *vmw_winsys_create(int fd, boolean use_old_scanout_flag); void vmw_winsys_destroy(struct vmw_winsys_screen *sws); diff --git a/src/gallium/winsys/drm/vmware/core/vmw_screen_dri.c b/src/gallium/winsys/drm/vmware/core/vmw_screen_dri.c index 917b49f..b7c02f6 100644 --- a/src/gallium/winsys/drm/vmware/core/vmw_screen_dri.c +++ b/src/gallium/winsys/drm/vmware/core/vmw_screen_dri.c @@ -51,6 +51,7 @@ static struct dri1_api_version dri_required = { 4, 0, 0 }; static struct dri1_api_version dri_compat = { 4, 0, 0 }; static struct dri1_api_version drm_required = { 0, 1, 0 }; static struct dri1_api_version drm_compat = { 0, 0, 0 }; +static struct dri1_api_version drm_scanout = { 0, 9, 0 }; static boolean vmw_dri1_check_version(const struct dri1_api_version *cur, @@ -85,6 +86,7 @@ vmw_drm_create_screen(struct drm_api *drm_api, struct vmw_winsys_screen *vws; struct pipe_screen *screen; struct dri1_create_screen_arg *dri1; + boolean use_old_scanout_flag = FALSE; if (!arg || arg->mode == DRM_CREATE_NORMAL) { struct dri1_api_version drm_ver; @@ -96,11 +98,16 @@ vmw_drm_create_screen(struct drm_api *drm_api, drm_ver.major = ver->version_major; drm_ver.minor = ver->version_minor; + drm_ver.patch_level = 0; /* ??? */ drmFreeVersion(ver); if (!vmw_dri1_check_version(&drm_ver, &drm_required, &drm_compat, "vmwgfx drm driver")) return NULL; + + if (!vmw_dri1_check_version(&drm_ver, &drm_scanout, + &drm_compat, "use old scanout field (not a error)")) + use_old_scanout_flag = TRUE; } if (arg != NULL) { @@ -118,6 +125,9 @@ vmw_drm_create_screen(struct drm_api *drm_api, if (!vmw_dri1_check_version(&dri1->drm_version, &drm_required, &drm_compat, "vmwgfx drm driver")) return NULL; +if (!vmw_dri1_check_version(&dri1->drm_version, &drm_scanout, +&drm_compat, "use old scanout field (not a error)")) + use_old_scanout_flag = TRUE; dri1->api = &dri1_api_hooks; break; default: @@ -125,7 +135,7 @@ vmw_drm_create_screen(struct drm_api *drm_api, } } - vws = vmw_winsys_create( fd ); + vws = vmw_winsys_create( fd, use_old_scanout_flag ); if (!vws) goto out_no_vws; diff --git a/src/gallium/winsys/drm/vmware/core/vmw_screen_ioctl.c b/src/gallium/winsys/drm/vmware/core/vmw_screen_ioctl.c index ccd0b41..f2de2c3 100644 --- a/src/gallium/winsys/drm/vmware/core/vmw_screen_ioctl.c +++ b/src/gallium/winsys/drm/vmware/core/vmw_screen_ioctl.c @@ -57,6 +57,12 @@ struct vmw_region uint32_t size; }; +/* XXX: This isn't a real hardware flag, but just a hack for kernel to + * know about primary surfaces. In newer versions of th
Mesa (master): vmware/core: Update header to latest version
Module: Mesa Branch: master Commit: a9d61c286d27733d347f81ac7cfae3665accae92 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a9d61c286d27733d347f81ac7cfae3665accae92 Author: Jakob Bornecrantz Date: Sat Feb 6 00:56:24 2010 +0100 vmware/core: Update header to latest version --- src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h | 12 +--- 1 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h b/src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h index 681d6b5..1457966 100644 --- a/src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h +++ b/src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h @@ -68,7 +68,8 @@ #define DRM_VMW_PARAM_NUM_FREE_STREAMS 1 #define DRM_VMW_PARAM_3D 2 #define DRM_VMW_PARAM_FIFO_OFFSET 3 - +#define DRM_VMW_PARAM_HW_CAPS 4 +#define DRM_VMW_PARAM_FIFO_CAPS5 /** * struct drm_vmw_getparam_arg @@ -138,6 +139,8 @@ struct drm_vmw_context_arg { * The size of the array should equal the total number of mipmap levels. * @shareable: Boolean whether other clients (as identified by file descriptors) * may reference this surface. + * @scanout: Boolean whether the surface is intended to be used as a + * scanout. * * Input data to the DRM_VMW_CREATE_SURFACE Ioctl. * Output data from the DRM_VMW_REF_SURFACE Ioctl. @@ -149,7 +152,7 @@ struct drm_vmw_surface_create_req { uint32_t mip_levels[DRM_VMW_MAX_SURFACE_FACES]; uint64_t size_addr; int32_t shareable; - uint32_t pad64; + int32_t scanout; }; /** @@ -252,6 +255,9 @@ union drm_vmw_surface_reference_arg { * * @commands: User-space address of a command buffer cast to an uint64_t. * @command-size: Size in bytes of the command buffer. + * @throttle-us: Sleep until software is less than @throttle_us + * microseconds ahead of hardware. The driver may round this value + * to the nearest kernel tick. * @fence_rep: User-space address of a struct drm_vmw_fence_rep cast to an * uint64_t. * @@ -261,7 +267,7 @@ union drm_vmw_surface_reference_arg { struct drm_vmw_execbuf_arg { uint64_t commands; uint32_t command_size; - uint32_t pad64; + uint32_t throttle_us; uint64_t fence_rep; }; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): vmware/core: Remove old ioctl structs not used
Module: Mesa Branch: master Commit: 7afcfa06831beb28d0a80b777ae701f68f0e202f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7afcfa06831beb28d0a80b777ae701f68f0e202f Author: Jakob Bornecrantz Date: Fri Jan 29 17:11:36 2010 +0100 vmware/core: Remove old ioctl structs not used Leftover that was never used in this driver --- src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h | 43 --- 1 files changed, 0 insertions(+), 43 deletions(-) diff --git a/src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h b/src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h index 2be7e12..681d6b5 100644 --- a/src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h +++ b/src/gallium/winsys/drm/vmware/core/vmwgfx_drm.h @@ -87,49 +87,6 @@ struct drm_vmw_getparam_arg { /*/ /** - * DRM_VMW_EXTENSION - Query device extensions. - */ - -/** - * struct drm_vmw_extension_rep - * - * @exists: The queried extension exists. - * @driver_ioctl_offset: Ioctl number of the first ioctl in the extension. - * @driver_sarea_offset: Offset to any space in the DRI SAREA - * used by the extension. - * @major: Major version number of the extension. - * @minor: Minor version number of the extension. - * @pl: Patch level version number of the extension. - * - * Output argument to the DRM_VMW_EXTENSION Ioctl. - */ - -struct drm_vmw_extension_rep { - int32_t exists; - uint32_t driver_ioctl_offset; - uint32_t driver_sarea_offset; - uint32_t major; - uint32_t minor; - uint32_t pl; - uint32_t pad64; -}; - -/** - * union drm_vmw_extension_arg - * - * @extension - Ascii name of the extension to be queried. //In - * @rep - Reply as defined above. //Out - * - * Argument to the DRM_VMW_EXTENSION Ioctl. - */ - -union drm_vmw_extension_arg { - char extension[DRM_VMW_EXT_NAME_LEN]; - struct drm_vmw_extension_rep rep; -}; - -/*/ -/** * DRM_VMW_CREATE_CONTEXT - Create a host context. * * Allocates a device unique context id, and queues a create context command ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): llvmpipe: Remove reference to prefilter field.
Module: Mesa Branch: master Commit: 72fa4ef649621b93beab15a87682d696406fd326 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=72fa4ef649621b93beab15a87682d696406fd326 Author: Michal Krol Date: Tue Feb 9 16:20:55 2010 +0100 llvmpipe: Remove reference to prefilter field. --- src/gallium/drivers/llvmpipe/lp_state_fs.c |1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c index 2001a95..15c10d8 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_fs.c +++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c @@ -905,7 +905,6 @@ generate_variant(struct llvmpipe_context *lp, if(key->sampler[i].compare_mode != PIPE_TEX_COMPARE_NONE) debug_printf(" .compare_func = %s\n", debug_dump_func(key->sampler[i].compare_func, TRUE)); debug_printf(" .normalized_coords = %u\n", key->sampler[i].normalized_coords); -debug_printf(" .prefilter = %u\n", key->sampler[i].prefilter); } } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): glx: Fix TOP setting in src/glx Makefile
Module: Mesa Branch: master Commit: 2ecbe4e208ce4f6c789667f230b5b23b47de1936 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2ecbe4e208ce4f6c789667f230b5b23b47de1936 Author: Kristian Høgsberg Date: Tue Feb 9 10:21:19 2010 -0500 glx: Fix TOP setting in src/glx Makefile Argh, forgot to commit this fix before pushing. --- src/glx/Makefile |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/glx/Makefile b/src/glx/Makefile index e681be8..6711fdc 100644 --- a/src/glx/Makefile +++ b/src/glx/Makefile @@ -1,4 +1,4 @@ -TOP = ../../.. +TOP = ../.. include $(TOP)/configs/current EXTRA_DEFINES = -DXF86VIDMODE -D_REENTRANT \ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): Retire miniglx and move the actual glx code up to src/glx
Module: Mesa Branch: master Commit: 6e8897ff9f90601ebf6eed500ad942c11b54d1f7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6e8897ff9f90601ebf6eed500ad942c11b54d1f7 Author: Kristian Høgsberg Date: Tue Feb 9 09:58:36 2010 -0500 Retire miniglx and move the actual glx code up to src/glx --- Makefile |6 +- configs/darwin |4 +- configs/freebsd-dri |2 +- configs/linux-dri|2 +- configs/linux-dri-xcb|2 +- configs/linux-indirect |2 +- configure.ac |2 +- docs/egl.html|1 - src/gallium/state_trackers/egl/Makefile |4 +- src/gallium/state_trackers/egl/x11/glxinit.c |2 +- src/glx/Makefile | 95 +- src/glx/{x11 => }/XF86dri.c |0 src/glx/{x11 => }/clientattrib.c |0 src/glx/{x11 => }/compsize.c |0 src/glx/{x11 => }/dri2.c |0 src/glx/{x11 => }/dri2.h |0 src/glx/{x11 => }/dri2_glx.c |0 src/glx/{x11 => }/dri_common.c |0 src/glx/{x11 => }/dri_common.h |0 src/glx/{x11 => }/dri_glx.c |0 src/glx/{x11 => }/drisw_glx.c|0 src/glx/{x11 => }/eval.c |0 src/glx/{x11 => }/glcontextmodes.c |0 src/glx/{x11 => }/glcontextmodes.h |0 src/glx/{x11 => }/glx_pbuffer.c |0 src/glx/{x11 => }/glx_query.c|0 src/glx/{x11 => }/glxclient.h|0 src/glx/{x11 => }/glxcmds.c |0 src/glx/{x11 => }/glxcurrent.c |0 src/glx/{x11 => }/glxext.c |0 src/glx/{x11 => }/glxextensions.c|0 src/glx/{x11 => }/glxextensions.h|0 src/glx/{x11 => }/glxhash.c |0 src/glx/{x11 => }/glxhash.h |0 src/glx/{x11 => }/indirect.c |0 src/glx/{x11 => }/indirect.h |0 src/glx/{x11 => }/indirect_init.c|0 src/glx/{x11 => }/indirect_init.h|0 src/glx/{x11 => }/indirect_size.c|0 src/glx/{x11 => }/indirect_size.h|0 src/glx/{x11 => }/indirect_texture_compression.c |0 src/glx/{x11 => }/indirect_transpose_matrix.c|0 src/glx/{x11 => }/indirect_vertex_array.c|0 src/glx/{x11 => }/indirect_vertex_array.h|0 src/glx/{x11 => }/indirect_vertex_array_priv.h |0 src/glx/{x11 => }/indirect_vertex_program.c |0 src/glx/{x11 => }/indirect_window_pos.c |0 src/glx/mini/Makefile| 89 - src/glx/mini/NOTES | 115 - src/glx/mini/dispatch.c | 64 - src/glx/mini/driver.h| 168 -- src/glx/mini/example.miniglx.conf| 36 - src/glx/mini/miniglx.c | 2580 -- src/glx/mini/miniglxP.h | 205 -- src/glx/mini/miniglx_events.c| 983 src/glx/{x11 => }/packrender.h |0 src/glx/{x11 => }/packsingle.h |0 src/glx/{x11 => }/pixel.c|0 src/glx/{x11 => }/pixelstore.c |0 src/glx/{x11 => }/render2.c |0 src/glx/{x11 => }/renderpix.c|0 src/glx/{x11 => }/single2.c |0 src/glx/{x11 => }/singlepix.c|0 src/glx/{x11 => }/vertarr.c |0 src/glx/x11/Makefile | 97 - src/glx/{x11 => }/xf86dri.h |0 src/glx/{x11 => }/xf86dristr.h |0 src/glx/{x11 => }/xfont.c|0 src/mesa/glapi/Makefile | 20 +- src/mesa/main/dispatch.c |2 +- 70 files changed, 114 insertions(+), 4367 deletions(-) Diff: http://cgit.freedesktop.org/mesa/mesa/diff/?id=6e8897ff9f90601ebf6eed500ad942c11b54d1f7 ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl_dri2: Fix initialization with EGL_DEFAULT_DISPLAY
Module: Mesa Branch: master Commit: 538539d8791e5b3b1ea2e95473b589934d94497e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=538539d8791e5b3b1ea2e95473b589934d94497e Author: Kristian Høgsberg Date: Tue Feb 9 09:49:56 2010 -0500 egl_dri2: Fix initialization with EGL_DEFAULT_DISPLAY --- src/egl/drivers/dri2/egl_dri2.c | 12 ++-- 1 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 8b01b84..9237889 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -404,13 +404,13 @@ dri2_initialize(_EGLDriver *drv, _EGLDisplay *disp, return _eglError(EGL_BAD_ALLOC, "eglInitialize"); disp->DriverData = (void *) dri2_dpy; - dri2_dpy->conn = XGetXCBConnection(disp->NativeDisplay); - if (!dri2_dpy->conn) { + if (disp->NativeDisplay != NULL) + dri2_dpy->conn = XGetXCBConnection(disp->NativeDisplay); + else dri2_dpy->conn = xcb_connect(0, 0); - if (!dri2_dpy->conn) { - _eglLog(_EGL_WARNING, "DRI2: xcb_connect failed"); -goto cleanup_dpy; - } + if (!dri2_dpy->conn) { + _eglLog(_EGL_WARNING, "DRI2: xcb_connect failed"); + goto cleanup_dpy; } xcb_prefetch_extension_data (dri2_dpy->conn, &xcb_xfixes_id); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (mesa_7_7_branch): vmware/core: Support drm interface version 1.0.0
Module: Mesa Branch: mesa_7_7_branch Commit: 45c4addea7f01939cd825ca205ef3fdf903236d9 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=45c4addea7f01939cd825ca205ef3fdf903236d9 Author: Jakob Bornecrantz Date: Sat Feb 6 01:30:29 2010 +0100 vmware/core: Support drm interface version 1.0.0 --- .../winsys/drm/vmware/core/vmw_screen_dri.c|2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/gallium/winsys/drm/vmware/core/vmw_screen_dri.c b/src/gallium/winsys/drm/vmware/core/vmw_screen_dri.c index 0f4dbe1..b0ea975 100644 --- a/src/gallium/winsys/drm/vmware/core/vmw_screen_dri.c +++ b/src/gallium/winsys/drm/vmware/core/vmw_screen_dri.c @@ -49,7 +49,7 @@ static struct dri1_api_version ddx_compat = { 0, 0, 0 }; static struct dri1_api_version dri_required = { 4, 0, 0 }; static struct dri1_api_version dri_compat = { 4, 0, 0 }; static struct dri1_api_version drm_required = { 0, 1, 0 }; -static struct dri1_api_version drm_compat = { 0, 0, 0 }; +static struct dri1_api_version drm_compat = { 1, 0, 0 }; static struct dri1_api_version drm_scanout = { 0, 9, 0 }; static boolean ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (mesa_7_7_branch): vmware/core: Use correct flags in scanout code
Module: Mesa Branch: mesa_7_7_branch Commit: 1eba0eb37d430a3053eeed312cf19041e907daec URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1eba0eb37d430a3053eeed312cf19041e907daec Author: Jakob Bornecrantz Date: Sat Feb 6 01:29:47 2010 +0100 vmware/core: Use correct flags in scanout code --- .../winsys/drm/vmware/core/vmw_screen_ioctl.c |8 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gallium/winsys/drm/vmware/core/vmw_screen_ioctl.c b/src/gallium/winsys/drm/vmware/core/vmw_screen_ioctl.c index f2de2c3..5d81fa8 100644 --- a/src/gallium/winsys/drm/vmware/core/vmw_screen_ioctl.c +++ b/src/gallium/winsys/drm/vmware/core/vmw_screen_ioctl.c @@ -176,12 +176,12 @@ vmw_ioctl_surface_create(struct vmw_winsys_screen *vws, memset(&s_arg, 0, sizeof(s_arg)); if (vws->use_old_scanout_flag && - (req->flags & SVGA3D_SURFACE_HINT_SCANOUT)) { - req->flags = (uint32_t) (flags & ~SVGA3D_SURFACE_HINT_SCANOUT); + (flags & SVGA3D_SURFACE_HINT_SCANOUT)) { + req->flags = (uint32_t) flags; req->scanout = false; - } else if (req->flags & SVGA3D_SURFACE_HINT_SCANOUT) { + } else if (flags & SVGA3D_SURFACE_HINT_SCANOUT) { req->flags = (uint32_t) (flags & ~SVGA3D_SURFACE_HINT_SCANOUT); - req->scanout = false; + req->scanout = true; } else { req->flags = (uint32_t) flags; req->scanout = false; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): fix bug in perspective corrected interpolants for lines
Module: Mesa Branch: master Commit: a1a441179bacdd33e83a48651c7a7a2cc4a8a665 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a1a441179bacdd33e83a48651c7a7a2cc4a8a665 Author: Brian Paul Date: Fri Feb 5 12:57:11 2010 -0700 fix bug in perspective corrected interpolants for lines --- src/gallium/drivers/softpipe/sp_setup.c |3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/softpipe/sp_setup.c b/src/gallium/drivers/softpipe/sp_setup.c index 9036f32..b8590a8 100644 --- a/src/gallium/drivers/softpipe/sp_setup.c +++ b/src/gallium/drivers/softpipe/sp_setup.c @@ -908,7 +908,6 @@ line_persp_coeff(const struct setup_context *setup, uint i, const float v[2]) { - /* XXX double-check/verify this arithmetic */ const float a0 = v[0] * setup->vmin[0][3]; const float a1 = v[1] * setup->vmax[0][3]; const float da = a1 - a0; @@ -916,7 +915,7 @@ line_persp_coeff(const struct setup_context *setup, const float dady = da * setup->emaj.dy * setup->oneoverarea; coef->dadx[i] = dadx; coef->dady[i] = dady; - coef->a0[i] = (v[0] - /* XXX: <-- shouldn't that be a0? */ + coef->a0[i] = (a0 - (dadx * (setup->vmin[0][0] - setup->pixel_offset) + dady * (setup->vmin[0][1] - setup->pixel_offset))); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/mesa: remove special-case cyl-wrap code
Module: Mesa Branch: master Commit: dd98a979b6f565f0b0060403fbfad36005278802 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=dd98a979b6f565f0b0060403fbfad36005278802 Author: Brian Paul Date: Fri Feb 5 10:18:25 2010 -0700 st/mesa: remove special-case cyl-wrap code Cylinder wrap mode works with perspective interpolation now. --- src/mesa/state_tracker/st_program.c | 10 +- 1 files changed, 1 insertions(+), 9 deletions(-) diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index e939ab3..21ad6fe 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -33,7 +33,6 @@ #include "main/imports.h" #include "main/mtypes.h" -#include "shader/prog_parameter.h" #include "shader/prog_print.h" #include "shader/programopt.h" @@ -368,14 +367,7 @@ st_translate_fragment_program(struct st_context *st, assert(attr >= FRAG_ATTRIB_TEX0); stfp->input_semantic_index[slot] = (attr - FRAG_ATTRIB_TEX0); stfp->input_semantic_name[slot] = TGSI_SEMANTIC_GENERIC; - -/* XXX this test is very temporary */ -if (stfp->Base.Base.InputFlags[0] & PROG_PARAM_BIT_CYL_WRAP) { - interpMode[slot] = TGSI_INTERPOLATE_LINEAR; -} -else { - interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE; -} +interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE; break; } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): progs/tests: add line drawing option to cylwrap.c
Module: Mesa Branch: master Commit: fd6701029b15260ecf26d4139defc51cd8546ee7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fd6701029b15260ecf26d4139defc51cd8546ee7 Author: Brian Paul Date: Fri Feb 5 10:54:40 2010 -0700 progs/tests: add line drawing option to cylwrap.c --- progs/tests/cylwrap.c | 44 ++-- 1 files changed, 34 insertions(+), 10 deletions(-) diff --git a/progs/tests/cylwrap.c b/progs/tests/cylwrap.c index 95d4644..2b32f11 100644 --- a/progs/tests/cylwrap.c +++ b/progs/tests/cylwrap.c @@ -12,6 +12,7 @@ static int Win; static int WinWidth = 600, WinHeight = 400; static GLfloat Xrot = 0, Yrot = 0; static GLboolean CylWrap = GL_TRUE; +static GLboolean Lines = GL_FALSE; @@ -32,17 +33,35 @@ DrawSample(GLboolean wrap) glEnable(GL_TEXTURE_2D); - /* texured quad */ - glBegin(GL_QUAD_STRIP); - for (p = 0.0; p <= 1.001; p += 0.1) { - float x = -2.0 + p * 4.0; - float s = p + 0.5; - if (wrap && s > 1.0) - s -= 1.0; - glTexCoord2f(s, 0); glVertex2f(x, -1); - glTexCoord2f(s, 1); glVertex2f(x, +1); + if (Lines) { + /* texured lines */ + float t; + for (t = 0; t <= 1.0; t += 0.125) { + float y = -1.0 + 2.0 * t; + glBegin(GL_LINE_STRIP); + for (p = 0.0; p <= 1.001; p += 0.05) { +float x = -2.0 + p * 4.0; +float s = p + 0.5; +if (wrap && s > 1.0) + s -= 1.0; +glTexCoord2f(s, t); glVertex2f(x, y); + } + glEnd(); + } + } + else { + /* texured quads */ + glBegin(GL_QUAD_STRIP); + for (p = 0.0; p <= 1.001; p += 0.1) { + float x = -2.0 + p * 4.0; + float s = p + 0.5; + if (wrap && s > 1.0) +s -= 1.0; + glTexCoord2f(s, 0); glVertex2f(x, -1); + glTexCoord2f(s, 1); glVertex2f(x, +1); + } + glEnd(); } - glEnd(); glDisable(GL_TEXTURE_2D); @@ -138,6 +157,10 @@ Key(unsigned char key, int x, int y) else printf("Cylindrical wrap off.\n"); break; + case 'l': + case 'L': + Lines = !Lines; + break; case 27: glutDestroyWindow(Win); exit(0); @@ -215,6 +238,7 @@ Init(void) glPointSize(3.0); printf("Press 'c' to toggle cylindrical wrap mode.\n"); + printf("Press 'l' to toggle line / quad drawing.\n"); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): progs/tests: add x/y rotation to cylwrap.c
Module: Mesa Branch: master Commit: 22a3a817aa35d2ba8e38728193eaa65e02b97cf0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=22a3a817aa35d2ba8e38728193eaa65e02b97cf0 Author: Brian Paul Date: Fri Feb 5 10:21:15 2010 -0700 progs/tests: add x/y rotation to cylwrap.c --- progs/tests/cylwrap.c | 59 +--- 1 files changed, 45 insertions(+), 14 deletions(-) diff --git a/progs/tests/cylwrap.c b/progs/tests/cylwrap.c index 9d541e3..95d4644 100644 --- a/progs/tests/cylwrap.c +++ b/progs/tests/cylwrap.c @@ -10,6 +10,7 @@ static int Win; static int WinWidth = 600, WinHeight = 400; +static GLfloat Xrot = 0, Yrot = 0; static GLboolean CylWrap = GL_TRUE; @@ -83,20 +84,26 @@ Draw(void) glClear(GL_COLOR_BUFFER_BIT); glPushMatrix(); - glTranslatef(0, +1.2, 0); - DrawSample(GL_FALSE); - glPopMatrix(); + glRotatef(Xrot, 1, 0, 0); + glRotatef(Yrot, 0, 1, 0); - /* set Mesa back-door state for testing cylindrical wrap mode */ - if (CylWrap) - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_PRIORITY, 0.125); + glPushMatrix(); + glTranslatef(0, +1.2, 0); + DrawSample(GL_FALSE); + glPopMatrix(); - glPushMatrix(); - glTranslatef(0, -1.2, 0); - DrawSample(GL_TRUE); - glPopMatrix(); + /* set Mesa back-door state for testing cylindrical wrap mode */ + if (CylWrap) + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_PRIORITY, 0.125); + + glPushMatrix(); + glTranslatef(0, -1.2, 0); + DrawSample(GL_TRUE); + glPopMatrix(); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_PRIORITY, 1.0); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_PRIORITY, 1.0); + glPopMatrix(); glutSwapBuffers(); } @@ -110,17 +117,16 @@ Reshape(int width, int height) glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); - glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 25.0); + glFrustum(-1.0, 1.0, -1.0, 1.0, 3.0, 25.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); - glTranslatef(0.0, 0.0, -15.0); + glTranslatef(0.0, 0.0, -10.0); } static void Key(unsigned char key, int x, int y) { - const GLfloat step = 3.0; (void) x; (void) y; switch (key) { @@ -142,6 +148,30 @@ Key(unsigned char key, int x, int y) static void +SpecialKey(int key, int x, int y) +{ + const GLfloat step = 3.0; + (void) x; + (void) y; + switch (key) { + case GLUT_KEY_UP: + Xrot -= step; + break; + case GLUT_KEY_DOWN: + Xrot += step; + break; + case GLUT_KEY_LEFT: + Yrot -= step; + break; + case GLUT_KEY_RIGHT: + Yrot += step; + break; + } + glutPostRedisplay(); +} + + +static void MakeSineWaveTexture(void) { GLubyte tex[128][512][4]; @@ -196,6 +226,7 @@ main(int argc, char *argv[]) glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); Win = glutCreateWindow(argv[0]); glutReshapeFunc(Reshape); + glutSpecialFunc(SpecialKey); glutKeyboardFunc(Key); glutDisplayFunc(Draw); Init(); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): Revert "softpipe: Implement cylindrical wrapping for linear interpolator."
Module: Mesa Branch: master Commit: 00bd85e57437d91e227fa768527bc22e3814de1e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=00bd85e57437d91e227fa768527bc22e3814de1e Author: Michal Krol Date: Fri Feb 5 15:16:07 2010 +0100 Revert "softpipe: Implement cylindrical wrapping for linear interpolator." This reverts commit 444cd62ca33a45bd39e8408979a0a01c246c6381. --- src/gallium/drivers/softpipe/sp_setup.c | 46 +++--- 1 files changed, 11 insertions(+), 35 deletions(-) diff --git a/src/gallium/drivers/softpipe/sp_setup.c b/src/gallium/drivers/softpipe/sp_setup.c index b7b52b1..bb1bff5 100644 --- a/src/gallium/drivers/softpipe/sp_setup.c +++ b/src/gallium/drivers/softpipe/sp_setup.c @@ -419,38 +419,19 @@ static void const_coeff( struct setup_context *setup, * Compute a0, dadx and dady for a linearly interpolated coefficient, * for a triangle. */ -static void -tri_linear_coeff(struct setup_context *setup, - struct tgsi_interp_coef *coef, - uint vertSlot, - uint i, - uint cylindrical_wrap) +static void tri_linear_coeff( struct setup_context *setup, + struct tgsi_interp_coef *coef, + uint vertSlot, uint i) { float botda = setup->vmid[vertSlot][i] - setup->vmin[vertSlot][i]; float majda = setup->vmax[vertSlot][i] - setup->vmin[vertSlot][i]; - float a, b; - float dadx, dady; + float a = setup->ebot.dy * majda - botda * setup->emaj.dy; + float b = setup->emaj.dx * botda - majda * setup->ebot.dx; + float dadx = a * setup->oneoverarea; + float dady = b * setup->oneoverarea; assert(i <= 3); - if (cylindrical_wrap) { - if (botda > 0.5f) { - botda -= 1.0f; - } else if (botda < -0.5f) { - botda += 1.0f; - } - if (majda > 0.5f) { - majda -= 1.0f; - } else if (majda < -0.5f) { - majda += 1.0f; - } - } - - a = setup->ebot.dy * majda - botda * setup->emaj.dy; - b = setup->emaj.dx * botda - majda * setup->ebot.dx; - dadx = a * setup->oneoverarea; - dady = b * setup->oneoverarea; - coef->dadx[i] = dadx; coef->dady[i] = dady; @@ -566,8 +547,8 @@ static void setup_tri_coefficients( struct setup_context *setup ) /* z and w are done by linear interpolation: */ - tri_linear_coeff(setup, &setup->posCoef, 0, 2, 0); - tri_linear_coeff(setup, &setup->posCoef, 0, 3, 0); + tri_linear_coeff(setup, &setup->posCoef, 0, 2); + tri_linear_coeff(setup, &setup->posCoef, 0, 3); /* setup interpolation for all the remaining attributes: */ @@ -581,13 +562,8 @@ static void setup_tri_coefficients( struct setup_context *setup ) const_coeff(setup, &setup->coef[fragSlot], vertSlot, j); break; case INTERP_LINEAR: - for (j = 0; j < NUM_CHANNELS; j++) { -tri_linear_coeff(setup, - &setup->coef[fragSlot], - vertSlot, - j, - spfs->info.input_cylindrical_wrap[fragSlot] & (1 << j)); - } + for (j = 0; j < NUM_CHANNELS; j++) +tri_linear_coeff(setup, &setup->coef[fragSlot], vertSlot, j); break; case INTERP_PERSPECTIVE: for (j = 0; j < NUM_CHANNELS; j++) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): softpipe: Properly implement cylindrical wrapping.
Module: Mesa Branch: master Commit: 5fbb62f761220a81ce7a0093bfe16ea5ea063d44 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5fbb62f761220a81ce7a0093bfe16ea5ea063d44 Author: Michal Krol Date: Fri Feb 5 17:12:48 2010 +0100 softpipe: Properly implement cylindrical wrapping. --- src/gallium/drivers/softpipe/sp_setup.c | 179 +-- 1 files changed, 148 insertions(+), 31 deletions(-) diff --git a/src/gallium/drivers/softpipe/sp_setup.c b/src/gallium/drivers/softpipe/sp_setup.c index bb1bff5..9036f32 100644 --- a/src/gallium/drivers/softpipe/sp_setup.c +++ b/src/gallium/drivers/softpipe/sp_setup.c @@ -393,6 +393,52 @@ static boolean setup_sort_vertices( struct setup_context *setup, } +/* Apply cylindrical wrapping to v0, v1, v2 coordinates, if enabled. + * Input coordinates must be in [0, 1] range, otherwise results are undefined. + * Some combinations of coordinates produce invalid results, + * but this behaviour is acceptable. + */ +static void +tri_apply_cylindrical_wrap(float v0, + float v1, + float v2, + uint cylindrical_wrap, + float output[3]) +{ + if (cylindrical_wrap) { + float delta; + + delta = v1 - v0; + if (delta > 0.5f) { + v0 += 1.0f; + } + else if (delta < -0.5f) { + v1 += 1.0f; + } + + delta = v2 - v1; + if (delta > 0.5f) { + v1 += 1.0f; + } + else if (delta < -0.5f) { + v2 += 1.0f; + } + + delta = v0 - v2; + if (delta > 0.5f) { + v2 += 1.0f; + } + else if (delta < -0.5f) { + v0 += 1.0f; + } + } + + output[0] = v0; + output[1] = v1; + output[2] = v2; +} + + /** * Compute a0 for a constant-valued coefficient (GL_FLAT shading). * The value value comes from vertex[slot][i]. @@ -418,13 +464,16 @@ static void const_coeff( struct setup_context *setup, /** * Compute a0, dadx and dady for a linearly interpolated coefficient, * for a triangle. + * v[0], v[1] and v[2] are vmin, vmid and vmax, respectively. */ -static void tri_linear_coeff( struct setup_context *setup, - struct tgsi_interp_coef *coef, - uint vertSlot, uint i) +static void +tri_linear_coeff(struct setup_context *setup, + struct tgsi_interp_coef *coef, + uint i, + const float v[3]) { - float botda = setup->vmid[vertSlot][i] - setup->vmin[vertSlot][i]; - float majda = setup->vmax[vertSlot][i] - setup->vmin[vertSlot][i]; + float botda = v[1] - v[0]; + float majda = v[2] - v[0]; float a = setup->ebot.dy * majda - botda * setup->emaj.dy; float b = setup->emaj.dx * botda - majda * setup->ebot.dx; float dadx = a * setup->oneoverarea; @@ -447,7 +496,7 @@ static void tri_linear_coeff( struct setup_context *setup, * to define a0 as the sample at a pixel center somewhere near vmin * instead - i'll switch to this later. */ - coef->a0[i] = (setup->vmin[vertSlot][i] - + coef->a0[i] = (v[0] - (dadx * (setup->vmin[0][0] - setup->pixel_offset) + dady * (setup->vmin[0][1] - setup->pixel_offset))); @@ -468,16 +517,19 @@ static void tri_linear_coeff( struct setup_context *setup, * the plane coefficients (a0, dadx, dady). * Later, when we compute the value at a particular fragment position we'll * divide the interpolated value by the interpolated W at that fragment. + * v[0], v[1] and v[2] are vmin, vmid and vmax, respectively. */ -static void tri_persp_coeff( struct setup_context *setup, - struct tgsi_interp_coef *coef, - uint vertSlot, uint i) +static void +tri_persp_coeff(struct setup_context *setup, +struct tgsi_interp_coef *coef, +uint i, +const float v[3]) { /* premultiply by 1/w (v[0][3] is always W): */ - float mina = setup->vmin[vertSlot][i] * setup->vmin[0][3]; - float mida = setup->vmid[vertSlot][i] * setup->vmid[0][3]; - float maxa = setup->vmax[vertSlot][i] * setup->vmax[0][3]; + float mina = v[0] * setup->vmin[0][3]; + float mida = v[1] * setup->vmid[0][3]; + float maxa = v[2] * setup->vmax[0][3]; float botda = mida - mina; float majda = maxa - mina; float a = setup->ebot.dy * majda - botda * setup->emaj.dy; @@ -544,11 +596,19 @@ static void setup_tri_coefficients( struct setup_context *setup ) const struct sp_fragment_shader *spfs = softpipe->fs; const struct vertex_info *vinfo = softpipe_get_vertex_info(softpipe); uint fragSlot; + float v[3]; /* z and w are done by linear interpolation: */ - tri_linear_coeff(setup, &setup->posCoef, 0, 2); - tri_linear_coeff(setup, &setup->posCoef, 0, 3); + v[0] = setup->vmin[0][2]; + v[1] = setup->vmid[0][2]; + v[2] = setup->vmax[0][2]; + tri_li
Mesa (master): progs/tests: new test program for exercising cylindrical tex wrap mode
Module: Mesa Branch: master Commit: 86921aaf3ff96fd4828964e37bd66cf2ea8035b1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=86921aaf3ff96fd4828964e37bd66cf2ea8035b1 Author: Brian Paul Date: Thu Feb 4 16:43:08 2010 -0700 progs/tests: new test program for exercising cylindrical tex wrap mode --- progs/tests/Makefile |1 + progs/tests/SConscript |1 + progs/tests/cylwrap.c | 204 3 files changed, 206 insertions(+), 0 deletions(-) diff --git a/progs/tests/Makefile b/progs/tests/Makefile index a38f411..d33415a 100644 --- a/progs/tests/Makefile +++ b/progs/tests/Makefile @@ -41,6 +41,7 @@ SOURCES = \ copypixrate.c \ crossbar.c \ cva.c \ + cylwrap.c \ drawbuffers.c \ drawbuffers2.c \ exactrast.c \ diff --git a/progs/tests/SConscript b/progs/tests/SConscript index 0a11b96..04e4bdf 100644 --- a/progs/tests/SConscript +++ b/progs/tests/SConscript @@ -45,6 +45,7 @@ progs = [ 'copypixrate', 'crossbar', 'cva', +'cylwrap', 'drawbuffers', 'drawbuffers2', 'exactrast', diff --git a/progs/tests/cylwrap.c b/progs/tests/cylwrap.c new file mode 100644 index 000..9d541e3 --- /dev/null +++ b/progs/tests/cylwrap.c @@ -0,0 +1,204 @@ +/* + * Test cylindrical texcoord wrapping + */ + + +#include +#include +#include +#include + +static int Win; +static int WinWidth = 600, WinHeight = 400; +static GLboolean CylWrap = GL_TRUE; + + + +static void +PrintString(const char *s) +{ + while (*s) { + glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (int) *s); + s++; + } +} + + +static void +DrawSample(GLboolean wrap) +{ + float p; + + glEnable(GL_TEXTURE_2D); + + /* texured quad */ + glBegin(GL_QUAD_STRIP); + for (p = 0.0; p <= 1.001; p += 0.1) { + float x = -2.0 + p * 4.0; + float s = p + 0.5; + if (wrap && s > 1.0) + s -= 1.0; + glTexCoord2f(s, 0); glVertex2f(x, -1); + glTexCoord2f(s, 1); glVertex2f(x, +1); + } + glEnd(); + + glDisable(GL_TEXTURE_2D); + + /* hash marks */ + glColor3f(0,0,0); + glBegin(GL_LINES); + for (p = 0.0; p <= 1.001; p += 0.1) { + float x = -2.0 + p * 4.0; + glVertex2f(x, -1.1); + glVertex2f(x, -0.8); + } + glEnd(); + + /* labels */ + glColor3f(1,1,1); + for (p = 0.0; p <= 1.001; p += 0.1) { + char str[100]; + float x = -2.0 + p * 4.0; + float s = p + 0.5; + + if (wrap && s > 1.0) + s -= 1.0; + + sprintf(str, "%3.1f", s); + glRasterPos2f(x, -1.2); + glBitmap(0, 0, 0, 0, -11, 0, NULL); + PrintString(str); + if (p == 0.0) { + glBitmap(0, 0, 0, 0, -55, 0, NULL); + PrintString("s ="); + } + } +} + + +static void +Draw(void) +{ + glClear(GL_COLOR_BUFFER_BIT); + + glPushMatrix(); + glTranslatef(0, +1.2, 0); + DrawSample(GL_FALSE); + glPopMatrix(); + + /* set Mesa back-door state for testing cylindrical wrap mode */ + if (CylWrap) + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_PRIORITY, 0.125); + + glPushMatrix(); + glTranslatef(0, -1.2, 0); + DrawSample(GL_TRUE); + glPopMatrix(); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_PRIORITY, 1.0); + + glutSwapBuffers(); +} + + +static void +Reshape(int width, int height) +{ + WinWidth = width; + WinHeight = height; + glViewport(0, 0, width, height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 25.0); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glTranslatef(0.0, 0.0, -15.0); +} + + +static void +Key(unsigned char key, int x, int y) +{ + const GLfloat step = 3.0; + (void) x; + (void) y; + switch (key) { + case 'c': + case 'C': + CylWrap = !CylWrap; + if (CylWrap) + printf("Cylindrical wrap on.\n"); + else + printf("Cylindrical wrap off.\n"); + break; + case 27: + glutDestroyWindow(Win); + exit(0); + break; + } + glutPostRedisplay(); +} + + +static void +MakeSineWaveTexture(void) +{ + GLubyte tex[128][512][4]; + int i, j; + + for (j = 0; j < 128; j++) { + for (i = 0; i < 512; i++) { + float x = i / 511.0 * 2.0 * M_PI + M_PI * 0.5; + float y0 = sin(x) * 0.5 + 0.5; + int jy0 = y0 * 128; + float y1 = sin(x + M_PI) * 0.5 + 0.5; + int jy1 = y1 * 128; + if (j < jy0) +tex[j][i][0] = 0xff; + else +tex[j][i][0] = 0; + if (j < jy1) +tex[j][i][1] = 0xff; + else +tex[j][i][1] = 0; + tex[j][i][2] = 0; + tex[j][i][3] = 0xff; + } + } + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 512, 128, 0, +GL_RGBA, GL_UNSIGNED_BYTE, tex); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REP
Mesa (master): st/mesa: check for PROG_PARAM_BIT_CYL_WRAP flag
Module: Mesa Branch: master Commit: ae4dde6598eacb64bf865037bdaea2041499aa27 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ae4dde6598eacb64bf865037bdaea2041499aa27 Author: Brian Paul Date: Thu Feb 4 16:36:55 2010 -0700 st/mesa: check for PROG_PARAM_BIT_CYL_WRAP flag --- src/mesa/state_tracker/st_mesa_to_tgsi.c | 17 + src/mesa/state_tracker/st_program.c | 10 +- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c b/src/mesa/state_tracker/st_mesa_to_tgsi.c index 3eb4c1c..06cf6d2 100644 --- a/src/mesa/state_tracker/st_mesa_to_tgsi.c +++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c @@ -825,10 +825,19 @@ st_translate_mesa_program( if (procType == TGSI_PROCESSOR_FRAGMENT) { struct gl_fragment_program* fp = (struct gl_fragment_program*)program; for (i = 0; i < numInputs; i++) { - t->inputs[i] = ureg_DECL_fs_input(ureg, - inputSemanticName[i], - inputSemanticIndex[i], - interpMode[i]); + if (program->InputFlags[0] & PROG_PARAM_BIT_CYL_WRAP) { +t->inputs[i] = ureg_DECL_fs_input_cyl(ureg, + inputSemanticName[i], + inputSemanticIndex[i], + interpMode[i], + TGSI_CYLINDRICAL_WRAP_X); + } + else { +t->inputs[i] = ureg_DECL_fs_input(ureg, + inputSemanticName[i], + inputSemanticIndex[i], + interpMode[i]); + } } if (program->InputsRead & FRAG_BIT_WPOS) { diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index 21ad6fe..e939ab3 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -33,6 +33,7 @@ #include "main/imports.h" #include "main/mtypes.h" +#include "shader/prog_parameter.h" #include "shader/prog_print.h" #include "shader/programopt.h" @@ -367,7 +368,14 @@ st_translate_fragment_program(struct st_context *st, assert(attr >= FRAG_ATTRIB_TEX0); stfp->input_semantic_index[slot] = (attr - FRAG_ATTRIB_TEX0); stfp->input_semantic_name[slot] = TGSI_SEMANTIC_GENERIC; -interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE; + +/* XXX this test is very temporary */ +if (stfp->Base.Base.InputFlags[0] & PROG_PARAM_BIT_CYL_WRAP) { + interpMode[slot] = TGSI_INTERPOLATE_LINEAR; +} +else { + interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE; +} break; } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: add back-door support for cylindrical texture wrap mode
Module: Mesa Branch: master Commit: 4a9f1eed2ba02f2ae2bf92d16f89d10f09b2a21e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4a9f1eed2ba02f2ae2bf92d16f89d10f09b2a21e Author: Brian Paul Date: Thu Feb 4 16:40:47 2010 -0700 mesa: add back-door support for cylindrical texture wrap mode If the texture priority field is 0.125 set the PROG_PARAM_BIT_CYL_WRAP flag. The gallium state tracker will look for this flag. This feature is only for testing purposes and may be remove at some point. But if it's useful we could write a GL/Mesa extension to expose it properly. --- src/mesa/main/texenvprogram.c| 12 src/mesa/shader/prog_parameter.h |1 + 2 files changed, 13 insertions(+), 0 deletions(-) diff --git a/src/mesa/main/texenvprogram.c b/src/mesa/main/texenvprogram.c index 414607e..5cc5fda 100644 --- a/src/mesa/main/texenvprogram.c +++ b/src/mesa/main/texenvprogram.c @@ -113,6 +113,8 @@ struct state_key { GLuint NumArgsA:3; /**< up to MAX_COMBINER_TERMS */ GLuint ModeA:5; /**< MODE_x */ + GLuint texture_cyl_wrap:1; /**< For gallium test/debug only */ + struct mode_opt OptRGB[MAX_COMBINER_TERMS]; struct mode_opt OptA[MAX_COMBINER_TERMS]; } unit[MAX_TEXTURE_UNITS]; @@ -464,6 +466,10 @@ static GLuint make_state_key( GLcontext *ctx, struct state_key *key ) key->unit[i].OptRGB[1].Operand = OPR_SRC_COLOR; key->unit[i].OptRGB[1].Source = texUnit->BumpTarget - GL_TEXTURE0 + SRC_TEXTURE0; } + + /* this is a back-door for enabling cylindrical texture wrap mode */ + if (texObj->Priority == 0.125) + key->unit[i].texture_cyl_wrap = 1; } /* _NEW_LIGHT | _NEW_FOG */ @@ -1302,6 +1308,12 @@ static void load_texture( struct texenv_fragment_program *p, GLuint unit ) } else p->src_texture[unit] = get_zero(p); + + if (p->state->unit[unit].texture_cyl_wrap) { + /* set flag which is checked by Mesa->Gallium program translation */ + p->program->Base.InputFlags[0] |= PROG_PARAM_BIT_CYL_WRAP; + } + } } diff --git a/src/mesa/shader/prog_parameter.h b/src/mesa/shader/prog_parameter.h index 699cb0c..c85 100644 --- a/src/mesa/shader/prog_parameter.h +++ b/src/mesa/shader/prog_parameter.h @@ -43,6 +43,7 @@ #define PROG_PARAM_BIT_INVARIANT 0x2 /**< for varying vars (GLSL 1.20) */ #define PROG_PARAM_BIT_FLAT 0x4 /**< for varying vars (GLSL 1.30) */ #define PROG_PARAM_BIT_LINEAR 0x8 /**< for varying vars (GLSL 1.30) */ +#define PROG_PARAM_BIT_CYL_WRAP 0x10 /**< XXX gallium debug */ /*...@}*/ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallium: Remove prefilter member from pipe_sampler_state struct.
Module: Mesa Branch: master Commit: 9a8473da8319c039c003af3b6a004726d48444fc URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9a8473da8319c039c003af3b6a004726d48444fc Author: Michal Krol Date: Wed Feb 3 15:49:10 2010 +0100 gallium: Remove prefilter member from pipe_sampler_state struct. --- src/gallium/auxiliary/gallivm/lp_bld_sample.c |1 - src/gallium/auxiliary/gallivm/lp_bld_sample.h |1 - src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c |1 - src/gallium/auxiliary/vl/vl_compositor.c |1 - src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c |1 - src/gallium/docs/source/cso/sampler.rst |2 -- src/gallium/drivers/trace/tr_dump_state.c |1 - src/gallium/include/pipe/p_state.h|1 - 8 files changed, 0 insertions(+), 9 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample.c b/src/gallium/auxiliary/gallivm/lp_bld_sample.c index 9003e10..a133b56 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_sample.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_sample.c @@ -74,7 +74,6 @@ lp_sampler_static_state(struct lp_sampler_static_state *state, state->compare_func = sampler->compare_func; } state->normalized_coords = sampler->normalized_coords; - state->prefilter = sampler->prefilter; } diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample.h b/src/gallium/auxiliary/gallivm/lp_bld_sample.h index 8cb8210..39edcf1 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_sample.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_sample.h @@ -70,7 +70,6 @@ struct lp_sampler_static_state unsigned compare_mode:1; unsigned compare_func:3; unsigned normalized_coords:1; - unsigned prefilter:4; }; diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c index 854dd0b..57c2b76 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c @@ -592,7 +592,6 @@ lp_build_sample_soa(LLVMBuilderRef builder, /* FIXME: respect static_state->min_mip_filter */; /* FIXME: respect static_state->mag_img_filter */; - /* FIXME: respect static_state->prefilter */; lp_build_sample_compare(&bld, p, texel); } diff --git a/src/gallium/auxiliary/vl/vl_compositor.c b/src/gallium/auxiliary/vl/vl_compositor.c index 6c5298d..ba23435 100644 --- a/src/gallium/auxiliary/vl/vl_compositor.c +++ b/src/gallium/auxiliary/vl/vl_compositor.c @@ -245,7 +245,6 @@ init_pipe_state(struct vl_compositor *c) sampler.compare_mode = PIPE_TEX_COMPARE_NONE; sampler.compare_func = PIPE_FUNC_ALWAYS; sampler.normalized_coords = 1; - /*sampler.prefilter = ;*/ /*sampler.lod_bias = ;*/ /*sampler.min_lod = ;*/ /*sampler.max_lod = ;*/ diff --git a/src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c b/src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c index c2552f4..f323de0 100644 --- a/src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c +++ b/src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c @@ -762,7 +762,6 @@ init_pipe_state(struct vl_mpeg12_mc_renderer *r) sampler.compare_mode = PIPE_TEX_COMPARE_NONE; sampler.compare_func = PIPE_FUNC_ALWAYS; sampler.normalized_coords = 1; - /*sampler.prefilter = ; */ /*sampler.shadow_ambient = ; */ /*sampler.lod_bias = ; */ sampler.min_lod = 0; diff --git a/src/gallium/docs/source/cso/sampler.rst b/src/gallium/docs/source/cso/sampler.rst index 8b67ca5..044 100644 --- a/src/gallium/docs/source/cso/sampler.rst +++ b/src/gallium/docs/source/cso/sampler.rst @@ -35,8 +35,6 @@ normalized_coords Whether the texture coordinates are normalized. If normalized, they will always be in [0, 1]. If not, they will be in the range of each dimension of the loaded texture. -prefilter -Cylindrical texcoord wrap enable per coord. Not exposed by most APIs. lod_bias The bias to apply to the level of detail. min_lod diff --git a/src/gallium/drivers/trace/tr_dump_state.c b/src/gallium/drivers/trace/tr_dump_state.c index c7364e2..16b24f1 100644 --- a/src/gallium/drivers/trace/tr_dump_state.c +++ b/src/gallium/drivers/trace/tr_dump_state.c @@ -422,7 +422,6 @@ void trace_dump_sampler_state(const struct pipe_sampler_state *state) trace_dump_member(uint, state, compare_mode); trace_dump_member(uint, state, compare_func); trace_dump_member(bool, state, normalized_coords); - trace_dump_member(uint, state, prefilter); trace_dump_member(float, state, lod_bias); trace_dump_member(float, state, min_lod); trace_dump_member(float, state, max_lod); diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h index 9ae096e..9715862 100644 --- a/src/gallium/include/pipe/p_state.h +++ b/src/gallium/include/pipe/p_state.h @@ -279,7 +279,6 @@ struct pipe_sampler_state unsigned compare_mode:1; /**< PIPE_TEX_COMPARE_x */ unsigned compare_func:3
Mesa (master): docs: Document TGSI Declaration token.
Module: Mesa Branch: master Commit: 63d60979109fc715fbfb293ce0f831e792f45549 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=63d60979109fc715fbfb293ce0f831e792f45549 Author: Michal Krol Date: Wed Feb 3 15:45:32 2010 +0100 docs: Document TGSI Declaration token. --- src/gallium/docs/source/tgsi.rst | 28 1 files changed, 28 insertions(+), 0 deletions(-) diff --git a/src/gallium/docs/source/tgsi.rst b/src/gallium/docs/source/tgsi.rst index 5478d86..fc5482d 100644 --- a/src/gallium/docs/source/tgsi.rst +++ b/src/gallium/docs/source/tgsi.rst @@ -1280,6 +1280,34 @@ Other tokens --- +Declaration +^^^ + + +Declares a register that is will be referenced as an operand in Instruction +tokens. + +File field contains register file that is being declared and is one +of TGSI_FILE. + +UsageMask field specifies which of the register components can be accessed +and is one of TGSI_WRITEMASK. + +Interpolate field is only valid for fragment shader INPUT register files. +It specifes the way input is being interpolated by the rasteriser and is one +of TGSI_INTERPOLATE. + +If Dimension flag is set to 1, a Declaration Dimension token follows. + +If Semantic flag is set to 1, a Declaration Semantic token follows. + +CylindricalWrap bitfield is only valid for fragment shader INPUT register +files. It specifies which register components should be subject to cylindrical +wrapping when interpolating by the rasteriser. If TGSI_CYLINDRICAL_WRAP_X +is set to 1, the X component should be interpolated according to cylindrical +wrapping rules. + + Declaration Semantic ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): softpipe: Implement cylindrical wrapping for linear interpolator.
Module: Mesa Branch: master Commit: e04c8ecc61dfe05d0e17cbffd2f758b0861083bd URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e04c8ecc61dfe05d0e17cbffd2f758b0861083bd Author: Michal Krol Date: Wed Feb 3 15:30:17 2010 +0100 softpipe: Implement cylindrical wrapping for linear interpolator. --- src/gallium/drivers/softpipe/sp_setup.c | 46 +++--- 1 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/gallium/drivers/softpipe/sp_setup.c b/src/gallium/drivers/softpipe/sp_setup.c index bb1bff5..b7b52b1 100644 --- a/src/gallium/drivers/softpipe/sp_setup.c +++ b/src/gallium/drivers/softpipe/sp_setup.c @@ -419,19 +419,38 @@ static void const_coeff( struct setup_context *setup, * Compute a0, dadx and dady for a linearly interpolated coefficient, * for a triangle. */ -static void tri_linear_coeff( struct setup_context *setup, - struct tgsi_interp_coef *coef, - uint vertSlot, uint i) +static void +tri_linear_coeff(struct setup_context *setup, + struct tgsi_interp_coef *coef, + uint vertSlot, + uint i, + uint cylindrical_wrap) { float botda = setup->vmid[vertSlot][i] - setup->vmin[vertSlot][i]; float majda = setup->vmax[vertSlot][i] - setup->vmin[vertSlot][i]; - float a = setup->ebot.dy * majda - botda * setup->emaj.dy; - float b = setup->emaj.dx * botda - majda * setup->ebot.dx; - float dadx = a * setup->oneoverarea; - float dady = b * setup->oneoverarea; + float a, b; + float dadx, dady; assert(i <= 3); + if (cylindrical_wrap) { + if (botda > 0.5f) { + botda -= 1.0f; + } else if (botda < -0.5f) { + botda += 1.0f; + } + if (majda > 0.5f) { + majda -= 1.0f; + } else if (majda < -0.5f) { + majda += 1.0f; + } + } + + a = setup->ebot.dy * majda - botda * setup->emaj.dy; + b = setup->emaj.dx * botda - majda * setup->ebot.dx; + dadx = a * setup->oneoverarea; + dady = b * setup->oneoverarea; + coef->dadx[i] = dadx; coef->dady[i] = dady; @@ -547,8 +566,8 @@ static void setup_tri_coefficients( struct setup_context *setup ) /* z and w are done by linear interpolation: */ - tri_linear_coeff(setup, &setup->posCoef, 0, 2); - tri_linear_coeff(setup, &setup->posCoef, 0, 3); + tri_linear_coeff(setup, &setup->posCoef, 0, 2, 0); + tri_linear_coeff(setup, &setup->posCoef, 0, 3, 0); /* setup interpolation for all the remaining attributes: */ @@ -562,8 +581,13 @@ static void setup_tri_coefficients( struct setup_context *setup ) const_coeff(setup, &setup->coef[fragSlot], vertSlot, j); break; case INTERP_LINEAR: - for (j = 0; j < NUM_CHANNELS; j++) -tri_linear_coeff(setup, &setup->coef[fragSlot], vertSlot, j); + for (j = 0; j < NUM_CHANNELS; j++) { +tri_linear_coeff(setup, + &setup->coef[fragSlot], + vertSlot, + j, + spfs->info.input_cylindrical_wrap[fragSlot] & (1 << j)); + } break; case INTERP_PERSPECTIVE: for (j = 0; j < NUM_CHANNELS; j++) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): tgsi: Add ureg_DECL_fs_input_cyl().
Module: Mesa Branch: master Commit: 33a9fb35dd4c74945840ce1e1b496c43ecfc92de URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=33a9fb35dd4c74945840ce1e1b496c43ecfc92de Author: Michal Krol Date: Wed Feb 3 15:28:50 2010 +0100 tgsi: Add ureg_DECL_fs_input_cyl(). Allows one to declare fragment shader inputs with cylindrical wrap info. --- src/gallium/auxiliary/tgsi/tgsi_ureg.c | 124 +++ src/gallium/auxiliary/tgsi/tgsi_ureg.h | 22 +- 2 files changed, 94 insertions(+), 52 deletions(-) diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.c b/src/gallium/auxiliary/tgsi/tgsi_ureg.c index 27960ba..3d0455d 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_ureg.c +++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.c @@ -97,6 +97,7 @@ struct ureg_program unsigned semantic_name; unsigned semantic_index; unsigned interp; + unsigned cylindrical_wrap; } fs_input[UREG_MAX_INPUT]; unsigned nr_fs_inputs; @@ -286,32 +287,34 @@ ureg_property_fs_coord_pixel_center(struct ureg_program *ureg, -struct ureg_src -ureg_DECL_fs_input( struct ureg_program *ureg, -unsigned name, -unsigned index, -unsigned interp_mode ) +struct ureg_src +ureg_DECL_fs_input_cyl(struct ureg_program *ureg, + unsigned semantic_name, + unsigned semantic_index, + unsigned interp_mode, + unsigned cylindrical_wrap) { unsigned i; for (i = 0; i < ureg->nr_fs_inputs; i++) { - if (ureg->fs_input[i].semantic_name == name && - ureg->fs_input[i].semantic_index == index) + if (ureg->fs_input[i].semantic_name == semantic_name && + ureg->fs_input[i].semantic_index == semantic_index) { goto out; + } } if (ureg->nr_fs_inputs < UREG_MAX_INPUT) { - ureg->fs_input[i].semantic_name = name; - ureg->fs_input[i].semantic_index = index; + ureg->fs_input[i].semantic_name = semantic_name; + ureg->fs_input[i].semantic_index = semantic_index; ureg->fs_input[i].interp = interp_mode; + ureg->fs_input[i].cylindrical_wrap = cylindrical_wrap; ureg->nr_fs_inputs++; - } - else { - set_bad( ureg ); + } else { + set_bad(ureg); } out: - return ureg_src_register( TGSI_FILE_INPUT, i ); + return ureg_src_register(TGSI_FILE_INPUT, i); } @@ -1088,32 +1091,59 @@ ureg_label_insn(struct ureg_program *ureg, } - -static void emit_decl( struct ureg_program *ureg, - unsigned file, - unsigned index, - unsigned semantic_name, - unsigned semantic_index, - unsigned interp ) +static void +emit_decl_semantic(struct ureg_program *ureg, + unsigned file, + unsigned index, + unsigned semantic_name, + unsigned semantic_index) { - union tgsi_any_token *out = get_tokens( ureg, DOMAIN_DECL, 3 ); + union tgsi_any_token *out = get_tokens(ureg, DOMAIN_DECL, 3); out[0].value = 0; out[0].decl.Type = TGSI_TOKEN_TYPE_DECLARATION; out[0].decl.NrTokens = 3; out[0].decl.File = file; out[0].decl.UsageMask = TGSI_WRITEMASK_XYZW; /* FIXME! */ - out[0].decl.Interpolate = interp; out[0].decl.Semantic = 1; out[1].value = 0; - out[1].decl_range.First = - out[1].decl_range.Last = index; + out[1].decl_range.First = index; + out[1].decl_range.Last = index; out[2].value = 0; out[2].decl_semantic.Name = semantic_name; out[2].decl_semantic.Index = semantic_index; +} + + +static void +emit_decl_fs(struct ureg_program *ureg, + unsigned file, + unsigned index, + unsigned semantic_name, + unsigned semantic_index, + unsigned interpolate, + unsigned cylindrical_wrap) +{ + union tgsi_any_token *out = get_tokens(ureg, DOMAIN_DECL, 3); + + out[0].value = 0; + out[0].decl.Type = TGSI_TOKEN_TYPE_DECLARATION; + out[0].decl.NrTokens = 3; + out[0].decl.File = file; + out[0].decl.UsageMask = TGSI_WRITEMASK_XYZW; /* FIXME! */ + out[0].decl.Interpolate = interpolate; + out[0].decl.Semantic = 1; + out[0].decl.CylindricalWrap = cylindrical_wrap; + out[1].value = 0; + out[1].decl_range.First = index; + out[1].decl_range.Last = index; + + out[2].value = 0; + out[2].decl_semantic.Name = semantic_name; + out[2].decl_semantic.Index = semantic_index; } @@ -1249,40 +1279,38 @@ static void emit_decls( struct ureg_program *ureg ) } } else if (ureg->processor == TGSI_PROCESSOR_FRAGMENT) { for (i = 0; i < ureg->nr_fs_inputs; i++) { - emit_decl( ureg, -TGSI_FILE_INPUT, -i, -ureg->fs_input[i].semantic_name, -ureg->fs_input[i].semantic_index, -
Mesa (master): tgsi: Gather cylindrical wrap info in tgsi_shader_info struct.
Module: Mesa Branch: master Commit: 607a830fe281bb042740ef5cd9ae99df73e19090 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=607a830fe281bb042740ef5cd9ae99df73e19090 Author: Michal Krol Date: Wed Feb 3 15:29:21 2010 +0100 tgsi: Gather cylindrical wrap info in tgsi_shader_info struct. --- src/gallium/auxiliary/tgsi/tgsi_scan.c |1 + src/gallium/auxiliary/tgsi/tgsi_scan.h |1 + 2 files changed, 2 insertions(+), 0 deletions(-) diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c b/src/gallium/auxiliary/tgsi/tgsi_scan.c index b9be8dc..232fc53 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_scan.c +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c @@ -131,6 +131,7 @@ tgsi_scan_shader(const struct tgsi_token *tokens, info->input_semantic_name[reg] = (ubyte)fulldecl->Semantic.Name; info->input_semantic_index[reg] = (ubyte)fulldecl->Semantic.Index; info->input_interpolate[reg] = (ubyte)fulldecl->Declaration.Interpolate; + info->input_cylindrical_wrap[reg] = (ubyte)fulldecl->Declaration.CylindricalWrap; info->num_inputs++; } else if (file == TGSI_FILE_OUTPUT) { diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.h b/src/gallium/auxiliary/tgsi/tgsi_scan.h index dae5376..741aa7d 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_scan.h +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.h @@ -45,6 +45,7 @@ struct tgsi_shader_info ubyte input_semantic_name[PIPE_MAX_SHADER_INPUTS]; /**< TGSI_SEMANTIC_x */ ubyte input_semantic_index[PIPE_MAX_SHADER_INPUTS]; ubyte input_interpolate[PIPE_MAX_SHADER_INPUTS]; + ubyte input_cylindrical_wrap[PIPE_MAX_SHADER_INPUTS]; ubyte output_semantic_name[PIPE_MAX_SHADER_OUTPUTS]; /**< TGSI_SEMANTIC_x */ ubyte output_semantic_index[PIPE_MAX_SHADER_OUTPUTS]; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): tgsi: Remove tgsi_dump_c.[ch].
Module: Mesa Branch: master Commit: 5ee856e195ca3745d6460c0874c2c9463cf359df URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5ee856e195ca3745d6460c0874c2c9463cf359df Author: Michal Krol Date: Wed Feb 3 11:19:04 2010 +0100 tgsi: Remove tgsi_dump_c.[ch]. Little utility after development stabilisation, use tgsi_dump instead. --- src/gallium/auxiliary/SConscript |1 - src/gallium/auxiliary/tgsi/tgsi_dump_c.c | 462 -- src/gallium/auxiliary/tgsi/tgsi_dump_c.h | 49 3 files changed, 0 insertions(+), 512 deletions(-) diff --git a/src/gallium/auxiliary/SConscript b/src/gallium/auxiliary/SConscript index 1bc1f6b..9709344 100644 --- a/src/gallium/auxiliary/SConscript +++ b/src/gallium/auxiliary/SConscript @@ -109,7 +109,6 @@ source = [ 'rtasm/rtasm_ppc_spe.c', 'tgsi/tgsi_build.c', 'tgsi/tgsi_dump.c', -'tgsi/tgsi_dump_c.c', 'tgsi/tgsi_exec.c', 'tgsi/tgsi_info.c', 'tgsi/tgsi_iterate.c', diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump_c.c b/src/gallium/auxiliary/tgsi/tgsi_dump_c.c deleted file mode 100644 index 47fd1dd..000 --- a/src/gallium/auxiliary/tgsi/tgsi_dump_c.c +++ /dev/null @@ -1,462 +0,0 @@ -/** - * - * Copyright 2007-2008 Tungsten Graphics, Inc., Cedar Park, Texas. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - **/ - -#include "util/u_debug.h" -#include "util/u_string.h" -#include "tgsi_dump_c.h" -#include "tgsi_build.h" -#include "tgsi_info.h" -#include "tgsi_parse.h" - -static void -dump_enum( - const unsignede, - const char**enums, - const unsignedenums_count ) -{ - if (e >= enums_count) { - debug_printf( "%u", e ); - } - else { - debug_printf( "%s", enums[e] ); - } -} - -#define EOL() debug_printf( "\n" ) -#define TXT(S) debug_printf( "%s", S ) -#define CHR(C) debug_printf( "%c", C ) -#define UIX(I) debug_printf( "0x%x", I ) -#define UID(I) debug_printf( "%u", I ) -#define SID(I) debug_printf( "%d", I ) -#define FLT(F) debug_printf( "%10.4f", F ) -#define ENM(E,ENUMS)dump_enum( E, ENUMS, sizeof( ENUMS ) / sizeof( *ENUMS ) ) - -static const char *TGSI_PROCESSOR_TYPES[] = -{ - "PROCESSOR_FRAGMENT", - "PROCESSOR_VERTEX", - "PROCESSOR_GEOMETRY" -}; - -static const char *TGSI_TOKEN_TYPES[] = -{ - "TOKEN_TYPE_DECLARATION", - "TOKEN_TYPE_IMMEDIATE", - "TOKEN_TYPE_INSTRUCTION" -}; - -static const char *TGSI_FILES[TGSI_FILE_COUNT] = -{ - "FILE_NULL", - "FILE_CONSTANT", - "FILE_INPUT", - "FILE_OUTPUT", - "FILE_TEMPORARY", - "FILE_SAMPLER", - "FILE_ADDRESS", - "FILE_IMMEDIATE", - "FILE_LOOP", - "FILE_PREDICATE" -}; - -static const char *TGSI_INTERPOLATES[] = -{ - "INTERPOLATE_CONSTANT", - "INTERPOLATE_LINEAR", - "INTERPOLATE_PERSPECTIVE" -}; - -static const char *TGSI_SEMANTICS[] = -{ - "SEMANTIC_POSITION", - "SEMANTIC_COLOR", - "SEMANTIC_BCOLOR", - "SEMANTIC_FOG", - "SEMANTIC_PSIZE", - "SEMANTIC_GENERIC", - "SEMANTIC_NORMAL" -}; - -static const char *TGSI_IMMS[] = -{ - "IMM_FLOAT32" -}; - -static const char *TGSI_SATS[] = -{ - "SAT_NONE", - "SAT_ZERO_ONE", - "SAT_MINUS_PLUS_ONE" -}; - -static const char *TGSI_SWIZZLES[] = -{ - "SWIZZLE_X", - "SWIZZLE_Y", - "SWIZZLE_Z", - "SWIZZLE_W" -}; - -static const char *TGSI_TEXTURES[] = -{ - "TEXTURE_UNKNOWN", - "TEXTURE_1D", - "TEXTURE_2D", - "TEXTURE_3D", - "TEXTURE_CUBE", - "TEXTURE_RECT", - "TEXTURE_SHADOW1D", - "TEXTURE_SHADOW2D", - "TEXTURE_SHADOWRECT" -}; - -static const char *TGSI_WRITEMASKS[] = -{ - "0", - "WRITEMASK_X", - "WRITEMASK_Y", - "WRITEMASK_XY", - "WRITEMASK_Z", - "WRITEMASK_XZ", - "WRITEMASK_Y
Mesa (master): gallium: Add cylindrical wrap info to TGSI declaration.
Module: Mesa Branch: master Commit: 6f6d740c851aa8bedc7c51dbd5db14de338787f1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6f6d740c851aa8bedc7c51dbd5db14de338787f1 Author: Michal Krol Date: Wed Feb 3 15:28:03 2010 +0100 gallium: Add cylindrical wrap info to TGSI declaration. --- src/gallium/auxiliary/tgsi/tgsi_build.c|5 - src/gallium/auxiliary/tgsi/tgsi_build.h|1 + src/gallium/auxiliary/tgsi/tgsi_dump.c | 16 src/gallium/include/pipe/p_shader_tokens.h |9 +++-- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/gallium/auxiliary/tgsi/tgsi_build.c b/src/gallium/auxiliary/tgsi/tgsi_build.c index e38b0be..0890078 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_build.c +++ b/src/gallium/auxiliary/tgsi/tgsi_build.c @@ -107,7 +107,7 @@ tgsi_default_declaration( void ) declaration.Semantic = 0; declaration.Centroid = 0; declaration.Invariant = 0; - declaration.Padding = 0; + declaration.CylindricalWrap = 0; return declaration; } @@ -121,6 +121,7 @@ tgsi_build_declaration( unsigned semantic, unsigned centroid, unsigned invariant, + unsigned cylindrical_wrap, struct tgsi_header *header ) { struct tgsi_declaration declaration; @@ -136,6 +137,7 @@ tgsi_build_declaration( declaration.Semantic = semantic; declaration.Centroid = centroid; declaration.Invariant = invariant; + declaration.CylindricalWrap = cylindrical_wrap; header_bodysize_grow( header ); @@ -190,6 +192,7 @@ tgsi_build_full_declaration( full_decl->Declaration.Semantic, full_decl->Declaration.Centroid, full_decl->Declaration.Invariant, + full_decl->Declaration.CylindricalWrap, header ); if (maxsize <= size) diff --git a/src/gallium/auxiliary/tgsi/tgsi_build.h b/src/gallium/auxiliary/tgsi/tgsi_build.h index ebee4ce..13d7f52 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_build.h +++ b/src/gallium/auxiliary/tgsi/tgsi_build.h @@ -68,6 +68,7 @@ tgsi_build_declaration( unsigned semantic, unsigned centroid, unsigned invariant, + unsigned cylindrical_wrap, struct tgsi_header *header ); struct tgsi_full_declaration diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.c b/src/gallium/auxiliary/tgsi/tgsi_dump.c index dd36555..5703141 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_dump.c +++ b/src/gallium/auxiliary/tgsi/tgsi_dump.c @@ -342,6 +342,22 @@ iter_declaration( TXT( ", INVARIANT" ); } + if (decl->Declaration.CylindricalWrap) { + TXT(", CYLWRAP_"); + if (decl->Declaration.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_X) { + CHR('X'); + } + if (decl->Declaration.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_Y) { + CHR('Y'); + } + if (decl->Declaration.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_Z) { + CHR('Z'); + } + if (decl->Declaration.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_W) { + CHR('W'); + } + } + EOL(); return TRUE; diff --git a/src/gallium/include/pipe/p_shader_tokens.h b/src/gallium/include/pipe/p_shader_tokens.h index 21581a4..c5c480f 100644 --- a/src/gallium/include/pipe/p_shader_tokens.h +++ b/src/gallium/include/pipe/p_shader_tokens.h @@ -1,7 +1,7 @@ /** * * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. - * Copyright 2009 VMware, Inc. + * Copyright 2009-2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a @@ -102,6 +102,11 @@ enum tgsi_file_type { #define TGSI_INTERPOLATE_PERSPECTIVE 2 #define TGSI_INTERPOLATE_COUNT 3 +#define TGSI_CYLINDRICAL_WRAP_X (1 << 0) +#define TGSI_CYLINDRICAL_WRAP_Y (1 << 1) +#define TGSI_CYLINDRICAL_WRAP_Z (1 << 2) +#define TGSI_CYLINDRICAL_WRAP_W (1 << 3) + struct tgsi_declaration { unsigned Type: 4; /**< TGSI_TOKEN_TYPE_DECLARATION */ @@ -113,7 +118,7 @@ struct tgsi_declaration unsigned Semantic: 1; /**< BOOL, any semantic info? */ unsigned Centroid: 1; /**< centroid sampling? */ unsigned Invariant : 1; /**< invariant optimization? */ - unsigned Padding : 4; + unsigned CylindricalWrap:4; /**< TGSI_CYLINDRICAL_WRAP_x flags */ }; struct tgsi_declaration_range ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: Enable true refcounting for NullBufferObj.
Module: Mesa Branch: master Commit: 01d7e3d5a25a7cc49b38f5561d00c2ff22c43e93 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=01d7e3d5a25a7cc49b38f5561d00c2ff22c43e93 Author: Michal Krol Date: Tue Feb 9 14:25:41 2010 +0100 mesa: Enable true refcounting for NullBufferObj. This object can be shared with another context, so we cannot just delete it when the owning context is being destroyed. Ensuring that buffer objects are properly refcounted guarantees NullBufferObj is destroyed when all references to it are removed. --- src/mesa/main/arrayobj.c|4 src/mesa/main/bufferobj.c | 11 +++ src/mesa/main/bufferobj.h |3 +++ src/mesa/main/context.c |2 ++ src/mesa/main/pixel.c |8 ++-- src/mesa/main/shared.c |6 -- src/mesa/vbo/vbo_context.c | 12 ++-- src/mesa/vbo/vbo_exec_api.c | 12 8 files changed, 48 insertions(+), 10 deletions(-) diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c index fd35d4e..e36137d 100644 --- a/src/mesa/main/arrayobj.c +++ b/src/mesa/main/arrayobj.c @@ -95,6 +95,10 @@ unbind_array_object_vbos(GLcontext *ctx, struct gl_array_object *obj) for (i = 0; i < Elements(obj->VertexAttrib); i++) _mesa_reference_buffer_object(ctx, &obj->VertexAttrib[i].BufferObj,NULL); + +#if FEATURE_point_size_array + _mesa_reference_buffer_object(ctx, &obj->PointSize.BufferObj, NULL); +#endif } diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index 2271550..dabb138 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -556,6 +556,17 @@ _mesa_init_buffer_objects( GLcontext *ctx ) } +void +_mesa_free_buffer_objects( GLcontext *ctx ) +{ + _mesa_reference_buffer_object(ctx, &ctx->Array.ArrayBufferObj, NULL); + _mesa_reference_buffer_object(ctx, &ctx->Array.ElementArrayBufferObj, NULL); + + _mesa_reference_buffer_object(ctx, &ctx->CopyReadBuffer, NULL); + _mesa_reference_buffer_object(ctx, &ctx->CopyWriteBuffer, NULL); +} + + /** * Bind the specified target to buffer for the specified context. * Called by glBindBuffer() and other functions. diff --git a/src/mesa/main/bufferobj.h b/src/mesa/main/bufferobj.h index 2931962..f8bca5f 100644 --- a/src/mesa/main/bufferobj.h +++ b/src/mesa/main/bufferobj.h @@ -60,6 +60,9 @@ extern void _mesa_init_buffer_objects( GLcontext *ctx ); extern void +_mesa_free_buffer_objects( GLcontext *ctx ); + +extern void _mesa_update_default_objects_buffer_objects(GLcontext *ctx); diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index fccce51..591aa11 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -955,6 +955,7 @@ _mesa_free_context_data( GLcontext *ctx ) _mesa_reference_fragprog(ctx, &ctx->FragmentProgram._TexEnvProgram, NULL); _mesa_free_attrib_data(ctx); + _mesa_free_buffer_objects(ctx); _mesa_free_lighting_data( ctx ); _mesa_free_eval_data( ctx ); _mesa_free_texture_data( ctx ); @@ -974,6 +975,7 @@ _mesa_free_context_data( GLcontext *ctx ) #if FEATURE_ARB_pixel_buffer_object _mesa_reference_buffer_object(ctx, &ctx->Pack.BufferObj, NULL); _mesa_reference_buffer_object(ctx, &ctx->Unpack.BufferObj, NULL); + _mesa_reference_buffer_object(ctx, &ctx->DefaultPacking.BufferObj, NULL); #endif #if FEATURE_ARB_vertex_buffer_object diff --git a/src/mesa/main/pixel.c b/src/mesa/main/pixel.c index f6f9c11..ca6ecd7 100644 --- a/src/mesa/main/pixel.c +++ b/src/mesa/main/pixel.c @@ -150,13 +150,17 @@ validate_pbo_access(GLcontext *ctx, struct gl_pixelstore_attrib *pack, GLboolean ok; /* Note, need to use DefaultPacking and Unpack's buffer object */ - ctx->DefaultPacking.BufferObj = pack->BufferObj; + _mesa_reference_buffer_object(ctx, + &ctx->DefaultPacking.BufferObj, + pack->BufferObj); ok = _mesa_validate_pbo_access(1, &ctx->DefaultPacking, mapsize, 1, 1, format, type, ptr); /* restore */ - ctx->DefaultPacking.BufferObj = ctx->Shared->NullBufferObj; + _mesa_reference_buffer_object(ctx, + &ctx->DefaultPacking.BufferObj, + ctx->Shared->NullBufferObj); if (!ok) { _mesa_error(ctx, GL_INVALID_OPERATION, diff --git a/src/mesa/main/shared.c b/src/mesa/main/shared.c index a7cf623..b889364 100644 --- a/src/mesa/main/shared.c +++ b/src/mesa/main/shared.c @@ -95,12 +95,6 @@ _mesa_alloc_shared_state(GLcontext *ctx) /* Allocate the default buffer object */ shared->NullBufferObj = ctx->Driver.NewBufferObject(ctx, 0, 0); -#ifndef DEBUG - /* Set refcount so high that it never gets deleted. -* XXX with recent/improved refcounting this should be no longer be needed. -*/ - shared->NullBufferObj->RefCount = 1000 * 1000 * 1000; -#endif /* Create default texture objects */ for (i = 0; i < NUM_TEXTURE_TARGETS; i
Mesa (master): mesa: Protect buffer objects reference counting with a mutex .
Module: Mesa Branch: master Commit: eeec2c3d951fed0d22e5dbf436d4a2d887e24221 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=eeec2c3d951fed0d22e5dbf436d4a2d887e24221 Author: Michal Krol Date: Mon Feb 8 19:43:42 2010 +0100 mesa: Protect buffer objects reference counting with a mutex. --- src/mesa/main/bufferobj.c | 10 ++ src/mesa/main/mtypes.h|1 + 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index 9e765b2..2271550 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -214,6 +214,7 @@ _mesa_delete_buffer_object( GLcontext *ctx, struct gl_buffer_object *bufObj ) bufObj->RefCount = -1000; bufObj->Name = ~0; + _glthread_DESTROY_MUTEX(bufObj->Mutex); _mesa_free(bufObj); } @@ -235,7 +236,7 @@ _mesa_reference_buffer_object(GLcontext *ctx, GLboolean deleteFlag = GL_FALSE; struct gl_buffer_object *oldObj = *ptr; - /*_glthread_LOCK_MUTEX(oldObj->Mutex);*/ + _glthread_LOCK_MUTEX(oldObj->Mutex); ASSERT(oldObj->RefCount > 0); oldObj->RefCount--; #if 0 @@ -243,7 +244,7 @@ _mesa_reference_buffer_object(GLcontext *ctx, (void *) oldObj, oldObj->Name, oldObj->RefCount); #endif deleteFlag = (oldObj->RefCount == 0); - /*_glthread_UNLOCK_MUTEX(oldObj->Mutex);*/ + _glthread_UNLOCK_MUTEX(oldObj->Mutex); if (deleteFlag) { @@ -265,7 +266,7 @@ _mesa_reference_buffer_object(GLcontext *ctx, if (bufObj) { /* reference new buffer */ - /*_glthread_LOCK_MUTEX(tex->Mutex);*/ + _glthread_LOCK_MUTEX(bufObj->Mutex); if (bufObj->RefCount == 0) { /* this buffer's being deleted (look just above) */ /* Not sure this can every really happen. Warn if it does. */ @@ -280,7 +281,7 @@ _mesa_reference_buffer_object(GLcontext *ctx, #endif *ptr = bufObj; } - /*_glthread_UNLOCK_MUTEX(tex->Mutex);*/ + _glthread_UNLOCK_MUTEX(bufObj->Mutex); } } @@ -295,6 +296,7 @@ _mesa_initialize_buffer_object( struct gl_buffer_object *obj, (void) target; _mesa_bzero(obj, sizeof(struct gl_buffer_object)); + _glthread_INIT_MUTEX(obj->Mutex); obj->RefCount = 1; obj->Name = name; obj->Usage = GL_STATIC_DRAW_ARB; diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 2640ba5..2003541 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1426,6 +1426,7 @@ struct gl_viewport_attrib */ struct gl_buffer_object { + _glthread_Mutex Mutex; GLint RefCount; GLuint Name; GLenum Usage;/**< GL_STREAM_DRAW_ARB, GL_STREAM_READ_ARB, etc. */ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: Ensure object refcount is null when destroying the buffer.
Module: Mesa Branch: master Commit: 829d9bb7334ffea0d5d0c4076dd75c41525fae0c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=829d9bb7334ffea0d5d0c4076dd75c41525fae0c Author: José Fonseca Date: Mon Feb 1 21:33:04 2010 + mesa: Ensure object refcount is null when destroying the buffer. Lets see if this is not too pedantic. Obj pointers are never exposed to GL apps so it should be possible to get this right. Furthermore apps with GL widgets and test suits create and destroy many contexts and objects, so bad reference counting is not really an option. --- src/mesa/state_tracker/st_cb_bufferobjects.c |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/src/mesa/state_tracker/st_cb_bufferobjects.c b/src/mesa/state_tracker/st_cb_bufferobjects.c index 3ff5890..f1b4f11 100644 --- a/src/mesa/state_tracker/st_cb_bufferobjects.c +++ b/src/mesa/state_tracker/st_cb_bufferobjects.c @@ -75,6 +75,8 @@ st_bufferobj_free(GLcontext *ctx, struct gl_buffer_object *obj) { struct st_buffer_object *st_obj = st_buffer_object(obj); + assert(obj->RefCount == 0); + if (st_obj->buffer) pipe_buffer_reference(&st_obj->buffer, NULL); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: Always do proper ref counting of shared state.
Module: Mesa Branch: master Commit: 1c39dbb90cefad8a5a97e75042466d66ea4270bc URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1c39dbb90cefad8a5a97e75042466d66ea4270bc Author: José Fonseca Date: Mon Feb 1 21:22:10 2010 + mesa: Always do proper ref counting of shared state. --- src/mesa/main/context.c | 24 src/mesa/main/shared.c | 31 +-- src/mesa/main/shared.h |2 +- 3 files changed, 34 insertions(+), 23 deletions(-) diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index 74c6ac4..fccce51 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -835,7 +835,7 @@ _mesa_initialize_context(GLcontext *ctx, _glthread_UNLOCK_MUTEX(shared->Mutex); if (!init_attrib_groups( ctx )) { - _mesa_free_shared_state(ctx, ctx->Shared); + _mesa_release_shared_state(ctx, ctx->Shared); return GL_FALSE; } @@ -843,7 +843,7 @@ _mesa_initialize_context(GLcontext *ctx, ctx->Exec = alloc_dispatch_table(); ctx->Save = alloc_dispatch_table(); if (!ctx->Exec || !ctx->Save) { - _mesa_free_shared_state(ctx, ctx->Shared); + _mesa_release_shared_state(ctx, ctx->Shared); if (ctx->Exec) _mesa_free(ctx->Exec); return GL_FALSE; @@ -933,8 +933,6 @@ _mesa_create_context(const GLvisual *visual, void _mesa_free_context_data( GLcontext *ctx ) { - GLint RefCount; - if (!_mesa_get_current_context()){ /* No current context, but we may need one in order to delete * texture objs, etc. So temporarily bind the context now. @@ -988,14 +986,7 @@ _mesa_free_context_data( GLcontext *ctx ) _mesa_free(ctx->Save); /* Shared context state (display lists, textures, etc) */ - _glthread_LOCK_MUTEX(ctx->Shared->Mutex); - RefCount = --ctx->Shared->RefCount; - _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex); - assert(RefCount >= 0); - if (RefCount == 0) { - /* free shared state */ - _mesa_free_shared_state( ctx, ctx->Shared ); - } + _mesa_release_shared_state( ctx, ctx->Shared ); /* needs to be after freeing shared state */ _mesa_free_display_list_data(ctx); @@ -1397,7 +1388,6 @@ _mesa_share_state(GLcontext *ctx, GLcontext *ctxToShare) { if (ctx && ctxToShare && ctx->Shared && ctxToShare->Shared) { struct gl_shared_state *oldSharedState = ctx->Shared; - GLint RefCount; ctx->Shared = ctxToShare->Shared; @@ -1407,13 +1397,7 @@ _mesa_share_state(GLcontext *ctx, GLcontext *ctxToShare) update_default_objects(ctx); - _glthread_LOCK_MUTEX(oldSharedState->Mutex); - RefCount = --oldSharedState->RefCount; - _glthread_UNLOCK_MUTEX(oldSharedState->Mutex); - - if (RefCount == 0) { - _mesa_free_shared_state(ctx, oldSharedState); - } + _mesa_release_shared_state(ctx, oldSharedState); return GL_TRUE; } diff --git a/src/mesa/main/shared.c b/src/mesa/main/shared.c index 4d01e8a..6cf63f6 100644 --- a/src/mesa/main/shared.c +++ b/src/mesa/main/shared.c @@ -288,8 +288,8 @@ delete_renderbuffer_cb(GLuint id, void *data, void *userData) * * \sa alloc_shared_state(). */ -void -_mesa_free_shared_state(GLcontext *ctx, struct gl_shared_state *shared) +static void +free_shared_state(GLcontext *ctx, struct gl_shared_state *shared) { GLuint i; @@ -368,3 +368,30 @@ _mesa_free_shared_state(GLcontext *ctx, struct gl_shared_state *shared) _mesa_free(shared); } + + +/** + * Decrement shared state object reference count and potentially free it + * and all children structures. + * + * \param ctx GL context. + * \param shared shared state pointer. + * + * \sa free_shared_state(). + */ +void +_mesa_release_shared_state(GLcontext *ctx, struct gl_shared_state *shared) +{ + GLint RefCount; + + _glthread_LOCK_MUTEX(shared->Mutex); + RefCount = --shared->RefCount; + _glthread_UNLOCK_MUTEX(shared->Mutex); + + assert(RefCount >= 0); + + if (RefCount == 0) { + /* free shared state */ + free_shared_state( ctx, shared ); + } +} diff --git a/src/mesa/main/shared.h b/src/mesa/main/shared.h index e59177e..ef164a1 100644 --- a/src/mesa/main/shared.h +++ b/src/mesa/main/shared.h @@ -31,7 +31,7 @@ _mesa_alloc_shared_state(GLcontext *ctx); void -_mesa_free_shared_state(GLcontext *ctx, struct gl_shared_state *shared); +_mesa_release_shared_state(GLcontext *ctx, struct gl_shared_state *shared); #endif ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: Fix null buffer object reference counting.
Module: Mesa Branch: master Commit: 05ac187f305bb653d569b5c07446ec0f4cd7ff08 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=05ac187f305bb653d569b5c07446ec0f4cd7ff08 Author: José Fonseca Date: Mon Feb 1 21:30:50 2010 + mesa: Fix null buffer object reference counting. Always use _mesa_reference_buffer_object, and never call ctx->Driver.DeleteBuffer() directly to prevent dangling pointers to the null buffer object. This fixes crash/assertions in sharedtex_mt and Autodesk Mudbox. --- src/mesa/main/shared.c | 14 -- src/mesa/vbo/vbo_save.c | 11 +++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/mesa/main/shared.c b/src/mesa/main/shared.c index 6cf63f6..a7cf623 100644 --- a/src/mesa/main/shared.c +++ b/src/mesa/main/shared.c @@ -93,12 +93,14 @@ _mesa_alloc_shared_state(GLcontext *ctx) shared->BufferObjects = _mesa_NewHashTable(); #endif - /* Allocate the default buffer object and set refcount so high that -* it never gets deleted. -* XXX with recent/improved refcounting this may not longer be needed. -*/ + /* Allocate the default buffer object */ shared->NullBufferObj = ctx->Driver.NewBufferObject(ctx, 0, 0); +#ifndef DEBUG + /* Set refcount so high that it never gets deleted. +* XXX with recent/improved refcounting this should be no longer be needed. +*/ shared->NullBufferObj->RefCount = 1000 * 1000 * 1000; +#endif /* Create default texture objects */ for (i = 0; i < NUM_TEXTURE_TARGETS; i++) { @@ -202,7 +204,7 @@ delete_bufferobj_cb(GLuint id, void *data, void *userData) ctx->Driver.UnmapBuffer(ctx, 0, bufObj); bufObj->Pointer = NULL; } - ctx->Driver.DeleteBuffer(ctx, bufObj); + _mesa_reference_buffer_object(ctx, &bufObj, NULL); } @@ -335,7 +337,7 @@ free_shared_state(GLcontext *ctx, struct gl_shared_state *shared) #endif #if FEATURE_ARB_vertex_buffer_object - ctx->Driver.DeleteBuffer(ctx, shared->NullBufferObj); + _mesa_reference_buffer_object(ctx, &shared->NullBufferObj, NULL); #endif #if FEATURE_ARB_sync diff --git a/src/mesa/vbo/vbo_save.c b/src/mesa/vbo/vbo_save.c index 10f705c..fd9a130 100644 --- a/src/mesa/vbo/vbo_save.c +++ b/src/mesa/vbo/vbo_save.c @@ -58,8 +58,19 @@ void vbo_save_init( GLcontext *ctx ) { struct gl_client_array *arrays = save->arrays; + unsigned i; + memcpy(arrays, vbo->legacy_currval, 16 * sizeof(arrays[0])); memcpy(arrays + 16, vbo->generic_currval, 16 * sizeof(arrays[0])); + + for (i = 0; i < 16; ++i) { + arrays[i ].BufferObj = NULL; + arrays[i + 16].BufferObj = NULL; + _mesa_reference_buffer_object(ctx, &arrays[i ].BufferObj, + vbo->legacy_currval[i].BufferObj); + _mesa_reference_buffer_object(ctx, &arrays[i + 16].BufferObj, + vbo->generic_currval[i].BufferObj); + } } ctx->Driver.CurrentSavePrimitive = PRIM_UNKNOWN; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): svga: Actually call fence_reference in texture downloads.
Module: Mesa Branch: master Commit: b750786fb149fb1276187bbbd1c042609e5962aa URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b750786fb149fb1276187bbbd1c042609e5962aa Author: José Fonseca Date: Thu Jan 28 20:51:52 2010 + svga: Actually call fence_reference in texture downloads. --- src/gallium/drivers/svga/svga_screen_texture.c |4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/svga/svga_screen_texture.c b/src/gallium/drivers/svga/svga_screen_texture.c index ad7bb65..12f3531 100644 --- a/src/gallium/drivers/svga/svga_screen_texture.c +++ b/src/gallium/drivers/svga/svga_screen_texture.c @@ -205,7 +205,7 @@ svga_transfer_dma(struct svga_transfer *st, if(transfer == SVGA3D_READ_HOST_VRAM) { svga_screen_flush(screen, &fence); sws->fence_finish(sws, fence, 0); - //sws->fence_reference(sws, &fence, NULL); + sws->fence_reference(sws, &fence, NULL); } } else { @@ -235,7 +235,7 @@ svga_transfer_dma(struct svga_transfer *st, if(y) { svga_screen_flush(screen, &fence); sws->fence_finish(sws, fence, 0); - //sws->fence_reference(sws, &fence, NULL); + sws->fence_reference(sws, &fence, NULL); } hw = sws->buffer_map(sws, st->hwbuf, PIPE_BUFFER_USAGE_CPU_WRITE); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): progs/xdemos: Silence uninitialized variable warning.
Module: Mesa Branch: master Commit: ad93f3e4890a8789422f180e3c2c413fb609984f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ad93f3e4890a8789422f180e3c2c413fb609984f Author: Vinson Lee Date: Tue Feb 9 01:35:14 2010 -0800 progs/xdemos: Silence uninitialized variable warning. --- progs/xdemos/glxinfo.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/progs/xdemos/glxinfo.c b/progs/xdemos/glxinfo.c index 30cd568..d871088 100644 --- a/progs/xdemos/glxinfo.c +++ b/progs/xdemos/glxinfo.c @@ -963,7 +963,7 @@ print_visual_info(Display *dpy, int scrnum, InfoMode mode) static void print_fbconfig_info(Display *dpy, int scrnum, InfoMode mode) { - int numFBConfigs; + int numFBConfigs = 0; struct visual_attribs attribs; GLXFBConfig *fbconfigs; int i; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): r300g: Fix off-by-one errors in array bounds assertions.
Module: Mesa Branch: master Commit: 70f8aaa0c30c640d0cce7faea9402b4e53bbfff0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=70f8aaa0c30c640d0cce7faea9402b4e53bbfff0 Author: Vinson Lee Date: Tue Feb 9 01:26:11 2010 -0800 r300g: Fix off-by-one errors in array bounds assertions. --- src/gallium/drivers/r300/r300_fs.c |4 ++-- src/gallium/drivers/r300/r300_vs.c |6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/r300/r300_fs.c b/src/gallium/drivers/r300/r300_fs.c index 39bcdc8..75a0549 100644 --- a/src/gallium/drivers/r300/r300_fs.c +++ b/src/gallium/drivers/r300/r300_fs.c @@ -49,12 +49,12 @@ void r300_shader_read_fs_inputs(struct tgsi_shader_info* info, switch (info->input_semantic_name[i]) { case TGSI_SEMANTIC_COLOR: -assert(index <= ATTR_COLOR_COUNT); +assert(index < ATTR_COLOR_COUNT); fs_inputs->color[index] = i; break; case TGSI_SEMANTIC_GENERIC: -assert(index <= ATTR_GENERIC_COUNT); +assert(index < ATTR_GENERIC_COUNT); fs_inputs->generic[index] = i; break; diff --git a/src/gallium/drivers/r300/r300_vs.c b/src/gallium/drivers/r300/r300_vs.c index 9fbb830..fb81b24 100644 --- a/src/gallium/drivers/r300/r300_vs.c +++ b/src/gallium/drivers/r300/r300_vs.c @@ -61,17 +61,17 @@ static void r300_shader_read_vs_outputs( break; case TGSI_SEMANTIC_COLOR: -assert(index <= ATTR_COLOR_COUNT); +assert(index < ATTR_COLOR_COUNT); vs_outputs->color[index] = i; break; case TGSI_SEMANTIC_BCOLOR: -assert(index <= ATTR_COLOR_COUNT); +assert(index < ATTR_COLOR_COUNT); vs_outputs->bcolor[index] = i; break; case TGSI_SEMANTIC_GENERIC: -assert(index <= ATTR_GENERIC_COUNT); +assert(index < ATTR_GENERIC_COUNT); vs_outputs->generic[index] = i; break; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit