Mesa (master): st/dri: make the GL_ARB_map_buffer_range entrypoints available

2009-08-26 Thread Ben Skeggs
Module: Mesa
Branch: master
Commit: 1664bc1a37ab85c5d1b14d90c4674201c9154382
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1664bc1a37ab85c5d1b14d90c4674201c9154382

Author: Ben Skeggs bske...@redhat.com
Date:   Wed Aug 26 16:17:37 2009 +1000

st/dri: make the GL_ARB_map_buffer_range entrypoints available

---

 src/gallium/state_trackers/dri/dri_extensions.c |2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/src/gallium/state_trackers/dri/dri_extensions.c 
b/src/gallium/state_trackers/dri/dri_extensions.c
index 7c04c2b..4349a4d 100644
--- a/src/gallium/state_trackers/dri/dri_extensions.c
+++ b/src/gallium/state_trackers/dri/dri_extensions.c
@@ -33,6 +33,7 @@
 #include dri_context.h
 #include state_tracker/st_context.h
 
+#define need_GL_ARB_map_buffer_range
 #define need_GL_ARB_multisample
 #define need_GL_ARB_occlusion_query
 #define need_GL_ARB_point_parameters
@@ -61,6 +62,7 @@
  */
 const struct dri_extension card_extensions[] = {
{GL_ARB_fragment_shader, NULL},
+   {GL_ARB_map_buffer_range, GL_ARB_map_buffer_range_functions},
{GL_ARB_multisample, GL_ARB_multisample_functions},
{GL_ARB_multitexture, NULL},
{GL_ARB_occlusion_query, GL_ARB_occlusion_query_functions},

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600: Update vertex fetch shader if necessary

2009-08-26 Thread Cooper Yuan
Module: Mesa
Branch: master
Commit: dadf138ddbaecd7fff239df7961aac25e74f14f6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=dadf138ddbaecd7fff239df7961aac25e74f14f6

Author: Cooper Yuan coopery...@gmail.com
Date:   Wed Aug 26 16:21:10 2009 +0800

r600: Update vertex fetch shader if necessary

---

 src/mesa/drivers/dri/r600/r600_emit.c |3 ++-
 src/mesa/drivers/dri/r600/r700_vertprog.c |   13 +
 src/mesa/drivers/dri/r600/r700_vertprog.h |9 -
 3 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/r600_emit.c 
b/src/mesa/drivers/dri/r600/r600_emit.c
index be86de1..f8c56e7 100644
--- a/src/mesa/drivers/dri/r600/r600_emit.c
+++ b/src/mesa/drivers/dri/r600/r600_emit.c
@@ -104,7 +104,8 @@ GLboolean r600DeleteShader(GLcontext * ctx,
 struct radeon_bo * pbo = (struct radeon_bo *)shaderbo;
 
 if (pbo) {
-   radeon_bo_unmap(pbo);
+   if (pbo-ptr)
+   radeon_bo_unmap(pbo);
radeon_bo_unref(pbo); /* when bo-cref = 0, bo will be bo_free */
 }
 
diff --git a/src/mesa/drivers/dri/r600/r700_vertprog.c 
b/src/mesa/drivers/dri/r600/r700_vertprog.c
index f8f862b..86a67ab 100644
--- a/src/mesa/drivers/dri/r600/r700_vertprog.c
+++ b/src/mesa/drivers/dri/r600/r700_vertprog.c
@@ -301,6 +301,11 @@ void r700SelectVertexShader(GLcontext *ctx)
 unsigned int unBit;
 unsigned int i;
 
+if (context-radeon.NewGLState  (_NEW_PROGRAM_CONSTANTS|_NEW_PROGRAM))
+{
+   vpc-needUpdateVF = 1;
+}
+
 if (context-radeon.radeonScreen-chip_family  CHIP_FAMILY_RV770)
 {
 vpc-r700AsmCode.bR6xx = 1;
@@ -341,6 +346,14 @@ GLboolean r700SetupVertexProgram(GLcontext * ctx)
 unsigned int unNumParamData;
 unsigned int ui;
 
+if (vp-needUpdateVF)
+{
+   vp-loaded = GL_FALSE;
+   vp-r700Shader.bNeedsAssembly = GL_TRUE;
+   Process_Vertex_Program_Vfetch_Instructions(vp, (vp-mesa_program));
+   r600DeleteShader(ctx, vp-shaderbo);
+}
+
 if(GL_FALSE == vp-loaded)
 {
if(vp-r700Shader.bNeedsAssembly == GL_TRUE)
diff --git a/src/mesa/drivers/dri/r600/r700_vertprog.h 
b/src/mesa/drivers/dri/r600/r700_vertprog.h
index 4c3b7ee..e2e6502 100644
--- a/src/mesa/drivers/dri/r600/r700_vertprog.h
+++ b/src/mesa/drivers/dri/r600/r700_vertprog.h
@@ -45,19 +45,18 @@ struct r700_vertex_program
 {
 struct gl_vertex_program mesa_program; /* Must be first */
 
-   struct r700_vertex_program *next;
+struct r700_vertex_program *next;
 
 r700_AssemblerBase r700AsmCode;
 R700_Shaderr700Shader;
 
-   GLboolean translated;
+GLboolean translated;
 GLboolean loaded;
+GLboolean needUpdateVF;

-   /* ... */
-
 void * shaderbo;
 
-   ArrayDesc  aos_desc[VERT_ATTRIB_MAX];
+ArrayDesc  aos_desc[VERT_ATTRIB_MAX];
 };
 
 //Internal

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): st/xorg: Add support for dirty framebuffer region reporting.

2009-08-26 Thread Michel Dänzer
Module: Mesa
Branch: master
Commit: b2e1b258812167ce8d33f5978f877439e280a1e4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b2e1b258812167ce8d33f5978f877439e280a1e4

Author: Michel Dänzer daen...@vmware.com
Date:   Wed Aug 26 13:18:37 2009 +0200

st/xorg: Add support for dirty framebuffer region reporting.

Add a BlockHandler which flushes the context and reports the dirty region
gathered using the X server damage layer.

In the interim, with dirty region reporting only allocate textures for the
framebuffer and shared pixmaps (e.g. DRI2 buffers) and fall back to software
for other pixmaps. This will be improved in the future.

---

 src/gallium/state_trackers/xorg/xorg_driver.c  |   65 
 src/gallium/state_trackers/xorg/xorg_exa.c |   14 +-
 src/gallium/state_trackers/xorg/xorg_tracker.h |8 +++
 3 files changed, 86 insertions(+), 1 deletions(-)

diff --git a/src/gallium/state_trackers/xorg/xorg_driver.c 
b/src/gallium/state_trackers/xorg/xorg_driver.c
index 53d1a33..923662b 100644
--- a/src/gallium/state_trackers/xorg/xorg_driver.c
+++ b/src/gallium/state_trackers/xorg/xorg_driver.c
@@ -54,6 +54,7 @@
 
 #include pciaccess.h
 
+#include pipe/p_context.h
 #include xorg_tracker.h
 #include xorg_winsys.h
 
@@ -424,6 +425,44 @@ RestoreHWState(ScrnInfoPtr pScrn)
 return TRUE;
 }
 
+static void xorgBlockHandler(int i, pointer blockData, pointer pTimeout,
+ pointer pReadmask)
+{
+ScreenPtr pScreen = screenInfo.screens[i];
+modesettingPtr ms = modesettingPTR(xf86Screens[pScreen-myNum]);
+
+pScreen-BlockHandler = ms-blockHandler;
+pScreen-BlockHandler(i, blockData, pTimeout, pReadmask);
+pScreen-BlockHandler = xorgBlockHandler;
+
+ms-ctx-flush(ms-ctx, PIPE_FLUSH_RENDER_CACHE, NULL);
+
+#ifdef DRM_MODE_FEATURE_DIRTYFB
+{
+   RegionPtr dirty = DamageRegion(ms-damage);
+   unsigned num_cliprects = REGION_NUM_RECTS(dirty);
+
+   if (num_cliprects) {
+   drmModeClip *clip = alloca(num_cliprects * sizeof(drmModeClip));
+   BoxPtr rect = REGION_RECTS(dirty);
+   int i;
+
+   for (i = 0; i  num_cliprects; i++, rect++) {
+   clip[i].x = rect-x1;
+   clip[i].y = rect-y1;
+   clip[i].width = rect-x2 - rect-x1;
+   clip[i].height = rect-y2 - rect-y1;
+   }
+
+   /* TODO query connector property to see if this is needed */
+   drmModeDirtyFB(ms-fd, ms-fb_id, clip, num_cliprects);
+
+   DamageEmpty(ms-damage);
+   }
+}
+#endif
+}
+
 static Bool
 CreateScreenResources(ScreenPtr pScreen)
 {
@@ -460,6 +499,21 @@ CreateScreenResources(ScreenPtr pScreen)
 
 AdjustFrame(pScrn-scrnIndex, pScrn-frameX0, pScrn-frameY0, 0);
 
+#ifdef DRM_MODE_FEATURE_DIRTYFB
+ms-damage = DamageCreate(NULL, NULL, DamageReportNone, TRUE,
+  pScreen, rootPixmap);
+
+if (ms-damage) {
+   DamageRegister(rootPixmap-drawable, ms-damage);
+
+   xf86DrvMsg(pScrn-scrnIndex, X_INFO, Damage tracking initialized\n);
+} else {
+   xf86DrvMsg(pScrn-scrnIndex, X_ERROR,
+  Failed to create screen damage record\n);
+   return FALSE;
+}
+#endif
+
 return ret;
 }
 
@@ -536,6 +590,8 @@ ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char 
**argv)
 
 fbPictureInit(pScreen, NULL, 0);
 
+ms-blockHandler = pScreen-BlockHandler;
+pScreen-BlockHandler = xorgBlockHandler;
 ms-createScreenResources = pScreen-CreateScreenResources;
 pScreen-CreateScreenResources = CreateScreenResources;
 
@@ -699,8 +755,17 @@ CloseScreen(int scrnIndex, ScreenPtr pScreen)
 driCloseScreen(pScreen);
 #endif
 
+pScreen-BlockHandler = ms-blockHandler;
 pScreen-CreateScreenResources = ms-createScreenResources;
 
+#ifdef DRM_MODE_FEATURE_DIRTYFB
+if (ms-damage) {
+   DamageUnregister(pScreen-GetScreenPixmap(pScreen)-drawable, 
ms-damage);
+   DamageDestroy(ms-damage);
+   ms-damage = NULL;
+}
+#endif
+
 if (ms-exa)
xorg_exa_close(pScrn);
 
diff --git a/src/gallium/state_trackers/xorg/xorg_exa.c 
b/src/gallium/state_trackers/xorg/xorg_exa.c
index 9f3f82c..3c90c2c 100644
--- a/src/gallium/state_trackers/xorg/xorg_exa.c
+++ b/src/gallium/state_trackers/xorg/xorg_exa.c
@@ -472,7 +472,11 @@ ExaModifyPixmapHeader(PixmapPtr pPixmap, int width, int 
height,
pipe_texture_reference(priv-tex, NULL);
 }
 
-if (!priv-tex) {
+if (!priv-tex
+#ifdef DRM_MODE_FEATURE_DIRTYFB
+priv-flags
+#endif
+   ) {
struct pipe_texture template;
 
memset(template, 0, sizeof(template));
@@ -488,6 +492,14 @@ ExaModifyPixmapHeader(PixmapPtr pPixmap, int width, int 
height,
priv-tex = exa-scrn-texture_create(exa-scrn, template);
 }
 
+#ifdef DRM_MODE_FEATURE_DIRTYFB
+if (!priv-tex) {
+   if (pPixData)
+   pPixmap-devPrivate.ptr = pPixData;
+   else
+   

Mesa (master): st/dri: Redo config generation

2009-08-26 Thread Jakob Bornecrantz
Module: Mesa
Branch: master
Commit: aab0bedb8c791531256b9cf4ef165080ccc75e9b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=aab0bedb8c791531256b9cf4ef165080ccc75e9b

Author: Jakob Bornecrantz ja...@vmware.com
Date:   Wed Aug 26 12:26:14 2009 +0200

st/dri: Redo config generation

---

 src/gallium/state_trackers/dri/dri_drawable.c |   13 ++-
 src/gallium/state_trackers/dri/dri_screen.c   |  126 +++--
 2 files changed, 87 insertions(+), 52 deletions(-)

diff --git a/src/gallium/state_trackers/dri/dri_drawable.c 
b/src/gallium/state_trackers/dri/dri_drawable.c
index acec719..62a7e23 100644
--- a/src/gallium/state_trackers/dri/dri_drawable.c
+++ b/src/gallium/state_trackers/dri/dri_drawable.c
@@ -294,8 +294,14 @@ dri_create_buffer(__DRIscreenPrivate * sPriv,
if (drawable == NULL)
   goto fail;
 
-   drawable-color_format = (visual-redBits == 8) ?
-  PIPE_FORMAT_A8R8G8B8_UNORM : PIPE_FORMAT_R5G6B5_UNORM;
+   if (visual-redBits == 8) {
+  if (visual-alphaBits == 8)
+ drawable-color_format = PIPE_FORMAT_A8R8G8B8_UNORM;
+  else
+ drawable-color_format = PIPE_FORMAT_X8R8G8B8_UNORM;
+   } else {
+  drawable-color_format = PIPE_FORMAT_R5G6B5_UNORM;
+   }
 
switch(visual-depthBits) {
default:
@@ -316,6 +322,9 @@ dri_create_buffer(__DRIscreenPrivate * sPriv,
PIPE_FORMAT_Z24S8_UNORM;
   }
   break;
+   case 32:
+  drawable-depth_format = PIPE_FORMAT_Z32_UNORM;
+  break;
}
 
switch(visual-stencilBits) {
diff --git a/src/gallium/state_trackers/dri/dri_screen.c 
b/src/gallium/state_trackers/dri/dri_screen.c
index 212..884b6d5 100644
--- a/src/gallium/state_trackers/dri/dri_screen.c
+++ b/src/gallium/state_trackers/dri/dri_screen.c
@@ -79,17 +79,17 @@ static const __DRIconfig **
 dri_fill_in_modes(struct dri_screen *screen,
  unsigned pixel_bits)
 {
-   __DRIconfig **configs;
+   __DRIconfig **configs = NULL;
unsigned num_modes;
-   uint8_t depth_bits_array[4];
-   uint8_t stencil_bits_array[4];
+   uint8_t depth_bits_array[5];
+   uint8_t stencil_bits_array[5];
uint8_t msaa_samples_array[1];
unsigned depth_buffer_factor;
unsigned back_buffer_factor;
unsigned msaa_samples_factor;
-   GLenum fb_format;
-   GLenum fb_type;
struct pipe_screen *p_screen = screen-pipe_screen;
+   boolean pf_r5g6b5, pf_a8r8g8b8, pf_x8r8g8b8;
+   boolean pf_z16, pf_x8z24, pf_z24x8, pf_s8z24, pf_z24s8, pf_z32;
 
static const GLenum back_buffer_modes[] = {
   GLX_NONE, GLX_SWAP_UNDEFINED_OML, GLX_SWAP_COPY_OML
@@ -99,39 +99,51 @@ dri_fill_in_modes(struct dri_screen *screen,
stencil_bits_array[0] = 0;
depth_buffer_factor = 1;
 
-   if (p_screen-is_format_supported(p_screen, PIPE_FORMAT_Z16_UNORM,
-PIPE_TEXTURE_2D,
-PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0)) {
+   pf_z16 = p_screen-is_format_supported(p_screen, PIPE_FORMAT_Z16_UNORM,
+ PIPE_TEXTURE_2D,
+ PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0);
+   pf_z32 = p_screen-is_format_supported(p_screen, PIPE_FORMAT_Z32_UNORM,
+ PIPE_TEXTURE_2D,
+ PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0);
+   pf_x8z24 = p_screen-is_format_supported(p_screen, PIPE_FORMAT_X8Z24_UNORM,
+   PIPE_TEXTURE_2D,
+   PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 
0);
+   pf_z24x8 = p_screen-is_format_supported(p_screen, PIPE_FORMAT_Z24X8_UNORM,
+   PIPE_TEXTURE_2D,
+   PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 
0);
+   pf_s8z24 = p_screen-is_format_supported(p_screen, PIPE_FORMAT_S8Z24_UNORM,
+   PIPE_TEXTURE_2D,
+   PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 
0);
+   pf_z24s8 = p_screen-is_format_supported(p_screen, PIPE_FORMAT_Z24S8_UNORM,
+   PIPE_TEXTURE_2D,
+   PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 
0);
+   pf_r5g6b5 = p_screen-is_format_supported(p_screen, 
PIPE_FORMAT_R5G6B5_UNORM,
+PIPE_TEXTURE_2D,
+PIPE_TEXTURE_USAGE_RENDER_TARGET, 
0);
+   pf_a8r8g8b8 = p_screen-is_format_supported(p_screen, 
PIPE_FORMAT_A8R8G8B8_UNORM,
+  PIPE_TEXTURE_2D,
+  
PIPE_TEXTURE_USAGE_RENDER_TARGET, 0);
+   pf_x8r8g8b8 = p_screen-is_format_supported(p_screen, 
PIPE_FORMAT_X8R8G8B8_UNORM,
+  PIPE_TEXTURE_2D,
+  
PIPE_TEXTURE_USAGE_RENDER_TARGET, 0);
+
+   if (pf_z16) {
   depth_bits_array[depth_buffer_factor] = 16;
  

Mesa (master): st/xorg: Find out correct type for depth stencil buffers

2009-08-26 Thread Jakob Bornecrantz
Module: Mesa
Branch: master
Commit: 23fe960be0d0d27fcd676534c692ab164f854acb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=23fe960be0d0d27fcd676534c692ab164f854acb

Author: Jakob Bornecrantz ja...@vmware.com
Date:   Wed Aug 26 13:45:31 2009 +0200

st/xorg: Find out correct type for depth stencil buffers

---

 src/gallium/state_trackers/xorg/xorg_dri2.c|   12 +++-
 src/gallium/state_trackers/xorg/xorg_tracker.h |2 ++
 2 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/src/gallium/state_trackers/xorg/xorg_dri2.c 
b/src/gallium/state_trackers/xorg/xorg_dri2.c
index f089965..e72710b 100644
--- a/src/gallium/state_trackers/xorg/xorg_dri2.c
+++ b/src/gallium/state_trackers/xorg/xorg_dri2.c
@@ -88,7 +88,8 @@ driCreateBuffers(DrawablePtr pDraw, unsigned int 
*attachments, int count)
struct pipe_texture template;
memset(template, 0, sizeof(template));
template.target = PIPE_TEXTURE_2D;
-   template.format = PIPE_FORMAT_S8Z24_UNORM;
+   template.format = ms-ds_depth_bits_last ?
+   PIPE_FORMAT_S8Z24_UNORM : PIPE_FORMAT_Z24S8_UNORM;
pf_get_block(template.format, template.block);
template.width[0] = pDraw-width;
template.height[0] = pDraw-height;
@@ -270,6 +271,15 @@ driScreenInit(ScreenPtr pScreen)
 dri2info.DestroyBuffers = driDestroyBuffers;
 dri2info.CopyRegion = driCopyRegion;
 
+ms-d_depth_bits_last =
+ms-screen-is_format_supported(ms-screen, PIPE_FORMAT_X8Z24_UNORM,
+PIPE_TEXTURE_2D,
+PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0);
+ms-ds_depth_bits_last =
+ms-screen-is_format_supported(ms-screen, PIPE_FORMAT_S8Z24_UNORM,
+PIPE_TEXTURE_2D,
+PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0);
+
 return DRI2ScreenInit(pScreen, dri2info);
 }
 
diff --git a/src/gallium/state_trackers/xorg/xorg_tracker.h 
b/src/gallium/state_trackers/xorg/xorg_tracker.h
index da850bb..8c60d50 100644
--- a/src/gallium/state_trackers/xorg/xorg_tracker.h
+++ b/src/gallium/state_trackers/xorg/xorg_tracker.h
@@ -87,6 +87,8 @@ typedef struct _modesettingRec
 struct drm_api *api;
 struct pipe_screen *screen;
 struct pipe_context *ctx;
+boolean d_depth_bits_last;
+boolean ds_depth_bits_last;
 
 /* exa */
 void *exa;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): st/xorg: Temporary fix for none stencil visuals

2009-08-26 Thread Jakob Bornecrantz
Module: Mesa
Branch: master
Commit: 57230d96ed3dc231c47ed8765f30e0e34e988d31
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=57230d96ed3dc231c47ed8765f30e0e34e988d31

Author: Jakob Bornecrantz ja...@vmware.com
Date:   Wed Aug 26 14:27:50 2009 +0200

st/xorg: Temporary fix for none stencil visuals

Should be replaced with something looking at the proper
glx visual for the buffers.

---

 src/gallium/state_trackers/xorg/xorg_dri2.c |   19 +--
 1 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/xorg/xorg_dri2.c 
b/src/gallium/state_trackers/xorg/xorg_dri2.c
index e72710b..7d69540 100644
--- a/src/gallium/state_trackers/xorg/xorg_dri2.c
+++ b/src/gallium/state_trackers/xorg/xorg_dri2.c
@@ -60,6 +60,7 @@ driCreateBuffers(DrawablePtr pDraw, unsigned int 
*attachments, int count)
 DRI2BufferPtr buffers;
 PixmapPtr pPixmap;
 unsigned stride, handle;
+boolean have_depth = FALSE, have_stencil = FALSE;
 int i;
 
 buffers = xcalloc(count, sizeof *buffers);
@@ -70,6 +71,16 @@ driCreateBuffers(DrawablePtr pDraw, unsigned int 
*attachments, int count)
 if (!privates)
goto fail_privates;
 
+for (i = 0; i  count; i++) {
+   if (attachments[i] == DRI2BufferDepth)
+   have_depth = TRUE;
+   else if (attachments[i] == DRI2BufferStencil)
+   have_stencil = TRUE;
+}
+
+if (have_stencil  !have_depth)
+   FatalError(Doesn't support only stencil yet\n);
+
 depth = NULL;
 for (i = 0; i  count; i++) {
pPixmap = NULL;
@@ -88,8 +99,12 @@ driCreateBuffers(DrawablePtr pDraw, unsigned int 
*attachments, int count)
struct pipe_texture template;
memset(template, 0, sizeof(template));
template.target = PIPE_TEXTURE_2D;
-   template.format = ms-ds_depth_bits_last ?
-   PIPE_FORMAT_S8Z24_UNORM : PIPE_FORMAT_Z24S8_UNORM;
+   if (have_stencil)
+   template.format = ms-ds_depth_bits_last ?
+   PIPE_FORMAT_S8Z24_UNORM : PIPE_FORMAT_Z24S8_UNORM;
+   else
+   template.format = ms-d_depth_bits_last ?
+   PIPE_FORMAT_X8Z24_UNORM : PIPE_FORMAT_Z24X8_UNORM;
pf_get_block(template.format, template.block);
template.width[0] = pDraw-width;
template.height[0] = pDraw-height;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): st/dri: Add some debug code

2009-08-26 Thread Jakob Bornecrantz
Module: Mesa
Branch: master
Commit: 53b3cdaee2654895dc90a25376ba29b64d166c54
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=53b3cdaee2654895dc90a25376ba29b64d166c54

Author: Jakob Bornecrantz ja...@vmware.com
Date:   Wed Aug 26 14:30:54 2009 +0200

st/dri: Add some debug code

---

 src/gallium/state_trackers/dri/dri_drawable.c |8 ++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/dri/dri_drawable.c 
b/src/gallium/state_trackers/dri/dri_drawable.c
index 62a7e23..c7ca7f7 100644
--- a/src/gallium/state_trackers/dri/dri_drawable.c
+++ b/src/gallium/state_trackers/dri/dri_drawable.c
@@ -57,8 +57,10 @@ dri_surface_from_handle(struct drm_api *api,
struct pipe_buffer *buf = NULL;
 
buf = api-buffer_from_handle(api, screen, dri2 buffer, handle);
-   if (!buf)
+   if (!buf) {
+  debug_printf(%s: Failed to get buffer from handle\n, __func__);
   return NULL;
+   }
 
memset(templat, 0, sizeof(templat));
templat.tex_usage |= PIPE_TEXTURE_USAGE_RENDER_TARGET;
@@ -75,8 +77,10 @@ dri_surface_from_handle(struct drm_api *api,
/* we don't need the buffer from this point on */
pipe_buffer_reference(buf, NULL);
 
-   if (!texture)
+   if (!texture) {
+  debug_printf(%s: Failed to blanket the buffer with a texture\n, 
__func__);
   return NULL;
+   }
 
surface = screen-get_tex_surface(screen, texture, 0, 0, 0,
 PIPE_BUFFER_USAGE_GPU_READ |

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600: fix memory leak

2009-08-26 Thread Alex Deucher
Module: Mesa
Branch: master
Commit: f33853e56d841472f41db9c3c83276c3028a7375
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f33853e56d841472f41db9c3c83276c3028a7375

Author: Alex Deucher alexdeuc...@gmail.com
Date:   Wed Aug 26 11:09:59 2009 -0400

r600: fix memory leak

---

 src/mesa/drivers/dri/r600/r700_fragprog.c |3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/r700_fragprog.c 
b/src/mesa/drivers/dri/r600/r700_fragprog.c
index e4a6d4c..78ce3ae 100644
--- a/src/mesa/drivers/dri/r600/r700_fragprog.c
+++ b/src/mesa/drivers/dri/r600/r700_fragprog.c
@@ -268,7 +268,8 @@ void r700SelectFragmentShader(GLcontext *ctx)
fp-r700AsmCode.bR6xx = 1;
 }
 
-r700TranslateFragmentShader(fp, (fp-mesa_program));
+if (GL_FALSE == fp-translated)
+   r700TranslateFragmentShader(fp, (fp-mesa_program));
 }
 
 void * r700GetActiveFpShaderBo(GLcontext * ctx)

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600: make reloc_chunk size dynamic

2009-08-26 Thread Alex Deucher
Module: Mesa
Branch: master
Commit: 490f640cd58d215281076ae6e0e70649db6b0ed5
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=490f640cd58d215281076ae6e0e70649db6b0ed5

Author: Alex Deucher alexdeuc...@gmail.com
Date:   Wed Aug 26 12:17:44 2009 -0400

r600: make reloc_chunk size dynamic

---

 src/mesa/drivers/dri/r600/r600_cmdbuf.c |   12 +---
 src/mesa/drivers/dri/r600/r700_render.c |3 +--
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/r600_cmdbuf.c 
b/src/mesa/drivers/dri/r600/r600_cmdbuf.c
index 050d7bc..1734b0a 100644
--- a/src/mesa/drivers/dri/r600/r600_cmdbuf.c
+++ b/src/mesa/drivers/dri/r600/r600_cmdbuf.c
@@ -324,7 +324,7 @@ static int r600_cs_emit(struct radeon_cs *cs)
 struct drm_radeon_cs_chunk cs_chunk[2];
 uint32_t length_dw_reloc_chunk;
 uint64_t chunk_ptrs[2];
-uint32_t reloc_chunk[256];
+uint32_t *reloc_chunk;
 int r;
 int retry = 0;
 
@@ -333,8 +333,11 @@ static int r600_cs_emit(struct radeon_cs *cs)
 
 csm-pending_count = 1;
 
-r = r600_cs_process_relocs(cs, (reloc_chunk[0]), length_dw_reloc_chunk);
+reloc_chunk = (uint32_t*)calloc(1, cs-crelocs * 4 * 4);
+
+r = r600_cs_process_relocs(cs, reloc_chunk, length_dw_reloc_chunk);
 if (r) {
+   free(reloc_chunk);
 return 0;
 }
 
@@ -346,7 +349,7 @@ static int r600_cs_emit(struct radeon_cs *cs)
 /* reloc chaunk */
 cs_chunk[1].chunk_id   = RADEON_CHUNK_ID_RELOCS;
 cs_chunk[1].length_dw  = length_dw_reloc_chunk;
-cs_chunk[1].chunk_data = (unsigned long)(reloc_chunk[0]);
+cs_chunk[1].chunk_data = (unsigned long)reloc_chunk;
 
 chunk_ptrs[0] = (uint64_t)(unsigned long)(cs_chunk[0]);
 chunk_ptrs[1] = (uint64_t)(unsigned long)(cs_chunk[1]);
@@ -364,6 +367,7 @@ static int r600_cs_emit(struct radeon_cs *cs)
 } while (r == -EAGAIN  retry  1000);
 
 if (r) {
+   free(reloc_chunk);
 return r;
 }
 
@@ -375,6 +379,8 @@ static int r600_cs_emit(struct radeon_cs *cs)
 cs-csm-vram_write_used = 0;
 cs-csm-gart_write_used = 0;
 
+free(reloc_chunk);
+
 return 0;
 }
 
diff --git a/src/mesa/drivers/dri/r600/r700_render.c 
b/src/mesa/drivers/dri/r600/r700_render.c
index d64e921..0b3ceb0 100644
--- a/src/mesa/drivers/dri/r600/r700_render.c
+++ b/src/mesa/drivers/dri/r600/r700_render.c
@@ -143,8 +143,7 @@ GLboolean r700SyncSurf(context_t *context,
 R600_OUT_BATCH_RELOC(0,
 pbo,
 0,
-read_domain, write_domain, 0); // ???
-
+read_domain, write_domain, 0);
 END_BATCH();
 COMMIT_BATCH();
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): st/xorg: create basic fragment shader

2009-08-26 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: b324aacf139bc88fa268057158af88f725c50c63
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b324aacf139bc88fa268057158af88f725c50c63

Author: Zack Rusin za...@vmware.com
Date:   Wed Aug 26 12:14:27 2009 -0400

st/xorg: create basic fragment shader

---

 src/gallium/state_trackers/xorg/xorg_exa_tgsi.c |   36 ++
 1 files changed, 10 insertions(+), 26 deletions(-)

diff --git a/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c 
b/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c
index 710b65e..b428957 100644
--- a/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c
+++ b/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c
@@ -64,21 +64,9 @@ create_vs(struct pipe_context *ctx,
 }
 
 static void *
-create_fs(struct pipe_context *ctx,
-  unsigned vs_traits)
-{
-   return NULL;
-}
-
-static struct xorg_shader
-xorg_shader_construct(struct exa_context *exa,
-  int op,
-  PicturePtr src_picture,
-  PicturePtr mask_picture,
-  PicturePtr dst_picture)
+create_fs(struct pipe_context *pipe,
+  unsigned fs_traits)
 {
-   struct xorg_shader shader = {0};
-#if 0
struct ureg_program *ureg;
struct ureg_src dst_sampler, src_sampler, mask_sampler;
struct ureg_src dst_pos, src_pos, mask_pos;
@@ -86,10 +74,7 @@ xorg_shader_construct(struct exa_context *exa,
 
ureg = ureg_create(TGSI_PROCESSOR_FRAGMENT);
if (ureg == NULL)
-  return shader;
-
-   if (sid.is_fill)
-  return shader;
+  return 0;
 
 #if 0  /* unused right now */
dst_sampler = ureg_DECL_sampler(ureg);
@@ -105,18 +90,18 @@ xorg_shader_construct(struct exa_context *exa,
 1,
 TGSI_INTERPOLATE_PERSPECTIVE);
 
-   if (sid.mask) {
+   if ((fs_traits  FS_MASK)) {
   mask_sampler = ureg_DECL_sampler(ureg);
-  src_pos = ureg_DECL_fs_input(ureg,
-   TGSI_SEMANTIC_POSITION,
-   2,
-   TGSI_INTERPOLATE_PERSPECTIVE);
+  mask_pos = ureg_DECL_fs_input(ureg,
+TGSI_SEMANTIC_POSITION,
+2,
+TGSI_INTERPOLATE_PERSPECTIVE);
}
 
ureg_TEX(ureg, ureg_dst(src),
 TGSI_TEXTURE_2D, src_pos, src_sampler);
 
-   if (sid.mask) {
+   if ((fs_traits  FS_MASK)) {
   ureg_TEX(ureg, ureg_dst(mask),
TGSI_TEXTURE_2D, mask_pos, mask_sampler);
   /* src IN mask */
@@ -125,8 +110,7 @@ xorg_shader_construct(struct exa_context *exa,
 
ureg_END(ureg);
 
-#endif
-   return shader;
+   return ureg_create_shader_and_destroy(ureg, pipe);
 }
 
 struct xorg_shaders * xorg_shaders_create(struct exa_context *exa)

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): st/xorg: create basic vertex shader

2009-08-26 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: a0966c41a913666f0a6b04bde63162a30b1a1879
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a0966c41a913666f0a6b04bde63162a30b1a1879

Author: Zack Rusin za...@vmware.com
Date:   Wed Aug 26 12:50:14 2009 -0400

st/xorg: create basic vertex shader

---

 src/gallium/state_trackers/xorg/xorg_exa_tgsi.c |   40 +++---
 src/gallium/state_trackers/xorg/xorg_exa_tgsi.h |5 ++-
 2 files changed, 37 insertions(+), 8 deletions(-)

diff --git a/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c 
b/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c
index b428957..04d8977 100644
--- a/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c
+++ b/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c
@@ -57,10 +57,33 @@ src_in_mask(struct ureg_program *ureg,
 }
 
 static void *
-create_vs(struct pipe_context *ctx,
+create_vs(struct pipe_context *pipe,
   unsigned vs_traits)
 {
-   return NULL;
+   struct ureg_program *ureg;
+   struct ureg_src src;
+   struct ureg_dst dst;
+
+   ureg = ureg_create(TGSI_PROCESSOR_VERTEX);
+   if (ureg == NULL)
+  return 0;
+
+   if ((vs_traits  VS_COMPOSITE)) {
+  src = ureg_DECL_vs_input(ureg,
+   TGSI_SEMANTIC_POSITION, 1);
+  dst = ureg_DECL_output(ureg, TGSI_SEMANTIC_POSITION, 1);
+  ureg_MOV(ureg, dst, src);
+   }
+   if ((vs_traits  VS_MASK)) {
+  src = ureg_DECL_vs_input(ureg,
+   TGSI_SEMANTIC_POSITION, 2);
+  dst = ureg_DECL_output(ureg, TGSI_SEMANTIC_POSITION, 2);
+  ureg_MOV(ureg, dst, src);
+   }
+
+   ureg_END(ureg);
+
+   return ureg_create_shader_and_destroy(ureg, pipe);
 }
 
 static void *
@@ -71,6 +94,7 @@ create_fs(struct pipe_context *pipe,
struct ureg_src dst_sampler, src_sampler, mask_sampler;
struct ureg_src dst_pos, src_pos, mask_pos;
struct ureg_src src, mask;
+   struct ureg_dst out;
 
ureg = ureg_create(TGSI_PROCESSOR_FRAGMENT);
if (ureg == NULL)
@@ -90,6 +114,10 @@ create_fs(struct pipe_context *pipe,
 1,
 TGSI_INTERPOLATE_PERSPECTIVE);
 
+   out = ureg_DECL_output(ureg,
+  TGSI_SEMANTIC_COLOR,
+  0);
+
if ((fs_traits  FS_MASK)) {
   mask_sampler = ureg_DECL_sampler(ureg);
   mask_pos = ureg_DECL_fs_input(ureg,
@@ -98,14 +126,14 @@ create_fs(struct pipe_context *pipe,
 TGSI_INTERPOLATE_PERSPECTIVE);
}
 
-   ureg_TEX(ureg, ureg_dst(src),
-TGSI_TEXTURE_2D, src_pos, src_sampler);
-
if ((fs_traits  FS_MASK)) {
   ureg_TEX(ureg, ureg_dst(mask),
TGSI_TEXTURE_2D, mask_pos, mask_sampler);
   /* src IN mask */
-  src_in_mask(ureg, ureg_dst(src), src, mask);
+  src_in_mask(ureg, out, src, mask);
+   } else {
+  ureg_TEX(ureg, out,
+   TGSI_TEXTURE_2D, src_pos, src_sampler);
}
 
ureg_END(ureg);
diff --git a/src/gallium/state_trackers/xorg/xorg_exa_tgsi.h 
b/src/gallium/state_trackers/xorg/xorg_exa_tgsi.h
index f87f035..003e5d8 100644
--- a/src/gallium/state_trackers/xorg/xorg_exa_tgsi.h
+++ b/src/gallium/state_trackers/xorg/xorg_exa_tgsi.h
@@ -5,8 +5,9 @@
 
 enum xorg_vs_traits {
VS_COMPOSITE= 1  0,
-   VS_FILL = 1  1
-   /*VS_TRANSFORM  = 1  2*/
+   VS_MASK = 1  1,
+   VS_FILL = 1  2
+   /*VS_TRANSFORM  = 1  3*/
 };
 
 enum xorg_fs_traits {

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600: add missing radeon_cs_space_set_flush call

2009-08-26 Thread Alex Deucher
Module: Mesa
Branch: master
Commit: f988c750a9d3baa2c71f9fd1c0493daef93afc86
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f988c750a9d3baa2c71f9fd1c0493daef93afc86

Author: Alex Deucher alexdeuc...@gmail.com
Date:   Wed Aug 26 13:08:49 2009 -0400

r600: add missing radeon_cs_space_set_flush call

fixes crash in etracer reported by kdekorte on IRC

---

 src/mesa/drivers/dri/r600/r600_cmdbuf.c |3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/r600_cmdbuf.c 
b/src/mesa/drivers/dri/r600/r600_cmdbuf.c
index 1734b0a..65930ff 100644
--- a/src/mesa/drivers/dri/r600/r600_cmdbuf.c
+++ b/src/mesa/drivers/dri/r600/r600_cmdbuf.c
@@ -487,6 +487,9 @@ void r600InitCmdBuf(context_t *r600) /* from 
rcommonInitCmdBuf */
assert(rmesa-cmdbuf.cs != NULL);
rmesa-cmdbuf.size = size;
 
+   radeon_cs_space_set_flush(rmesa-cmdbuf.cs,
+ (void (*)(void *))rmesa-glCtx-Driver.Flush, 
rmesa-glCtx);
+
if (!rmesa-radeonScreen-kernel_mm) {
radeon_cs_set_limit(rmesa-cmdbuf.cs, RADEON_GEM_DOMAIN_VRAM, 
rmesa-radeonScreen-texSize[0]);
radeon_cs_set_limit(rmesa-cmdbuf.cs, RADEON_GEM_DOMAIN_GTT, 
rmesa-radeonScreen-gartTextures.size);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (mesa_7_5_branch): glsl: fix bug in sampler array indexing

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: mesa_7_5_branch
Commit: 04d170794a22d93d58afeb5d0930e06f85964f9a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=04d170794a22d93d58afeb5d0930e06f85964f9a

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 11:39:24 2009 -0600

glsl: fix bug in sampler array indexing

Need to add the 'offset' parameter when indexing the parameter array.
Before, if we were setting arrays of samplers, we were actually only
setting the 0th sampler's value.

Because of how progs/glsl/samplers.c is constructed, this wasn't showing
up as a failure in the samplers_array output.

---

 src/mesa/shader/shader_api.c |   10 +++---
 1 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c
index 14da974..95b7490 100644
--- a/src/mesa/shader/shader_api.c
+++ b/src/mesa/shader/shader_api.c
@@ -1624,7 +1624,6 @@ set_program_uniform(GLcontext *ctx, struct gl_program 
*program,
 
if (param-Type == PROGRAM_SAMPLER) {
   /* This controls which texture unit which is used by a sampler */
-  GLuint texUnit, sampler;
   GLint i;
 
   /* data type for setting samplers must be int */
@@ -1639,8 +1638,9 @@ set_program_uniform(GLcontext *ctx, struct gl_program 
*program,
* common thing...
*/
   for (i = 0; i  count; i++) {
- sampler = (GLuint) program-Parameters-ParameterValues[index + i][0];
- texUnit = ((GLuint *) values)[i];
+ GLuint sampler =
+(GLuint) program-Parameters-ParameterValues[index + offset + 
i][0];
+ GLuint texUnit = ((GLuint *) values)[i];
 
  /* check that the sampler (tex unit index) is legal */
  if (texUnit = ctx-Const.MaxTextureImageUnits) {
@@ -1651,6 +1651,10 @@ set_program_uniform(GLcontext *ctx, struct gl_program 
*program,
 
  /* This maps a sampler to a texture unit: */
  if (sampler  MAX_SAMPLERS) {
+#if 0
+_mesa_printf(Set program %p sampler %d '%s' to unit %u\n,
+ program, sampler, param-Name, texUnit);
+#endif
 program-SamplerUnits[sampler] = texUnit;
  }
   }

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (mesa_7_5_branch): progs/glsl: change samplers. c to better test sampler/texture indexing

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: mesa_7_5_branch
Commit: f6d34c20585ae9b4fb07ec2f2850f04dc9a9bc29
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f6d34c20585ae9b4fb07ec2f2850f04dc9a9bc29

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 11:53:25 2009 -0600

progs/glsl: change samplers.c to better test sampler/texture indexing

Now the left half is yellow and the right half is red, with the gradients
going in opposite directions.

---

 progs/glsl/samplers.c |   16 
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/progs/glsl/samplers.c b/progs/glsl/samplers.c
index 113e5bb..87dad5d 100644
--- a/progs/glsl/samplers.c
+++ b/progs/glsl/samplers.c
@@ -211,10 +211,18 @@ InitTextures(void)
   for (y = 0; y  stripeSize; y++) {
  for (x = 0; x  size; x++) {
 GLint k = 4 * ((ypos + y) * size + x);
-texImage[k + 0] = intensity;
-texImage[k + 1] = intensity;
-texImage[k + 2] = 0;
-texImage[k + 3] = 255;
+if (x  size / 2) {
+   texImage[k + 0] = intensity;
+   texImage[k + 1] = intensity;
+   texImage[k + 2] = 0;
+   texImage[k + 3] = 255;
+}
+else {
+   texImage[k + 0] = 255 - intensity;
+   texImage[k + 1] = 0;
+   texImage[k + 2] = 0;
+   texImage[k + 3] = 255;
+}
  }
   }
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (mesa_7_5_branch): progs/glsl: add special Makefile rule for samplers_array

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: mesa_7_5_branch
Commit: 488b3c4d1bc3d830477180759a42dbaf8f5801b0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=488b3c4d1bc3d830477180759a42dbaf8f5801b0

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 11:55:15 2009 -0600

progs/glsl: add special Makefile rule for samplers_array

---

 progs/glsl/Makefile |4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/progs/glsl/Makefile b/progs/glsl/Makefile
index eedd866..6af7a66 100644
--- a/progs/glsl/Makefile
+++ b/progs/glsl/Makefile
@@ -32,6 +32,7 @@ DEMO_SOURCES = \
pointcoord.c \
points.c \
samplers.c \
+   samplers_array.c \
shadow_sampler.c \
skinning.c \
texaaline.c \
@@ -188,7 +189,8 @@ samplers.o: $(UTIL_HEADERS)
 samplers: samplers.o $(UTIL_OBJS)
 
 
-samplers_array.o: $(UTIL_HEADERS)
+samplers_array.o: samplers.c $(UTIL_HEADERS)
+   $(APP_CC) $(CFLAGS) -DSAMPLERS_ARRAY $ -c -o $@
 
 samplers_array: samplers_array.o $(UTIL_OBJS)
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): tgsi: check for SOA dependencies in SSE and PPC code generators

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: ce723d8d8b011f2efaea6588c42b6d11ee2e7115
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ce723d8d8b011f2efaea6588c42b6d11ee2e7115

Author: Brian Paul bri...@vmware.com
Date:   Thu Aug 20 10:34:45 2009 -0600

tgsi: check for SOA dependencies in SSE and PPC code generators

Fall back to interpreter for now.  This doesn't happen very often.

---

 src/gallium/auxiliary/tgsi/tgsi_ppc.c  |4 
 src/gallium/auxiliary/tgsi/tgsi_sse2.c |4 
 2 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_ppc.c 
b/src/gallium/auxiliary/tgsi/tgsi_ppc.c
index 2f8b0c4..8466d9b 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_ppc.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_ppc.c
@@ -1112,6 +1112,10 @@ emit_instruction(struct gen_context *gen,
if (inst-Instruction.Saturate != TGSI_SAT_NONE)
   return 0;
 
+   /* need to use extra temps to fix SOA dependencies : */
+   if (tgsi_check_soa_dependencies(inst))
+  return FALSE;
+
switch (inst-Instruction.Opcode) {
case TGSI_OPCODE_MOV:
case TGSI_OPCODE_SWZ:
diff --git a/src/gallium/auxiliary/tgsi/tgsi_sse2.c 
b/src/gallium/auxiliary/tgsi/tgsi_sse2.c
index 571f98a..a13368c 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_sse2.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_sse2.c
@@ -1506,6 +1506,10 @@ emit_instruction(
if (inst-Instruction.Saturate != TGSI_SAT_NONE)
   return FALSE;
 
+   /* need to use extra temps to fix SOA dependencies : */
+   if (tgsi_check_soa_dependencies(inst))
+  return FALSE;
+
switch (inst-Instruction.Opcode) {
case TGSI_OPCODE_ARL:
   FOR_EACH_DST0_ENABLED_CHANNEL( *inst, chan_index ) {

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): tgsi: handle SOA dependencies for MOV/SWZ

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 4c7c2942a66f4585faa41ea9810527ea1e92
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4c7c2942a66f4585faa41ea9810527ea1e92

Author: Brian Paul bri...@vmware.com
Date:   Thu Aug 20 10:28:22 2009 -0600

tgsi: handle SOA dependencies for MOV/SWZ

SOA dependencies can happen when a register is used both as a source and
destination and the source is swizzled.  For example:

MOV T, T.yxwz; would expand into:

  MOV t0, t1;
  MOV t1, t0;
  MOV t2, t3;
  MOV t3, t2;

The second instruction will produce the wrong result since we wrote to t0
in the first instruction.  We need to use an intermediate temporary to fix
this.

This will take more work to fix for all TGSI instructions.  This seems to
happen with MOV instructions more than anything else so fix that case now
and warn on others.

Fixes piglit glsl-vs-loop test (when not using SSE). See bug 23317.

---

 src/gallium/auxiliary/tgsi/tgsi_exec.c |   50 +++-
 src/gallium/auxiliary/tgsi/tgsi_exec.h |4 ++
 2 files changed, 40 insertions(+), 14 deletions(-)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c 
b/src/gallium/auxiliary/tgsi/tgsi_exec.c
index 5cb322a..259894e 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
@@ -62,6 +62,9 @@
 
 #define FAST_MATH 1
 
+/** for tgsi_full_instruction::Flags */
+#define SOA_DEPENDENCY_FLAG 0x1
+
 #define TILE_TOP_LEFT 0
 #define TILE_TOP_RIGHT1
 #define TILE_BOTTOM_LEFT  2
@@ -182,7 +185,7 @@ print_temp(const struct tgsi_exec_machine *mach, uint index)
  *   MOV t3, t2;
  * The second instruction will have the wrong value for t0 if executed as-is.
  */
-static boolean
+boolean
 tgsi_check_soa_dependencies(const struct tgsi_full_instruction *inst)
 {
uint i, chan;
@@ -328,19 +331,24 @@ tgsi_exec_machine_bind_shader(
* sizeof(struct tgsi_full_instruction));
 maxInstructions += 10;
  }
- memcpy(instructions + numInstructions,
-parse.FullToken.FullInstruction,
-sizeof(instructions[0]));
 
-#if 0
  if (tgsi_check_soa_dependencies(parse.FullToken.FullInstruction)) {
-debug_printf(SOA dependency in instruction:\n);
-tgsi_dump_instruction(parse.FullToken.FullInstruction,
-  numInstructions);
+uint opcode = parse.FullToken.FullInstruction.Instruction.Opcode;
+parse.FullToken.FullInstruction.Flags = SOA_DEPENDENCY_FLAG;
+/* XXX we only handle SOA dependencies properly for MOV/SWZ
+ * at this time!
+ */
+if (opcode != TGSI_OPCODE_MOV  opcode != TGSI_OPCODE_SWZ) {
+   debug_printf(Warning: SOA dependency in instruction
+ is not handled:\n);
+   tgsi_dump_instruction(parse.FullToken.FullInstruction,
+ numInstructions);
+}
  }
-#else
- (void) tgsi_check_soa_dependencies;
-#endif
+
+ memcpy(instructions + numInstructions,
+parse.FullToken.FullInstruction,
+sizeof(instructions[0]));
 
  numInstructions++;
  break;
@@ -2018,9 +2026,23 @@ exec_instruction(
 
case TGSI_OPCODE_MOV:
case TGSI_OPCODE_SWZ:
-  FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
- FETCH( r[0], 0, chan_index );
- STORE( r[0], 0, chan_index );
+  if (inst-Flags  SOA_DEPENDENCY_FLAG) {
+ /* Do all fetches into temp regs, then do all stores to avoid
+  * intermediate/accidental clobbering.  This could be done all the
+  * time for MOV but for other instructions we'll need more temps...
+  */
+ FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
+FETCH( r[chan_index], 0, chan_index );
+ }
+ FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
+STORE( r[chan_index], 0, chan_index );
+ }
+  }
+  else {
+ FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
+FETCH( r[0], 0, chan_index );
+STORE( r[0], 0, chan_index );
+ }
   }
   break;
 
diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.h 
b/src/gallium/auxiliary/tgsi/tgsi_exec.h
index da22baa..182e5e2 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_exec.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.h
@@ -272,6 +272,10 @@ void
 tgsi_exec_machine_free_data(struct tgsi_exec_machine *mach);
 
 
+boolean
+tgsi_check_soa_dependencies(const struct tgsi_full_instruction *inst);
+
+
 static INLINE void
 tgsi_set_kill_mask(struct tgsi_exec_machine *mach, unsigned mask)
 {

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glsl: Silence gcc uninitialized variable warning.

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: f785b35b47926e052571386227eff58db7c084e2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f785b35b47926e052571386227eff58db7c084e2

Author: Vinson Lee v...@vmware.com
Date:   Mon Aug 24 11:43:02 2009 -0600

glsl: Silence gcc uninitialized variable warning.

---

 src/mesa/shader/slang/slang_builtin.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/mesa/shader/slang/slang_builtin.c 
b/src/mesa/shader/slang/slang_builtin.c
index 289d946..4e67241 100644
--- a/src/mesa/shader/slang/slang_builtin.c
+++ b/src/mesa/shader/slang/slang_builtin.c
@@ -436,7 +436,7 @@ emit_statevars(const char *name, int array_len,
struct gl_program_parameter_list *paramList)
 {
if (type-type == SLANG_SPEC_ARRAY) {
-  GLint i, pos;
+  GLint i, pos = -1;
   assert(array_len  0);
   if (strcmp(name, gl_ClipPlane) == 0) {
  tokens[0] = STATE_CLIPPLANE;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): st/mesa: flush bitmap cache if Z value changes

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 1aba1baa622116759bfedca87f37e527c0111d16
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1aba1baa622116759bfedca87f37e527c0111d16

Author: Brian Paul bri...@vmware.com
Date:   Fri Aug 21 10:24:50 2009 -0600

st/mesa: flush bitmap cache if Z value changes

When adding a new bitmap to the cache we have to check if the Z value is
changing and flush first if it is.

This is a modified version of a patch from Justin Dou justin@intel.com

---

 src/mesa/state_tracker/st_cb_bitmap.c |   16 +++-
 1 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_bitmap.c 
b/src/mesa/state_tracker/st_cb_bitmap.c
index 8709633..ccf972f 100644
--- a/src/mesa/state_tracker/st_cb_bitmap.c
+++ b/src/mesa/state_tracker/st_cb_bitmap.c
@@ -94,6 +94,9 @@ struct bitmap_cache
 
GLfloat color[4];
 
+   /** Bitmap's Z position */
+   GLfloat zpos;
+
struct pipe_texture *texture;
struct pipe_transfer *trans;
 
@@ -104,6 +107,8 @@ struct bitmap_cache
 };
 
 
+/** Epsilon for Z comparisons */
+#define Z_EPSILON 1e-06
 
 
 /**
@@ -538,9 +543,7 @@ draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat 
z,
}
 
/* draw textured quad */
-   offset = setup_bitmap_vertex_data(st, x, y, width, height,
- ctx-Current.RasterPos[2],
- color);
+   offset = setup_bitmap_vertex_data(st, x, y, width, height, z, color);
 
util_draw_vertex_buffer(pipe, st-bitmap.vbuf, offset,
PIPE_PRIM_TRIANGLE_FAN,
@@ -647,7 +650,7 @@ st_flush_bitmap_cache(struct st_context *st)
  draw_bitmap_quad(st-ctx,
   cache-xpos,
   cache-ypos,
-  st-ctx-Current.RasterPos[2],
+  cache-zpos,
   BITMAP_CACHE_WIDTH, BITMAP_CACHE_HEIGHT,
   cache-texture,
   cache-color);
@@ -687,6 +690,7 @@ accum_bitmap(struct st_context *st,
 {
struct bitmap_cache *cache = st-bitmap.cache;
int px = -999, py;
+   const GLfloat z = st-ctx-Current.RasterPos[2];
 
if (width  BITMAP_CACHE_WIDTH ||
height  BITMAP_CACHE_HEIGHT)
@@ -697,7 +701,8 @@ accum_bitmap(struct st_context *st,
   py = y - cache-ypos;
   if (px  0 || px + width  BITMAP_CACHE_WIDTH ||
   py  0 || py + height  BITMAP_CACHE_HEIGHT ||
-  !TEST_EQ_4V(st-ctx-Current.RasterColor, cache-color)) {
+  !TEST_EQ_4V(st-ctx-Current.RasterColor, cache-color) ||
+  ((fabs(z - cache-zpos)  Z_EPSILON))) {
  /* This bitmap would extend beyond cache bounds, or the bitmap
   * color is changing
   * so flush and continue.
@@ -712,6 +717,7 @@ accum_bitmap(struct st_context *st,
   py = (BITMAP_CACHE_HEIGHT - height) / 2;
   cache-xpos = x;
   cache-ypos = y - py;
+  cache-zpos = z;
   cache-empty = GL_FALSE;
   COPY_4FV(cache-color, st-ctx-Current.RasterColor);
}

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): vbo: fix divide by zero exception

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: b9b04872d526ed7955f647542399e110ace0325c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b9b04872d526ed7955f647542399e110ace0325c

Author: Brian Paul bri...@vmware.com
Date:   Mon Aug 24 12:43:57 2009 -0600

vbo: fix divide by zero exception

Fixes bug 23489.

---

 src/mesa/vbo/vbo_exec_draw.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/mesa/vbo/vbo_exec_draw.c b/src/mesa/vbo/vbo_exec_draw.c
index c53a4ee..98177a4 100644
--- a/src/mesa/vbo/vbo_exec_draw.c
+++ b/src/mesa/vbo/vbo_exec_draw.c
@@ -383,7 +383,7 @@ void vbo_exec_vtx_flush( struct vbo_exec_context *exec,
}
 
 
-   if (unmap) 
+   if (unmap || exec-vtx.vertex_size == 0)
   exec-vtx.max_vert = 0;
else
   exec-vtx.max_vert = ((VBO_VERT_BUFFER_SIZE - exec-vtx.buffer_used) / 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): xlib: fix single buffer window resize bug

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: b5ecbbe636dd0d2094921c5401e4268694c405ce
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b5ecbbe636dd0d2094921c5401e4268694c405ce

Author: Brian Paul bri...@vmware.com
Date:   Mon Aug 24 12:58:47 2009 -0600

xlib: fix single buffer window resize bug

When a single-buffered window was resized the new window size was never
detected.  This fix that, but there's still a bug which causes window
contents corruption for certain window sizes...

---

 src/gallium/winsys/xlib/xlib_softpipe.c |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/src/gallium/winsys/xlib/xlib_softpipe.c 
b/src/gallium/winsys/xlib/xlib_softpipe.c
index 44b8464..2a08b82 100644
--- a/src/gallium/winsys/xlib/xlib_softpipe.c
+++ b/src/gallium/winsys/xlib/xlib_softpipe.c
@@ -303,6 +303,7 @@ xm_flush_frontbuffer(struct pipe_winsys *pws,
 */
XMesaContext xmctx = (XMesaContext) context_private;
xlib_softpipe_display_surface(xmctx-xm_buffer, surf);
+   xmesa_check_and_update_buffer_size(xmctx, xmctx-xm_buffer);
 }
 
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): docs: recent 7.5.1 bug fixes

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 96f7b422426f8f13f4cedbe280e5dede6b358f2a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=96f7b422426f8f13f4cedbe280e5dede6b358f2a

Author: Brian Paul bri...@vmware.com
Date:   Mon Aug 24 13:02:33 2009 -0600

docs: recent 7.5.1 bug fixes

---

 docs/relnotes-7.5.1.html |2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/docs/relnotes-7.5.1.html b/docs/relnotes-7.5.1.html
index 1da086d..77f2dd2 100644
--- a/docs/relnotes-7.5.1.html
+++ b/docs/relnotes-7.5.1.html
@@ -50,6 +50,8 @@ tbd
 liFixed minor GLX memory leaks.
 liFixed some texture env / fragment program state bugs.
 liFixed some Gallium glBlitFramebuffer() bugs
+liEmpty glBegin/glEnd() pair could cause divide by zero (bug 23489)
+liFixed Gallium glBitmap() Z position bug
 /ul
 
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): progs/glsl: change samplers.c to better test sampler/ texture indexing

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: f6d34c20585ae9b4fb07ec2f2850f04dc9a9bc29
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f6d34c20585ae9b4fb07ec2f2850f04dc9a9bc29

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 11:53:25 2009 -0600

progs/glsl: change samplers.c to better test sampler/texture indexing

Now the left half is yellow and the right half is red, with the gradients
going in opposite directions.

---

 progs/glsl/samplers.c |   16 
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/progs/glsl/samplers.c b/progs/glsl/samplers.c
index 113e5bb..87dad5d 100644
--- a/progs/glsl/samplers.c
+++ b/progs/glsl/samplers.c
@@ -211,10 +211,18 @@ InitTextures(void)
   for (y = 0; y  stripeSize; y++) {
  for (x = 0; x  size; x++) {
 GLint k = 4 * ((ypos + y) * size + x);
-texImage[k + 0] = intensity;
-texImage[k + 1] = intensity;
-texImage[k + 2] = 0;
-texImage[k + 3] = 255;
+if (x  size / 2) {
+   texImage[k + 0] = intensity;
+   texImage[k + 1] = intensity;
+   texImage[k + 2] = 0;
+   texImage[k + 3] = 255;
+}
+else {
+   texImage[k + 0] = 255 - intensity;
+   texImage[k + 1] = 0;
+   texImage[k + 2] = 0;
+   texImage[k + 3] = 255;
+}
  }
   }
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glsl: fix bug in sampler array indexing

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 04d170794a22d93d58afeb5d0930e06f85964f9a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=04d170794a22d93d58afeb5d0930e06f85964f9a

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 11:39:24 2009 -0600

glsl: fix bug in sampler array indexing

Need to add the 'offset' parameter when indexing the parameter array.
Before, if we were setting arrays of samplers, we were actually only
setting the 0th sampler's value.

Because of how progs/glsl/samplers.c is constructed, this wasn't showing
up as a failure in the samplers_array output.

---

 src/mesa/shader/shader_api.c |   10 +++---
 1 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c
index 14da974..95b7490 100644
--- a/src/mesa/shader/shader_api.c
+++ b/src/mesa/shader/shader_api.c
@@ -1624,7 +1624,6 @@ set_program_uniform(GLcontext *ctx, struct gl_program 
*program,
 
if (param-Type == PROGRAM_SAMPLER) {
   /* This controls which texture unit which is used by a sampler */
-  GLuint texUnit, sampler;
   GLint i;
 
   /* data type for setting samplers must be int */
@@ -1639,8 +1638,9 @@ set_program_uniform(GLcontext *ctx, struct gl_program 
*program,
* common thing...
*/
   for (i = 0; i  count; i++) {
- sampler = (GLuint) program-Parameters-ParameterValues[index + i][0];
- texUnit = ((GLuint *) values)[i];
+ GLuint sampler =
+(GLuint) program-Parameters-ParameterValues[index + offset + 
i][0];
+ GLuint texUnit = ((GLuint *) values)[i];
 
  /* check that the sampler (tex unit index) is legal */
  if (texUnit = ctx-Const.MaxTextureImageUnits) {
@@ -1651,6 +1651,10 @@ set_program_uniform(GLcontext *ctx, struct gl_program 
*program,
 
  /* This maps a sampler to a texture unit: */
  if (sampler  MAX_SAMPLERS) {
+#if 0
+_mesa_printf(Set program %p sampler %d '%s' to unit %u\n,
+ program, sampler, param-Name, texUnit);
+#endif
 program-SamplerUnits[sampler] = texUnit;
  }
   }

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): progs/glsl: add special Makefile rule for samplers_array

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 488b3c4d1bc3d830477180759a42dbaf8f5801b0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=488b3c4d1bc3d830477180759a42dbaf8f5801b0

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 11:55:15 2009 -0600

progs/glsl: add special Makefile rule for samplers_array

---

 progs/glsl/Makefile |4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/progs/glsl/Makefile b/progs/glsl/Makefile
index eedd866..6af7a66 100644
--- a/progs/glsl/Makefile
+++ b/progs/glsl/Makefile
@@ -32,6 +32,7 @@ DEMO_SOURCES = \
pointcoord.c \
points.c \
samplers.c \
+   samplers_array.c \
shadow_sampler.c \
skinning.c \
texaaline.c \
@@ -188,7 +189,8 @@ samplers.o: $(UTIL_HEADERS)
 samplers: samplers.o $(UTIL_OBJS)
 
 
-samplers_array.o: $(UTIL_HEADERS)
+samplers_array.o: samplers.c $(UTIL_HEADERS)
+   $(APP_CC) $(CFLAGS) -DSAMPLERS_ARRAY $ -c -o $@
 
 samplers_array: samplers_array.o $(UTIL_OBJS)
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): ARB prog: Set error instead of falling through with incorrect value

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: bf7e4b10cbed496a12c8be17531c9cb7da1be177
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bf7e4b10cbed496a12c8be17531c9cb7da1be177

Author: Brian Paul bri...@vmware.com
Date:   Mon Aug 24 13:56:01 2009 -0600

ARB prog: Set error instead of falling through with incorrect value

If a fragment program only parameter was queried of a vertex program
(e.g., GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB) no error would be set and
a random value would be returned.  This caused 'glxinfo -l' to show
the same values for GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB,
GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB, GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB,
GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB,
GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB,
GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB as for
GL_MAX_PROGRAM_ENV_PARAMETERS_ARB.  This is confusing and incorrect.

(cherry picked from master, commit 4bccd693a72a0b42dffc849034263a68e779ca91)

---

 src/mesa/shader/arbprogram.c |3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/src/mesa/shader/arbprogram.c b/src/mesa/shader/arbprogram.c
index 981565a..a033105 100644
--- a/src/mesa/shader/arbprogram.c
+++ b/src/mesa/shader/arbprogram.c
@@ -985,6 +985,9 @@ _mesa_GetProgramivARB(GLenum target, GLenum pname, GLint 
*params)
 _mesa_error(ctx, GL_INVALID_ENUM, glGetProgramivARB(pname));
 return;
   }
+   } else {
+  _mesa_error(ctx, GL_INVALID_ENUM, glGetProgramivARB(pname));
+  return;
}
 }
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): Merge branch 'mesa_7_5_branch'

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 476290946e7bd3b7fe5688622127d8c6a9c7f367
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=476290946e7bd3b7fe5688622127d8c6a9c7f367

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 12:01:23 2009 -0600

Merge branch 'mesa_7_5_branch'

---



___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: additional instruction field size assertions

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: dd528f0ec18cfbd6f0a5b23b8cb46a97b96ab965
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=dd528f0ec18cfbd6f0a5b23b8cb46a97b96ab965

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 10:57:18 2009 -0600

mesa: additional instruction field size assertions

---

 src/mesa/shader/program.c |6 ++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/src/mesa/shader/program.c b/src/mesa/shader/program.c
index 4623ff6..963478f 100644
--- a/src/mesa/shader/program.c
+++ b/src/mesa/shader/program.c
@@ -62,6 +62,12 @@ _mesa_init_program(GLcontext *ctx)
ASSERT(ctx-Const.FragmentProgram.MaxUniformComponents / 4
   = (1  INST_INDEX_BITS));
 
+   /* If this fails, increase prog_instruction::TexSrcUnit size */
+   ASSERT(MAX_TEXTURE_UNITS  (1  5));
+
+   /* If this fails, increase prog_instruction::TexSrcTarget size */
+   ASSERT(NUM_TEXTURE_TARGETS  (1  3));
+
ctx-Program.ErrorPos = -1;
ctx-Program.ErrorString = _mesa_strdup();
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: var renaming, new assertion

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: f05344fcea329c6dee04356a71323f0b7ac71566
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f05344fcea329c6dee04356a71323f0b7ac71566

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 10:58:06 2009 -0600

mesa: var renaming, new assertion

---

 src/mesa/shader/shader_api.c |9 +
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c
index b52be12..1b604f0 100644
--- a/src/mesa/shader/shader_api.c
+++ b/src/mesa/shader/shader_api.c
@@ -1553,10 +1553,11 @@ _mesa_update_shader_textures_used(struct gl_program 
*prog)
 
for (s = 0; s  MAX_SAMPLERS; s++) {
   if (prog-SamplersUsed  (1  s)) {
- GLuint u = prog-SamplerUnits[s];
- GLuint t = prog-SamplerTargets[s];
- assert(u  MAX_TEXTURE_IMAGE_UNITS);
- prog-TexturesUsed[u] |= (1  t);
+ GLuint unit = prog-SamplerUnits[s];
+ GLuint tgt = prog-SamplerTargets[s];
+ assert(unit  MAX_TEXTURE_IMAGE_UNITS);
+ assert(tgt  NUM_TEXTURE_TARGETS);
+ prog-TexturesUsed[unit] |= (1  tgt);
   }
}
 }

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): i965: clean up texture target switches

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: f8b344114f4475ba267cbba320ab1c1d755d30a6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f8b344114f4475ba267cbba320ab1c1d755d30a6

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 11:05:04 2009 -0600

i965: clean up texture target switches

---

 src/mesa/drivers/dri/i965/brw_wm_emit.c |   12 ++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_wm_emit.c 
b/src/mesa/drivers/dri/i965/brw_wm_emit.c
index 5f29ca1..268f796 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_emit.c
@@ -735,10 +735,14 @@ static void emit_tex( struct brw_wm_compile *c,
   emit = WRITEMASK_XY;
   nr = 2;
   break;
-   default:
+   case TEXTURE_3D_INDEX:
+   case TEXTURE_CUBE_INDEX:
   emit = WRITEMASK_XYZ;
   nr = 3;
   break;
+   default:
+  /* unexpected target */
+  abort();
}
 
if (inst-tex_shadow) {
@@ -810,11 +814,15 @@ static void emit_txb( struct brw_wm_compile *c,
   brw_MOV(p, brw_message_reg(4), arg[1]);
   brw_MOV(p, brw_message_reg(6), brw_imm_f(0));
   break;
-   default:
+   case TEXTURE_3D_INDEX:
+   case TEXTURE_CUBE_INDEX:
   brw_MOV(p, brw_message_reg(2), arg[0]);
   brw_MOV(p, brw_message_reg(4), arg[1]);
   brw_MOV(p, brw_message_reg(6), arg[2]);
   break;
+   default:
+  /* unexpected target */
+  abort();
}
 
brw_MOV(p, brw_message_reg(8), arg[3]);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): i965: added texture unit sanity check

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: af7315e58b8bfe230f7b4c5a8d5b669d67aab9f0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=af7315e58b8bfe230f7b4c5a8d5b669d67aab9f0

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 12:07:52 2009 -0600

i965: added texture unit sanity check

Check that all the textures needed by the current fragment program
actually exist and are valid.

---

 src/mesa/drivers/dri/i965/brw_state_upload.c |   13 +
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c 
b/src/mesa/drivers/dri/i965/brw_state_upload.c
index 95d42d2..414620d 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -322,6 +322,19 @@ void brw_validate_state( struct brw_context *brw )
 }
   }
}
+
+   /* Make sure that the textures which are referenced by the current
+* brw fragment program are actually present/valid.
+* If this fails, we can experience GPU lock-ups.
+*/
+   {
+  const struct brw_fragment_program *fp;
+  fp = brw_fragment_program_const(brw-fragment_program);
+  if (fp) {
+ assert((fp-tex_units_used  ctx-Texture._EnabledUnits)
+== fp-tex_units_used);
+  }
+   }
 }
 
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): i965: keep track of which texture units the fragment shader accesses

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 34da6024e3097684110cd1fd4da0f25adc415cd6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=34da6024e3097684110cd1fd4da0f25adc415cd6

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 12:07:03 2009 -0600

i965: keep track of which texture units the fragment shader accesses

We'll use this for debug/sanity checking.

---

 src/mesa/drivers/dri/i965/brw_context.h |3 +++
 src/mesa/drivers/dri/i965/brw_wm_fp.c   |   18 +++---
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_context.h 
b/src/mesa/drivers/dri/i965/brw_context.h
index 847c44e..26a64d6 100644
--- a/src/mesa/drivers/dri/i965/brw_context.h
+++ b/src/mesa/drivers/dri/i965/brw_context.h
@@ -174,6 +174,9 @@ struct brw_fragment_program {
 
dri_bo *const_buffer;/** Program constant buffer/surface */
GLboolean use_const_buffer;
+
+   /** for debugging, which texture units are referenced */
+   GLbitfield tex_units_used;
 };
 
 
diff --git a/src/mesa/drivers/dri/i965/brw_wm_fp.c 
b/src/mesa/drivers/dri/i965/brw_wm_fp.c
index 4ee2e97..c512126 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_fp.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_fp.c
@@ -42,6 +42,12 @@
 #include shader/prog_statevars.h
 
 
+/** An invalid texture target */
+#define TEX_TARGET_NONE NUM_TEXTURE_TARGETS
+
+/** An invalid texture unit */
+#define TEX_UNIT_NONE BRW_MAX_TEX_UNIT
+
 #define FIRST_INTERNAL_TEMP MAX_NV_FRAGMENT_PROGRAM_TEMPS
 
 #define X0
@@ -199,8 +205,14 @@ static struct prog_instruction * emit_tex_op(struct 
brw_wm_compile *c,
 {
struct prog_instruction *inst = get_fp_inst(c);
   
-   assert(tex_src_unit  BRW_MAX_TEX_UNIT);
-   assert(tex_src_target  NUM_TEXTURE_TARGETS);
+   assert(tex_src_unit  BRW_MAX_TEX_UNIT ||
+  tex_src_unit == TEX_UNIT_NONE);
+   assert(tex_src_target  NUM_TEXTURE_TARGETS ||
+  tex_src_target == TEX_TARGET_NONE);
+
+   /* update mask of which texture units are referenced by this program */
+   if (tex_src_unit != TEX_UNIT_NONE)
+  c-fp-tex_units_used |= (1  tex_src_unit);
 
memset(inst, 0, sizeof(*inst));
 
@@ -226,7 +238,7 @@ static struct prog_instruction * emit_op(struct 
brw_wm_compile *c,
   struct prog_src_register src2 )
 {
return emit_tex_op(c, op, dest, saturate,
-  0, 0, 0,  /* tex unit, target, shadow */
+  TEX_UNIT_NONE, TEX_TARGET_NONE, 0,  /* unit, tgt, shadow 
*/
   src0, src1, src2);
 }
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): progs/glsl: asst. changes in shtest.c

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 72052210516b4cb0e082e0c56822cd33b1562630
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=72052210516b4cb0e082e0c56822cd33b1562630

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 12:16:07 2009 -0600

progs/glsl: asst. changes in shtest.c

---

 progs/glsl/shtest.c |   19 ---
 1 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/progs/glsl/shtest.c b/progs/glsl/shtest.c
index fa477d9..628a7dd 100644
--- a/progs/glsl/shtest.c
+++ b/progs/glsl/shtest.c
@@ -107,10 +107,18 @@ RandomUniformValues(void)
 {
GLuint i;
for (i = 0; i  NumUniforms; i++) {
-  if (Uniforms[i].type == GL_FLOAT) {
+  switch (Uniforms[i].type) {
+  case GL_FLOAT:
  Uniforms[i].value[0] = RandomFloat(0.0, 1.0);
-  }
-  else {
+ break;
+  case GL_SAMPLER_1D:
+  case GL_SAMPLER_2D:
+  case GL_SAMPLER_3D:
+  case GL_SAMPLER_CUBE:
+  case GL_SAMPLER_2D_RECT_ARB:
+ /* don't change sampler values - random values are bad */
+ break;
+  default:
  Uniforms[i].value[0] = RandomFloat(-1.0, 2.0);
  Uniforms[i].value[1] = RandomFloat(-1.0, 2.0);
  Uniforms[i].value[2] = RandomFloat(-1.0, 2.0);
@@ -595,10 +603,15 @@ Init(void)
Program = LinkShaders(vertShader, fragShader);
linkTime = GetShaderLinkTime();
 
+   printf(Read vert shader %s\n, VertShaderFile);
+   printf(Read frag shader %s\n, FragShaderFile);
+
printf(Time to compile vertex shader: %fs\n, vertTime);
printf(Time to compile fragment shader: %fs\n, fragTime);
printf(Time to link shaders: %fs\n, linkTime);
 
+   assert(ValidateShaderProgram(Program));
+
glUseProgram(Program);
 
NumUniforms = GetUniforms(Program, Uniforms);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (mesa_7_5_branch): glsl: signal that the program needs to be re-translated when samplers change

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: mesa_7_5_branch
Commit: babb5ba9a977d23ddae828521401eae312bdb619
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=babb5ba9a977d23ddae828521401eae312bdb619

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 14:29:50 2009 -0600

glsl: signal that the program needs to be re-translated when samplers change

---

 src/mesa/shader/shader_api.c |   19 +++
 1 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c
index 95b7490..c36fc27 100644
--- a/src/mesa/shader/shader_api.c
+++ b/src/mesa/shader/shader_api.c
@@ -1624,6 +1624,7 @@ set_program_uniform(GLcontext *ctx, struct gl_program 
*program,
 
if (param-Type == PROGRAM_SAMPLER) {
   /* This controls which texture unit which is used by a sampler */
+  GLboolean changed = GL_FALSE;
   GLint i;
 
   /* data type for setting samplers must be int */
@@ -1655,13 +1656,23 @@ set_program_uniform(GLcontext *ctx, struct gl_program 
*program,
 _mesa_printf(Set program %p sampler %d '%s' to unit %u\n,
  program, sampler, param-Name, texUnit);
 #endif
-program-SamplerUnits[sampler] = texUnit;
+if (program-SamplerUnits[sampler] != texUnit) {
+   program-SamplerUnits[sampler] = texUnit;
+   changed = GL_TRUE;
+}
  }
   }
 
-  _mesa_update_shader_textures_used(program);
-
-  FLUSH_VERTICES(ctx, _NEW_TEXTURE);
+  if (changed) {
+ /* When a sampler's value changes it usually requires rewriting
+  * a GPU program's TEX instructions since there may not be a
+  * sampler-texture lookup table.  We signal this with the
+  * ProgramStringNotify() callback.
+  */
+ FLUSH_VERTICES(ctx, _NEW_TEXTURE | _NEW_PROGRAM);
+ _mesa_update_shader_textures_used(program);
+ ctx-Driver.ProgramStringNotify(ctx, program-Target, program);
+  }
}
else {
   /* ordinary uniform variable */

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (mesa_7_5_branch): docs: document sampler array bug fix

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: mesa_7_5_branch
Commit: d09d03aa42586dd3332863b9b159c497b0cb529b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d09d03aa42586dd3332863b9b159c497b0cb529b

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 12:04:35 2009 -0600

docs: document sampler array bug fix

---

 docs/relnotes-7.5.1.html |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/docs/relnotes-7.5.1.html b/docs/relnotes-7.5.1.html
index 77f2dd2..1a32757 100644
--- a/docs/relnotes-7.5.1.html
+++ b/docs/relnotes-7.5.1.html
@@ -52,6 +52,7 @@ tbd
 liFixed some Gallium glBlitFramebuffer() bugs
 liEmpty glBegin/glEnd() pair could cause divide by zero (bug 23489)
 liFixed Gallium glBitmap() Z position bug
+liSetting arrays of sampler uniforms did not work
 /ul
 
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glsl: asst. clean-ups in set_program_uniform()

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 6df38e6f5a6d8f0b86928cb2b52c09d1fbe6bbff
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6df38e6f5a6d8f0b86928cb2b52c09d1fbe6bbff

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 14:35:45 2009 -0600

glsl: asst. clean-ups in set_program_uniform()

Remove redunant type check for samplers (assert instead).
Move some local vars.  Update comments.

---

 src/mesa/shader/shader_api.c |   21 +++--
 1 files changed, 7 insertions(+), 14 deletions(-)

diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c
index 1b604f0..23aca30 100644
--- a/src/mesa/shader/shader_api.c
+++ b/src/mesa/shader/shader_api.c
@@ -1612,10 +1612,8 @@ set_program_uniform(GLcontext *ctx, struct gl_program 
*program,
 GLenum type, GLsizei count, GLint elems,
 const void *values)
 {
-   struct gl_program_parameter *param =
+   const struct gl_program_parameter *param =
   program-Parameters-Parameters[index];
-   const GLboolean isUniformBool = is_boolean_type(param-DataType);
-   const GLboolean areIntValues = is_integer_type(type);
 
assert(offset = 0);
assert(elems = 1);
@@ -1635,17 +1633,10 @@ set_program_uniform(GLcontext *ctx, struct gl_program 
*program,
   /* This controls which texture unit which is used by a sampler */
   GLint i;
 
-  /* data type for setting samplers must be int */
-  if (type != GL_INT) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- glUniform(only glUniform1i can be used 
- to set sampler uniforms));
- return;
-  }
+  /* this should have been caught by the compatible_types() check */
+  ASSERT(type == GL_INT);
 
-  /* XXX arrays of samplers haven't been tested much, but it's not a
-   * common thing...
-   */
+  /* loop over number of samplers to change */
   for (i = 0; i  count; i++) {
  GLuint sampler =
 (GLuint) program-Parameters-ParameterValues[index + offset + 
i][0];
@@ -1674,9 +1665,11 @@ set_program_uniform(GLcontext *ctx, struct gl_program 
*program,
}
else {
   /* ordinary uniform variable */
-  GLsizei k, i;
+  const GLboolean isUniformBool = is_boolean_type(param-DataType);
+  const GLboolean areIntValues = is_integer_type(type);
   const GLint slots = (param-Size + 3) / 4;
   const GLint typeSize = sizeof_glsl_type(param-DataType);
+  GLsizei k, i;
 
   if (param-Size  typeSize) {
  /* an array */

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): i965: clean-up tex target switches

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 81a101b5be0b3b98b745af33b2b0a72125e3137c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=81a101b5be0b3b98b745af33b2b0a72125e3137c

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 14:43:45 2009 -0600

i965: clean-up tex target switches

---

 src/mesa/drivers/dri/i965/brw_wm_glsl.c |   12 ++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_wm_glsl.c 
b/src/mesa/drivers/dri/i965/brw_wm_glsl.c
index 2a31077..c68056d 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_glsl.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_glsl.c
@@ -2648,11 +2648,15 @@ static void emit_txb(struct brw_wm_compile *c,
brw_MOV(p, brw_message_reg(3), src[1]);
brw_MOV(p, brw_message_reg(4), brw_imm_f(0));
break;
-   default:
+   case TEXTURE_3D_INDEX:
+   case TEXTURE_CUBE_INDEX:
brw_MOV(p, brw_message_reg(2), src[0]);
brw_MOV(p, brw_message_reg(3), src[1]);
brw_MOV(p, brw_message_reg(4), src[2]);
break;
+   default:
+/* invalid target */
+abort();
 }
 brw_MOV(p, brw_message_reg(5), src[3]);  /* bias */
 brw_MOV(p, brw_message_reg(6), brw_imm_f(0));/* ref (unused?) */
@@ -2711,10 +2715,14 @@ static void emit_tex(struct brw_wm_compile *c,
emit = WRITEMASK_XY;
nr = 2;
break;
-   default:
+   case TEXTURE_3D_INDEX:
+   case TEXTURE_CUBE_INDEX:
emit = WRITEMASK_XYZ;
nr = 3;
break;
+   default:
+   /* invalid target */
+   abort();
 }
 msg_len = 1;
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): i965: fix incorrect tex unit in emit_tex() and emit_txb()

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: a9a6399cd32ffe47b98d5171225fe7143552ca27
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a9a6399cd32ffe47b98d5171225fe7143552ca27

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 14:46:58 2009 -0600

i965: fix incorrect tex unit in emit_tex() and emit_txb()

The instructions we're translating already went through the brw_wm_pass_fp()
function which does the sampler-texture unit mapping.  We were applying
the sample-unit mapping a second time in the GLSL texture emitters.
Often, this made no difference but other times it could lead to accessing
an invalid texture and could cause a GPU lockup.

---

 src/mesa/drivers/dri/i965/brw_wm_glsl.c |6 --
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_wm_glsl.c 
b/src/mesa/drivers/dri/i965/brw_wm_glsl.c
index c68056d..7c210ab 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_glsl.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_glsl.c
@@ -2623,7 +2623,8 @@ static void emit_txb(struct brw_wm_compile *c,
 {
 struct brw_compile *p = c-func;
 struct brw_reg dst[4], src[4], payload_reg;
-GLuint unit = c-fp-program.Base.SamplerUnits[inst-TexSrcUnit];
+/* Note: TexSrcUnit was already looked up through SamplerTextures[] */
+const GLuint unit = inst-TexSrcUnit;
 GLuint i;
 GLuint msg_type;
 
@@ -2689,7 +2690,8 @@ static void emit_tex(struct brw_wm_compile *c,
 {
 struct brw_compile *p = c-func;
 struct brw_reg dst[4], src[4], payload_reg;
-GLuint unit = c-fp-program.Base.SamplerUnits[inst-TexSrcUnit];
+/* Note: TexSrcUnit was already looked up through SamplerTextures[] */
+const GLuint unit = inst-TexSrcUnit;
 GLuint msg_len;
 GLuint i, nr;
 GLuint emit;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): i965: init the tex_units_used field

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: b2b220e6225fdd673ea7b9fdda00e98423263fc3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b2b220e6225fdd673ea7b9fdda00e98423263fc3

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 14:47:50 2009 -0600

i965: init the tex_units_used field

---

 src/mesa/drivers/dri/i965/brw_wm_fp.c |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_wm_fp.c 
b/src/mesa/drivers/dri/i965/brw_wm_fp.c
index c512126..123fe84 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_fp.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_fp.c
@@ -1102,6 +1102,7 @@ void brw_wm_pass_fp( struct brw_wm_compile *c )
c-delta_xy = src_undef();
c-pixel_w = src_undef();
c-nr_fp_insns = 0;
+   c-fp-tex_units_used = 0x0;
 
/* Emit preamble instructions.  This is where special instructions such as
 * WM_CINTERP, WM_LINTERP, WM_PINTERP and WM_WPOSXY are emitted to

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): docs: document sampler array bug fix

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: d09d03aa42586dd3332863b9b159c497b0cb529b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d09d03aa42586dd3332863b9b159c497b0cb529b

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 12:04:35 2009 -0600

docs: document sampler array bug fix

---

 docs/relnotes-7.5.1.html |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/docs/relnotes-7.5.1.html b/docs/relnotes-7.5.1.html
index 77f2dd2..1a32757 100644
--- a/docs/relnotes-7.5.1.html
+++ b/docs/relnotes-7.5.1.html
@@ -52,6 +52,7 @@ tbd
 liFixed some Gallium glBlitFramebuffer() bugs
 liEmpty glBegin/glEnd() pair could cause divide by zero (bug 23489)
 liFixed Gallium glBitmap() Z position bug
+liSetting arrays of sampler uniforms did not work
 /ul
 
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): Merge branch 'mesa_7_5_branch'

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 38f56411067d51ad0de0ea73498964baaacea90b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=38f56411067d51ad0de0ea73498964baaacea90b

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 14:49:15 2009 -0600

Merge branch 'mesa_7_5_branch'

---



___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glsl: signal that the program needs to be re-translated when samplers change

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: babb5ba9a977d23ddae828521401eae312bdb619
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=babb5ba9a977d23ddae828521401eae312bdb619

Author: Brian Paul bri...@vmware.com
Date:   Wed Aug 26 14:29:50 2009 -0600

glsl: signal that the program needs to be re-translated when samplers change

---

 src/mesa/shader/shader_api.c |   19 +++
 1 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c
index 95b7490..c36fc27 100644
--- a/src/mesa/shader/shader_api.c
+++ b/src/mesa/shader/shader_api.c
@@ -1624,6 +1624,7 @@ set_program_uniform(GLcontext *ctx, struct gl_program 
*program,
 
if (param-Type == PROGRAM_SAMPLER) {
   /* This controls which texture unit which is used by a sampler */
+  GLboolean changed = GL_FALSE;
   GLint i;
 
   /* data type for setting samplers must be int */
@@ -1655,13 +1656,23 @@ set_program_uniform(GLcontext *ctx, struct gl_program 
*program,
 _mesa_printf(Set program %p sampler %d '%s' to unit %u\n,
  program, sampler, param-Name, texUnit);
 #endif
-program-SamplerUnits[sampler] = texUnit;
+if (program-SamplerUnits[sampler] != texUnit) {
+   program-SamplerUnits[sampler] = texUnit;
+   changed = GL_TRUE;
+}
  }
   }
 
-  _mesa_update_shader_textures_used(program);
-
-  FLUSH_VERTICES(ctx, _NEW_TEXTURE);
+  if (changed) {
+ /* When a sampler's value changes it usually requires rewriting
+  * a GPU program's TEX instructions since there may not be a
+  * sampler-texture lookup table.  We signal this with the
+  * ProgramStringNotify() callback.
+  */
+ FLUSH_VERTICES(ctx, _NEW_TEXTURE | _NEW_PROGRAM);
+ _mesa_update_shader_textures_used(program);
+ ctx-Driver.ProgramStringNotify(ctx, program-Target, program);
+  }
}
else {
   /* ordinary uniform variable */

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): radeon/r200/r300: Fix swtcl flushing not to invalidate dma region.

2009-08-26 Thread Pauli Nieminen
Module: Mesa
Branch: master
Commit: 97029c1860e8a99448ac157408e71bea3aa2559f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=97029c1860e8a99448ac157408e71bea3aa2559f

Author: Pauli Nieminen suok...@gmail.com
Date:   Wed Aug 26 22:24:25 2009 +0300

radeon/r200/r300: Fix swtcl flushing not to invalidate dma region.

We were check command buffer sizes too alte so allocated dma regions
were freed before relocations so space checking failed.

---

 src/mesa/drivers/dri/r200/r200_swtcl.c |   22 ++--
 src/mesa/drivers/dri/r300/r300_swtcl.c |   37 ++--
 .../drivers/dri/radeon/radeon_common_context.h |1 +
 src/mesa/drivers/dri/radeon/radeon_dma.c   |7 
 src/mesa/drivers/dri/radeon/radeon_swtcl.c |   31 +++-
 5 files changed, 75 insertions(+), 23 deletions(-)

diff --git a/src/mesa/drivers/dri/r200/r200_swtcl.c 
b/src/mesa/drivers/dri/r200/r200_swtcl.c
index 13bd6ac..6b7279e 100644
--- a/src/mesa/drivers/dri/r200/r200_swtcl.c
+++ b/src/mesa/drivers/dri/r200/r200_swtcl.c
@@ -204,7 +204,21 @@ static void r200SetVertexFormat( GLcontext *ctx )
 
 static void r200RenderStart( GLcontext *ctx )
 {
+   const int vertex_array_size = 7;
+   const int prim_size = 3;
+   r200ContextPtr rmesa = R200_CONTEXT( ctx );
r200SetVertexFormat( ctx );
+   if (RADEON_DEBUG  DEBUG_VERTS)
+  fprintf(stderr, %s\n, __func__);
+   if (!rmesa-radeon.swtcl.primitive_counter) {
+  if (rcommonEnsureCmdBufSpace(rmesa-radeon,
+  radeonCountStateEmitSize(rmesa-radeon) +
+  vertex_array_size + prim_size,
+  __FUNCTION__))
+rmesa-radeon.swtcl.primitive_counter = 0;
+  else
+rmesa-radeon.swtcl.primitive_counter = 1;
+   }
 }
 
 
@@ -268,9 +282,8 @@ void r200ChooseVertexState( GLcontext *ctx )
 void r200_swtcl_flush(GLcontext *ctx, uint32_t current_offset)
 {
r200ContextPtr rmesa = R200_CONTEXT(ctx);
-   rcommonEnsureCmdBufSpace(rmesa-radeon,
-   radeonCountStateEmitSize(rmesa-radeon) + 
(12*sizeof(int)),
-   __FUNCTION__);
+   if (RADEON_DEBUG  DEBUG_VERTS)
+  fprintf(stderr, %s\n, __func__);
 
 
radeonEmitState(rmesa-radeon);
@@ -284,6 +297,8 @@ void r200_swtcl_flush(GLcontext *ctx, uint32_t 
current_offset)
 rmesa-radeon.swtcl.hw_primitive,
 rmesa-radeon.swtcl.numverts);
 
+   rmesa-radeon.swtcl.primitive_counter = 0;
+
 }
 
 /**/
@@ -890,6 +905,7 @@ void r200InitSwtcl( GLcontext *ctx )
   init_rast_tab();
   firsttime = 0;
}
+   rmesa-radeon.swtcl.primitive_counter = 0;
 
tnl-Driver.Render.Start = r200RenderStart;
tnl-Driver.Render.Finish = r200RenderFinish;
diff --git a/src/mesa/drivers/dri/r300/r300_swtcl.c 
b/src/mesa/drivers/dri/r300/r300_swtcl.c
index 9d6f756..18af51e 100644
--- a/src/mesa/drivers/dri/r300/r300_swtcl.c
+++ b/src/mesa/drivers/dri/r300/r300_swtcl.c
@@ -83,6 +83,9 @@ void r300ChooseSwtclVertexFormat(GLcontext *ctx, GLuint 
*_InputsRead,  GLuint *_
rmesa-swtcl.coloroffset = rmesa-swtcl.specoffset = 0;
rmesa-radeon.swtcl.vertex_attr_count = 0;
 
+   if (RADEON_DEBUG  DEBUG_VERTS)
+   fprintf(stderr, %s\n, __func__);
+
/* We always want non Ndc coords format */
VB-AttribPtr[VERT_ATTRIB_POS] = VB-ClipPtr;
 
@@ -462,6 +465,8 @@ static void r300ChooseRenderState( GLcontext *ctx )
r300ContextPtr rmesa = R300_CONTEXT(ctx);
GLuint index = 0;
GLuint flags = ctx-_TriangleCaps;
+   if (RADEON_DEBUG  DEBUG_VERTS)
+   fprintf(stderr, %s\n, __func__);
 
if (flags  DD_TRI_UNFILLED)  index |= R300_UNFILLED_BIT;
 
@@ -489,6 +494,8 @@ static void r300ChooseRenderState( GLcontext *ctx )
 
 void r300RenderStart(GLcontext *ctx)
 {
+   if (RADEON_DEBUG  DEBUG_VERTS)
+   fprintf(stderr, %s\n, __func__);
r300ContextPtr rmesa = R300_CONTEXT( ctx );
 
r300ChooseRenderState(ctx);
@@ -501,6 +508,19 @@ void r300RenderStart(GLcontext *ctx)
 
r300UpdateShaderStates(rmesa);
 
+   const int vertex_size = 7;
+   const int prim_size = 3;
+
+   if (!rmesa-radeon.swtcl.primitive_counter) {
+   if (rcommonEnsureCmdBufSpace(rmesa-radeon,
+   
radeonCountStateEmitSize(rmesa-radeon) +
+   + vertex_size + prim_size,
+   __FUNCTION__))
+   rmesa-radeon.swtcl.primitive_counter = 0;
+   else
+   rmesa-radeon.swtcl.primitive_counter = 1;
+   }
+
r300EmitCacheFlush(rmesa);
 
/* investigate if we can put back flush optimisation if needed */
@@ -516,6 +536,8 @@ void r300RenderFinish(GLcontext *ctx)
 static void r300RasterPrimitive( GLcontext *ctx, GLuint hwprim )
 {

Mesa (master): radeon: Make RADEON_CMDBUF more fine grained.

2009-08-26 Thread Pauli Nieminen
Module: Mesa
Branch: master
Commit: e0e76edf97d391f0c4be58b9d8b91bed0be56734
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e0e76edf97d391f0c4be58b9d8b91bed0be56734

Author: Pauli Nieminen suok...@gmail.com
Date:   Thu Aug 27 00:05:57 2009 +0300

radeon: Make RADEON_CMDBUF more fine grained.

---

 src/mesa/drivers/dri/radeon/radeon_common.c |   10 --
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c 
b/src/mesa/drivers/dri/radeon/radeon_common.c
index e0be15f..9b301cd 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common.c
+++ b/src/mesa/drivers/dri/radeon/radeon_common.c
@@ -85,6 +85,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
SOFTWARE.
 #include radeon_mipmap_tree.h
 #include radeon_queryobj.h
 
+/**
+ * Enable verbose debug output for emit code.
+ * 0 no output
+ * 1 most output
+ * 2 also print state alues
+ */
 #define DEBUG_CMDBUF 0
 
 /* =
@@ -906,7 +912,7 @@ static void radeon_print_state_atom_prekmm(radeonContextPtr 
radeon, struct radeo
 
fprintf(stderr,   emit %s %d/%d\n, state-name, dwords, 
state-cmd_size);
 
-   if (RADEON_DEBUG  DEBUG_VERBOSE) {
+   if (DEBUG_CMDBUF  1  RADEON_DEBUG  DEBUG_VERBOSE) {
if (dwords  state-cmd_size)
dwords = state-cmd_size;
 
@@ -943,7 +949,7 @@ static void radeon_print_state_atom(radeonContextPtr 
radeon, struct radeon_state
 
fprintf(stderr,   emit %s %d/%d\n, state-name, dwords, 
state-cmd_size);
 
-   if (RADEON_DEBUG  DEBUG_VERBOSE) {
+   if (DEBUG_CMDBUF  1  RADEON_DEBUG  DEBUG_VERBOSE) {
if (dwords  state-cmd_size)
dwords = state-cmd_size;
for (i = 0; i  state-cmd_size;) {

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): radeon: Fix loop en condition so debug output doesn' t flood meaningless values.

2009-08-26 Thread Pauli Nieminen
Module: Mesa
Branch: master
Commit: 47d4b9ff70c82956a77e8ea7a6abccaa0a9f9083
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=47d4b9ff70c82956a77e8ea7a6abccaa0a9f9083

Author: Pauli Nieminen suok...@gmail.com
Date:   Thu Aug 27 00:07:05 2009 +0300

radeon: Fix loop en condition so debug output doesn't flood meaningless values.

---

 src/mesa/drivers/dri/radeon/radeon_common.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c 
b/src/mesa/drivers/dri/radeon/radeon_common.c
index 9b301cd..0894372 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common.c
+++ b/src/mesa/drivers/dri/radeon/radeon_common.c
@@ -952,7 +952,7 @@ static void radeon_print_state_atom(radeonContextPtr 
radeon, struct radeon_state
if (DEBUG_CMDBUF  1  RADEON_DEBUG  DEBUG_VERBOSE) {
if (dwords  state-cmd_size)
dwords = state-cmd_size;
-   for (i = 0; i  state-cmd_size;) {
+   for (i = 0; i  dwords;) {
packet0 = state-cmd[i];
reg = (packet0  0x1FFF)  2;
count = ((packet0  0x3FFF)  16) + 1;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): Merge branch 'fix_r300_swtcl' into push_master

2009-08-26 Thread Pauli Nieminen
Module: Mesa
Branch: master
Commit: 74b55970dc25d6b2a65f385fd298f141176cd4d3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=74b55970dc25d6b2a65f385fd298f141176cd4d3

Author: Pauli Nieminen suok...@gmail.com
Date:   Thu Aug 27 00:08:30 2009 +0300

Merge branch 'fix_r300_swtcl' into push_master

---



___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): egl_softpipe: Make winsys and pipe screen per display.

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: c06699dd121a3f3820f6f9e3bf7829fd574cf8d2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c06699dd121a3f3820f6f9e3bf7829fd574cf8d2

Author: Chia-I Wu olva...@gmail.com
Date:   Wed Aug 26 15:42:35 2009 +0800

egl_softpipe: Make winsys and pipe screen per display.

This is to allow a driver to drive multiple displays.  Remove the use of
_EGL_PLATFORM_X along the way.

Signed-off-by: Chia-I Wu olva...@gmail.com

---

 src/gallium/winsys/egl_xlib/Makefile   |2 +-
 src/gallium/winsys/egl_xlib/egl_xlib.c |  102 
 2 files changed, 77 insertions(+), 27 deletions(-)

diff --git a/src/gallium/winsys/egl_xlib/Makefile 
b/src/gallium/winsys/egl_xlib/Makefile
index a33a50e..3efb7ed 100644
--- a/src/gallium/winsys/egl_xlib/Makefile
+++ b/src/gallium/winsys/egl_xlib/Makefile
@@ -37,7 +37,7 @@ UNUSED_LIBS = \
$(TOP)/src/mesa/libmesagallium.a \
 
 
-LOCAL_CFLAGS = -D_EGL_PLATFORM_X=1
+LOCAL_CFLAGS =
 
 
 .c.o:
diff --git a/src/gallium/winsys/egl_xlib/egl_xlib.c 
b/src/gallium/winsys/egl_xlib/egl_xlib.c
index 96f460f..d02f825 100644
--- a/src/gallium/winsys/egl_xlib/egl_xlib.c
+++ b/src/gallium/winsys/egl_xlib/egl_xlib.c
@@ -33,6 +33,7 @@
 
 
 #include dlfcn.h
+#include X11/Xlib.h
 #include X11/Xutil.h
 
 #include pipe/p_compiler.h
@@ -61,8 +62,15 @@
 struct xlib_egl_driver
 {
_EGLDriver Base;   /** base class */
-
EGLint apis;
+};
+
+
+/** driver data of _EGLDisplay */
+struct xlib_egl_display
+{
+   Display *Dpy;
+
struct pipe_winsys *winsys;
struct pipe_screen *screen;
 };
@@ -95,6 +103,12 @@ struct xlib_egl_surface
 };
 
 
+static void
+flush_frontbuffer(struct pipe_winsys *pws,
+  struct pipe_surface *psurf,
+  void *context_private);
+
+
 /** cast wrapper */
 static INLINE struct xlib_egl_driver *
 xlib_egl_driver(_EGLDriver *drv)
@@ -103,6 +117,13 @@ xlib_egl_driver(_EGLDriver *drv)
 }
 
 
+static INLINE struct xlib_egl_display *
+xlib_egl_display(_EGLDisplay *dpy)
+{
+   return (struct xlib_egl_display *) dpy-DriverData;
+}
+
+
 static INLINE struct xlib_egl_surface *
 lookup_surface(_EGLSurface *surf)
 {
@@ -132,7 +153,7 @@ bitcount(unsigned int n)
  * Create the EGLConfigs.  (one per X visual)
  */
 static void
-create_configs(_EGLDriver *drv, _EGLDisplay *disp)
+create_configs(struct xlib_egl_display *xdpy, _EGLDisplay *disp)
 {
static const EGLint all_apis = (EGL_OPENGL_ES_BIT |
EGL_OPENGL_ES2_BIT |
@@ -142,8 +163,8 @@ create_configs(_EGLDriver *drv, _EGLDisplay *disp)
int num_visuals, i;
 
/* get list of all X visuals, create an EGL config for each */
-   visTemplate.screen = DefaultScreen(disp-Xdpy);
-   visInfo = XGetVisualInfo(disp-Xdpy, VisualScreenMask,
+   visTemplate.screen = DefaultScreen(xdpy-Dpy);
+   visInfo = XGetVisualInfo(xdpy-Dpy, VisualScreenMask,
 visTemplate, num_visuals);
if (!visInfo) {
   printf(egl_xlib.c: couldn't get any X visuals\n);
@@ -185,6 +206,8 @@ create_configs(_EGLDriver *drv, _EGLDisplay *disp)
 
   _eglAddConfig(disp, config);
}
+
+   XFree(visInfo);
 }
 
 
@@ -193,21 +216,46 @@ create_configs(_EGLDriver *drv, _EGLDisplay *disp)
  */
 static EGLBoolean
 xlib_eglInitialize(_EGLDriver *drv, _EGLDisplay *dpy,
-   EGLint *minor, EGLint *major)
+   EGLint *major, EGLint *minor)
 {
struct xlib_egl_driver *xdrv = xlib_egl_driver(drv);
-
-   if (!dpy-Xdpy) {
-  dpy-Xdpy = XOpenDisplay(NULL);
+   struct xlib_egl_display *xdpy;
+
+   xdpy = CALLOC_STRUCT(xlib_egl_display);
+   if (!xdpy)
+  return _eglError(EGL_BAD_ALLOC, eglInitialize);
+
+   xdpy-Dpy = (Display *) dpy-NativeDisplay;
+   if (!xdpy-Dpy) {
+  xdpy-Dpy = XOpenDisplay(NULL);
+  if (!xdpy-Dpy) {
+ free(xdpy);
+ return EGL_FALSE;
+  }
}
 
-   create_configs(drv, dpy);
+   /* create winsys and pipe screen */
+   xdpy-winsys = create_sw_winsys();
+   if (!xdpy-winsys) {
+  free(xdpy);
+  return _eglError(EGL_BAD_ALLOC, eglInitialize);
+   }
+   xdpy-winsys-flush_frontbuffer = flush_frontbuffer;
+   xdpy-screen = softpipe_create_screen(xdpy-winsys);
+   if (!xdpy-screen) {
+  free(xdpy-winsys);
+  free(xdpy);
+  return _eglError(EGL_BAD_ALLOC, eglInitialize);
+   }
 
+   dpy-DriverData = (void *) xdpy;
dpy-ClientAPIsMask = xdrv-apis;
 
+   create_configs(xdpy, dpy);
+
/* we're supporting EGL 1.4 */
-   *minor = 1;
-   *major = 4;
+   *major = 1;
+   *minor = 4;
 
return EGL_TRUE;
 }
@@ -219,8 +267,18 @@ xlib_eglInitialize(_EGLDriver *drv, _EGLDisplay *dpy,
 static EGLBoolean
 xlib_eglTerminate(_EGLDriver *drv, _EGLDisplay *dpy)
 {
+   struct xlib_egl_display *xdpy = xlib_egl_display(dpy);
+
_eglReleaseDisplayResources(drv, dpy);
_eglCleanupDisplay(dpy);
+
+   xdpy-screen-destroy(xdpy-screen);
+   free(xdpy-winsys);
+
+   if (!dpy-NativeDisplay)
+  XCloseDisplay(xdpy-Dpy);
+   

Mesa (master): egl: Remove Xdpy from EGLDisplay.

2009-08-26 Thread Brian Paul
Module: Mesa
Branch: master
Commit: e1d978775f982a450bd84588a4f9567d6bbccebd
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e1d978775f982a450bd84588a4f9567d6bbccebd

Author: Chia-I Wu olva...@gmail.com
Date:   Wed Aug 26 16:06:39 2009 +0800

egl: Remove Xdpy from EGLDisplay.

It is not used anymore.

Signed-off-by: Chia-I Wu olva...@gmail.com

---

 src/egl/main/egldisplay.c |3 ---
 src/egl/main/egldisplay.h |8 
 2 files changed, 0 insertions(+), 11 deletions(-)

diff --git a/src/egl/main/egldisplay.c b/src/egl/main/egldisplay.c
index 2c271ef..896d60d 100644
--- a/src/egl/main/egldisplay.c
+++ b/src/egl/main/egldisplay.c
@@ -81,9 +81,6 @@ _eglNewDisplay(NativeDisplayType nativeDisplay)
_EGLDisplay *dpy = (_EGLDisplay *) calloc(1, sizeof(_EGLDisplay));
if (dpy) {
   dpy-NativeDisplay = nativeDisplay;
-#if defined(_EGL_PLATFORM_X)
-  dpy-Xdpy = (Display *) nativeDisplay;
-#endif
 
   dpy-DriverName = _eglPreloadDriver(dpy);
   if (!dpy-DriverName) {
diff --git a/src/egl/main/egldisplay.h b/src/egl/main/egldisplay.h
index c7a41cd..6575fdf 100644
--- a/src/egl/main/egldisplay.h
+++ b/src/egl/main/egldisplay.h
@@ -1,10 +1,6 @@
 #ifndef EGLDISPLAY_INCLUDED
 #define EGLDISPLAY_INCLUDED
 
-#ifdef _EGL_PLATFORM_X
-#include X11/Xlib.h
-#endif
-
 #include egltypedefs.h
 #include egldefines.h
 #include eglcontext.h
@@ -54,10 +50,6 @@ struct _egl_display
/* lists of linked contexts and surface */
_EGLContext *ContextList;
_EGLSurface *SurfaceList;
-
-#ifdef _EGL_PLATFORM_X
-   Display *Xdpy;
-#endif
 };
 
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: gitignore

2009-08-26 Thread Younes Manton
Module: Mesa
Branch: master
Commit: cefe9c4f394ff7007d33d932191e2fcaf9d08e87
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=cefe9c4f394ff7007d33d932191e2fcaf9d08e87

Author: Younes Manton youne...@gmail.com
Date:   Wed Aug 26 20:13:11 2009 -0400

mesa: gitignore

---

 progs/demos/.gitignore |1 +
 progs/egl/.gitignore   |1 +
 2 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/progs/demos/.gitignore b/progs/demos/.gitignore
index f3c7091..5dd974b 100644
--- a/progs/demos/.gitignore
+++ b/progs/demos/.gitignore
@@ -63,3 +63,4 @@ tunnel2
 vao_demo
 Windows
 winpos
+*.rgb
diff --git a/progs/egl/.gitignore b/progs/egl/.gitignore
index f417aef..7a13d46 100644
--- a/progs/egl/.gitignore
+++ b/progs/egl/.gitignore
@@ -6,6 +6,7 @@ eglinfo
 eglscreen
 egltri
 peglgears
+xeglbindtex
 xeglgears
 xeglthreads
 xegl_tri

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): radeon: fix max indx/vertex emission due to state checker

2009-08-26 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 20d9204fbd71aebf870834b612579419d2c278b5
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=20d9204fbd71aebf870834b612579419d2c278b5

Author: Dave Airlie airl...@itt42.(none)
Date:   Fri Jul 24 11:46:20 2009 +1000

radeon: fix max indx/vertex emission due to state checker

---

 .../drivers/dri/radeon/radeon_common_context.h |3 ++-
 src/mesa/drivers/dri/radeon/radeon_ioctl.c |3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_common_context.h 
b/src/mesa/drivers/dri/radeon/radeon_common_context.h
index 5c4b4ab..07a0c4c 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common_context.h
+++ b/src/mesa/drivers/dri/radeon/radeon_common_context.h
@@ -355,7 +355,8 @@ struct radeon_tcl_info {
 
 struct radeon_ioctl {
GLuint vertex_offset;
-struct radeon_bo *bo;
+   GLuint vertex_max;
+   struct radeon_bo *bo;
GLuint vertex_size;
 };
 
diff --git a/src/mesa/drivers/dri/radeon/radeon_ioctl.c 
b/src/mesa/drivers/dri/radeon/radeon_ioctl.c
index afdb5e7..1bda9cb 100644
--- a/src/mesa/drivers/dri/radeon/radeon_ioctl.c
+++ b/src/mesa/drivers/dri/radeon/radeon_ioctl.c
@@ -273,7 +273,7 @@ GLushort *radeonAllocEltsOpenEnded( r100ContextPtr rmesa,
} else {
  OUT_BATCH(rmesa-ioctl.vertex_offset);
}
-   OUT_BATCH(0x);
+   OUT_BATCH(rmesa-ioctl.vertex_max);
OUT_BATCH(vertex_format);
OUT_BATCH(primitive |
 RADEON_CP_VC_CNTL_PRIM_WALK_IND |
@@ -342,6 +342,7 @@ void radeonEmitAOS( r100ContextPtr rmesa,
rmesa-ioctl.bo = rmesa-radeon.tcl.aos[0].bo;
rmesa-ioctl.vertex_offset =
  (rmesa-radeon.tcl.aos[0].offset + offset * 
rmesa-radeon.tcl.aos[0].stride * 4);
+   rmesa-ioctl.vertex_max = rmesa-radeon.tcl.aos[0].count;
 #else
BATCH_LOCALS(rmesa-radeon);
uint32_t voffset;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): ARB prog: Change handling of program parameter limits

2009-08-26 Thread Ian Romanick
Module: Mesa
Branch: master
Commit: eabe12df44a41e97fb5736959e8864ddbd01be14
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=eabe12df44a41e97fb5736959e8864ddbd01be14

Author: Ian Romanick ian.d.roman...@intel.com
Date:   Mon Aug 24 12:54:48 2009 -0700

ARB prog: Change handling of program parameter limits

Several changes are made to program parameter limits.  Several of the
non-NATIVE limits are set higher.  All of the NATIVE limits are set to
zero in the core Mesa code.  Each driver must set the actual value in
its context creation routine.  If the NATIVE value remains zero, this
indicates that hardware shaders may not be supported.

Each of the preceeding changes matches the bahavior of Apple's shader
assembler, so it seems safe.

Finally, we limit the value of MaxEnvParams to be no greater than
MaxNativeAttribs.  At least one case has been found where an
application does the wrong thing if MaxNativeAttribs  MaxEnvParams.

See also bugzilla #23490.

---

 src/mesa/drivers/dri/i915/i915_context.c |3 ++
 src/mesa/drivers/dri/i965/brw_context.c  |   27 ++-
 src/mesa/main/config.h   |   56 +-
 src/mesa/main/context.c  |   22 ++-
 4 files changed, 80 insertions(+), 28 deletions(-)

diff --git a/src/mesa/drivers/dri/i915/i915_context.c 
b/src/mesa/drivers/dri/i915/i915_context.c
index bb08cf8..be47ace 100644
--- a/src/mesa/drivers/dri/i915/i915_context.c
+++ b/src/mesa/drivers/dri/i915/i915_context.c
@@ -166,6 +166,9 @@ i915CreateContext(const __GLcontextModes * mesaVis,
ctx-Const.FragmentProgram.MaxNativeTexIndirections =
   I915_MAX_TEX_INDIRECT;
ctx-Const.FragmentProgram.MaxNativeAddressRegs = 0; /* I don't think we 
have one */
+   ctx-Const.FragmentProgram.MaxEnvParams =
+  MIN2(ctx-Const.FragmentProgram.MaxNativeParameters,
+  ctx-Const.FragmentProgram.MaxEnvParams);
 
ctx-FragmentProgram._MaintainTexEnvProgram = GL_TRUE;
 
diff --git a/src/mesa/drivers/dri/i965/brw_context.c 
b/src/mesa/drivers/dri/i965/brw_context.c
index 4dbe551..21c0ad1 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -126,7 +126,32 @@ GLboolean brwCreateContext( const __GLcontextModes 
*mesaVis,
/* We want the GLSL compiler to emit code that uses condition codes */
ctx-Shader.EmitCondCodes = GL_TRUE;
 
-/*ctx-Const.MaxNativeVertexProgramTemps = 32; */
+   ctx-Const.VertexProgram.MaxNativeInstructions = (16 * 1024);
+   ctx-Const.VertexProgram.MaxAluInstructions = 0;
+   ctx-Const.VertexProgram.MaxTexInstructions = 0;
+   ctx-Const.VertexProgram.MaxTexIndirections = 0;
+   ctx-Const.VertexProgram.MaxNativeAluInstructions = 0;
+   ctx-Const.VertexProgram.MaxNativeTexInstructions = 0;
+   ctx-Const.VertexProgram.MaxNativeTexIndirections = 0;
+   ctx-Const.VertexProgram.MaxNativeAttribs = 16;
+   ctx-Const.VertexProgram.MaxNativeTemps = 256;
+   ctx-Const.VertexProgram.MaxNativeAddressRegs = 1;
+   ctx-Const.VertexProgram.MaxNativeParameters = 96;
+   ctx-Const.VertexProgram.MaxEnvParams =
+  MIN2(ctx-Const.VertexProgram.MaxNativeParameters,
+  ctx-Const.VertexProgram.MaxEnvParams);
+
+   ctx-Const.FragmentProgram.MaxNativeInstructions = (16 * 1024);
+   ctx-Const.FragmentProgram.MaxNativeAluInstructions = (16 * 1024);
+   ctx-Const.FragmentProgram.MaxNativeTexInstructions = (16 * 1024);
+   ctx-Const.FragmentProgram.MaxNativeTexIndirections = (16 * 1024);
+   ctx-Const.FragmentProgram.MaxNativeAttribs = 12;
+   ctx-Const.FragmentProgram.MaxNativeTemps = 256;
+   ctx-Const.FragmentProgram.MaxNativeAddressRegs = 0;
+   ctx-Const.FragmentProgram.MaxNativeParameters = 64;
+   ctx-Const.FragmentProgram.MaxEnvParams =
+  MIN2(ctx-Const.FragmentProgram.MaxNativeParameters,
+  ctx-Const.FragmentProgram.MaxEnvParams);
 
brw_init_state( brw );
 
diff --git a/src/mesa/main/config.h b/src/mesa/main/config.h
index e4995c3..8a09efd 100644
--- a/src/mesa/main/config.h
+++ b/src/mesa/main/config.h
@@ -170,9 +170,48 @@
 /** For GL_EXT_texture_lod_bias (typically MAX_TEXTURE_LEVELS - 1) */
 #define MAX_TEXTURE_LOD_BIAS 12.0
 
+/** For any program target/extension */
+/*...@{*/
+#define MAX_PROGRAM_INSTRUCTIONS   (16 * 1024)
+
+/**
+ * Per-program constants (power of two)
+ *
+ * \c MAX_PROGRAM_LOCAL_PARAMS and \c MAX_UNIFORMS are just the assmebly shader
+ * and GLSL shader names for the same thing.  They should \b always have the
+ * same value.  Each refers to the number of vec4 values supplied as
+ * per-program parameters.
+ */
+/*...@{*/
+#define MAX_PROGRAM_LOCAL_PARAMS   1024
+#define MAX_UNIFORMS   1024
+/*...@}*/
+
+/**
+ * Per-context constants (power of two)
+ *
+ * \note
+ * This value should always be less than or equal to \c 
MAX_PROGRAM_LOCAL_PARAMS
+ * and \c MAX_VERTEX_PROGRAM_PARAMS.  Otherwise some applications will make
+ * incorrect assumptions.
+ */
+#define MAX_PROGRAM_ENV_PARAMS 256
+

Mesa (master): i965: Increase assmebly shader program parameter limits

2009-08-26 Thread Ian Romanick
Module: Mesa
Branch: master
Commit: 09c73c74376ed6b12e343c89b4eac94285439860
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=09c73c74376ed6b12e343c89b4eac94285439860

Author: Ian Romanick ian.d.roman...@intel.com
Date:   Wed Aug 26 22:04:23 2009 -0700

i965: Increase assmebly shader program parameter limits

Increase the number of native program parameters to the same values
exposed by GLSL.

---

 src/mesa/drivers/dri/i965/brw_context.c |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_context.c 
b/src/mesa/drivers/dri/i965/brw_context.c
index 21c0ad1..3c5b848 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -136,7 +136,7 @@ GLboolean brwCreateContext( const __GLcontextModes *mesaVis,
ctx-Const.VertexProgram.MaxNativeAttribs = 16;
ctx-Const.VertexProgram.MaxNativeTemps = 256;
ctx-Const.VertexProgram.MaxNativeAddressRegs = 1;
-   ctx-Const.VertexProgram.MaxNativeParameters = 96;
+   ctx-Const.VertexProgram.MaxNativeParameters = 1024;
ctx-Const.VertexProgram.MaxEnvParams =
   MIN2(ctx-Const.VertexProgram.MaxNativeParameters,
   ctx-Const.VertexProgram.MaxEnvParams);
@@ -148,7 +148,7 @@ GLboolean brwCreateContext( const __GLcontextModes *mesaVis,
ctx-Const.FragmentProgram.MaxNativeAttribs = 12;
ctx-Const.FragmentProgram.MaxNativeTemps = 256;
ctx-Const.FragmentProgram.MaxNativeAddressRegs = 0;
-   ctx-Const.FragmentProgram.MaxNativeParameters = 64;
+   ctx-Const.FragmentProgram.MaxNativeParameters = 1024;
ctx-Const.FragmentProgram.MaxEnvParams =
   MIN2(ctx-Const.FragmentProgram.MaxNativeParameters,
   ctx-Const.FragmentProgram.MaxEnvParams);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): radeon: fix scissor calcs.

2009-08-26 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 82ff3190de3cd6cf4a514bac00ae02597abfb963
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=82ff3190de3cd6cf4a514bac00ae02597abfb963

Author: Dave Airlie airl...@redhat.com
Date:   Thu Aug 27 15:36:35 2009 +1000

radeon: fix scissor calcs.

For non-FBOs we need to invert, for FBOs the scissors are non-inverted.

no matter what we need to clamp them to the buffer sizes.

---

 src/mesa/drivers/dri/radeon/radeon_common.c |   35 +++---
 1 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c 
b/src/mesa/drivers/dri/radeon/radeon_common.c
index 0894372..bed75f3 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common.c
+++ b/src/mesa/drivers/dri/radeon/radeon_common.c
@@ -231,26 +231,31 @@ void radeonSetCliprects(radeonContextPtr radeon)
 void radeonUpdateScissor( GLcontext *ctx )
 {
radeonContextPtr rmesa = RADEON_CONTEXT(ctx);
+   GLint x = ctx-Scissor.X, y = ctx-Scissor.Y;
+   GLsizei w = ctx-Scissor.Width, h = ctx-Scissor.Height;
+   int x1, y1, x2, y2;
 
-   if ( !ctx-DrawBuffer-Name ) {
-   __DRIdrawablePrivate *dPriv = radeon_get_drawable(rmesa);
-
-   int x = ctx-Scissor.X;
-   int y = dPriv-h - ctx-Scissor.Y - ctx-Scissor.Height;
-   int w = ctx-Scissor.X + ctx-Scissor.Width - 1;
-   int h = dPriv-h - ctx-Scissor.Y - 1;
+   if (!ctx-DrawBuffer)
+   return;
 
-   rmesa-state.scissor.rect.x1 = x + dPriv-x;
-   rmesa-state.scissor.rect.y1 = y + dPriv-y;
-   rmesa-state.scissor.rect.x2 = w + dPriv-x + 1;
-   rmesa-state.scissor.rect.y2 = h + dPriv-y + 1;
+   if ( !ctx-DrawBuffer-Name ) {
+   x1 = x;
+   y1 = ctx-DrawBuffer-Height - (y + h);
+   x2 = x + w - 1;
+   y2 = y1 + h - 1;
} else {
-   rmesa-state.scissor.rect.x1 = ctx-Scissor.X;
-   rmesa-state.scissor.rect.y1 = ctx-Scissor.Y;
-   rmesa-state.scissor.rect.x2 = ctx-Scissor.X + 
ctx-Scissor.Width;
-   rmesa-state.scissor.rect.y2 = ctx-Scissor.Y + 
ctx-Scissor.Height;
+   x1 = x;
+   y1 = y;
+   x2 = x + w - 1;
+   y2 = y + h - 1;
+
}
 
+   rmesa-state.scissor.rect.x1 = CLAMP(x1,  0, ctx-DrawBuffer-Width - 
1);
+   rmesa-state.scissor.rect.y1 = CLAMP(y1,  0, ctx-DrawBuffer-Height - 
1);
+   rmesa-state.scissor.rect.x2 = CLAMP(x2,  0, ctx-DrawBuffer-Width - 
1);
+   rmesa-state.scissor.rect.y2 = CLAMP(y2,  0, ctx-DrawBuffer-Height - 
1);
+
radeonRecalcScissorRects( rmesa );
 }
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit