Mesa (master): egl: Check extensions.

2010-09-30 Thread Chia-I Wu
Module: Mesa
Branch: master
Commit: 6b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098

Author: Chia-I Wu o...@lunarg.com
Date:   Fri Sep 24 02:42:15 2010 +0800

egl: Check extensions.

Do not call into the driver if the extension for the called function is
not enabled.

---

 src/egl/main/eglapi.c |   52 ++--
 1 files changed, 41 insertions(+), 11 deletions(-)

diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
index 829d700..e8f856f 100644
--- a/src/egl/main/eglapi.c
+++ b/src/egl/main/eglapi.c
@@ -402,10 +402,15 @@ eglCreateContext(EGLDisplay dpy, EGLConfig config, 
EGLContext share_list,
_EGLContext *context;
EGLContext ret;
 
-   if (config)
-  _EGL_CHECK_CONFIG(disp, conf, EGL_NO_CONTEXT, drv);
-   else
-  _EGL_CHECK_DISPLAY(disp, EGL_NO_CONTEXT, drv);
+   _EGL_CHECK_DISPLAY(disp, EGL_NO_CONTEXT, drv);
+
+   if (!config) {
+  /* config may be NULL if surfaceless */
+  if (!disp-Extensions.KHR_surfaceless_gles1 
+  !disp-Extensions.KHR_surfaceless_gles2 
+  !disp-Extensions.KHR_surfaceless_opengl)
+ RETURN_EGL_ERROR(disp, EGL_BAD_CONFIG, EGL_NO_CONTEXT);
+   }
 
if (!share  share_list != EGL_NO_CONTEXT)
   RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_NO_CONTEXT);
@@ -459,9 +464,19 @@ eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface 
read,
 
if (!context  ctx != EGL_NO_CONTEXT)
   RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE);
-   if ((!draw_surf  draw != EGL_NO_SURFACE) ||
-   (!read_surf  read != EGL_NO_SURFACE))
-  RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE);
+   if (!draw_surf || !read_surf) {
+  /* surfaces may be NULL if surfaceless */
+  if (!disp-Extensions.KHR_surfaceless_gles1 
+  !disp-Extensions.KHR_surfaceless_gles2 
+  !disp-Extensions.KHR_surfaceless_opengl)
+ RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE);
+
+  if ((!draw_surf  draw != EGL_NO_SURFACE) ||
+  (!read_surf  read != EGL_NO_SURFACE))
+ RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE);
+  if (draw_surf || read_surf)
+ RETURN_EGL_ERROR(disp, EGL_BAD_MATCH, EGL_FALSE);
+   }
 
ret = drv-API.MakeCurrent(drv, disp, draw_surf, read_surf, context);
 
@@ -1276,6 +1291,8 @@ eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum 
target,
EGLImageKHR ret;
 
_EGL_CHECK_DISPLAY(disp, EGL_NO_IMAGE_KHR, drv);
+   if (!disp-Extensions.KHR_image_base)
+  RETURN_EGL_EVAL(disp, EGL_NO_IMAGE_KHR);
if (!context  ctx != EGL_NO_CONTEXT)
   RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR);
 
@@ -1296,6 +1313,8 @@ eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
EGLBoolean ret;
 
_EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv);
+   if (!disp-Extensions.KHR_image_base)
+  RETURN_EGL_EVAL(disp, EGL_FALSE);
if (!img)
   RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE);
 
@@ -1321,6 +1340,8 @@ eglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const 
EGLint *attrib_list)
EGLSyncKHR ret;
 
_EGL_CHECK_DISPLAY(disp, EGL_NO_SYNC_KHR, drv);
+   if (!disp-Extensions.KHR_reusable_sync)
+  RETURN_EGL_EVAL(disp, EGL_NO_SYNC_KHR);
 
sync = drv-API.CreateSyncKHR(drv, disp, type, attrib_list);
ret = (sync) ? _eglLinkSync(sync, disp) : EGL_NO_SYNC_KHR;
@@ -1338,6 +1359,8 @@ eglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync)
EGLBoolean ret;
 
_EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv);
+   assert(disp-Extensions.KHR_reusable_sync);
+
_eglUnlinkSync(s);
ret = drv-API.DestroySyncKHR(drv, disp, s);
 
@@ -1354,6 +1377,7 @@ eglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, 
EGLint flags, EGLTimeKHR t
EGLint ret;
 
_EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv);
+   assert(disp-Extensions.KHR_reusable_sync);
ret = drv-API.ClientWaitSyncKHR(drv, disp, s, flags, timeout);
 
RETURN_EGL_EVAL(disp, ret);
@@ -1369,6 +1393,7 @@ eglSignalSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLenum 
mode)
EGLBoolean ret;
 
_EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv);
+   assert(disp-Extensions.KHR_reusable_sync);
ret = drv-API.SignalSyncKHR(drv, disp, s, mode);
 
RETURN_EGL_EVAL(disp, ret);
@@ -1384,6 +1409,7 @@ eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, 
EGLint attribute, EGLint *v
EGLBoolean ret;
 
_EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv);
+   assert(disp-Extensions.KHR_reusable_sync);
ret = drv-API.GetSyncAttribKHR(drv, disp, s, attribute, value);
 
RETURN_EGL_EVAL(disp, ret);
@@ -1407,14 +1433,14 @@ eglSwapBuffersRegionNOK(EGLDisplay dpy, EGLSurface 
surface,
 
_EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv);
 
+   if (!disp-Extensions.NOK_swap_region)
+  RETURN_EGL_EVAL(disp, EGL_FALSE);
+
/* surface must be bound to current context in EGL 1.4 */
if (!ctx || !_eglIsContextLinked(ctx) || surf != ctx-DrawSurface)
   

Mesa (master): st/egl: Skip single-buffered configs in EGL.

2010-09-30 Thread Chia-I Wu
Module: Mesa
Branch: master
Commit: d63b2622f1c47d6f82fe96c9f1b749d908883a23
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d63b2622f1c47d6f82fe96c9f1b749d908883a23

Author: Chia-I Wu o...@lunarg.com
Date:   Thu Sep 30 16:53:33 2010 +0800

st/egl: Skip single-buffered configs in EGL.

Let DRI2 report single-buffered configs and skip them in EGL.  This is
based on the patch by Luca Barbieri.

---

 src/gallium/state_trackers/egl/common/egl_g3d.c  |4 
 src/gallium/state_trackers/egl/x11/native_dri2.c |4 
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/gallium/state_trackers/egl/common/egl_g3d.c 
b/src/gallium/state_trackers/egl/common/egl_g3d.c
index ce2b1f7..bfbb431 100644
--- a/src/gallium/state_trackers/egl/common/egl_g3d.c
+++ b/src/gallium/state_trackers/egl/common/egl_g3d.c
@@ -258,6 +258,10 @@ egl_g3d_init_config(_EGLDriver *drv, _EGLDisplay *dpy,
EGLint buffer_mask, api_mask;
EGLBoolean valid;
 
+   /* skip single-buffered configs */
+   if (!(nconf-buffer_mask  (1  NATIVE_ATTACHMENT_BACK_LEFT)))
+  return EGL_FALSE;
+
buffer_mask = 0x0;
if (nconf-buffer_mask  (1  NATIVE_ATTACHMENT_FRONT_LEFT))
   buffer_mask |= ST_ATTACHMENT_FRONT_LEFT_MASK;
diff --git a/src/gallium/state_trackers/egl/x11/native_dri2.c 
b/src/gallium/state_trackers/egl/x11/native_dri2.c
index 1be1e42..1169e27 100644
--- a/src/gallium/state_trackers/egl/x11/native_dri2.c
+++ b/src/gallium/state_trackers/egl/x11/native_dri2.c
@@ -518,10 +518,6 @@ dri2_display_convert_config(struct native_display *ndpy,
if (!(mode-renderType  GLX_RGBA_BIT) || !mode-rgbMode)
   return FALSE;
 
-   /* skip single-buffered configs */
-   if (!mode-doubleBufferMode)
-  return FALSE;
-
/* only interested in native renderable configs */
if (!mode-xRenderable || !mode-drawableType)
   return FALSE;

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


Mesa (master): mapi: Fix compiler warnings.

2010-09-30 Thread Chia-I Wu
Module: Mesa
Branch: master
Commit: ebeb4a7e8af9f59ce8f45f78654b611bb546979d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ebeb4a7e8af9f59ce8f45f78654b611bb546979d

Author: Chia-I Wu o...@lunarg.com
Date:   Thu Sep 30 17:09:59 2010 +0800

mapi: Fix compiler warnings.

Do not use void * in arithmetics.

---

 src/mapi/mapi/entry_x86-64_tls.h |2 +-
 src/mapi/mapi/entry_x86_tls.h|2 +-
 src/mapi/mapi/entry_x86_tsd.h|2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/mapi/mapi/entry_x86-64_tls.h b/src/mapi/mapi/entry_x86-64_tls.h
index 0f6e812..2fbe73b 100644
--- a/src/mapi/mapi/entry_x86-64_tls.h
+++ b/src/mapi/mapi/entry_x86-64_tls.h
@@ -61,7 +61,7 @@ entry_patch_public(void)
 void
 entry_patch(mapi_func entry, int slot)
 {
-   void *code = (void *) entry;
+   char *code = (char *) entry;
*((unsigned int *) (code + 12)) = slot * sizeof(mapi_func);
 }
 
diff --git a/src/mapi/mapi/entry_x86_tls.h b/src/mapi/mapi/entry_x86_tls.h
index ff2b957..d4f7d98 100644
--- a/src/mapi/mapi/entry_x86_tls.h
+++ b/src/mapi/mapi/entry_x86_tls.h
@@ -91,7 +91,7 @@ entry_patch_public(void)
 void
 entry_patch(mapi_func entry, int slot)
 {
-   void *code = (void *) entry;
+   char *code = (char *) entry;
*((unsigned long *) (code + 8)) = slot * sizeof(mapi_func);
 }
 
diff --git a/src/mapi/mapi/entry_x86_tsd.h b/src/mapi/mapi/entry_x86_tsd.h
index fbf4ec5..f37c747 100644
--- a/src/mapi/mapi/entry_x86_tsd.h
+++ b/src/mapi/mapi/entry_x86_tsd.h
@@ -63,7 +63,7 @@ entry_patch_public(void)
 void
 entry_patch(mapi_func entry, int slot)
 {
-   void *code = (void *) entry;
+   char *code = (char *) entry;
 
*((unsigned long *) (code + 11)) = slot * sizeof(mapi_func);
*((unsigned long *) (code + 22)) = slot * sizeof(mapi_func);

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


Mesa (7.9): mapi: Fix compiler warnings.

2010-09-30 Thread Chia-I Wu
Module: Mesa
Branch: 7.9
Commit: f6eb5d991c0b93a89b970c15b9876ec3806a4e36
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f6eb5d991c0b93a89b970c15b9876ec3806a4e36

Author: Chia-I Wu o...@lunarg.com
Date:   Thu Sep 30 17:09:59 2010 +0800

mapi: Fix compiler warnings.

Do not use void * in arithmetics.
(cherry picked from commit ebeb4a7e8af9f59ce8f45f78654b611bb546979d)

---

 src/mapi/mapi/entry_x86-64_tls.h |2 +-
 src/mapi/mapi/entry_x86_tls.h|2 +-
 src/mapi/mapi/entry_x86_tsd.h|2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/mapi/mapi/entry_x86-64_tls.h b/src/mapi/mapi/entry_x86-64_tls.h
index 0f6e812..2fbe73b 100644
--- a/src/mapi/mapi/entry_x86-64_tls.h
+++ b/src/mapi/mapi/entry_x86-64_tls.h
@@ -61,7 +61,7 @@ entry_patch_public(void)
 void
 entry_patch(mapi_func entry, int slot)
 {
-   void *code = (void *) entry;
+   char *code = (char *) entry;
*((unsigned int *) (code + 12)) = slot * sizeof(mapi_func);
 }
 
diff --git a/src/mapi/mapi/entry_x86_tls.h b/src/mapi/mapi/entry_x86_tls.h
index ff2b957..d4f7d98 100644
--- a/src/mapi/mapi/entry_x86_tls.h
+++ b/src/mapi/mapi/entry_x86_tls.h
@@ -91,7 +91,7 @@ entry_patch_public(void)
 void
 entry_patch(mapi_func entry, int slot)
 {
-   void *code = (void *) entry;
+   char *code = (char *) entry;
*((unsigned long *) (code + 8)) = slot * sizeof(mapi_func);
 }
 
diff --git a/src/mapi/mapi/entry_x86_tsd.h b/src/mapi/mapi/entry_x86_tsd.h
index fbf4ec5..f37c747 100644
--- a/src/mapi/mapi/entry_x86_tsd.h
+++ b/src/mapi/mapi/entry_x86_tsd.h
@@ -63,7 +63,7 @@ entry_patch_public(void)
 void
 entry_patch(mapi_func entry, int slot)
 {
-   void *code = (void *) entry;
+   char *code = (char *) entry;
 
*((unsigned long *) (code + 11)) = slot * sizeof(mapi_func);
*((unsigned long *) (code + 22)) = slot * sizeof(mapi_func);

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


Mesa (master): dri/nouveau: Remove unnecessary flush.

2010-09-30 Thread Francisco Jerez
Module: Mesa
Branch: master
Commit: bdd19da2183c685056c4c2eee5cea8358d9935cb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bdd19da2183c685056c4c2eee5cea8358d9935cb

Author: Francisco Jerez curroje...@riseup.net
Date:   Tue Sep 28 22:24:05 2010 +0200

dri/nouveau: Remove unnecessary flush.

---

 src/mesa/drivers/dri/nouveau/nouveau_context.c |4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.c 
b/src/mesa/drivers/dri/nouveau/nouveau_context.c
index fbe4ede..1121d2d 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_context.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_context.c
@@ -353,8 +353,6 @@ nouveau_validate_framebuffer(GLcontext *ctx)
validate_framebuffer(dri_ctx, dri_read,
 dri_ctx-dri2.read_stamp);
 
-   if (nouveau_next_dirty_state(ctx) = 0) {
+   if (nouveau_next_dirty_state(ctx) = 0)
nouveau_state_emit(ctx);
-   FIRE_RING(context_chan(ctx));
-   }
 }

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


Mesa (master): dri/nouveau: Have a smaller amount of larger scratch buffers .

2010-09-30 Thread Francisco Jerez
Module: Mesa
Branch: master
Commit: 6f39280ba910e290fb3cda378057dc91e5811c95
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6f39280ba910e290fb3cda378057dc91e5811c95

Author: Francisco Jerez curroje...@riseup.net
Date:   Tue Sep 28 22:20:12 2010 +0200

dri/nouveau: Have a smaller amount of larger scratch buffers.

Larger VBOs avoid many kernel trips to get them in sync with the GPU.

---

 src/mesa/drivers/dri/nouveau/nouveau_render.h |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_render.h 
b/src/mesa/drivers/dri/nouveau/nouveau_render.h
index 923b79b..29d96ed 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_render.h
+++ b/src/mesa/drivers/dri/nouveau/nouveau_render.h
@@ -55,8 +55,8 @@ struct nouveau_array_state {
extract_f_t extract_f;
 };
 
-#define RENDER_SCRATCH_COUNT 32
-#define RENDER_SCRATCH_SIZE 64*1024
+#define RENDER_SCRATCH_COUNT 2
+#define RENDER_SCRATCH_SIZE 2*1024*1024
 
 struct nouveau_scratch_state {
struct nouveau_bo *bo[RENDER_SCRATCH_COUNT];

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


Mesa (master): dri/nv10: Use fast Z clears.

2010-09-30 Thread Francisco Jerez
Module: Mesa
Branch: master
Commit: 065163bcd2df12494ca523538736282fc847fa6b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=065163bcd2df12494ca523538736282fc847fa6b

Author: Francisco Jerez curroje...@riseup.net
Date:   Sat Sep 25 15:29:02 2010 +0200

dri/nv10: Use fast Z clears.

---

 src/mesa/drivers/dri/nouveau/nouveau_class.h   |6 +++
 src/mesa/drivers/dri/nouveau/nouveau_context.h |5 +++
 src/mesa/drivers/dri/nouveau/nouveau_fbo.h |6 +++-
 src/mesa/drivers/dri/nouveau/nv10_context.c|   45 +---
 src/mesa/drivers/dri/nouveau/nv10_driver.h |8 
 src/mesa/drivers/dri/nouveau/nv10_state_fb.c   |   29 +---
 6 files changed, 88 insertions(+), 11 deletions(-)

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_class.h 
b/src/mesa/drivers/dri/nouveau/nouveau_class.h
index 5cb13ac..d41d431 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_class.h
+++ b/src/mesa/drivers/dri/nouveau/nouveau_class.h
@@ -3191,6 +3191,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
SOFTWARE.
 #define  NV17TCL_DMA_IN_MEMORY4
0x01ac
 #define  NV17TCL_DMA_IN_MEMORY5
0x01b0
 #define  NV17TCL_COLOR_MASK_ENABLE 
0x02bc
+#define  NV17TCL_ZCLEAR_ENABLE 
0x03f8
+#define  NV17TCL_ZCLEAR_VALUE  
0x03fc
+#define   NV17TCL_ZCLEAR_VALUE_DEPTH_SHIFT 
8
+#define   NV17TCL_ZCLEAR_VALUE_DEPTH_MASK  
0xff00
+#define   NV17TCL_ZCLEAR_VALUE_SEQUENCE_SHIFT  
0
+#define   NV17TCL_ZCLEAR_VALUE_SEQUENCE_MASK   
0x00ff
 #define  NV17TCL_LMA_DEPTH_BUFFER_PITCH
0x0d5c
 #define  NV17TCL_LMA_DEPTH_BUFFER_OFFSET   
0x0d60
 #define  NV17TCL_LMA_DEPTH_FILL_VALUE  
0x0d68
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.h 
b/src/mesa/drivers/dri/nouveau/nouveau_context.h
index 3dbe729..5f00327 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_context.h
+++ b/src/mesa/drivers/dri/nouveau/nouveau_context.h
@@ -67,6 +67,11 @@ struct nouveau_context {
struct nouveau_hw_state hw;
struct nouveau_bo_state bo;
struct nouveau_render_state render;
+
+   struct {
+   GLboolean clear_blocked;
+   int clear_seq;
+   } hierz;
 };
 
 #define to_nouveau_context(ctx)((struct nouveau_context *)(ctx))
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_fbo.h 
b/src/mesa/drivers/dri/nouveau/nouveau_fbo.h
index 0fe6c08..05ea03a 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_fbo.h
+++ b/src/mesa/drivers/dri/nouveau/nouveau_fbo.h
@@ -29,8 +29,12 @@
 
 struct nouveau_framebuffer {
struct gl_framebuffer base;
-   struct nouveau_bo *lma_bo;
GLboolean need_front;
+
+   struct {
+   struct nouveau_bo *bo;
+   uint32_t clear_value;
+   } hierz;
 };
 #define to_nouveau_framebuffer(x) ((struct nouveau_framebuffer *)(x))
 
diff --git a/src/mesa/drivers/dri/nouveau/nv10_context.c 
b/src/mesa/drivers/dri/nouveau/nv10_context.c
index 08be2a2..41723ff 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_context.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_context.c
@@ -40,9 +40,31 @@ static const struct dri_extension nv10_extensions[] = {
{ NULL, NULL }
 };
 
+static GLboolean
+use_fast_zclear(GLcontext *ctx, GLbitfield buffers)
+{
+   struct nouveau_context *nctx = to_nouveau_context(ctx);
+   struct gl_framebuffer *fb = ctx-DrawBuffer;
+
+   if (buffers  BUFFER_BIT_STENCIL) {
+   /*
+* The stencil test is bypassed when fast Z clears are
+* enabled.
+*/
+   nctx-hierz.clear_blocked = GL_TRUE;
+   context_dirty(ctx, ZCLEAR);
+   return GL_FALSE;
+   }
+
+   return !nctx-hierz.clear_blocked 
+   fb-_Xmax == fb-Width  fb-_Xmin == 0 
+   fb-_Ymax == fb-Height  fb-_Ymin == 0;
+}
+
 static void
 nv10_clear(GLcontext *ctx, GLbitfield buffers)
 {
+   struct nouveau_context *nctx = to_nouveau_context(ctx);
struct nouveau_channel *chan = context_chan(ctx);
struct nouveau_grobj *celsius = context_eng3d(ctx);
struct nouveau_framebuffer *nfb = to_nouveau_framebuffer(
@@ -50,16 +72,28 @@ nv10_clear(GLcontext *ctx, GLbitfield buffers)
 
nouveau_validate_framebuffer(ctx);
 
-   /* Clear the LMA depth buffer, if present. */
-   if ((buffers  BUFFER_BIT_DEPTH)  

Mesa (master): 24 new commits

2010-09-30 Thread Brian Paul
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4160d947d289c07f1de6b8bf21a874e842b51f51
Author: Nicolas Kaiser ni...@nikai.net
Date:   Thu Sep 30 07:53:13 2010 -0700

st: remove duplicated include

Remove duplicated include.

Signed-off-by: Brian Paul bri...@vmware.com

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bad10b961aeae8d695ecec600d47de5f8505b396
Author: Nicolas Kaiser ni...@nikai.net
Date:   Thu Sep 30 07:52:02 2010 -0700

math: remove duplicated includes

Remove duplicated includes.

Signed-off-by: Brian Paul bri...@vmware.com

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9674929bce0c0ea4862b468d0a1a7e58b2664049
Author: Nicolas Kaiser ni...@nikai.net
Date:   Thu Sep 30 07:50:43 2010 -0700

main: remove duplicated includes

Remove duplicated includes.

Signed-off-by: Brian Paul bri...@vmware.com

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8c92a80b6210bf7d977816690476ff336b350c79
Author: Nicolas Kaiser ni...@nikai.net
Date:   Thu Sep 30 07:48:29 2010 -0700

dri/savage: remove duplicated include

Remove duplicated include.

Signed-off-by: Brian Paul bri...@vmware.com

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1663e6da2f15ff8db9f08ca6a7337f8bd28add17
Author: Nicolas Kaiser ni...@nikai.net
Date:   Thu Sep 30 07:47:22 2010 -0700

dri/radeon: remove duplicated includes

Remove duplicated includes.

Signed-off-by: Brian Paul bri...@vmware.com

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a7670be8a15c56b625f2f1aad08eeff2414200b4
Author: Nicolas Kaiser ni...@nikai.net
Date:   Thu Sep 30 07:46:06 2010 -0700

dri/r600: remove duplicated include

Remove duplicated include.

Signed-off-by: Brian Paul bri...@vmware.com

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=223c4b418854a6c260723ae8bc4afd7a27463c22
Author: Nicolas Kaiser ni...@nikai.net
Date:   Thu Sep 30 07:44:55 2010 -0700

dri/r300: remove duplicated include

Remove duplicated include.

Signed-off-by: Brian Paul bri...@vmware.com

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=705d98deb80db476ef37674d256530fae68171c1
Author: Nicolas Kaiser ni...@nikai.net
Date:   Thu Sep 30 07:43:48 2010 -0700

dri/r128: remove duplicated include

Remove duplicated include.

Signed-off-by: Brian Paul bri...@vmware.com

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f094b352073bf5414a101b056f47f1ee2f814e81
Author: Nicolas Kaiser ni...@nikai.net
Date:   Thu Sep 30 07:42:41 2010 -0700

dri/mga: remove duplicated include

Remove duplicated include.

Signed-off-by: Brian Paul bri...@vmware.com

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1a98a463043e1558b1ad6ebf79a1371d6218ac5a
Author: Nicolas Kaiser ni...@nikai.net
Date:   Thu Sep 30 07:41:26 2010 -0700

dri/intel: remove duplicated include

Remove duplicated include.

Signed-off-by: Brian Paul bri...@vmware.com

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c24144f41fe797a0448f60705d9023902f1178ce
Author: Nicolas Kaiser ni...@nikai.net
Date:   Thu Sep 30 07:39:59 2010 -0700

dri/i965: remove duplicated include

Remove duplicated include.

Signed-off-by: Brian Paul bri...@vmware.com

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f831212eabe25ea2603be13d8d40b12477012acc
Author: Nicolas Kaiser ni...@nikai.net
Date:   Thu Sep 30 07:38:53 2010 -0700

dri/i915: remove duplicated include

Remove duplicated include.

Signed-off-by: Brian Paul bri...@vmware.com

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b958dabe1602d9a59b0aef0c004f8cf20c3e9c70
Author: Nicolas Kaiser ni...@nikai.net
Date:   Thu Sep 30 07:37:26 2010 -0700

dri/i810: remove duplicated include

Remove duplicated include.

Signed-off-by: Brian Paul bri...@vmware.com

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c24e062fdbf21114904258687f95d3d45911f893
Author: Nicolas Kaiser ni...@nikai.net
Date:   Thu Sep 30 07:36:12 2010 -0700

dri/common: remove duplicated include

Remove duplicated include.

Signed-off-by: Brian Paul bri...@vmware.com

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7eed3dba58740a8ade94cfab315afa198d1beebe
Author: Nicolas Kaiser ni...@nikai.net
Date:   Thu Sep 30 07:34:53 2010 -0700

glx: remove duplicated include

Remove duplicated include.

Signed-off-by: Brian Paul bri...@vmware.com

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3f28dbd9bb78f03681005cafa115008595b3c27d
Author: Nicolas Kaiser ni...@nikai.net
Date:   Thu Sep 30 07:33:43 2010 -0700

gallium/winsys: remove duplicated include

Remove duplicated include.

Signed-off-by: Brian Paul bri...@vmware.com

URL:

Mesa (master): st/egl: Drop context argument from egl_g3d_get_egl_image.

2010-09-30 Thread Chia-I Wu
Module: Mesa
Branch: master
Commit: e2b51b7c5b21e64df1377ce0be5c83d016ff
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e2b51b7c5b21e64df1377ce0be5c83d016ff

Author: Chia-I Wu o...@lunarg.com
Date:   Thu Sep 30 23:43:58 2010 +0800

st/egl: Drop context argument from egl_g3d_get_egl_image.

Fix a regression since 17eace581d25a626a7d75d9d1205d012cbb14a6e.

---

 src/gallium/state_trackers/egl/common/egl_g3d_st.c |1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/src/gallium/state_trackers/egl/common/egl_g3d_st.c 
b/src/gallium/state_trackers/egl/common/egl_g3d_st.c
index 05cdb0d..0affe63 100644
--- a/src/gallium/state_trackers/egl/common/egl_g3d_st.c
+++ b/src/gallium/state_trackers/egl/common/egl_g3d_st.c
@@ -51,7 +51,6 @@ egl_g3d_st_manager(struct st_manager *smapi)
 
 static boolean
 egl_g3d_st_manager_get_egl_image(struct st_manager *smapi,
- struct st_context_iface *stctx,
  void *egl_image,
  struct st_egl_image *out)
 {

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


Mesa (7.9): st/egl: Drop context argument from egl_g3d_get_egl_image.

2010-09-30 Thread Chia-I Wu
Module: Mesa
Branch: 7.9
Commit: 9bab8ca4f8c8f3e618bfa8e9aedfcdcf272d3495
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9bab8ca4f8c8f3e618bfa8e9aedfcdcf272d3495

Author: Chia-I Wu o...@lunarg.com
Date:   Thu Sep 30 23:43:58 2010 +0800

st/egl: Drop context argument from egl_g3d_get_egl_image.

Fix a regression since 17eace581d25a626a7d75d9d1205d012cbb14a6e.
(cherry picked from commit e2b51b7c5b21e64df1377ce0be5c83d016ff)

---

 src/gallium/state_trackers/egl/common/egl_g3d_st.c |1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/src/gallium/state_trackers/egl/common/egl_g3d_st.c 
b/src/gallium/state_trackers/egl/common/egl_g3d_st.c
index 05cdb0d..0affe63 100644
--- a/src/gallium/state_trackers/egl/common/egl_g3d_st.c
+++ b/src/gallium/state_trackers/egl/common/egl_g3d_st.c
@@ -51,7 +51,6 @@ egl_g3d_st_manager(struct st_manager *smapi)
 
 static boolean
 egl_g3d_st_manager_get_egl_image(struct st_manager *smapi,
- struct st_context_iface *stctx,
  void *egl_image,
  struct st_egl_image *out)
 {

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


Mesa (master): gallivm: More comprehensive border usage logic.

2010-09-30 Thread Jose Fonseca
Module: Mesa
Branch: master
Commit: 4e6f5e8d43ee87c6f8cdc75de2eeb96f70beb013
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4e6f5e8d43ee87c6f8cdc75de2eeb96f70beb013

Author: José Fonseca jfons...@vmware.com
Date:   Thu Sep 30 17:39:17 2010 +0100

gallivm: More comprehensive border usage logic.

---

 src/gallium/auxiliary/gallivm/lp_bld_sample.c |   33 
 src/gallium/auxiliary/gallivm/lp_bld_sample.h |5 ++
 src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c |   42 ++--
 3 files changed, 51 insertions(+), 29 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample.c 
b/src/gallium/auxiliary/gallivm/lp_bld_sample.c
index d9fbc0f..d9fbbbe 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_sample.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_sample.c
@@ -46,6 +46,39 @@
 
 
 /**
+ * Does the given texture wrap mode allow sampling the texture border color?
+ * XXX maybe move this into gallium util code.
+ */
+boolean
+lp_sampler_wrap_mode_uses_border_color(unsigned mode,
+   unsigned min_img_filter,
+   unsigned mag_img_filter)
+{
+   switch (mode) {
+   case PIPE_TEX_WRAP_REPEAT:
+   case PIPE_TEX_WRAP_CLAMP_TO_EDGE:
+   case PIPE_TEX_WRAP_MIRROR_REPEAT:
+   case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE:
+  return FALSE;
+   case PIPE_TEX_WRAP_CLAMP:
+   case PIPE_TEX_WRAP_MIRROR_CLAMP:
+  if (min_img_filter == PIPE_TEX_FILTER_NEAREST 
+  mag_img_filter == PIPE_TEX_FILTER_NEAREST) {
+ return FALSE;
+  } else {
+ return TRUE;
+  }
+   case PIPE_TEX_WRAP_CLAMP_TO_BORDER:
+   case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER:
+  return TRUE;
+   default:
+  assert(0  unexpected wrap mode);
+  return FALSE;
+   }
+}
+
+
+/**
  * Initialize lp_sampler_static_state object with the gallium sampler
  * and texture state.
  * The former is considered to be static and the later dynamic.
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample.h 
b/src/gallium/auxiliary/gallivm/lp_bld_sample.h
index bb48578..9fc9a38 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_sample.h
+++ b/src/gallium/auxiliary/gallivm/lp_bld_sample.h
@@ -254,6 +254,11 @@ texture_dims(enum pipe_texture_target tex)
 }
 
 
+boolean
+lp_sampler_wrap_mode_uses_border_color(unsigned mode,
+   unsigned min_img_filter,
+   unsigned mag_img_filter);
+
 /**
  * Derive the sampler static state.
  */
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
index 33740f9..36a77d3 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
@@ -59,31 +59,6 @@
 
 
 /**
- * Does the given texture wrap mode allow sampling the texture border color?
- * XXX maybe move this into gallium util code.
- */
-static boolean
-wrap_mode_uses_border_color(unsigned mode)
-{
-   switch (mode) {
-   case PIPE_TEX_WRAP_REPEAT:
-   case PIPE_TEX_WRAP_CLAMP_TO_EDGE:
-   case PIPE_TEX_WRAP_MIRROR_REPEAT:
-   case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE:
-  return FALSE;
-   case PIPE_TEX_WRAP_CLAMP:
-   case PIPE_TEX_WRAP_CLAMP_TO_BORDER:
-   case PIPE_TEX_WRAP_MIRROR_CLAMP:
-   case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER:
-  return TRUE;
-   default:
-  assert(0  unexpected wrap mode);
-  return FALSE;
-   }
-}
-
-
-/**
  * Generate code to fetch a texel from a texture at int coords (x, y, z).
  * The computation depends on whether the texture is 1D, 2D or 3D.
  * The result, texel, will be float vectors:
@@ -106,21 +81,27 @@ lp_build_sample_texel_soa(struct lp_build_sample_context 
*bld,
   LLVMValueRef data_ptr,
   LLVMValueRef texel_out[4])
 {
-   const int dims = texture_dims(bld-static_state-target);
+   const struct lp_sampler_static_state *static_state = bld-static_state;
+   const int dims = texture_dims(static_state-target);
struct lp_build_context *int_coord_bld = bld-int_coord_bld;
LLVMValueRef offset;
LLVMValueRef i, j;
LLVMValueRef use_border = NULL;
 
/* use_border = x  0 || x = width || y  0 || y = height */
-   if (wrap_mode_uses_border_color(bld-static_state-wrap_s)) {
+   if (lp_sampler_wrap_mode_uses_border_color(static_state-wrap_s,
+  static_state-min_img_filter,
+  static_state-mag_img_filter)) {
   LLVMValueRef b1, b2;
   b1 = lp_build_cmp(int_coord_bld, PIPE_FUNC_LESS, x, int_coord_bld-zero);
   b2 = lp_build_cmp(int_coord_bld, PIPE_FUNC_GEQUAL, x, width);
   use_border = LLVMBuildOr(bld-builder, b1, b2, b1_or_b2);
}
 
-   if (dims = 2  wrap_mode_uses_border_color(bld-static_state-wrap_t)) {
+   if (dims = 2 
+   lp_sampler_wrap_mode_uses_border_color(static_state-wrap_t,
+   

Mesa (master): gallivm: check for level=0 case in lp_build_minify()

2010-09-30 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 874f3a57ce5ae41ced103bf5a549a2eb663db6c5
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=874f3a57ce5ae41ced103bf5a549a2eb663db6c5

Author: Brian Paul bri...@vmware.com
Date:   Thu Sep 30 10:52:26 2010 -0600

gallivm: check for level=0 case in lp_build_minify()

This lets us avoid the shift and max() operations.

---

 src/gallium/auxiliary/gallivm/lp_bld_sample.c |   13 ++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample.c 
b/src/gallium/auxiliary/gallivm/lp_bld_sample.c
index d9fbbbe..6e53bca 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_sample.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_sample.c
@@ -362,9 +362,16 @@ lp_build_minify(struct lp_build_sample_context *bld,
 LLVMValueRef base_size,
 LLVMValueRef level)
 {
-   LLVMValueRef size = LLVMBuildLShr(bld-builder, base_size, level, minify);
-   size = lp_build_max(bld-int_coord_bld, size, bld-int_coord_bld.one);
-   return size;
+   if (level == bld-int_coord_bld.zero) {
+  /* if we're using mipmap level zero, no minification is needed */
+  return base_size;
+   }
+   else {
+  LLVMValueRef size =
+ LLVMBuildLShr(bld-builder, base_size, level, minify);
+  size = lp_build_max(bld-int_coord_bld, size, bld-int_coord_bld.one);
+  return size;
+   }
 }
 
 

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


Mesa (master): r600g: use constant buffer instead of register for constant

2010-09-30 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 153105cfbfd8d6ff30de144605016f6e4f2a1b9e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=153105cfbfd8d6ff30de144605016f6e4f2a1b9e

Author: Jerome Glisse jgli...@redhat.com
Date:   Thu Sep 30 10:43:26 2010 -0400

r600g: use constant buffer instead of register for constant

Signed-off-by: Jerome Glisse jgli...@redhat.com

---

 src/gallium/drivers/r600/r600_state.c |   47 +++--
 src/gallium/drivers/r600/r600d.h  |5 +++
 src/gallium/winsys/r600/drm/r600_hw_context.c |   34 +++---
 src/gallium/winsys/r600/drm/r600d.h   |5 +++
 4 files changed, 36 insertions(+), 55 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index 23323f1..23c2e59 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -1148,41 +1148,35 @@ static void r600_set_constant_buffer(struct 
pipe_context *ctx, uint shader, uint
struct pipe_resource *buffer)
 {
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-   struct r600_pipe_state *rstate;
-   struct pipe_transfer *transfer;
-   unsigned *nconst = NULL;
-   u32 *ptr, offset;
+   struct r600_resource *rbuffer = (struct r600_resource*)buffer;
 
switch (shader) {
case PIPE_SHADER_VERTEX:
-   rstate = rctx-vs_const;
-   nconst = rctx-vs_nconst;
-   offset = R_03_SQ_ALU_CONSTANT0_0 + 0x1000;
+   rctx-vs_const_buffer.nregs = 0;
+   r600_pipe_state_add_reg(rctx-vs_const_buffer,
+   R_028180_ALU_CONST_BUFFER_SIZE_VS_0,
+   ALIGN_DIVUP(buffer-width0  4, 16),
+   0x, NULL);
+   r600_pipe_state_add_reg(rctx-vs_const_buffer,
+   R_028980_ALU_CONST_CACHE_VS_0,
+   0, 0x, rbuffer-bo);
+   r600_context_pipe_state_set(rctx-ctx, rctx-vs_const_buffer);
break;
case PIPE_SHADER_FRAGMENT:
-   rstate = rctx-ps_const;
-   nconst = rctx-ps_nconst;
-   offset = R_03_SQ_ALU_CONSTANT0_0;
+   rctx-ps_const_buffer.nregs = 0;
+   r600_pipe_state_add_reg(rctx-ps_const_buffer,
+   R_028140_ALU_CONST_BUFFER_SIZE_PS_0,
+   ALIGN_DIVUP(buffer-width0  4, 16),
+   0x, NULL);
+   r600_pipe_state_add_reg(rctx-ps_const_buffer,
+   R_028940_ALU_CONST_CACHE_PS_0,
+   0, 0x, rbuffer-bo);
+   r600_context_pipe_state_set(rctx-ctx, rctx-ps_const_buffer);
break;
default:
R600_ERR(unsupported %d\n, shader);
return;
}
-   if (buffer  buffer-width0  0) {
-   *nconst = buffer-width0 / 16;
-   ptr = pipe_buffer_map(ctx, buffer, PIPE_TRANSFER_READ, 
transfer);
-   if (ptr == NULL)
-   return;
-   for (int i = 0; i  *nconst; i++, offset += 0x10) {
-   rstate[i].nregs = 0;
-   r600_pipe_state_add_reg(rstate[i], offset + 0x0, ptr[i 
* 4 + 0], 0x, NULL);
-   r600_pipe_state_add_reg(rstate[i], offset + 0x4, ptr[i 
* 4 + 1], 0x, NULL);
-   r600_pipe_state_add_reg(rstate[i], offset + 0x8, ptr[i 
* 4 + 2], 0x, NULL);
-   r600_pipe_state_add_reg(rstate[i], offset + 0xC, ptr[i 
* 4 + 3], 0x, NULL);
-   r600_context_pipe_state_set(rctx-ctx, rstate[i]);
-   }
-   pipe_buffer_unmap(ctx, buffer, transfer);
-   }
 }
 
 static void *r600_create_shader_state(struct pipe_context *ctx,
@@ -1191,6 +1185,7 @@ static void *r600_create_shader_state(struct pipe_context 
*ctx,
struct r600_pipe_shader *shader =  CALLOC_STRUCT(r600_pipe_shader);
int r;
 
+   shader-shader.use_mem_constant = TRUE;
r =  r600_pipe_shader_create(ctx, shader, state-tokens);
if (r) {
return NULL;
@@ -1436,7 +1431,7 @@ void r600_init_config(struct r600_pipe_context *rctx)
tmp |= S_008C00_VC_ENABLE(1);
break;
}
-   tmp |= S_008C00_DX9_CONSTS(1);
+   tmp |= S_008C00_DX9_CONSTS(0);
tmp |= S_008C00_ALU_INST_PREFER_VECTOR(1);
tmp |= S_008C00_PS_PRIO(ps_prio);
tmp |= S_008C00_VS_PRIO(vs_prio);
diff --git a/src/gallium/drivers/r600/r600d.h b/src/gallium/drivers/r600/r600d.h
index 47ab1eb..169cda5 100644
--- a/src/gallium/drivers/r600/r600d.h
+++ b/src/gallium/drivers/r600/r600d.h

Mesa (master): i965: Update renderer strings for sandybridge

2010-09-30 Thread Adam Jackson
Module: Mesa
Branch: master
Commit: 0c86e1f29483d9557f30796c03b94a34d965c095
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0c86e1f29483d9557f30796c03b94a34d965c095

Author: Adam Jackson a...@redhat.com
Date:   Thu Sep 30 14:08:35 2010 -0400

i965: Update renderer strings for sandybridge

Signed-off-by: Adam Jackson a...@redhat.com

---

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

diff --git a/src/mesa/drivers/dri/intel/intel_context.c 
b/src/mesa/drivers/dri/intel/intel_context.c
index edcc953..039ac6d 100644
--- a/src/mesa/drivers/dri/intel/intel_context.c
+++ b/src/mesa/drivers/dri/intel/intel_context.c
@@ -163,6 +163,19 @@ intelGetString(GLcontext * ctx, GLenum name)
   case PCI_CHIP_ILM_G:
  chipset = Intel(R) Ironlake Mobile;
  break;
+  case PCI_CHIP_SANDYBRIDGE_GT1:
+  case PCI_CHIP_SANDYBRIDGE_GT2:
+  case PCI_CHIP_SANDYBRIDGE_GT2_PLUS:
+chipset = Intel(R) Sandybridge Desktop;
+break;
+  case PCI_CHIP_SANDYBRIDGE_M_GT1:
+  case PCI_CHIP_SANDYBRIDGE_M_GT2:
+  case PCI_CHIP_SANDYBRIDGE_M_GT2_PLUS:
+chipset = Intel(R) Sandybridge Mobile;
+break;
+  case PCI_CHIP_SANDYBRIDGE_S:
+chipset = Intel(R) Sandybridge Server;
+break;
   default:
  chipset = Unknown Intel Chipset;
  break;

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


Mesa (7.8): Implement x86_64 atomics for compilers w/o intrinsics.

2010-09-30 Thread Thomas Fogal
Module: Mesa
Branch: 7.8
Commit: cc32ff741c5d32a66531a586b1f9268b94846c58
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=cc32ff741c5d32a66531a586b1f9268b94846c58

Author: Tom Fogal tfo...@alumni.unh.edu
Date:   Sun Sep 26 18:57:59 2010 -0600

Implement x86_64 atomics for compilers w/o intrinsics.

Really old gcc's (3.3, at least) don't have support for the
intrinsics we need.  This implements a fallback for that case.

---

 src/gallium/auxiliary/util/u_atomic.h |   47 +
 1 files changed, 47 insertions(+), 0 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_atomic.h 
b/src/gallium/auxiliary/util/u_atomic.h
index a156823..8434491 100644
--- a/src/gallium/auxiliary/util/u_atomic.h
+++ b/src/gallium/auxiliary/util/u_atomic.h
@@ -29,6 +29,8 @@
 #define PIPE_ATOMIC_ASM_MSVC_X86
 #elif (defined(PIPE_CC_GCC)  defined(PIPE_ARCH_X86))
 #define PIPE_ATOMIC_ASM_GCC_X86
+#elif (defined(PIPE_CC_GCC)  defined(PIPE_ARCH_X86_64))
+#define PIPE_ATOMIC_ASM_GCC_X86_64
 #elif defined(PIPE_CC_GCC)  (PIPE_CC_GCC_VERSION = 401)
 #define PIPE_ATOMIC_GCC_INTRINSIC
 #else
@@ -36,6 +38,51 @@
 #endif
 
 
+#if defined(PIPE_ATOMIC_ASM_GCC_X86_64)
+#define PIPE_ATOMIC GCC x86_64 assembly
+
+#ifdef __cplusplus
+extern C {
+#endif
+
+#define p_atomic_set(_v, _i) (*(_v) = (_i))
+#define p_atomic_read(_v) (*(_v))
+
+static INLINE boolean
+p_atomic_dec_zero(int32_t *v)
+{
+   unsigned char c;
+
+   __asm__ __volatile__(lock; decl %0; sete %1:+m(*v), =qm(c)
+   ::memory);
+
+   return c != 0;
+}
+
+static INLINE void
+p_atomic_inc(int32_t *v)
+{
+   __asm__ __volatile__(lock; incl %0:+m(*v));
+}
+
+static INLINE void
+p_atomic_dec(int32_t *v)
+{
+   __asm__ __volatile__(lock; decl %0:+m(*v));
+}
+
+static INLINE int32_t
+p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new)
+{
+   return __sync_val_compare_and_swap(v, old, _new);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* PIPE_ATOMIC_ASM_GCC_X86_64 */
+
 
 #if defined(PIPE_ATOMIC_ASM_GCC_X86)
 

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


Mesa (7.8): Prefer intrinsics to handrolled atomic ops.

2010-09-30 Thread Thomas Fogal
Module: Mesa
Branch: 7.8
Commit: 337dace22dc2b0eab2372375f1574d94b894ef84
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=337dace22dc2b0eab2372375f1574d94b894ef84

Author: Tom Fogal tfo...@alumni.unh.edu
Date:   Sun Sep 26 22:32:15 2010 -0600

Prefer intrinsics to handrolled atomic ops.

---

 src/gallium/auxiliary/util/u_atomic.h |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_atomic.h 
b/src/gallium/auxiliary/util/u_atomic.h
index 8434491..4ae6def 100644
--- a/src/gallium/auxiliary/util/u_atomic.h
+++ b/src/gallium/auxiliary/util/u_atomic.h
@@ -27,12 +27,12 @@
 #define PIPE_ATOMIC_MSVC_INTRINSIC
 #elif (defined(PIPE_CC_MSVC)  defined(PIPE_ARCH_X86))
 #define PIPE_ATOMIC_ASM_MSVC_X86
+#elif defined(PIPE_CC_GCC)  (PIPE_CC_GCC_VERSION = 401)
+#define PIPE_ATOMIC_GCC_INTRINSIC
 #elif (defined(PIPE_CC_GCC)  defined(PIPE_ARCH_X86))
 #define PIPE_ATOMIC_ASM_GCC_X86
 #elif (defined(PIPE_CC_GCC)  defined(PIPE_ARCH_X86_64))
 #define PIPE_ATOMIC_ASM_GCC_X86_64
-#elif defined(PIPE_CC_GCC)  (PIPE_CC_GCC_VERSION = 401)
-#define PIPE_ATOMIC_GCC_INTRINSIC
 #else
 #error Unsupported platform
 #endif

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


Mesa (master): Implement x86_64 atomics for compilers w/o intrinsics.

2010-09-30 Thread Thomas Fogal
Module: Mesa
Branch: master
Commit: 76a60faf529e6107e3f50406c0d40e64bc484686
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=76a60faf529e6107e3f50406c0d40e64bc484686

Author: Tom Fogal tfo...@alumni.unh.edu
Date:   Sun Sep 26 18:57:59 2010 -0600

Implement x86_64 atomics for compilers w/o intrinsics.

Really old gcc's (3.3, at least) don't have support for the
intrinsics we need.  This implements a fallback for that case.

---

 src/gallium/auxiliary/util/u_atomic.h |   47 +
 1 files changed, 47 insertions(+), 0 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_atomic.h 
b/src/gallium/auxiliary/util/u_atomic.h
index a156823..8434491 100644
--- a/src/gallium/auxiliary/util/u_atomic.h
+++ b/src/gallium/auxiliary/util/u_atomic.h
@@ -29,6 +29,8 @@
 #define PIPE_ATOMIC_ASM_MSVC_X86
 #elif (defined(PIPE_CC_GCC)  defined(PIPE_ARCH_X86))
 #define PIPE_ATOMIC_ASM_GCC_X86
+#elif (defined(PIPE_CC_GCC)  defined(PIPE_ARCH_X86_64))
+#define PIPE_ATOMIC_ASM_GCC_X86_64
 #elif defined(PIPE_CC_GCC)  (PIPE_CC_GCC_VERSION = 401)
 #define PIPE_ATOMIC_GCC_INTRINSIC
 #else
@@ -36,6 +38,51 @@
 #endif
 
 
+#if defined(PIPE_ATOMIC_ASM_GCC_X86_64)
+#define PIPE_ATOMIC GCC x86_64 assembly
+
+#ifdef __cplusplus
+extern C {
+#endif
+
+#define p_atomic_set(_v, _i) (*(_v) = (_i))
+#define p_atomic_read(_v) (*(_v))
+
+static INLINE boolean
+p_atomic_dec_zero(int32_t *v)
+{
+   unsigned char c;
+
+   __asm__ __volatile__(lock; decl %0; sete %1:+m(*v), =qm(c)
+   ::memory);
+
+   return c != 0;
+}
+
+static INLINE void
+p_atomic_inc(int32_t *v)
+{
+   __asm__ __volatile__(lock; incl %0:+m(*v));
+}
+
+static INLINE void
+p_atomic_dec(int32_t *v)
+{
+   __asm__ __volatile__(lock; decl %0:+m(*v));
+}
+
+static INLINE int32_t
+p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new)
+{
+   return __sync_val_compare_and_swap(v, old, _new);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* PIPE_ATOMIC_ASM_GCC_X86_64 */
+
 
 #if defined(PIPE_ATOMIC_ASM_GCC_X86)
 

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


Mesa (master): Prefer intrinsics to handrolled atomic ops.

2010-09-30 Thread Thomas Fogal
Module: Mesa
Branch: master
Commit: 5f66b340aa49c6bc8d0acb2d1a6f8e9a7ef2cb2e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5f66b340aa49c6bc8d0acb2d1a6f8e9a7ef2cb2e

Author: Tom Fogal tfo...@alumni.unh.edu
Date:   Sun Sep 26 22:32:15 2010 -0600

Prefer intrinsics to handrolled atomic ops.

---

 src/gallium/auxiliary/util/u_atomic.h |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_atomic.h 
b/src/gallium/auxiliary/util/u_atomic.h
index 8434491..4ae6def 100644
--- a/src/gallium/auxiliary/util/u_atomic.h
+++ b/src/gallium/auxiliary/util/u_atomic.h
@@ -27,12 +27,12 @@
 #define PIPE_ATOMIC_MSVC_INTRINSIC
 #elif (defined(PIPE_CC_MSVC)  defined(PIPE_ARCH_X86))
 #define PIPE_ATOMIC_ASM_MSVC_X86
+#elif defined(PIPE_CC_GCC)  (PIPE_CC_GCC_VERSION = 401)
+#define PIPE_ATOMIC_GCC_INTRINSIC
 #elif (defined(PIPE_CC_GCC)  defined(PIPE_ARCH_X86))
 #define PIPE_ATOMIC_ASM_GCC_X86
 #elif (defined(PIPE_CC_GCC)  defined(PIPE_ARCH_X86_64))
 #define PIPE_ATOMIC_ASM_GCC_X86_64
-#elif defined(PIPE_CC_GCC)  (PIPE_CC_GCC_VERSION = 401)
-#define PIPE_ATOMIC_GCC_INTRINSIC
 #else
 #error Unsupported platform
 #endif

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


Mesa (7.9): r300g: fix conditional rendering in non-wait path

2010-09-30 Thread Marek Olšák
Module: Mesa
Branch: 7.9
Commit: 9f076a0848fcb26fd8ae4551aa0db1d1f709e502
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9f076a0848fcb26fd8ae4551aa0db1d1f709e502

Author: Marek Olšák mar...@gmail.com
Date:   Thu Sep 30 01:08:58 2010 +0200

r300g: fix conditional rendering in non-wait path

NOTE: This is a candidate for the 7.9 branch.
(cherry picked from commit 83278d384ee123fa207229cc444f6e77e2d9a0d2)

---

 src/gallium/drivers/r300/r300_query.c |6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_query.c 
b/src/gallium/drivers/r300/r300_query.c
index 5b0121c..5f34fcb 100644
--- a/src/gallium/drivers/r300/r300_query.c
+++ b/src/gallium/drivers/r300/r300_query.c
@@ -158,7 +158,7 @@ static void r300_render_condition(struct pipe_context *pipe,
   uint mode)
 {
 struct r300_context *r300 = r300_context(pipe);
-uint64_t result;
+uint64_t result = 0;
 boolean wait;
 
 if (query) {
@@ -167,9 +167,9 @@ static void r300_render_condition(struct pipe_context *pipe,
 
 if (!r300_get_query_result(pipe, query, wait, result)) {
 r300-skip_rendering = FALSE;
+} else {
+r300-skip_rendering = result == 0;
 }
-
-r300-skip_rendering = result == 0;
 } else {
 r300-skip_rendering = FALSE;
 }

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


Mesa (7.9): glsl: Copyright, not Constantright

2010-09-30 Thread Ian Romanick
Module: Mesa
Branch: 7.9
Commit: 5d43c78d03f05e8a6023265a0c12a8bed1a3ff01
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5d43c78d03f05e8a6023265a0c12a8bed1a3ff01

Author: Kenneth Graunke kenn...@whitecape.org
Date:   Tue Sep 28 21:13:41 2010 -0700

glsl: Copyright, not Constantright

Clearly this started out as ir_copy_propagation.cpp, but the search and
replace was a bit overzealous.
(cherry picked from commit 565ff676887fc40b4715b44d9407c638480485e6)

---

 src/glsl/ir_constant_propagation.cpp |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/glsl/ir_constant_propagation.cpp 
b/src/glsl/ir_constant_propagation.cpp
index 390f295..5d875b7 100644
--- a/src/glsl/ir_constant_propagation.cpp
+++ b/src/glsl/ir_constant_propagation.cpp
@@ -1,5 +1,5 @@
 /*
- * Constantright © 2010 Intel Corporation
+ * Copyright © 2010 Intel Corporation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * constant of this software and associated documentation files (the 
Software),

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


Mesa (7.9): i965: fallback lineloop on sandybridge for now

2010-09-30 Thread Ian Romanick
Module: Mesa
Branch: 7.9
Commit: 1c8795075fa3f5518b728184abd09b758ca84397
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1c8795075fa3f5518b728184abd09b758ca84397

Author: Zhenyu Wang zhen...@linux.intel.com
Date:   Sun Sep 26 13:15:39 2010 +0800

i965: fallback lineloop on sandybridge for now

Until we fixed GS hang issue.
(cherry picked from commit 73dab75b4165f7d2214a68d4ba8e3cb7aab9b4ac)

---

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

diff --git a/src/mesa/drivers/dri/i965/brw_draw.c 
b/src/mesa/drivers/dri/i965/brw_draw.c
index 16331cc..6a4dda2 100644
--- a/src/mesa/drivers/dri/i965/brw_draw.c
+++ b/src/mesa/drivers/dri/i965/brw_draw.c
@@ -204,6 +204,13 @@ static GLboolean check_fallbacks( struct brw_context *brw,
GLcontext *ctx = brw-intel.ctx;
GLuint i;
 
+   /* XXX FIXME */
+   if (brw-intel.gen = 6) {
+   for (i = 0; i  nr_prims; i++)
+  if (prim[i].mode == GL_LINE_LOOP)
+  return GL_TRUE;
+   }
+
/* If we don't require strict OpenGL conformance, never 
 * use fallbacks.  If we're forcing fallbacks, always
 * use fallfacks.

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


Mesa (7.9): i965: always set tiling for fbo depth buffer on sandybridge

2010-09-30 Thread Ian Romanick
Module: Mesa
Branch: 7.9
Commit: 4af00f1a5e12b7e0b2c4024f2480247cb16f836b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4af00f1a5e12b7e0b2c4024f2480247cb16f836b

Author: Zhenyu Wang zhen...@linux.intel.com
Date:   Thu Sep 30 10:49:47 2010 +0800

i965: always set tiling for fbo depth buffer on sandybridge

Sandybridge requires depth buffer must be tiling.

Fix 'fbo_firecube' demo.
(cherry picked from commit 72b368ae69bc037681ab4e458296c07cb04349be)

---

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

diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c 
b/src/mesa/drivers/dri/intel/intel_fbo.c
index 363a5c0..d3f4464 100644
--- a/src/mesa/drivers/dri/intel/intel_fbo.c
+++ b/src/mesa/drivers/dri/intel/intel_fbo.c
@@ -102,7 +102,7 @@ intel_alloc_renderbuffer_storage(GLcontext * ctx, struct 
gl_renderbuffer *rb,
 {
struct intel_context *intel = intel_context(ctx);
struct intel_renderbuffer *irb = intel_renderbuffer(rb);
-   int cpp;
+   int cpp, tiling;
 
ASSERT(rb-Name != 0);
 
@@ -176,7 +176,13 @@ intel_alloc_renderbuffer_storage(GLcontext * ctx, struct 
gl_renderbuffer *rb,
/* alloc hardware renderbuffer */
DBG(Allocating %d x %d Intel RBO\n, width, height);
 
-   irb-region = intel_region_alloc(intel-intelScreen, I915_TILING_NONE, cpp,
+   tiling = I915_TILING_NONE;
+
+   /* Gen6 requires depth must be tiling */
+   if (intel-gen = 6  rb-Format == MESA_FORMAT_S8_Z24)
+   tiling = I915_TILING_Y;
+
+   irb-region = intel_region_alloc(intel-intelScreen, tiling, cpp,
width, height, GL_TRUE);
if (!irb-region)
   return GL_FALSE;   /* out of memory? */

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


Mesa (master): r600g: fix constant literal src splitting, also fix mplayer gl2 shader

2010-09-30 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 9d4ae914e28ac7857a32a88ba27aecc182f697c6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9d4ae914e28ac7857a32a88ba27aecc182f697c6

Author: Jerome Glisse jgli...@redhat.com
Date:   Thu Sep 30 16:26:33 2010 -0400

r600g: fix constant  literal src splitting, also fix mplayer gl2 shader

Signed-off-by: Jerome Glisse jgli...@redhat.com

---

 src/gallium/drivers/r600/r600_shader.c |   56 ++-
 1 files changed, 40 insertions(+), 16 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index 8d40079..a2091db 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -777,12 +777,12 @@ static int tgsi_split_constant(struct r600_shader_ctx 
*ctx, struct r600_bc_alu_s
}
}
for (i = 0, j = nconst - 1; i  inst-Instruction.NumSrcRegs; i++) {
-   if (inst-Src[j].Register.File == TGSI_FILE_CONSTANT  j  0) {
+   if (j  0  inst-Src[i].Register.File == TGSI_FILE_CONSTANT) {
int treg = r600_get_temp(ctx);
for (k = 0; k  4; k++) {
memset(alu, 0, sizeof(struct r600_bc_alu));
alu.inst = 
CTX_INST(V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOV);
-   alu.src[0].sel = r600_src[j].sel;
+   alu.src[0].sel = r600_src[i].sel;
alu.src[0].chan = k;
alu.dst.sel = treg;
alu.dst.chan = k;
@@ -793,7 +793,7 @@ static int tgsi_split_constant(struct r600_shader_ctx *ctx, 
struct r600_bc_alu_s
if (r)
return r;
}
-   r600_src[j].sel = treg;
+   r600_src[i].sel = treg;
j--;
}
}
@@ -805,20 +805,20 @@ static int tgsi_split_literal_constant(struct 
r600_shader_ctx *ctx, struct r600_
 {
struct tgsi_full_instruction *inst = 
ctx-parse.FullToken.FullInstruction;
struct r600_bc_alu alu;
-   int i, j, k, nliteral, r;
+   int i, j, k, nliteral, r, index;
 
for (i = 0, nliteral = 0; i  inst-Instruction.NumSrcRegs; i++) {
if (inst-Src[i].Register.File == TGSI_FILE_IMMEDIATE) {
nliteral++;
}
}
-   for (i = 0, j = 0; i  inst-Instruction.NumSrcRegs; i++) {
-   if (inst-Src[j].Register.File == TGSI_FILE_IMMEDIATE) {
+   for (i = 0, j = nliteral - 1; i  inst-Instruction.NumSrcRegs; i++) {
+   if (j  0  inst-Src[i].Register.File == TGSI_FILE_IMMEDIATE) 
{
int treg = r600_get_temp(ctx);
for (k = 0; k  4; k++) {
memset(alu, 0, sizeof(struct r600_bc_alu));
alu.inst = 
CTX_INST(V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOV);
-   alu.src[0].sel = r600_src[j].sel;
+   alu.src[0].sel = r600_src[i].sel;
alu.src[0].chan = k;
alu.dst.sel = treg;
alu.dst.chan = k;
@@ -829,11 +829,11 @@ static int tgsi_split_literal_constant(struct 
r600_shader_ctx *ctx, struct r600_
if (r)
return r;
}
-   r = r600_bc_add_literal(ctx-bc, ctx-value);
+   r = r600_bc_add_literal(ctx-bc, 
ctx-literals[inst-Src[i].Register.Index * 4]);
if (r)
return r;
-   r600_src[j].sel = treg;
-   j++;
+   r600_src[i].sel = treg;
+   j--;
}
}
return 0;
@@ -856,6 +856,9 @@ static int tgsi_op2_s(struct r600_shader_ctx *ctx, int swap)
r = tgsi_split_constant(ctx, r600_src);
if (r)
return r;
+   r = tgsi_split_literal_constant(ctx, r600_src);
+   if (r)
+   return r;
for (i = 0; i  lasti + 1; i++) {
if (!(inst-Dst[0].Register.WriteMask  (1  i)))
continue;
@@ -926,6 +929,9 @@ static int tgsi_setup_trig(struct r600_shader_ctx *ctx,
r = tgsi_split_constant(ctx, r600_src);
if (r)
return r;
+   r = tgsi_split_literal_constant(ctx, r600_src);
+   if (r)
+   return r;
 
r = tgsi_split_literal_constant(ctx, r600_src);
if (r)
@@ -1465,6 +1471,9 @@ static int tgsi_ssg(struct r600_shader_ctx *ctx)
r = tgsi_split_constant(ctx, r600_src);
if (r)
return r;
+   r = tgsi_split_literal_constant(ctx, r600_src);

Mesa (7.9): i965: Update renderer strings for sandybridge

2010-09-30 Thread Ian Romanick
Module: Mesa
Branch: 7.9
Commit: 759e9fb7376ca24b1e5c7819e3e6036e96762951
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=759e9fb7376ca24b1e5c7819e3e6036e96762951

Author: Adam Jackson a...@redhat.com
Date:   Thu Sep 30 14:08:35 2010 -0400

i965: Update renderer strings for sandybridge

Signed-off-by: Adam Jackson a...@redhat.com
(cherry picked from commit 0c86e1f29483d9557f30796c03b94a34d965c095)

---

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

diff --git a/src/mesa/drivers/dri/intel/intel_context.c 
b/src/mesa/drivers/dri/intel/intel_context.c
index 5ae3e4b..779e651 100644
--- a/src/mesa/drivers/dri/intel/intel_context.c
+++ b/src/mesa/drivers/dri/intel/intel_context.c
@@ -163,6 +163,19 @@ intelGetString(GLcontext * ctx, GLenum name)
   case PCI_CHIP_ILM_G:
  chipset = Intel(R) Ironlake Mobile;
  break;
+  case PCI_CHIP_SANDYBRIDGE_GT1:
+  case PCI_CHIP_SANDYBRIDGE_GT2:
+  case PCI_CHIP_SANDYBRIDGE_GT2_PLUS:
+chipset = Intel(R) Sandybridge Desktop;
+break;
+  case PCI_CHIP_SANDYBRIDGE_M_GT1:
+  case PCI_CHIP_SANDYBRIDGE_M_GT2:
+  case PCI_CHIP_SANDYBRIDGE_M_GT2_PLUS:
+chipset = Intel(R) Sandybridge Mobile;
+break;
+  case PCI_CHIP_SANDYBRIDGE_S:
+chipset = Intel(R) Sandybridge Server;
+break;
   default:
  chipset = Unknown Intel Chipset;
  break;

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


Mesa (master): Revert Prefer intrinsics to handrolled atomic ops.

2010-09-30 Thread Thomas Fogal
Module: Mesa
Branch: master
Commit: 3661f757ee7e75348f0df834ecf1febb211ddf66
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3661f757ee7e75348f0df834ecf1febb211ddf66

Author: Tom Fogal tfo...@alumni.unh.edu
Date:   Thu Sep 30 14:39:14 2010 -0600

Revert Prefer intrinsics to handrolled atomic ops.

This reverts commit 5f66b340aa49c6bc8d0acb2d1a6f8e9a7ef2cb2e, quickly
fixing 30514.

---

 src/gallium/auxiliary/util/u_atomic.h |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_atomic.h 
b/src/gallium/auxiliary/util/u_atomic.h
index 4ae6def..8434491 100644
--- a/src/gallium/auxiliary/util/u_atomic.h
+++ b/src/gallium/auxiliary/util/u_atomic.h
@@ -27,12 +27,12 @@
 #define PIPE_ATOMIC_MSVC_INTRINSIC
 #elif (defined(PIPE_CC_MSVC)  defined(PIPE_ARCH_X86))
 #define PIPE_ATOMIC_ASM_MSVC_X86
-#elif defined(PIPE_CC_GCC)  (PIPE_CC_GCC_VERSION = 401)
-#define PIPE_ATOMIC_GCC_INTRINSIC
 #elif (defined(PIPE_CC_GCC)  defined(PIPE_ARCH_X86))
 #define PIPE_ATOMIC_ASM_GCC_X86
 #elif (defined(PIPE_CC_GCC)  defined(PIPE_ARCH_X86_64))
 #define PIPE_ATOMIC_ASM_GCC_X86_64
+#elif defined(PIPE_CC_GCC)  (PIPE_CC_GCC_VERSION = 401)
+#define PIPE_ATOMIC_GCC_INTRINSIC
 #else
 #error Unsupported platform
 #endif

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


Mesa (7.8): Revert Prefer intrinsics to handrolled atomic ops.

2010-09-30 Thread Thomas Fogal
Module: Mesa
Branch: 7.8
Commit: 3af43c0b4c29f7cb82df72d0b65bcd190053f57c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3af43c0b4c29f7cb82df72d0b65bcd190053f57c

Author: Tom Fogal tfo...@alumni.unh.edu
Date:   Thu Sep 30 14:39:14 2010 -0600

Revert Prefer intrinsics to handrolled atomic ops.

This reverts commit 5f66b340aa49c6bc8d0acb2d1a6f8e9a7ef2cb2e, quickly
fixing 30514.

---

 src/gallium/auxiliary/util/u_atomic.h |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_atomic.h 
b/src/gallium/auxiliary/util/u_atomic.h
index 4ae6def..8434491 100644
--- a/src/gallium/auxiliary/util/u_atomic.h
+++ b/src/gallium/auxiliary/util/u_atomic.h
@@ -27,12 +27,12 @@
 #define PIPE_ATOMIC_MSVC_INTRINSIC
 #elif (defined(PIPE_CC_MSVC)  defined(PIPE_ARCH_X86))
 #define PIPE_ATOMIC_ASM_MSVC_X86
-#elif defined(PIPE_CC_GCC)  (PIPE_CC_GCC_VERSION = 401)
-#define PIPE_ATOMIC_GCC_INTRINSIC
 #elif (defined(PIPE_CC_GCC)  defined(PIPE_ARCH_X86))
 #define PIPE_ATOMIC_ASM_GCC_X86
 #elif (defined(PIPE_CC_GCC)  defined(PIPE_ARCH_X86_64))
 #define PIPE_ATOMIC_ASM_GCC_X86_64
+#elif defined(PIPE_CC_GCC)  (PIPE_CC_GCC_VERSION = 401)
+#define PIPE_ATOMIC_GCC_INTRINSIC
 #else
 #error Unsupported platform
 #endif

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


Mesa (master): i965: Fix whole-structure/array assignment in new FS.

2010-09-30 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 6f6542a483ec726538f8a4555bddaeb0be6b2146
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6f6542a483ec726538f8a4555bddaeb0be6b2146

Author: Eric Anholt e...@anholt.net
Date:   Thu Sep 30 11:46:24 2010 -0700

i965: Fix whole-structure/array assignment in new FS.

We need to walk the type tree to get the right register types for
structure components.  Fixes glsl-fs-statevar-call.

---

 src/mesa/drivers/dri/i965/brw_fs.cpp |   76 -
 1 files changed, 55 insertions(+), 21 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp 
b/src/mesa/drivers/dri/i965/brw_fs.cpp
index efbb4c6..efa0f21 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -469,6 +469,8 @@ public:
void emit_general_interpolation(ir_variable *ir);
void emit_interpolation_setup();
void emit_fb_writes();
+   void emit_assignment_writes(fs_reg l, fs_reg r,
+  const glsl_type *type, bool predicated);
 
struct brw_reg interp_reg(int location, int channel);
int setup_uniform_values(int loc, const glsl_type *type);
@@ -1138,11 +1140,50 @@ fs_visitor::visit(ir_expression *ir)
 }
 
 void
+fs_visitor::emit_assignment_writes(fs_reg l, fs_reg r,
+  const glsl_type *type, bool predicated)
+{
+   switch (type-base_type) {
+   case GLSL_TYPE_FLOAT:
+   case GLSL_TYPE_UINT:
+   case GLSL_TYPE_INT:
+   case GLSL_TYPE_BOOL:
+  for (unsigned int i = 0; i  type-components(); i++) {
+l.type = brw_type_for_base_type(type);
+r.type = brw_type_for_base_type(type);
+
+fs_inst *inst = emit(fs_inst(BRW_OPCODE_MOV, l, r));
+inst-predicated = predicated;
+
+l.reg_offset++;
+r.reg_offset++;
+  }
+  break;
+   case GLSL_TYPE_ARRAY:
+  for (unsigned int i = 0; i  type-length; i++) {
+emit_assignment_writes(l, r, type-fields.array, predicated);
+  }
+
+   case GLSL_TYPE_STRUCT:
+  for (unsigned int i = 0; i  type-length; i++) {
+emit_assignment_writes(l, r, type-fields.structure[i].type,
+   predicated);
+  }
+  break;
+
+   case GLSL_TYPE_SAMPLER:
+  break;
+
+   default:
+  assert(!not reached);
+  break;
+   }
+}
+
+void
 fs_visitor::visit(ir_assignment *ir)
 {
struct fs_reg l, r;
-   int i;
-   int write_mask;
fs_inst *inst;
 
/* FINISHME: arrays on the lhs */
@@ -1152,18 +1193,6 @@ fs_visitor::visit(ir_assignment *ir)
ir-rhs-accept(this);
r = this-result;
 
-   /* FINISHME: This should really set to the correct maximal writemask for 
each
-* FINISHME: component written (in the loops below).  This case can only
-* FINISHME: occur for matrices, arrays, and structures.
-*/
-   if (ir-write_mask == 0) {
-  assert(!ir-lhs-type-is_scalar()  !ir-lhs-type-is_vector());
-  write_mask = WRITEMASK_XYZW;
-   } else {
-  assert(ir-lhs-type-is_vector() || ir-lhs-type-is_scalar());
-  write_mask = ir-write_mask;
-   }
-
assert(l.file != BAD_FILE);
assert(r.file != BAD_FILE);
 
@@ -1174,14 +1203,19 @@ fs_visitor::visit(ir_assignment *ir)
   inst-conditional_mod = BRW_CONDITIONAL_NZ;
}
 
-   for (i = 0; i  type_size(ir-lhs-type); i++) {
-  if (i = 4 || (write_mask  (1  i))) {
-inst = emit(fs_inst(BRW_OPCODE_MOV, l, r));
-if (ir-condition)
-   inst-predicated = true;
-r.reg_offset++;
+   if (ir-lhs-type-is_scalar() ||
+   ir-lhs-type-is_vector()) {
+  for (int i = 0; i  ir-lhs-type-vector_elements; i++) {
+if (ir-write_mask  (1  i)) {
+   inst = emit(fs_inst(BRW_OPCODE_MOV, l, r));
+   if (ir-condition)
+  inst-predicated = true;
+   r.reg_offset++;
+}
+l.reg_offset++;
   }
-  l.reg_offset++;
+   } else {
+  emit_assignment_writes(l, r, ir-lhs-type, ir-condition != NULL);
}
 }
 

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


Mesa (master): mesa: Don' t reference a W component in setting up a vec3 uniform component.

2010-09-30 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: a7cddd7de3123eb13e68c35aa111ff4060669f59
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a7cddd7de3123eb13e68c35aa111ff4060669f59

Author: Eric Anholt e...@anholt.net
Date:   Thu Sep 30 13:40:22 2010 -0700

mesa: Don't reference a W component in setting up a vec3 uniform component.

The 965 driver would try to set up storage for the W component, and
the offsets would get mixed up.

---

 src/mesa/main/uniforms.c |6 +-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/src/mesa/main/uniforms.c b/src/mesa/main/uniforms.c
index 29a9be8..87ce6e4 100644
--- a/src/mesa/main/uniforms.c
+++ b/src/mesa/main/uniforms.c
@@ -122,7 +122,11 @@ static struct gl_builtin_uniform_element 
gl_LightSource_elements[] = {
{specular, {STATE_LIGHT, 0, STATE_SPECULAR}, SWIZZLE_XYZW},
{position, {STATE_LIGHT, 0, STATE_POSITION}, SWIZZLE_XYZW},
{halfVector, {STATE_LIGHT, 0, STATE_HALF_VECTOR}, SWIZZLE_XYZW},
-   {spotDirection, {STATE_LIGHT, 0, STATE_SPOT_DIRECTION}, SWIZZLE_XYZW},
+   {spotDirection, {STATE_LIGHT, 0, STATE_SPOT_DIRECTION},
+MAKE_SWIZZLE4(SWIZZLE_X,
+ SWIZZLE_Y,
+ SWIZZLE_Z,
+ SWIZZLE_Z)},
{spotCosCutoff, {STATE_LIGHT, 0, STATE_SPOT_DIRECTION}, SWIZZLE_},
{spotCutoff, {STATE_LIGHT, 0, STATE_SPOT_CUTOFF}, SWIZZLE_},
{spotExponent, {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_},

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


Mesa (master): i965: Fix new FS handling of builtin uniforms with packed scalars in structs.

2010-09-30 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: c6960e4471abe287448b9d0e7e6519d588cdf43c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c6960e4471abe287448b9d0e7e6519d588cdf43c

Author: Eric Anholt e...@anholt.net
Date:   Thu Sep 30 13:26:38 2010 -0700

i965: Fix new FS handling of builtin uniforms with packed scalars in structs.

We were pointing each element at the .x channel of the
ParameterValues.

Fixes glsl1-linear fog.

---

 src/mesa/drivers/dri/i965/brw_fs.cpp |8 
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp 
b/src/mesa/drivers/dri/i965/brw_fs.cpp
index efa0f21..0a77b5a 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -696,12 +696,12 @@ fs_visitor::setup_builtin_uniform_values(ir_variable *ir)
  */
 int last_swiz = -1;
 for (unsigned int i = 0; i  4; i++) {
-   int this_swiz = GET_SWZ(element-swizzle, i);
-   if (this_swiz == last_swiz)
+   int swiz = GET_SWZ(element-swizzle, i);
+   if (swiz == last_swiz)
   break;
-   last_swiz = this_swiz;
+   last_swiz = swiz;
 
-   c-prog_data.param[c-prog_data.nr_params++] = vec_values[i];
+   c-prog_data.param[c-prog_data.nr_params++] = vec_values[swiz];
 }
   }
}

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


Mesa (master): evergreeng: avoid overlapping border color btw VS PS

2010-09-30 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 113f1cdfcedf858e4b426ce2dba9e99d2a1e0286
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=113f1cdfcedf858e4b426ce2dba9e99d2a1e0286

Author: Jerome Glisse jgli...@redhat.com
Date:   Thu Sep 30 17:06:29 2010 -0400

evergreeng: avoid overlapping border color btw VS  PS

Signed-off-by: Jerome Glisse jgli...@redhat.com

---

 src/gallium/winsys/r600/drm/evergreen_hw_context.c |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/winsys/r600/drm/evergreen_hw_context.c 
b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
index 7ba778e..7d6bd50 100644
--- a/src/gallium/winsys/r600/drm/evergreen_hw_context.c
+++ b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
@@ -467,7 +467,7 @@ static int evergreen_state_sampler_border_init(struct 
r600_context *ctx, u32 off
{PKT3_SET_CONFIG_REG, 0, R_00A410_TD_PS_SAMPLER0_BORDER_ALPHA, 
0, 0},
};
unsigned nreg = sizeof(r600_shader_sampler_border)/sizeof(struct 
r600_reg);
-   unsigned fake_offset = (offset - R_00A400_TD_PS_SAMPLER0_BORDER_INDEX) 
* 0x10 + 0x4 + id * 0x1C;
+   unsigned fake_offset = (offset - R_00A400_TD_PS_SAMPLER0_BORDER_INDEX) 
* 0x100 + 0x4 + id * 0x1C;
struct r600_range *range;
struct r600_block *block;
int r;
@@ -665,7 +665,7 @@ static inline void 
evergreen_context_pipe_state_set_sampler(struct r600_context
 
 static inline void evergreen_context_pipe_state_set_sampler_border(struct 
r600_context *ctx, struct r600_pipe_state *state, unsigned offset, unsigned id)
 {
-   unsigned fake_offset = (offset - R_00A400_TD_PS_SAMPLER0_BORDER_INDEX) 
* 0x10 + 0x4 + id * 0x1C;
+   unsigned fake_offset = (offset - R_00A400_TD_PS_SAMPLER0_BORDER_INDEX) 
* 0x100 + 0x4 + id * 0x1C;
struct r600_range *range;
struct r600_block *block;
 

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


Mesa (master): r600g: don't double count dirty block

2010-09-30 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: dde1391cc95478f4dedccdf920ba0a6607472937
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=dde1391cc95478f4dedccdf920ba0a6607472937

Author: John Doe gli...@barney.(none)
Date:   Thu Sep 30 17:30:25 2010 -0400

r600g: don't double count dirty block

This avoid to overcount the number of dwords we need and
thus avoid maximazation of cs buffer use.

Signed-off-by: Jerome Glisse jgli...@redhat.com

---

 src/gallium/winsys/r600/drm/evergreen_hw_context.c |   32 ---
 src/gallium/winsys/r600/drm/r600_hw_context.c  |   32 ---
 src/gallium/winsys/r600/drm/r600_priv.h|4 +-
 3 files changed, 42 insertions(+), 26 deletions(-)

diff --git a/src/gallium/winsys/r600/drm/evergreen_hw_context.c 
b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
index 7d6bd50..e3390fd 100644
--- a/src/gallium/winsys/r600/drm/evergreen_hw_context.c
+++ b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
@@ -625,9 +625,11 @@ static inline void 
evergreen_context_pipe_state_set_resource(struct r600_context
radeon_ws_bo_reference(ctx-radeon, block-reloc[1].bo, 
state-regs[2].bo);
radeon_ws_bo_reference(ctx-radeon, block-reloc[2].bo, 
state-regs[3].bo);
}
-   block-status |= R600_BLOCK_STATUS_ENABLED;
-   block-status |= R600_BLOCK_STATUS_DIRTY;
-   ctx-pm4_dirty_cdwords += block-pm4_ndwords;
+   if (!(block-status  R600_BLOCK_STATUS_DIRTY)) {
+   block-status |= R600_BLOCK_STATUS_ENABLED;
+   block-status |= R600_BLOCK_STATUS_DIRTY;
+   ctx-pm4_dirty_cdwords += block-pm4_ndwords;
+   }
 }
 
 void evergreen_context_pipe_state_set_ps_resource(struct r600_context *ctx, 
struct r600_pipe_state *state, unsigned rid)
@@ -658,9 +660,11 @@ static inline void 
evergreen_context_pipe_state_set_sampler(struct r600_context
block-reg[0] = state-regs[0].value;
block-reg[1] = state-regs[1].value;
block-reg[2] = state-regs[2].value;
-   block-status |= R600_BLOCK_STATUS_ENABLED;
-   block-status |= R600_BLOCK_STATUS_DIRTY;
-   ctx-pm4_dirty_cdwords += block-pm4_ndwords;
+   if (!(block-status  R600_BLOCK_STATUS_DIRTY)) {
+   block-status |= R600_BLOCK_STATUS_ENABLED;
+   block-status |= R600_BLOCK_STATUS_DIRTY;
+   ctx-pm4_dirty_cdwords += block-pm4_ndwords;
+   }
 }
 
 static inline void evergreen_context_pipe_state_set_sampler_border(struct 
r600_context *ctx, struct r600_pipe_state *state, unsigned offset, unsigned id)
@@ -683,9 +687,11 @@ static inline void 
evergreen_context_pipe_state_set_sampler_border(struct r600_c
block-reg[2] = state-regs[4].value;
block-reg[3] = state-regs[5].value;
block-reg[4] = state-regs[6].value;
-   block-status |= R600_BLOCK_STATUS_ENABLED;
-   block-status |= R600_BLOCK_STATUS_DIRTY;
-   ctx-pm4_dirty_cdwords += block-pm4_ndwords;
+   if (!(block-status  R600_BLOCK_STATUS_DIRTY)) {
+   block-status |= R600_BLOCK_STATUS_ENABLED;
+   block-status |= R600_BLOCK_STATUS_DIRTY;
+   ctx-pm4_dirty_cdwords += block-pm4_ndwords;
+   }
 }
 
 void evergreen_context_pipe_state_set_ps_sampler(struct r600_context *ctx, 
struct r600_pipe_state *state, unsigned id)
@@ -837,9 +843,11 @@ static inline void evergreen_resource_set(struct 
r600_context *ctx, struct r600_
radeon_ws_bo_reference(ctx-radeon, block-reloc[1].bo, 
state-regs[2].bo);
radeon_ws_bo_reference(ctx-radeon, block-reloc[2].bo, 
state-regs[3].bo);
}
-   block-status |= R600_BLOCK_STATUS_ENABLED;
-   block-status |= R600_BLOCK_STATUS_DIRTY;
-   ctx-pm4_dirty_cdwords += block-pm4_ndwords;
+   if (!(block-status  R600_BLOCK_STATUS_DIRTY)) {
+   block-status |= R600_BLOCK_STATUS_ENABLED;
+   block-status |= R600_BLOCK_STATUS_DIRTY;
+   ctx-pm4_dirty_cdwords += block-pm4_ndwords;
+   }
 }
 
 void evergreen_ps_resource_set(struct r600_context *ctx, struct 
r600_pipe_state *state, unsigned rid)
diff --git a/src/gallium/winsys/r600/drm/r600_hw_context.c 
b/src/gallium/winsys/r600/drm/r600_hw_context.c
index f363b69..6cb0b94 100644
--- a/src/gallium/winsys/r600/drm/r600_hw_context.c
+++ b/src/gallium/winsys/r600/drm/r600_hw_context.c
@@ -721,9 +721,11 @@ void r600_context_pipe_state_set(struct r600_context *ctx, 
struct r600_pipe_stat
id = block-pm4_bo_index[id];
radeon_ws_bo_reference(ctx-radeon, 
block-reloc[id].bo, state-regs[i].bo);
}
-   block-status |= R600_BLOCK_STATUS_ENABLED;
-   block-status |= R600_BLOCK_STATUS_DIRTY;
-   ctx-pm4_dirty_cdwords += block-pm4_ndwords;
+   if (!(block-status  R600_BLOCK_STATUS_DIRTY)) {
+   block-status |= R600_BLOCK_STATUS_ENABLED;
+   block-status 

Mesa (master): r600g: keep a mapping around for each bo

2010-09-30 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 40181aef6045af9df9d8baa8910210c0c8f84f46
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=40181aef6045af9df9d8baa8910210c0c8f84f46

Author: John Doe gli...@barney.(none)
Date:   Thu Sep 30 17:53:36 2010 -0400

r600g: keep a mapping around for each bo

Save a lot of call into the kernel and thus improve performances.

Signed-off-by: Jerome Glisse jgli...@redhat.com

---

 src/gallium/winsys/r600/drm/r600_priv.h |   14 -
 src/gallium/winsys/r600/drm/radeon_bo.c |   91 +++
 2 files changed, 54 insertions(+), 51 deletions(-)

diff --git a/src/gallium/winsys/r600/drm/r600_priv.h 
b/src/gallium/winsys/r600/drm/r600_priv.h
index 125fb4f..f39778d 100644
--- a/src/gallium/winsys/r600/drm/r600_priv.h
+++ b/src/gallium/winsys/r600/drm/r600_priv.h
@@ -33,7 +33,6 @@
 #include pipebuffer/pb_bufmgr.h
 #include r600.h
 
-
 struct radeon {
int fd;
int refcount;
@@ -83,8 +82,6 @@ struct radeon_bo *radeon_bo_pb_get_bo(struct pb_buffer *_buf);
 void r600_context_bo_reloc(struct r600_context *ctx, u32 *pm4, struct 
radeon_bo *bo);
 struct radeon_bo *radeon_bo(struct radeon *radeon, unsigned handle,
unsigned size, unsigned alignment, void *ptr);
-int radeon_bo_map(struct radeon *radeon, struct radeon_bo *bo);
-void radeon_bo_unmap(struct radeon *radeon, struct radeon_bo *bo);
 void radeon_bo_reference(struct radeon *radeon, struct radeon_bo **dst,
 struct radeon_bo *src);
 int radeon_bo_wait(struct radeon *radeon, struct radeon_bo *bo);
@@ -145,4 +142,15 @@ static inline void r600_context_block_emit_dirty(struct 
r600_context *ctx, struc
block-status ^= R600_BLOCK_STATUS_DIRTY;
 }
 
+static inline int radeon_bo_map(struct radeon *radeon, struct radeon_bo *bo)
+{
+   bo-map_count++;
+}
+
+static inline void radeon_bo_unmap(struct radeon *radeon, struct radeon_bo *bo)
+{
+   bo-map_count--;
+   assert(bo-map_count = 0);
+}
+
 #endif
diff --git a/src/gallium/winsys/r600/drm/radeon_bo.c 
b/src/gallium/winsys/r600/drm/radeon_bo.c
index d16e38d..bb93ce6 100644
--- a/src/gallium/winsys/r600/drm/radeon_bo.c
+++ b/src/gallium/winsys/r600/drm/radeon_bo.c
@@ -33,6 +33,43 @@
 #include xf86drm.h
 #include radeon_drm.h
 
+static int radeon_bo_fixed_map(struct radeon *radeon, struct radeon_bo *bo)
+{
+   struct drm_radeon_gem_mmap args;
+   void *ptr;
+   int r;
+
+   /* Zero out args to make valgrind happy */
+   memset(args, 0, sizeof(args));
+   args.handle = bo-handle;
+   args.offset = 0;
+   args.size = (uint64_t)bo-size;
+   r = drmCommandWriteRead(radeon-fd, DRM_RADEON_GEM_MMAP,
+   args, sizeof(args));
+   if (r) {
+   fprintf(stderr, error mapping %p 0x%08X (error = %d)\n,
+   bo, bo-handle, r);
+   return r;
+   }
+   ptr = mmap(0, args.size, PROT_READ|PROT_WRITE, MAP_SHARED, radeon-fd, 
args.addr_ptr);
+   if (ptr == MAP_FAILED) {
+   fprintf(stderr, %s failed to map bo\n, __func__);
+   return -errno;
+   }
+   bo-data = ptr;
+
+success:
+   bo-map_count++;
+
+   return 0;
+}
+
+static void radeon_bo_fixed_unmap(struct radeon *radeon, struct radeon_bo *bo)
+{
+   munmap(bo-data, bo-size);
+   bo-data = NULL;
+}
+
 struct radeon_bo *radeon_bo(struct radeon *radeon, unsigned handle,
unsigned size, unsigned alignment, void *ptr)
 {
@@ -79,65 +116,23 @@ struct radeon_bo *radeon_bo(struct radeon *radeon, 
unsigned handle,
return NULL;
}
}
+   if (radeon_bo_fixed_map(radeon, bo)) {
+   R600_ERR(failed to map bo\n);
+   radeon_bo_reference(radeon, bo, NULL);
+   return bo;
+   }
if (ptr) {
-   if (radeon_bo_map(radeon, bo)) {
-   fprintf(stderr, %s failed to copy data into bo\n, 
__func__);
-   radeon_bo_reference(radeon, bo, NULL);
-   return bo;
-   }
memcpy(bo-data, ptr, size);
-   radeon_bo_unmap(radeon, bo);
}
return bo;
 }
 
-int radeon_bo_map(struct radeon *radeon, struct radeon_bo *bo)
-{
-   struct drm_radeon_gem_mmap args;
-   void *ptr;
-   int r;
-
-   if (bo-map_count != 0) {
-   goto success;
-   }
-   /* Zero out args to make valgrind happy */
-   memset(args, 0, sizeof(args));
-   args.handle = bo-handle;
-   args.offset = 0;
-   args.size = (uint64_t)bo-size;
-   r = drmCommandWriteRead(radeon-fd, DRM_RADEON_GEM_MMAP,
-   args, sizeof(args));
-   if (r) {
-   fprintf(stderr, error mapping %p 0x%08X (error = %d)\n,
-   bo, bo-handle, r);
-   return r;
-  

Mesa (master): draw: check for null sampler pointers

2010-09-30 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 66992463ac294b1a106090250ad2af305f9d8a10
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=66992463ac294b1a106090250ad2af305f9d8a10

Author: Brian Paul bri...@vmware.com
Date:   Thu Sep 30 16:41:31 2010 -0600

draw: check for null sampler pointers

http://bugs.freedesktop.org/show_bug.cgi?id=30516

---

 src/gallium/auxiliary/draw/draw_llvm.c |   10 ++
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index 4749bb5..7fb86d7 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -1099,10 +1099,12 @@ draw_llvm_set_sampler_state(struct draw_context *draw)
for (i = 0; i  draw-num_samplers; i++) {
   struct draw_jit_texture *jit_tex = draw-llvm-jit_context.textures[i];
 
-  jit_tex-min_lod = draw-samplers[i]-min_lod;
-  jit_tex-max_lod = draw-samplers[i]-max_lod;
-  jit_tex-lod_bias = draw-samplers[i]-lod_bias;
-  COPY_4V(jit_tex-border_color, draw-samplers[i]-border_color);
+  if (draw-samplers[i]) {
+ jit_tex-min_lod = draw-samplers[i]-min_lod;
+ jit_tex-max_lod = draw-samplers[i]-max_lod;
+ jit_tex-lod_bias = draw-samplers[i]-lod_bias;
+ COPY_4V(jit_tex-border_color, draw-samplers[i]-border_color);
+  }
}
 }
 

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


Mesa (master): gallivm: added some comments

2010-09-30 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 542d6cb1b8a87615b4c4498ce1fcbf39d743f963
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=542d6cb1b8a87615b4c4498ce1fcbf39d743f963

Author: Brian Paul bri...@vmware.com
Date:   Thu Sep 30 11:01:09 2010 -0600

gallivm: added some comments

---

 src/gallium/auxiliary/gallivm/lp_bld_sample.c |5 +
 src/gallium/auxiliary/gallivm/lp_bld_sample.h |   19 +++
 2 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample.c 
b/src/gallium/auxiliary/gallivm/lp_bld_sample.c
index 6e53bca..aee94c1 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_sample.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_sample.c
@@ -331,6 +331,11 @@ lp_build_linear_mip_levels(struct lp_build_sample_context 
*bld,
 }
 
 
+/**
+ * Return pointer to a single mipmap level.
+ * \param data_array  array of pointers to mipmap levels
+ * \param level  integer mipmap level
+ */
 LLVMValueRef
 lp_build_get_mipmap_level(struct lp_build_sample_context *bld,
   LLVMValueRef data_array, LLVMValueRef level)
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample.h 
b/src/gallium/auxiliary/gallivm/lp_bld_sample.h
index 9fc9a38..4d2eeaa 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_sample.h
+++ b/src/gallium/auxiliary/gallivm/lp_bld_sample.h
@@ -99,61 +99,64 @@ struct lp_sampler_static_state
 struct lp_sampler_dynamic_state
 {
 
-   /** Obtain the base texture width. */
+   /** Obtain the base texture width (returns int32) */
LLVMValueRef
(*width)( const struct lp_sampler_dynamic_state *state,
  LLVMBuilderRef builder,
  unsigned unit);
 
-   /** Obtain the base texture height. */
+   /** Obtain the base texture height (returns int32) */
LLVMValueRef
(*height)( const struct lp_sampler_dynamic_state *state,
   LLVMBuilderRef builder,
   unsigned unit);
 
-   /** Obtain the base texture depth. */
+   /** Obtain the base texture depth (returns int32) */
LLVMValueRef
(*depth)( const struct lp_sampler_dynamic_state *state,
  LLVMBuilderRef builder,
  unsigned unit);
 
-   /** Obtain the number of mipmap levels (minus one). */
+   /** Obtain the number of mipmap levels minus one (returns int32) */
LLVMValueRef
(*last_level)( const struct lp_sampler_dynamic_state *state,
   LLVMBuilderRef builder,
   unsigned unit);
 
+   /** Obtain stride in bytes between image rows/blocks (returns int32) */
LLVMValueRef
(*row_stride)( const struct lp_sampler_dynamic_state *state,
   LLVMBuilderRef builder,
   unsigned unit);
 
+   /** Obtain stride in bytes between image slices (returns int32) */
LLVMValueRef
(*img_stride)( const struct lp_sampler_dynamic_state *state,
   LLVMBuilderRef builder,
   unsigned unit);
 
+   /** Obtain pointer to array of pointers to mimpap levels */
LLVMValueRef
(*data_ptr)( const struct lp_sampler_dynamic_state *state,
 LLVMBuilderRef builder,
 unsigned unit);
 
-   /** Obtain texture min lod */
+   /** Obtain texture min lod (returns float) */
LLVMValueRef
(*min_lod)(const struct lp_sampler_dynamic_state *state,
   LLVMBuilderRef builder, unsigned unit);
 
-   /** Obtain texture max lod */
+   /** Obtain texture max lod (returns float) */
LLVMValueRef
(*max_lod)(const struct lp_sampler_dynamic_state *state,
   LLVMBuilderRef builder, unsigned unit);
 
-   /** Obtain texture lod bias */
+   /** Obtain texture lod bias (returns float) */
LLVMValueRef
(*lod_bias)(const struct lp_sampler_dynamic_state *state,
LLVMBuilderRef builder, unsigned unit);
 
-   /** Obtain texture border color */
+   /** Obtain texture border color (returns ptr to float[4]) */
LLVMValueRef
(*border_color)(const struct lp_sampler_dynamic_state *state,
LLVMBuilderRef builder, unsigned unit);

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


Mesa (master): r600g: fix evergreen depth flushing.

2010-09-30 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 084c29baedf2702200b310d6e63a5d0f95aaac37
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=084c29baedf2702200b310d6e63a5d0f95aaac37

Author: Dave Airlie airl...@redhat.com
Date:   Fri Oct  1 10:13:04 2010 +1000

r600g: fix evergreen depth flushing.

although evergreen can apparantly sample direct from 24-bit,
just make it work with the current method for now.

---

 src/gallium/drivers/r600/evergreen_state.c |   52 +++
 src/gallium/drivers/r600/evergreend.h  |8 
 src/gallium/drivers/r600/r600_pipe.c   |   45 +++-
 src/gallium/drivers/r600/r600_pipe.h   |3 +-
 src/gallium/drivers/r600/r600_state.c  |   38 
 5 files changed, 98 insertions(+), 48 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 64fadb1..5775b04 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -440,14 +440,11 @@ static struct pipe_sampler_view 
*evergreen_create_sampler_view(struct pipe_conte
bo[1] = rbuffer-bo;
/* FIXME depth texture decompression */
if (tmp-depth) {
-#if 0
-   r = evergreen_texture_from_depth(ctx, tmp, view-first_level);
-   if (r) {
-   return;
-   }
-   bo[0] = radeon_ws_bo_incref(rscreen-rw, tmp-uncompressed);
-   bo[1] = radeon_ws_bo_incref(rscreen-rw, tmp-uncompressed);
-#endif
+   r600_texture_depth_flush(ctx, texture);
+   tmp = (struct r600_resource_texture*)texture;
+   rbuffer = tmp-flushed_depth_texture-resource;
+   bo[0] = rbuffer-bo;
+   bo[1] = rbuffer-bo;
}
pitch = align(tmp-pitch[0] / tmp-bpt, 8);
 
@@ -852,6 +849,7 @@ static void evergreen_set_framebuffer_state(struct 
pipe_context *ctx,
}
pipe_surface_reference(rctx-framebuffer.zsbuf, state-zsbuf);
rctx-framebuffer = *state;
+   rctx-pframebuffer = rctx-framebuffer;
 
/* build states */
for (int i = 0; i  state-nr_cbufs; i++) {
@@ -1645,3 +1643,41 @@ void evergreen_pipe_shader_vs(struct pipe_context *ctx, 
struct r600_pipe_shader
R_0288A4_SQ_PGM_START_FS,
0x, 0x, shader-bo);
 }
+
+void *evergreen_create_db_flush_dsa(struct r600_pipe_context *rctx)
+{
+   struct pipe_depth_stencil_alpha_state dsa;
+   struct r600_pipe_state *rstate;
+   boolean quirk = false;
+
+   if (rctx-family == CHIP_RV610 || rctx-family == CHIP_RV630 ||
+   rctx-family == CHIP_RV620 || rctx-family == CHIP_RV635)
+   quirk = true;
+
+   memset(dsa, 0, sizeof(dsa));
+
+   if (quirk) {
+   dsa.depth.enabled = 1;
+   dsa.depth.func = PIPE_FUNC_LEQUAL;
+   dsa.stencil[0].enabled = 1;
+   dsa.stencil[0].func = PIPE_FUNC_ALWAYS;
+   dsa.stencil[0].zpass_op = PIPE_STENCIL_OP_KEEP;
+   dsa.stencil[0].zfail_op = PIPE_STENCIL_OP_INCR;
+   dsa.stencil[0].writemask = 0xff;
+   }
+
+   rstate = rctx-context.create_depth_stencil_alpha_state(rctx-context, 
dsa);
+   r600_pipe_state_add_reg(rstate,
+   R_02880C_DB_SHADER_CONTROL,
+   0x0,
+   S_02880C_DUAL_EXPORT_ENABLE(1), NULL);
+   r600_pipe_state_add_reg(rstate,
+   R_028000_DB_RENDER_CONTROL,
+   S_028000_DEPTH_COPY_ENABLE(1) |
+   S_028000_STENCIL_COPY_ENABLE(1) |
+   S_028000_COPY_CENTROID(1),
+   S_028000_DEPTH_COPY_ENABLE(1) |
+   S_028000_STENCIL_COPY_ENABLE(1) |
+   S_028000_COPY_CENTROID(1), NULL);
+   return rstate;
+}
diff --git a/src/gallium/drivers/r600/evergreend.h 
b/src/gallium/drivers/r600/evergreend.h
index 486cb29..54b26f6 100644
--- a/src/gallium/drivers/r600/evergreend.h
+++ b/src/gallium/drivers/r600/evergreend.h
@@ -1424,8 +1424,16 @@
 #define R_008C0C_SQ_THREAD_RESOURCE_MGMT 0x8C0C
 #define R_008D8C_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ0x8D8C
 #define R_028000_DB_RENDER_CONTROL   0x00028000
+#define   S_028000_DEPTH_CLEAR_ENABLE(x)   (((x)  0x1)  0)
+#define   S_028000_STENCIL_CLEAR_ENABLE(x) (((x)  0x1)  1)
+#define   S_028000_DEPTH_COPY_ENABLE(x)(((x)  0x1)  2)
+#define   S_028000_STENCIL_COPY_ENABLE(x)  (((x)  0x1)  3)
+#define   S_028000_RESUMMARIZE_ENABLE(x)   (((x)  0x1)  4)
 #define   S_028000_STENCIL_COMPRESS_DISABLE(x) (((x)  0x1)  5)
 #define   S_028000_DEPTH_COMPRESS_DISABLE(x)   (((x)  0x1)  6)
+#define   S_028000_COPY_CENTROID(x) 

Mesa (master): r600g: use Elements macro instead of manual sizeofs

2010-09-30 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 7ae4da8056c5aa6b65dc06fb8a0d0785123938db
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7ae4da8056c5aa6b65dc06fb8a0d0785123938db

Author: Dave Airlie airl...@redhat.com
Date:   Fri Oct  1 09:39:35 2010 +1000

r600g: use Elements macro instead of manual sizeofs

---

 src/gallium/winsys/r600/drm/evergreen_hw_context.c |   11 ++-
 src/gallium/winsys/r600/drm/r600_hw_context.c  |   11 ++-
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/src/gallium/winsys/r600/drm/evergreen_hw_context.c 
b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
index e3390fd..a92c32e 100644
--- a/src/gallium/winsys/r600/drm/evergreen_hw_context.c
+++ b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
@@ -35,6 +35,7 @@
 #include bof.h
 #include pipe/p_compiler.h
 #include util/u_inlines.h
+#include util/u_memory.h
 #include pipebuffer/pb_bufmgr.h
 #include r600_priv.h
 
@@ -432,7 +433,7 @@ static int evergreen_state_resource_init(struct 
r600_context *ctx, u32 offset)
{PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, 
R_030018_RESOURCE0_WORD6, 0, 0},
{PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, 
R_03001C_RESOURCE0_WORD7, 0, 0},
};
-   unsigned nreg = sizeof(r600_shader_resource)/sizeof(struct r600_reg);
+   unsigned nreg = Elements(r600_shader_resource);
 
for (int i = 0; i  nreg; i++) {
r600_shader_resource[i].offset += offset;
@@ -448,7 +449,7 @@ static int r600_state_sampler_init(struct r600_context 
*ctx, u32 offset)
{PKT3_SET_SAMPLER, EVERGREEN_SAMPLER_OFFSET, 
R_03C004_SQ_TEX_SAMPLER_WORD1_0, 0, 0},
{PKT3_SET_SAMPLER, EVERGREEN_SAMPLER_OFFSET, 
R_03C008_SQ_TEX_SAMPLER_WORD2_0, 0, 0},
};
-   unsigned nreg = sizeof(r600_shader_sampler)/sizeof(struct r600_reg);
+   unsigned nreg = Elements(r600_shader_sampler);
 
for (int i = 0; i  nreg; i++) {
r600_shader_sampler[i].offset += offset;
@@ -466,7 +467,7 @@ static int evergreen_state_sampler_border_init(struct 
r600_context *ctx, u32 off
{PKT3_SET_CONFIG_REG, 0, R_00A40C_TD_PS_SAMPLER0_BORDER_BLUE, 
0, 0},
{PKT3_SET_CONFIG_REG, 0, R_00A410_TD_PS_SAMPLER0_BORDER_ALPHA, 
0, 0},
};
-   unsigned nreg = sizeof(r600_shader_sampler_border)/sizeof(struct 
r600_reg);
+   unsigned nreg = Elements(r600_shader_sampler_border);
unsigned fake_offset = (offset - R_00A400_TD_PS_SAMPLER0_BORDER_INDEX) 
* 0x100 + 0x4 + id * 0x1C;
struct r600_range *range;
struct r600_block *block;
@@ -510,11 +511,11 @@ int evergreen_context_init(struct r600_context *ctx, 
struct radeon *radeon)
 
/* add blocks */
r = r600_context_add_block(ctx, evergreen_config_reg_list,
-
sizeof(evergreen_config_reg_list)/sizeof(struct r600_reg));
+  Elements(evergreen_config_reg_list));
if (r)
goto out_err;
r = r600_context_add_block(ctx, evergreen_context_reg_list,
-
sizeof(evergreen_context_reg_list)/sizeof(struct r600_reg));
+  Elements(evergreen_context_reg_list));
if (r)
goto out_err;
 
diff --git a/src/gallium/winsys/r600/drm/r600_hw_context.c 
b/src/gallium/winsys/r600/drm/r600_hw_context.c
index 6cb0b94..53783e8 100644
--- a/src/gallium/winsys/r600/drm/r600_hw_context.c
+++ b/src/gallium/winsys/r600/drm/r600_hw_context.c
@@ -35,6 +35,7 @@
 #include bof.h
 #include pipe/p_compiler.h
 #include util/u_inlines.h
+#include util/u_memory.h
 #include pipebuffer/pb_bufmgr.h
 #include r600_priv.h
 
@@ -495,7 +496,7 @@ static int r600_state_resource_init(struct r600_context 
*ctx, u32 offset)
{PKT3_SET_RESOURCE, R600_RESOURCE_OFFSET, 
R_038014_RESOURCE0_WORD5, 0, 0},
{PKT3_SET_RESOURCE, R600_RESOURCE_OFFSET, 
R_038018_RESOURCE0_WORD6, 0, 0},
};
-   unsigned nreg = sizeof(r600_shader_resource)/sizeof(struct r600_reg);
+   unsigned nreg = Elements(r600_shader_resource);
 
for (int i = 0; i  nreg; i++) {
r600_shader_resource[i].offset += offset;
@@ -511,7 +512,7 @@ static int r600_state_sampler_init(struct r600_context 
*ctx, u32 offset)
{PKT3_SET_SAMPLER, R600_SAMPLER_OFFSET, 
R_03C004_SQ_TEX_SAMPLER_WORD1_0, 0, 0},
{PKT3_SET_SAMPLER, R600_SAMPLER_OFFSET, 
R_03C008_SQ_TEX_SAMPLER_WORD2_0, 0, 0},
};
-   unsigned nreg = sizeof(r600_shader_sampler)/sizeof(struct r600_reg);
+   unsigned nreg = Elements(r600_shader_sampler);
 
for (int i = 0; i  nreg; i++) {
r600_shader_sampler[i].offset += offset;
@@ -528,7 +529,7 @@ static int r600_state_sampler_border_init(struct 
r600_context *ctx, u32 offset)
{PKT3_SET_CONFIG_REG, R600_CONFIG_REG_OFFSET, 
R_00A408_TD_PS_SAMPLER0_BORDER_BLUE, 0, 0},

Mesa (master): r600g: drop depth quirk on evergreen

2010-09-30 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 40ccb235d693ea6184ab61529f2910086e68edda
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=40ccb235d693ea6184ab61529f2910086e68edda

Author: Dave Airlie airl...@redhat.com
Date:   Fri Oct  1 10:19:39 2010 +1000

r600g: drop depth quirk on evergreen

none of the EG cards need the quirk.

---

 src/gallium/drivers/r600/evergreen_state.c |   15 ---
 1 files changed, 0 insertions(+), 15 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 21d3394..7337839 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1650,24 +1650,9 @@ void *evergreen_create_db_flush_dsa(struct 
r600_pipe_context *rctx)
 {
struct pipe_depth_stencil_alpha_state dsa;
struct r600_pipe_state *rstate;
-   boolean quirk = false;
-
-   if (rctx-family == CHIP_RV610 || rctx-family == CHIP_RV630 ||
-   rctx-family == CHIP_RV620 || rctx-family == CHIP_RV635)
-   quirk = true;
 
memset(dsa, 0, sizeof(dsa));
 
-   if (quirk) {
-   dsa.depth.enabled = 1;
-   dsa.depth.func = PIPE_FUNC_LEQUAL;
-   dsa.stencil[0].enabled = 1;
-   dsa.stencil[0].func = PIPE_FUNC_ALWAYS;
-   dsa.stencil[0].zpass_op = PIPE_STENCIL_OP_KEEP;
-   dsa.stencil[0].zfail_op = PIPE_STENCIL_OP_INCR;
-   dsa.stencil[0].writemask = 0xff;
-   }
-
rstate = rctx-context.create_depth_stencil_alpha_state(rctx-context, 
dsa);
r600_pipe_state_add_reg(rstate,
R_02880C_DB_SHADER_CONTROL,

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


Mesa (master): r600g: add winsys support for CTL constants.

2010-09-30 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 05d1d86907b12011fdb80e147ae68b4cd207f789
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=05d1d86907b12011fdb80e147ae68b4cd207f789

Author: Dave Airlie airl...@redhat.com
Date:   Fri Oct  1 09:43:14 2010 +1000

r600g: add winsys support for CTL constants.

These need to be emitted, we also need them to do proper vtx start,
instead of abusing index offset.

---

 src/gallium/drivers/r600/evergreen_state.c |2 ++
 src/gallium/drivers/r600/evergreend.h  |6 ++
 src/gallium/drivers/r600/r600_state.c  |2 ++
 src/gallium/drivers/r600/r600d.h   |3 +++
 src/gallium/winsys/r600/drm/evergreen_hw_context.c |   10 ++
 src/gallium/winsys/r600/drm/r600_hw_context.c  |9 +
 src/gallium/winsys/r600/drm/r600d.h|3 +++
 7 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 5775b04..21d3394 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1450,6 +1450,8 @@ void evergreen_draw(struct pipe_context *ctx, const 
struct pipe_draw_info *info)
r600_pipe_state_add_reg(vgt, R_028238_CB_TARGET_MASK, 
rctx-cb_target_mask  mask, 0x, NULL);
r600_pipe_state_add_reg(vgt, R_028400_VGT_MAX_VTX_INDX, 
draw.max_index, 0x, NULL);
r600_pipe_state_add_reg(vgt, R_028404_VGT_MIN_VTX_INDX, 
draw.min_index, 0x, NULL);
+   r600_pipe_state_add_reg(vgt, R_03CFF0_SQ_VTX_BASE_VTX_LOC, 0, 
0x, NULL);
+   r600_pipe_state_add_reg(vgt, R_03CFF4_SQ_VTX_START_INST_LOC, 0, 
0x, NULL);
 
if (rctx-rasterizer  rctx-framebuffer.zsbuf) {
float offset_units = rctx-rasterizer-offset_units;
diff --git a/src/gallium/drivers/r600/evergreend.h 
b/src/gallium/drivers/r600/evergreend.h
index 54b26f6..ce2b667 100644
--- a/src/gallium/drivers/r600/evergreend.h
+++ b/src/gallium/drivers/r600/evergreend.h
@@ -40,6 +40,9 @@
 #define EVERGREEN_SAMPLER_OFFSET0X0003C000
 #define EVERGREEN_SAMPLER_END   0X0003CFF0
 
+#define EVERGREEN_CTL_CONST_OFFSET  0x0003CFF0
+#define EVERGREEN_CTL_CONST_END 0x0003E200
+
 #define EVENT_TYPE_ZPASS_DONE  0x15
 #define EVENT_TYPE_CACHE_FLUSH_AND_INV_EVENT   0x16
 
@@ -1890,4 +1893,7 @@
 #define R_008970_VGT_NUM_INDICES 0x008970
 #define R_0287F0_VGT_DRAW_INITIATOR  0x0287F0
 
+#define R_03CFF0_SQ_VTX_BASE_VTX_LOC0x03CFF0
+#define R_03CFF4_SQ_VTX_START_INST_LOC  0x03CFF4
+
 #endif
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index 83eedd2..c86bad7 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -126,6 +126,8 @@ static void r600_draw_common(struct r600_drawl *draw)
r600_pipe_state_add_reg(vgt, R_028400_VGT_MAX_VTX_INDX, 
draw-max_index, 0x, NULL);
r600_pipe_state_add_reg(vgt, R_028404_VGT_MIN_VTX_INDX, 
draw-min_index, 0x, NULL);
r600_pipe_state_add_reg(vgt, R_028238_CB_TARGET_MASK, 
rctx-cb_target_mask  mask, 0x, NULL);
+   r600_pipe_state_add_reg(vgt, R_03CFF0_SQ_VTX_BASE_VTX_LOC, 0, 
0x, NULL);
+   r600_pipe_state_add_reg(vgt, R_03CFF4_SQ_VTX_START_INST_LOC, 0, 
0x, NULL);
/* build late state */
if (rctx-rasterizer  rctx-framebuffer.zsbuf) {
float offset_units = rctx-rasterizer-offset_units;
diff --git a/src/gallium/drivers/r600/r600d.h b/src/gallium/drivers/r600/r600d.h
index 169cda5..02e3734 100644
--- a/src/gallium/drivers/r600/r600d.h
+++ b/src/gallium/drivers/r600/r600d.h
@@ -3489,6 +3489,9 @@
 #define R_028940_ALU_CONST_CACHE_PS_00x00028940
 #define R_028980_ALU_CONST_CACHE_VS_00x00028980
 
+#define R_03CFF0_SQ_VTX_BASE_VTX_LOC 0x03CFF0
+#define R_03CFF4_SQ_VTX_START_INST_LOC   0x03CFF4
+
 #define SQ_TEX_INST_LD 0x03
 #define SQ_TEX_INST_GET_GRADIENTS_H 0x7
 #define SQ_TEX_INST_GET_GRADIENTS_V 0x8
diff --git a/src/gallium/winsys/r600/drm/evergreen_hw_context.c 
b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
index a92c32e..225027b 100644
--- a/src/gallium/winsys/r600/drm/evergreen_hw_context.c
+++ b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
@@ -61,6 +61,11 @@ static const struct r600_reg evergreen_config_reg_list[] = {
{PKT3_SET_CONFIG_REG, EVERGREEN_CONFIG_REG_OFFSET, 
R_00913C_SPI_CONFIG_CNTL_1, 0, 0},
 };
 
+static const struct r600_reg evergreen_ctl_const_list[] = {
+   {PKT3_SET_CTL_CONST, EVERGREEN_CTL_CONST_OFFSET, 
R_03CFF0_SQ_VTX_BASE_VTX_LOC, 0, 0},
+   {PKT3_SET_CTL_CONST, EVERGREEN_CTL_CONST_OFFSET, 
R_03CFF4_SQ_VTX_START_INST_LOC, 0, 0},
+};
+
 static const struct r600_reg 

Mesa (master): r600g: add reloc for evergreen color attrib

2010-09-30 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 5eccdc62b998a6b3a82d9fd204db733d4852fc73
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5eccdc62b998a6b3a82d9fd204db733d4852fc73

Author: Dave Airlie airl...@redhat.com
Date:   Fri Oct  1 10:52:09 2010 +1000

r600g: add reloc for evergreen color attrib

we'll need this for color tiling on evergreen.

---

 src/gallium/drivers/r600/evergreen_state.c |2 +-
 src/gallium/winsys/r600/drm/evergreen_hw_context.c |   24 ++--
 2 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 7337839..55eede9 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -786,7 +786,7 @@ static void evergreen_cb(struct r600_pipe_context *rctx, 
struct r600_pipe_state
r600_pipe_state_add_reg(rstate,
R_028C74_CB_COLOR0_ATTRIB + cb * 0x3C,
S_028C74_NON_DISP_TILING_ORDER(1),
-   0x, NULL);
+   0x, bo[0]);
 }
 
 static void evergreen_db(struct r600_pipe_context *rctx, struct 
r600_pipe_state *rstate,
diff --git a/src/gallium/winsys/r600/drm/evergreen_hw_context.c 
b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
index 225027b..3af299c 100644
--- a/src/gallium/winsys/r600/drm/evergreen_hw_context.c
+++ b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
@@ -333,7 +333,7 @@ static const struct r600_reg evergreen_context_reg_list[] = 
{
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028C68_CB_COLOR0_SLICE, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028C6C_CB_COLOR0_VIEW, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028C70_CB_COLOR0_INFO, 1, 0},
-   {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028C74_CB_COLOR0_ATTRIB, 0, 0},
+   {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028C74_CB_COLOR0_ATTRIB, 1, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028C78_CB_COLOR0_DIM, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
GROUP_FORCE_NEW_BLOCK, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028C9C_CB_COLOR1_BASE, 1, 0},
@@ -341,7 +341,7 @@ static const struct r600_reg evergreen_context_reg_list[] = 
{
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CA4_CB_COLOR1_SLICE, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CA8_CB_COLOR1_VIEW, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CAC_CB_COLOR1_INFO, 1, 0},
-   {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CB0_CB_COLOR1_ATTRIB, 0, 0},
+   {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CB0_CB_COLOR1_ATTRIB, 1, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CB8_CB_COLOR1_DIM, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
GROUP_FORCE_NEW_BLOCK, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CD8_CB_COLOR2_BASE, 1, 0},
@@ -349,7 +349,7 @@ static const struct r600_reg evergreen_context_reg_list[] = 
{
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CE0_CB_COLOR2_SLICE, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CE4_CB_COLOR2_VIEW, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CE8_CB_COLOR2_INFO, 1, 0},
-   {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CEC_CB_COLOR2_ATTRIB, 0, 0},
+   {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CEC_CB_COLOR2_ATTRIB, 1, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CF0_CB_COLOR2_DIM, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
GROUP_FORCE_NEW_BLOCK, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028D14_CB_COLOR3_BASE, 1, 0},
@@ -357,7 +357,7 @@ static const struct r600_reg evergreen_context_reg_list[] = 
{
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028D1C_CB_COLOR3_SLICE, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028D20_CB_COLOR3_VIEW, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028D24_CB_COLOR3_INFO, 1, 0},
-   {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028D28_CB_COLOR3_ATTRIB, 0, 0},
+   {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028D28_CB_COLOR3_ATTRIB, 1, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028D2C_CB_COLOR3_DIM, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
GROUP_FORCE_NEW_BLOCK, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028D50_CB_COLOR4_BASE, 1, 0},
@@ -365,7 +365,7 @@ static const struct r600_reg evergreen_context_reg_list[] = 
{
{PKT3_SET_CONTEXT_REG, 

Mesa (master): r600c: add reloc for CB_COLOR0_ATTRIB

2010-09-30 Thread Alex Deucher
Module: Mesa
Branch: master
Commit: a3e9998614da6bd10d9015134bc19f5b8cf6e518
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a3e9998614da6bd10d9015134bc19f5b8cf6e518

Author: Alex Deucher alexdeuc...@gmail.com
Date:   Thu Sep 30 20:54:26 2010 -0400

r600c: add reloc for CB_COLOR0_ATTRIB

We'll need a reloc for tiling eventually,
so add it now.

---

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

diff --git a/src/mesa/drivers/dri/r600/evergreen_chip.c 
b/src/mesa/drivers/dri/r600/evergreen_chip.c
index 1050c77..5287a98 100644
--- a/src/mesa/drivers/dri/r600/evergreen_chip.c
+++ b/src/mesa/drivers/dri/r600/evergreen_chip.c
@@ -1415,9 +1415,17 @@ static void evergreenSendCB(GLcontext *ctx, struct 
radeon_state_atom *atom)
 R600_OUT_BATCH(evergreen-render_target[id].CB_COLOR0_VIEW.u32All);  
 END_BATCH();
 
-BEGIN_BATCH_NO_AUTOSTATE(4);
-EVERGREEN_OUT_BATCH_REGSEQ(EG_CB_COLOR0_ATTRIB, 2);
+BEGIN_BATCH_NO_AUTOSTATE(3 + 2);
+EVERGREEN_OUT_BATCH_REGSEQ(EG_CB_COLOR0_ATTRIB, 1);
 R600_OUT_BATCH(evergreen-render_target[id].CB_COLOR0_ATTRIB.u32All); 
+R600_OUT_BATCH_RELOC(0,
+rrb-bo,
+0,
+0, RADEON_GEM_DOMAIN_VRAM, 0);
+END_BATCH();
+
+BEGIN_BATCH_NO_AUTOSTATE(3);
+EVERGREEN_OUT_BATCH_REGSEQ(EG_CB_COLOR0_DIM, 1);
 R600_OUT_BATCH(evergreen-render_target[id].CB_COLOR0_DIM.u32All); 
 /*
 R600_OUT_BATCH(evergreen-render_target[id].CB_COLOR0_CMASK.u32All);  
@@ -1523,7 +1531,7 @@ void evergreenInitAtoms(context_t *context)
 EVERGREEN_ALLOC_STATE(sx,always,9,   evergreenSendSX);
 EVERGREEN_ALLOC_STATE(tx,evergreen_tx,  (R700_TEXTURE_NUMBERUNITS 
* (21+5) + 6), evergreenSendTexState); /* 21 for resource, 5 for sampler */
 EVERGREEN_ALLOC_STATE(db,always,65,  evergreenSendDB); 
-EVERGREEN_ALLOC_STATE(cb,always,33,  evergreenSendCB); 
+EVERGREEN_ALLOC_STATE(cb,always,37,  evergreenSendCB); 
 EVERGREEN_ALLOC_STATE(vgt,   always,29,  evergreenSendVGT);
 
 evergreen_init_query_stateobj(context-radeon, 6 * 2);

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


Mesa (master): r600g: realign evergreen code with r600 code.

2010-09-30 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 35cfe286d69206d3108c7a8702bd4be6521b5706
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=35cfe286d69206d3108c7a8702bd4be6521b5706

Author: Dave Airlie airl...@redhat.com
Date:   Fri Oct  1 11:13:02 2010 +1000

r600g: realign evergreen code with r600 code.

fixes segfault in depth-tex-modes-glsl and OA startup.

---

 src/gallium/drivers/r600/evergreen_state.c |7 ---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 55eede9..06dc840 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1341,14 +1341,13 @@ void evergreen_draw(struct pipe_context *ctx, const 
struct pipe_draw_info *info)
struct r600_pipe_state vgt;
struct r600_drawl draw;
 
-   assert(info-index_bias == 0);
-
if (rctx-any_user_vbs) {
r600_upload_user_buffers(rctx);
rctx-any_user_vbs = FALSE;
}
 
memset(draw, 0, sizeof(struct r600_drawl));
+   draw.ctx = ctx;
draw.mode = info-mode;
draw.start = info-start;
draw.count = info-count;
@@ -1364,7 +1363,7 @@ void evergreen_draw(struct pipe_context *ctx, const 
struct pipe_draw_info *info)
info-count);
 
draw.index_size = rctx-index_buffer.index_size;
-   draw.index_buffer = rctx-index_buffer.buffer;
+   pipe_resource_reference(draw.index_buffer, 
rctx-index_buffer.buffer);
draw.index_buffer_offset = draw.start * draw.index_size;
draw.start = 0;
r600_upload_index_buffer(rctx, draw);
@@ -1505,6 +1504,8 @@ void evergreen_draw(struct pipe_context *ctx, const 
struct pipe_draw_info *info)
rdraw.indices_bo_offset = draw.index_buffer_offset;
}
evergreen_context_draw(rctx-ctx, rdraw);
+
+   pipe_resource_reference(draw.index_buffer, NULL);
 }
 
 void evergreen_pipe_shader_ps(struct pipe_context *ctx, struct 
r600_pipe_shader *shader)

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


Mesa (master): glsl: Add a lowering pass for texture projection.

2010-09-30 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: aae338104fa6022b8b1d6b22c7ad1115b252b9b6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=aae338104fa6022b8b1d6b22c7ad1115b252b9b6

Author: Eric Anholt e...@anholt.net
Date:   Thu Sep 30 20:07:27 2010 -0700

glsl: Add a lowering pass for texture projection.

---

 src/glsl/Makefile |1 +
 src/glsl/ir_optimization.h|1 +
 src/glsl/lower_texture_projection.cpp |  100 +
 3 files changed, 102 insertions(+), 0 deletions(-)

diff --git a/src/glsl/Makefile b/src/glsl/Makefile
index 47ac426..83869b1 100644
--- a/src/glsl/Makefile
+++ b/src/glsl/Makefile
@@ -76,6 +76,7 @@ CXX_SOURCES = \
loop_controls.cpp \
loop_unroll.cpp \
lower_noise.cpp \
+   lower_texture_projection.cpp \
lower_variable_index_to_cond_assign.cpp \
opt_redundant_jumps.cpp \
s_expression.cpp
diff --git a/src/glsl/ir_optimization.h b/src/glsl/ir_optimization.h
index 6a37e16..ffdc66b 100644
--- a/src/glsl/ir_optimization.h
+++ b/src/glsl/ir_optimization.h
@@ -44,6 +44,7 @@ bool do_div_to_mul_rcp(exec_list *instructions);
 bool do_explog_to_explog2(exec_list *instructions);
 bool do_function_inlining(exec_list *instructions);
 bool do_lower_jumps(exec_list *instructions, bool pull_out_jumps = true, bool 
lower_sub_return = true, bool lower_main_return = false, bool lower_continue = 
false, bool lower_break = false);
+bool do_lower_texture_projection(exec_list *instructions);
 bool do_if_simplification(exec_list *instructions);
 bool do_if_to_cond_assign(exec_list *instructions);
 bool do_mat_op_to_vec(exec_list *instructions);
diff --git a/src/glsl/lower_texture_projection.cpp 
b/src/glsl/lower_texture_projection.cpp
new file mode 100644
index 000..f82ca0a
--- /dev/null
+++ b/src/glsl/lower_texture_projection.cpp
@@ -0,0 +1,100 @@
+/*
+ * Copyright © 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the Software),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file lower_texture_projection.cpp
+ *
+ * IR lower pass to perform the division of texture coordinates by the texture
+ * projector if present.
+ *
+ * Many GPUs have a texture sampling opcode that takes the projector
+ * and does the divide internally, thus the presence of the projector
+ * in the IR.  For GPUs that don't, this saves the driver needing the
+ * logic for handling the divide.
+ *
+ * \author Eric Anholt e...@anholt.net
+ */
+
+#include ir.h
+#include ir_rvalue_visitor.h
+
+class lower_texture_projection_visitor : public ir_hierarchical_visitor {
+public:
+   lower_texture_projection_visitor()
+   {
+  progress = false;
+   }
+
+   ir_visitor_status visit_leave(ir_texture *ir);
+
+   bool progress;
+};
+
+ir_visitor_status
+lower_texture_projection_visitor::visit_leave(ir_texture *ir)
+{
+   if (!ir-projector)
+  return visit_continue;
+
+   void *mem_ctx = talloc_parent(ir);
+
+   ir_variable *var = new(mem_ctx) ir_variable(ir-projector-type,
+  projector, ir_var_auto);
+   base_ir-insert_before(var);
+   ir_dereference *deref = new(mem_ctx) ir_dereference_variable(var);
+   ir_expression *expr = new(mem_ctx) ir_expression(ir_unop_rcp,
+   ir-projector-type,
+   ir-projector,
+   NULL);
+   ir_assignment *assign = new(mem_ctx) ir_assignment(deref, expr, NULL);
+   base_ir-insert_before(assign);
+
+   deref = new(mem_ctx) ir_dereference_variable(var);
+   ir-coordinate = new(mem_ctx) ir_expression(ir_binop_mul,
+  ir-coordinate-type,
+  ir-coordinate,
+  deref);
+
+   if (ir-shadow_comparitor) {
+  deref = new(mem_ctx) ir_dereference_variable(var);
+   

Mesa (master): i965: Use the lowering pass for texture projection.

2010-09-30 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 5f237a1ccb28399fbbceecea694f5d18ebba9938
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5f237a1ccb28399fbbceecea694f5d18ebba9938

Author: Eric Anholt e...@anholt.net
Date:   Thu Sep 30 20:09:53 2010 -0700

i965: Use the lowering pass for texture projection.

We should end up with the same code, but anyone else with this issue
could share the handling (which I got wrong for shadow comparisons in
the driver before).

---

 src/mesa/drivers/dri/i965/brw_fs.cpp |   19 +++
 1 files changed, 3 insertions(+), 16 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp 
b/src/mesa/drivers/dri/i965/brw_fs.cpp
index 0a77b5a..c49b27b 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -138,6 +138,7 @@ brw_link_shader(GLcontext *ctx, struct gl_shader_program 
*prog)
 do_div_to_mul_rcp(shader-ir);
 do_sub_to_add_neg(shader-ir);
 do_explog_to_explog2(shader-ir);
+do_lower_texture_projection(shader-ir);
 
 do {
progress = false;
@@ -1229,22 +1230,8 @@ fs_visitor::visit(ir_texture *ir)
ir-coordinate-accept(this);
fs_reg coordinate = this-result;
 
-   if (ir-projector) {
-  fs_reg inv_proj = fs_reg(this, glsl_type::float_type);
-
-  ir-projector-accept(this);
-  emit(fs_inst(FS_OPCODE_RCP, inv_proj, this-result));
-
-  fs_reg proj_coordinate = fs_reg(this, ir-coordinate-type);
-  for (unsigned int i = 0; i  ir-coordinate-type-vector_elements; i++) 
{
-emit(fs_inst(BRW_OPCODE_MUL, proj_coordinate, coordinate, inv_proj));
-coordinate.reg_offset++;
-proj_coordinate.reg_offset++;
-  }
-  proj_coordinate.reg_offset = 0;
-
-  coordinate = proj_coordinate;
-   }
+   /* Should be lowered by do_lower_texture_projection */
+   assert(!ir-projector);
 
for (mlen = 0; mlen  ir-coordinate-type-vector_elements; mlen++) {
   emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), coordinate));

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


Mesa (master): i965: Split the gen4 and gen5 sampler handling apart.

2010-09-30 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 1d073cb2d920d1c0b8c6d598055b14048fedc96e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1d073cb2d920d1c0b8c6d598055b14048fedc96e

Author: Eric Anholt e...@anholt.net
Date:   Thu Sep 30 19:18:25 2010 -0700

i965: Split the gen4 and gen5 sampler handling apart.

Trying to track the insanity of the different argument layouts for
normal/shadow crossed with normal/lod/bias one generation at a time is
enough.

Fixes: glsl1-texture2D() with bias.
(first test passing in this code that doesn't pass without it!)

---

 src/mesa/drivers/dri/i965/brw_fs.cpp |  126 +++--
 1 files changed, 103 insertions(+), 23 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp 
b/src/mesa/drivers/dri/i965/brw_fs.cpp
index c49b27b..78cdfed 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -469,6 +469,8 @@ public:
void emit_fragcoord_interpolation(ir_variable *ir);
void emit_general_interpolation(ir_variable *ir);
void emit_interpolation_setup();
+   fs_inst *emit_texture_gen4(ir_texture *ir, fs_reg dst, int base_mrf);
+   fs_inst *emit_texture_gen5(ir_texture *ir, fs_reg dst, int base_mrf);
void emit_fb_writes();
void emit_assignment_writes(fs_reg l, fs_reg r,
   const glsl_type *type, bool predicated);
@@ -1220,48 +1222,93 @@ fs_visitor::visit(ir_assignment *ir)
}
 }
 
-void
-fs_visitor::visit(ir_texture *ir)
+fs_inst *
+fs_visitor::emit_texture_gen4(ir_texture *ir, fs_reg dst, int base_mrf)
 {
-   int base_mrf = 2;
-   fs_inst *inst = NULL;
-   unsigned int mlen = 0;
+   /* gen4's SIMD8 sampler always has the slots for u,v,r present. */
+   int mlen = 3;
 
-   ir-coordinate-accept(this);
-   fs_reg coordinate = this-result;
+   if (ir-shadow_comparitor) {
+  if (ir-op == ir_tex) {
+/* There's no plain shadow compare message, so we use shadow
+ * compare with a bias of 0.0.
+ */
+emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen),
+ fs_reg(0.0f)));
+mlen++;
+  } else if (ir-op == ir_txb) {
+ir-lod_info.bias-accept(this);
+emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen),
+ this-result));
+mlen++;
+  } else {
+assert(ir-op == ir_txl);
+ir-lod_info.lod-accept(this);
+emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen),
+ this-result));
+mlen++;
+  }
 
-   /* Should be lowered by do_lower_texture_projection */
-   assert(!ir-projector);
+  ir-shadow_comparitor-accept(this);
+  emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), 
this-result));
+  mlen++;
+   } else {
+  /* Oh joy.  gen4 doesn't have SIMD8 non-shadow-compare sampler
+   * instructions.  We'll need to do SIMD16 here.
+   */
+  abort();
+   }
 
-   for (mlen = 0; mlen  ir-coordinate-type-vector_elements; mlen++) {
-  emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), coordinate));
-  coordinate.reg_offset++;
+   fs_inst *inst = NULL;
+   switch (ir-op) {
+   case ir_tex:
+  inst = emit(fs_inst(FS_OPCODE_TEX, dst, fs_reg(MRF, base_mrf)));
+  break;
+   case ir_txb:
+  inst = emit(fs_inst(FS_OPCODE_TXB, dst, fs_reg(MRF, base_mrf)));
+  break;
+   case ir_txl:
+  inst = emit(fs_inst(FS_OPCODE_TXL, dst, fs_reg(MRF, base_mrf)));
+  break;
+   case ir_txd:
+   case ir_txf:
+  assert(!GLSL 1.30 features unsupported);
+  break;
}
+   inst-mlen = mlen;
 
-   /* Pre-Ironlake, the 8-wide sampler always took u,v,r. */
-   if (intel-gen  5)
-  mlen = 3;
+   return inst;
+}
+
+fs_inst *
+fs_visitor::emit_texture_gen5(ir_texture *ir, fs_reg dst, int base_mrf)
+{
+   /* gen5's SIMD8 sampler has slots for u, v, r, array index, then
+* optional parameters like shadow comparitor or LOD bias.  If
+* optional parameters aren't present, those base slots are
+* optional and don't need to be included in the message.
+*
+* We don't fill in the unnecessary slots regardless, which may
+* look surprising in the disassembly.
+*/
+   int mlen = ir-coordinate-type-vector_elements;
 
if (ir-shadow_comparitor) {
-  /* For shadow comparisons, we have to supply u,v,r. */
-  mlen = 3;
+  mlen = MAX2(mlen, 4);
 
   ir-shadow_comparitor-accept(this);
   emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), 
this-result));
   mlen++;
}
 
-   /* Do we ever want to handle writemasking on texture samples?  Is it
-* performance relevant?
-*/
-   fs_reg dst = fs_reg(this, glsl_type::vec4_type);
-
+   fs_inst *inst = NULL;
switch (ir-op) {
case ir_tex:
   inst = emit(fs_inst(FS_OPCODE_TEX, dst, fs_reg(MRF, base_mrf)));
   break;
case ir_txb:
   ir-lod_info.bias-accept(this);
+  mlen = MAX2(mlen, 4);
   emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + 

Mesa (master): r600g: add assembler support for other vtx fetch fields.

2010-09-30 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: e973221538d5edfad62abedf5b37a4fb774d71fc
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e973221538d5edfad62abedf5b37a4fb774d71fc

Author: Dave Airlie airl...@redhat.com
Date:   Fri Oct  1 11:38:40 2010 +1000

r600g: add assembler support for other vtx fetch fields.

this shouldn't change behaviour, just push the choice of what
to do out to the shader.

---

 src/gallium/drivers/r600/r600_asm.c|6 +-
 src/gallium/drivers/r600/r600_asm.h|5 +
 src/gallium/drivers/r600/r600_shader.c |1 +
 3 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_asm.c 
b/src/gallium/drivers/r600/r600_asm.c
index dc8dc9f..f07af81 100644
--- a/src/gallium/drivers/r600/r600_asm.c
+++ b/src/gallium/drivers/r600/r600_asm.c
@@ -601,7 +601,11 @@ static int r600_bc_vtx_build(struct r600_bc *bc, struct 
r600_bc_vtx *vtx, unsign
S_SQ_VTX_WORD1_DST_SEL_Y(vtx-dst_sel_y) |
S_SQ_VTX_WORD1_DST_SEL_Z(vtx-dst_sel_z) |
S_SQ_VTX_WORD1_DST_SEL_W(vtx-dst_sel_w) |
-   S_SQ_VTX_WORD1_USE_CONST_FIELDS(1) |
+   
S_SQ_VTX_WORD1_USE_CONST_FIELDS(vtx-use_const_fields) |
+   S_SQ_VTX_WORD1_DATA_FORMAT(vtx-data_format) |
+   
S_SQ_VTX_WORD1_NUM_FORMAT_ALL(vtx-num_format_all) |
+   
S_SQ_VTX_WORD1_FORMAT_COMP_ALL(vtx-format_comp_all) |
+   S_SQ_VTX_WORD1_SRF_MODE_ALL(vtx-srf_mode_all) |
S_SQ_VTX_WORD1_GPR_DST_GPR(vtx-dst_gpr);
bc-bytecode[id++] = S_SQ_VTX_WORD2_MEGA_FETCH(1);
bc-bytecode[id++] = 0;
diff --git a/src/gallium/drivers/r600/r600_asm.h 
b/src/gallium/drivers/r600/r600_asm.h
index cf67ca2..cbf46a8 100644
--- a/src/gallium/drivers/r600/r600_asm.h
+++ b/src/gallium/drivers/r600/r600_asm.h
@@ -101,6 +101,11 @@ struct r600_bc_vtx {
unsigneddst_sel_y;
unsigneddst_sel_z;
unsigneddst_sel_w;
+   unsigneduse_const_fields;
+   unsigneddata_format;
+   unsignednum_format_all;
+   unsignedformat_comp_all;
+   unsignedsrf_mode_all;
 };
 
 struct r600_bc_output {
diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index a2091db..d35a990 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -439,6 +439,7 @@ static int tgsi_declaration(struct r600_shader_ctx *ctx)
vtx.dst_sel_y = 1;
vtx.dst_sel_z = 2;
vtx.dst_sel_w = 3;
+   vtx.use_const_fields = 1;
r = r600_bc_add_vtx(ctx-bc, vtx);
if (r)
return r;

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


Mesa (master): r600g: fixup vertex format picking.

2010-09-30 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: d662195f00fe60349cdda368eeb065910764842f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d662195f00fe60349cdda368eeb065910764842f

Author: Dave Airlie airl...@redhat.com
Date:   Fri Oct  1 13:09:09 2010 +1000

r600g: fixup vertex format picking.

there are some vertex formats defined in r600c not in the docs.

---

 src/gallium/drivers/r600/eg_state_inlines.h   |  188 ++---
 src/gallium/drivers/r600/evergreen_state.c|   36 ++---
 src/gallium/drivers/r600/evergreend.h |   73 +-
 src/gallium/drivers/r600/r600_state.c |   23 ++--
 src/gallium/drivers/r600/r600_state_inlines.h |  158 ++---
 src/gallium/drivers/r600/r600d.h  |   73 +-
 6 files changed, 407 insertions(+), 144 deletions(-)

diff --git a/src/gallium/drivers/r600/eg_state_inlines.h 
b/src/gallium/drivers/r600/eg_state_inlines.h
index 497865a..c93b9d9 100644
--- a/src/gallium/drivers/r600/eg_state_inlines.h
+++ b/src/gallium/drivers/r600/eg_state_inlines.h
@@ -453,25 +453,6 @@ static INLINE uint32_t r600_translate_colorformat(enum 
pipe_format format)
}
 }
 
-static INLINE void r600_translate_vertex_num_format(enum pipe_format format, 
uint32_t *num_format_p,
-   uint32_t *format_comp_p)
-{
-   uint32_t num_format = 0, format_comp = 0;
-   switch (format) {
-   case PIPE_FORMAT_R16G16B16A16_SSCALED:
-   case PIPE_FORMAT_R16G16B16_SSCALED:
-   case PIPE_FORMAT_R16G16_SSCALED:
-   case PIPE_FORMAT_R32G32_SSCALED:
-   num_format = V_030008_SQ_NUM_FORMAT_SCALED;
-   format_comp = 1;
-   break;
-   default:
-   break;
-   }
-   *num_format_p = num_format;
-   *format_comp_p = format_comp;
-}
-
 static INLINE boolean r600_is_sampler_format_supported(enum pipe_format format)
 {
return r600_translate_texformat(format, NULL, NULL, NULL) != ~0;
@@ -493,4 +474,173 @@ static INLINE boolean 
r600_is_vertex_format_supported(enum pipe_format format)
return r600_translate_colorformat(format) != ~0;
 }
 
+static INLINE uint32_t r600_translate_vertex_data_type(enum pipe_format format)
+{
+   uint32_t result = 0;
+   const struct util_format_description *desc;
+   unsigned i;
+
+   desc = util_format_description(format);
+   if (desc-layout != UTIL_FORMAT_LAYOUT_PLAIN) {
+   goto out_unknown;
+   }
+
+   /* Find the first non-VOID channel. */
+   for (i = 0; i  4; i++) {
+   if (desc-channel[i].type != UTIL_FORMAT_TYPE_VOID) {
+   break;
+   }
+   }
+
+   switch (desc-channel[i].type) {
+   /* Half-floats, floats, doubles */
+case UTIL_FORMAT_TYPE_FLOAT:
+   switch (desc-channel[i].size) {
+case 16:
+   switch (desc-nr_channels) {
+   case 1:
+   result = V_030008_FMT_16_FLOAT;
+   break;
+   case 2:
+   result = V_030008_FMT_16_16_FLOAT;
+   break;
+   case 3:
+   result = V_030008_FMT_16_16_16_FLOAT;
+   break;
+   case 4:
+   result = V_030008_FMT_16_16_16_16_FLOAT;
+   break;
+   }
+   break;
+case 32:
+   switch (desc-nr_channels) {
+   case 1:
+   result = V_030008_FMT_32_FLOAT;
+   break;
+   case 2:
+   result = V_030008_FMT_32_32_FLOAT;
+   break;
+   case 3:
+   result = V_030008_FMT_32_32_32_FLOAT;
+   break;
+   case 4:
+   result = V_030008_FMT_32_32_32_32_FLOAT;
+   break;
+   }
+   break;
+default:
+   goto out_unknown;
+   }
+   break;
+   /* Unsigned ints */
+case UTIL_FORMAT_TYPE_UNSIGNED:
+   /* Signed ints */
+case UTIL_FORMAT_TYPE_SIGNED:
+   switch (desc-channel[i].size) {
+case 8:
+   switch (desc-nr_channels) {
+   case 1:
+   result = V_030008_FMT_8;
+   break;
+   case 2:
+   result = V_030008_FMT_8_8;
+   break;
+   case 3:
+   //  result = 

Mesa (master): r600g: sync vertex/texture cache on resources on evergreen

2010-09-30 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: ac225c76a6a7c98d7e9afa50880db2480be6951f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ac225c76a6a7c98d7e9afa50880db2480be6951f

Author: Dave Airlie airl...@redhat.com
Date:   Fri Oct  1 13:48:10 2010 +1000

r600g: sync vertex/texture cache on resources on evergreen

this gets rid of lots of the instability on evergreen,
which isn't surprising since it really broken not to flush caches.

---

 src/gallium/winsys/r600/drm/evergreen_hw_context.c |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/winsys/r600/drm/evergreen_hw_context.c 
b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
index 3af299c..1b2c265 100644
--- a/src/gallium/winsys/r600/drm/evergreen_hw_context.c
+++ b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
@@ -431,8 +431,8 @@ static int evergreen_state_resource_init(struct 
r600_context *ctx, u32 offset)
struct r600_reg r600_shader_resource[] = {
{PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, 
R_03_RESOURCE0_WORD0, 0, 0},
{PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, 
R_030004_RESOURCE0_WORD1, 0, 0},
-   {PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, 
R_030008_RESOURCE0_WORD2, 1, 0},
-   {PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, 
R_03000C_RESOURCE0_WORD3, 1, 0},
+   {PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, 
R_030008_RESOURCE0_WORD2, 1, S_0085F0_TC_ACTION_ENA(1) | 
S_0085F0_VC_ACTION_ENA(1)},
+   {PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, 
R_03000C_RESOURCE0_WORD3, 1, S_0085F0_TC_ACTION_ENA(1) | 
S_0085F0_VC_ACTION_ENA(1)},
{PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, 
R_030010_RESOURCE0_WORD4, 0, 0},
{PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, 
R_030014_RESOURCE0_WORD5, 0, 0},
{PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, 
R_030018_RESOURCE0_WORD6, 0, 0},

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


Mesa (master): r600g: fix evergreen draw-buffers

2010-09-30 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: b67aa5311fa5d4130cf150c9004946fb30a15fae
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b67aa5311fa5d4130cf150c9004946fb30a15fae

Author: Dave Airlie airl...@redhat.com
Date:   Fri Oct  1 14:24:14 2010 +1000

r600g: fix evergreen draw-buffers

just a typo in the register headers.

---

 src/gallium/drivers/r600/evergreend.h  |2 +-
 src/gallium/winsys/r600/drm/evergreen_hw_context.c |2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreend.h 
b/src/gallium/drivers/r600/evergreend.h
index 3cb9e63..e265348 100644
--- a/src/gallium/drivers/r600/evergreend.h
+++ b/src/gallium/drivers/r600/evergreend.h
@@ -1740,7 +1740,7 @@
 #define R_028CA8_CB_COLOR1_VIEW  0x00028CA8
 #define R_028CAC_CB_COLOR1_INFO  0x00028CAC
 #define R_028CB0_CB_COLOR1_ATTRIB0x00028CB0
-#define R_028CB8_CB_COLOR1_DIM   0x00028CB8
+#define R_028CB4_CB_COLOR1_DIM   0x00028CB4
 #define R_028CD8_CB_COLOR2_BASE  0x00028CD8
 #define R_028CDC_CB_COLOR2_PITCH 0x00028CDC
 #define R_028CE0_CB_COLOR2_SLICE 0x00028CE0
diff --git a/src/gallium/winsys/r600/drm/evergreen_hw_context.c 
b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
index 88db69c..557751e 100644
--- a/src/gallium/winsys/r600/drm/evergreen_hw_context.c
+++ b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
@@ -342,7 +342,7 @@ static const struct r600_reg evergreen_context_reg_list[] = 
{
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CA8_CB_COLOR1_VIEW, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CAC_CB_COLOR1_INFO, 1, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CB0_CB_COLOR1_ATTRIB, 1, 0},
-   {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CB8_CB_COLOR1_DIM, 0, 0},
+   {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CB4_CB_COLOR1_DIM, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
GROUP_FORCE_NEW_BLOCK, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CD8_CB_COLOR2_BASE, 1, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028CDC_CB_COLOR2_PITCH, 0, 0},

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


Mesa (master): r600g: add cb flushing for extra buffers + depth buffer on r600/evergreen

2010-09-30 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 14c95bb4eec4417887ae882c39fead47624f0fda
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=14c95bb4eec4417887ae882c39fead47624f0fda

Author: Dave Airlie airl...@redhat.com
Date:   Fri Oct  1 14:00:27 2010 +1000

r600g: add cb flushing for extra buffers + depth buffer on r600/evergreen

---

 src/gallium/drivers/r600/evergreend.h  |   15 +--
 src/gallium/winsys/r600/drm/evergreen_hw_context.c |   25 +--
 src/gallium/winsys/r600/drm/r600_hw_context.c  |   15 
 3 files changed, 49 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreend.h 
b/src/gallium/drivers/r600/evergreend.h
index f9328c6..3cb9e63 100644
--- a/src/gallium/drivers/r600/evergreend.h
+++ b/src/gallium/drivers/r600/evergreend.h
@@ -1865,9 +1865,18 @@
 #define   S_0085F0_DB_DEST_BASE_ENA(x) (((x)  0x1)  14)
 #define   G_0085F0_DB_DEST_BASE_ENA(x) (((x)  14)  0x1)
 #define   C_0085F0_DB_DEST_BASE_ENA0xBFFF
-#define   S_0085F0_CR_DEST_BASE_ENA(x) (((x)  0x1)  15)
-#define   G_0085F0_CR_DEST_BASE_ENA(x) (((x)  15)  0x1)
-#define   C_0085F0_CR_DEST_BASE_ENA0x7FFF
+#define   S_0085F0_CB8_DEST_BASE_ENA(x)(((x)  0x1)  15)
+#define   G_0085F0_CB8_DEST_BASE_ENA(x)(((x)  15)  0x1)
+
+#define   S_0085F0_CB9_DEST_BASE_ENA(x)(((x)  0x1)  16)
+#define   G_0085F0_CB9_DEST_BASE_ENA(x)(((x)  16)  0x1)
+
+#define   S_0085F0_CB10_DEST_BASE_ENA(x)   (((x)  0x1)  17)
+#define   G_0085F0_CB10_DEST_BASE_ENA(x)   (((x)  17)  0x1)
+
+#define   S_0085F0_CB11_DEST_BASE_ENA(x)   (((x)  0x1)  18)
+#define   G_0085F0_CB11_DEST_BASE_ENA(x)   (((x)  18)  0x1)
+
 #define   S_0085F0_TC_ACTION_ENA(x)(((x)  0x1)  23)
 #define   G_0085F0_TC_ACTION_ENA(x)(((x)  23)  0x1)
 #define   C_0085F0_TC_ACTION_ENA   0xFF7F
diff --git a/src/gallium/winsys/r600/drm/evergreen_hw_context.c 
b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
index 1b2c265..88db69c 100644
--- a/src/gallium/winsys/r600/drm/evergreen_hw_context.c
+++ b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
@@ -727,6 +727,7 @@ void evergreen_context_pipe_state_set_vs_sampler(struct 
r600_context *ctx, struc
 void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw 
*draw)
 {
struct radeon_bo *cb[12];
+   struct radeon_bo *db;
unsigned ndwords = 9;
 
if (draw-indices) {
@@ -738,6 +739,7 @@ void evergreen_context_draw(struct r600_context *ctx, const 
struct r600_draw *dr
}
 
/* find number of color buffer */
+   db = r600_context_reg_bo(ctx, R_028048_DB_Z_READ_BASE);
cb[0] = r600_context_reg_bo(ctx, R_028C60_CB_COLOR0_BASE);
cb[1] = r600_context_reg_bo(ctx, R_028C9C_CB_COLOR1_BASE);
cb[2] = r600_context_reg_bo(ctx, R_028CD8_CB_COLOR2_BASE);
@@ -755,6 +757,8 @@ void evergreen_context_draw(struct r600_context *ctx, const 
struct r600_draw *dr
ndwords += 7;
}
}
+   if (db)
+   ndwords += 7;
 
/* queries need some special values */
if (ctx-num_query_running) {
@@ -808,11 +812,15 @@ void evergreen_context_draw(struct r600_context *ctx, 
const struct r600_draw *dr
ctx-pm4[ctx-pm4_cdwords++] = EVENT_TYPE_CACHE_FLUSH_AND_INV_EVENT;
 
/* flush color buffer */
-   for (int i = 0; i  8; i++) {
+   for (int i = 0; i  12; i++) {
if (cb[i]) {
ctx-pm4[ctx-pm4_cdwords++] = PKT3(PKT3_SURFACE_SYNC, 
3);
-   ctx-pm4[ctx-pm4_cdwords++] = 
(S_0085F0_CB0_DEST_BASE_ENA(1)  i) |
-   
S_0085F0_CB_ACTION_ENA(1);
+   if (i  7)
+   ctx-pm4[ctx-pm4_cdwords++] = 
(S_0085F0_CB8_DEST_BASE_ENA(1)  (i - 8)) |
+   S_0085F0_CB_ACTION_ENA(1);
+   else
+   ctx-pm4[ctx-pm4_cdwords++] = 
(S_0085F0_CB0_DEST_BASE_ENA(1)  i) |
+   S_0085F0_CB_ACTION_ENA(1);
ctx-pm4[ctx-pm4_cdwords++] = (cb[i]-size + 255)  8;
ctx-pm4[ctx-pm4_cdwords++] = 0x;
ctx-pm4[ctx-pm4_cdwords++] = 0x000A;
@@ -821,6 +829,17 @@ void evergreen_context_draw(struct r600_context *ctx, 
const struct r600_draw *dr
r600_context_bo_reloc(ctx, ctx-pm4[ctx-pm4_cdwords - 
1], cb[i]);
}
}
+   if (db) {
+   ctx-pm4[ctx-pm4_cdwords++] = PKT3(PKT3_SURFACE_SYNC, 3);
+   ctx-pm4[ctx-pm4_cdwords++] = S_0085F0_DB_DEST_BASE_ENA(1) |
+   S_0085F0_DB_ACTION_ENA(1);
+ 

Mesa (master): r600g: flush SH cache on constant change on evergreen

2010-09-30 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 539a2978ed7f8d1756591061252d081f0f39fb9c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=539a2978ed7f8d1756591061252d081f0f39fb9c

Author: Dave Airlie airl...@redhat.com
Date:   Fri Oct  1 14:43:02 2010 +1000

r600g: flush SH cache on constant change on evergreen

---

 src/gallium/winsys/r600/drm/evergreen_hw_context.c |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/winsys/r600/drm/evergreen_hw_context.c 
b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
index 557751e..129f571 100644
--- a/src/gallium/winsys/r600/drm/evergreen_hw_context.c
+++ b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
@@ -282,8 +282,8 @@ static const struct r600_reg evergreen_context_reg_list[] = 
{
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028920_SQ_GS_VERT_ITEMSIZE_1, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028924_SQ_GS_VERT_ITEMSIZE_2, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028928_SQ_GS_VERT_ITEMSIZE_3, 0, 0},
-   {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028940_ALU_CONST_CACHE_PS_0, 1, 0},
-   {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028980_ALU_CONST_CACHE_VS_0, 1, 0},
+   {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028940_ALU_CONST_CACHE_PS_0, 1, S_0085F0_SH_ACTION_ENA(1)},
+   {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028980_ALU_CONST_CACHE_VS_0, 1, S_0085F0_SH_ACTION_ENA(1)},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028A00_PA_SU_POINT_SIZE, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028A04_PA_SU_POINT_MINMAX, 0, 0},
{PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, 
R_028A08_PA_SU_LINE_CNTL, 0, 0},

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


Mesa (master): r600c: pull over 6xx/7xx vertex fixes for evergreen

2010-09-30 Thread Alex Deucher
Module: Mesa
Branch: master
Commit: 0c39a53aa6b9ef47152e3d44f94fa4486a11831b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0c39a53aa6b9ef47152e3d44f94fa4486a11831b

Author: Alex Deucher alexdeuc...@gmail.com
Date:   Thu Sep 30 23:13:50 2010 -0400

r600c: pull over 6xx/7xx vertex fixes for evergreen

---

 src/mesa/drivers/dri/r600/evergreen_chip.c |   28 +-
 src/mesa/drivers/dri/r600/evergreen_render.c   |   66 +---
 src/mesa/drivers/dri/r600/evergreen_vertprog.c |6 +-
 3 files changed, 42 insertions(+), 58 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/evergreen_chip.c 
b/src/mesa/drivers/dri/r600/evergreen_chip.c
index 5287a98..1662741 100644
--- a/src/mesa/drivers/dri/r600/evergreen_chip.c
+++ b/src/mesa/drivers/dri/r600/evergreen_chip.c
@@ -275,7 +275,6 @@ static void evergreenSetupVTXConstants(GLcontext  * ctx,
 {
 context_t *context = EVERGREEN_CONTEXT(ctx);
 struct radeon_aos * paos = (struct radeon_aos *)pAos;
-unsigned int nVBsize;
 BATCH_LOCALS(context-radeon);
 
 unsigned int uSQ_VTX_CONSTANT_WORD0_0;
@@ -289,21 +288,11 @@ static void evergreenSetupVTXConstants(GLcontext  * ctx,
 
r700SyncSurf(context, paos-bo, RADEON_GEM_DOMAIN_GTT, 0, 
VC_ACTION_ENA_bit);
 
-if(0 == pStreamDesc-stride)
-{
-nVBsize = paos-count * pStreamDesc-size * 
getTypeSize(pStreamDesc-type);
-}
-else
-{
-nVBsize = (paos-count - 1) * pStreamDesc-stride
-  + pStreamDesc-size * getTypeSize(pStreamDesc-type);
-}
-
 //uSQ_VTX_CONSTANT_WORD0_0
 uSQ_VTX_CONSTANT_WORD0_0 = paos-offset;
 
 //uSQ_VTX_CONSTANT_WORD1_0
-uSQ_VTX_CONSTANT_WORD1_0 = nVBsize;
+uSQ_VTX_CONSTANT_WORD1_0 = paos-bo-size - paos-offset - 1;
 
 //uSQ_VTX_CONSTANT_WORD2_0
 SETfield(uSQ_VTX_CONSTANT_WORD2_0, 
@@ -391,17 +380,6 @@ static void evergreenSendVTX(GLcontext *ctx, struct 
radeon_state_atom *atom)
 if (context-radeon.tcl.aos_count == 0)
return;
 
-BEGIN_BATCH_NO_AUTOSTATE(6);
-R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST, 1));
-R600_OUT_BATCH(mmSQ_VTX_BASE_VTX_LOC - ASIC_CTL_CONST_BASE_INDEX);
-R600_OUT_BATCH(0);
-
-R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST, 1));
-R600_OUT_BATCH(mmSQ_VTX_START_INST_LOC - ASIC_CTL_CONST_BASE_INDEX);
-R600_OUT_BATCH(0);
-END_BATCH();
-COMMIT_BATCH();
-
 for(i=0; iVERT_ATTRIB_MAX; i++) {
if(vp-mesa_program-Base.InputsRead  (1  i))
{
@@ -410,7 +388,7 @@ static void evergreenSendVTX(GLcontext *ctx, struct 
radeon_state_atom *atom)
  (context-stream_desc[j]));
j++;
}
-} 
+}
 }
 static void evergreenSendPA(GLcontext *ctx, struct radeon_state_atom *atom)
 {
@@ -1522,7 +1500,7 @@ void evergreenInitAtoms(context_t *context)
 context-radeon.hw.atomlist.name = atom-list;
 
 EVERGREEN_ALLOC_STATE(init, always, 19, evergreenSendSQConfig);
-EVERGREEN_ALLOC_STATE(vtx,   evergreen_vtx, (6 + (VERT_ATTRIB_MAX * 
12)), evergreenSendVTX);
+EVERGREEN_ALLOC_STATE(vtx,   evergreen_vtx, (VERT_ATTRIB_MAX * 12), 
evergreenSendVTX);
 EVERGREEN_ALLOC_STATE(pa,always,124, evergreenSendPA);
 EVERGREEN_ALLOC_STATE(tp,always,0,   evergreenSendTP);
 EVERGREEN_ALLOC_STATE(sq,always,86,  evergreenSendSQ); /* 
85 */
diff --git a/src/mesa/drivers/dri/r600/evergreen_render.c 
b/src/mesa/drivers/dri/r600/evergreen_render.c
index 85b2f9d..27089bf 100644
--- a/src/mesa/drivers/dri/r600/evergreen_render.c
+++ b/src/mesa/drivers/dri/r600/evergreen_render.c
@@ -148,7 +148,8 @@ static int evergreenNumVerts(int num_verts, int prim) //same
return num_verts - verts_off;
 }
 
-static void evergreenRunRenderPrimitive(GLcontext * ctx, int start, int end, 
int prim) //same
+static void evergreenRunRenderPrimitive(GLcontext * ctx, int start, int end, 
int prim,
+   GLint basevertex) //same
 {
 context_t *context = EVERGREEN_CONTEXT(ctx);
 BATCH_LOCALS(context-radeon);
@@ -186,6 +187,7 @@ static void evergreenRunRenderPrimitive(GLcontext * ctx, 
int start, int end, int
 total_emit =   3  /* VGT_PRIMITIVE_TYPE */
 + 2  /* VGT_INDEX_TYPE */
 + 2  /* NUM_INSTANCES */
++ 4  /* VTX_BASE_VTX_LOC + VTX_START_INST_LOC */
 + 5 + 2; /* DRAW_INDEX */
 
 BEGIN_BATCH_NO_AUTOSTATE(total_emit);
@@ -198,6 +200,11 @@ static void evergreenRunRenderPrimitive(GLcontext * ctx, 
int start, int end, int
 // num instances
 R600_OUT_BATCH(CP_PACKET3(R600_IT_NUM_INSTANCES, 0));
 R600_OUT_BATCH(1);
+/* offset */
+R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST, 2));
+R600_OUT_BATCH(mmSQ_VTX_BASE_VTX_LOC - ASIC_CTL_CONST_BASE_INDEX);
+R600_OUT_BATCH(basevertex); //VTX_BASE_VTX_LOC
+R600_OUT_BATCH(0); //VTX_START_INST_LOC
 // 

Mesa (7.9): r600c: pull over 6xx/7xx vertex fixes for evergreen

2010-09-30 Thread Alex Deucher
Module: Mesa
Branch: 7.9
Commit: d6e2b707baecb7655cd09d64080fc944cc5704a6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d6e2b707baecb7655cd09d64080fc944cc5704a6

Author: Alex Deucher alexdeuc...@gmail.com
Date:   Thu Sep 30 23:13:50 2010 -0400

r600c: pull over 6xx/7xx vertex fixes for evergreen

---

 src/mesa/drivers/dri/r600/evergreen_chip.c |   28 +-
 src/mesa/drivers/dri/r600/evergreen_render.c   |   66 +---
 src/mesa/drivers/dri/r600/evergreen_vertprog.c |6 +-
 3 files changed, 42 insertions(+), 58 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/evergreen_chip.c 
b/src/mesa/drivers/dri/r600/evergreen_chip.c
index 5287a98..1662741 100644
--- a/src/mesa/drivers/dri/r600/evergreen_chip.c
+++ b/src/mesa/drivers/dri/r600/evergreen_chip.c
@@ -275,7 +275,6 @@ static void evergreenSetupVTXConstants(GLcontext  * ctx,
 {
 context_t *context = EVERGREEN_CONTEXT(ctx);
 struct radeon_aos * paos = (struct radeon_aos *)pAos;
-unsigned int nVBsize;
 BATCH_LOCALS(context-radeon);
 
 unsigned int uSQ_VTX_CONSTANT_WORD0_0;
@@ -289,21 +288,11 @@ static void evergreenSetupVTXConstants(GLcontext  * ctx,
 
r700SyncSurf(context, paos-bo, RADEON_GEM_DOMAIN_GTT, 0, 
VC_ACTION_ENA_bit);
 
-if(0 == pStreamDesc-stride)
-{
-nVBsize = paos-count * pStreamDesc-size * 
getTypeSize(pStreamDesc-type);
-}
-else
-{
-nVBsize = (paos-count - 1) * pStreamDesc-stride
-  + pStreamDesc-size * getTypeSize(pStreamDesc-type);
-}
-
 //uSQ_VTX_CONSTANT_WORD0_0
 uSQ_VTX_CONSTANT_WORD0_0 = paos-offset;
 
 //uSQ_VTX_CONSTANT_WORD1_0
-uSQ_VTX_CONSTANT_WORD1_0 = nVBsize;
+uSQ_VTX_CONSTANT_WORD1_0 = paos-bo-size - paos-offset - 1;
 
 //uSQ_VTX_CONSTANT_WORD2_0
 SETfield(uSQ_VTX_CONSTANT_WORD2_0, 
@@ -391,17 +380,6 @@ static void evergreenSendVTX(GLcontext *ctx, struct 
radeon_state_atom *atom)
 if (context-radeon.tcl.aos_count == 0)
return;
 
-BEGIN_BATCH_NO_AUTOSTATE(6);
-R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST, 1));
-R600_OUT_BATCH(mmSQ_VTX_BASE_VTX_LOC - ASIC_CTL_CONST_BASE_INDEX);
-R600_OUT_BATCH(0);
-
-R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST, 1));
-R600_OUT_BATCH(mmSQ_VTX_START_INST_LOC - ASIC_CTL_CONST_BASE_INDEX);
-R600_OUT_BATCH(0);
-END_BATCH();
-COMMIT_BATCH();
-
 for(i=0; iVERT_ATTRIB_MAX; i++) {
if(vp-mesa_program-Base.InputsRead  (1  i))
{
@@ -410,7 +388,7 @@ static void evergreenSendVTX(GLcontext *ctx, struct 
radeon_state_atom *atom)
  (context-stream_desc[j]));
j++;
}
-} 
+}
 }
 static void evergreenSendPA(GLcontext *ctx, struct radeon_state_atom *atom)
 {
@@ -1522,7 +1500,7 @@ void evergreenInitAtoms(context_t *context)
 context-radeon.hw.atomlist.name = atom-list;
 
 EVERGREEN_ALLOC_STATE(init, always, 19, evergreenSendSQConfig);
-EVERGREEN_ALLOC_STATE(vtx,   evergreen_vtx, (6 + (VERT_ATTRIB_MAX * 
12)), evergreenSendVTX);
+EVERGREEN_ALLOC_STATE(vtx,   evergreen_vtx, (VERT_ATTRIB_MAX * 12), 
evergreenSendVTX);
 EVERGREEN_ALLOC_STATE(pa,always,124, evergreenSendPA);
 EVERGREEN_ALLOC_STATE(tp,always,0,   evergreenSendTP);
 EVERGREEN_ALLOC_STATE(sq,always,86,  evergreenSendSQ); /* 
85 */
diff --git a/src/mesa/drivers/dri/r600/evergreen_render.c 
b/src/mesa/drivers/dri/r600/evergreen_render.c
index 85b2f9d..27089bf 100644
--- a/src/mesa/drivers/dri/r600/evergreen_render.c
+++ b/src/mesa/drivers/dri/r600/evergreen_render.c
@@ -148,7 +148,8 @@ static int evergreenNumVerts(int num_verts, int prim) //same
return num_verts - verts_off;
 }
 
-static void evergreenRunRenderPrimitive(GLcontext * ctx, int start, int end, 
int prim) //same
+static void evergreenRunRenderPrimitive(GLcontext * ctx, int start, int end, 
int prim,
+   GLint basevertex) //same
 {
 context_t *context = EVERGREEN_CONTEXT(ctx);
 BATCH_LOCALS(context-radeon);
@@ -186,6 +187,7 @@ static void evergreenRunRenderPrimitive(GLcontext * ctx, 
int start, int end, int
 total_emit =   3  /* VGT_PRIMITIVE_TYPE */
 + 2  /* VGT_INDEX_TYPE */
 + 2  /* NUM_INSTANCES */
++ 4  /* VTX_BASE_VTX_LOC + VTX_START_INST_LOC */
 + 5 + 2; /* DRAW_INDEX */
 
 BEGIN_BATCH_NO_AUTOSTATE(total_emit);
@@ -198,6 +200,11 @@ static void evergreenRunRenderPrimitive(GLcontext * ctx, 
int start, int end, int
 // num instances
 R600_OUT_BATCH(CP_PACKET3(R600_IT_NUM_INSTANCES, 0));
 R600_OUT_BATCH(1);
+/* offset */
+R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST, 2));
+R600_OUT_BATCH(mmSQ_VTX_BASE_VTX_LOC - ASIC_CTL_CONST_BASE_INDEX);
+R600_OUT_BATCH(basevertex); //VTX_BASE_VTX_LOC
+R600_OUT_BATCH(0); //VTX_START_INST_LOC
 // draw