Mesa (master): winsys/radeon: fix indentation

2014-07-24 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: cce58147eb1450a26c03756af37da52d180580c4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=cce58147eb1450a26c03756af37da52d180580c4

Author: Jerome Glisse jgli...@redhat.com
Date:   Thu Jul 24 17:30:31 2014 -0400

winsys/radeon: fix indentation

Can we please keep it clean and avoid ending up in messy situation
like ddx.

Signed-off-by: Jérôme Glisse jgli...@redhat.com

---

 src/gallium/winsys/radeon/drm/radeon_drm_cs.c |   58 -
 1 file changed, 29 insertions(+), 29 deletions(-)

diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_cs.c 
b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c
index 3596f8d..a06ecb2 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_cs.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c
@@ -155,7 +155,7 @@ static struct radeon_winsys_cs *
 radeon_drm_cs_create(struct radeon_winsys *rws,
  enum ring_type ring_type,
  void (*flush)(void *ctx, unsigned flags,
-  struct pipe_fence_handle **fence),
+   struct pipe_fence_handle **fence),
  void *flush_ctx,
  struct radeon_winsys_cs_handle *trace_buf)
 {
@@ -196,10 +196,10 @@ radeon_drm_cs_create(struct radeon_winsys *rws,
 #define OUT_CS(cs, value) (cs)-buf[(cs)-cdw++] = (value)
 
 static INLINE void update_reloc(struct drm_radeon_cs_reloc *reloc,
-   enum radeon_bo_domain rd,
-   enum radeon_bo_domain wd,
-   unsigned priority,
-   enum radeon_bo_domain *added_domains)
+enum radeon_bo_domain rd,
+enum radeon_bo_domain wd,
+unsigned priority,
+enum radeon_bo_domain *added_domains)
 {
 *added_domains = (rd | wd)  ~(reloc-read_domains | reloc-write_domain);
 
@@ -434,33 +434,33 @@ static void radeon_drm_cs_flush(struct radeon_winsys_cs 
*rcs,
 
 switch (cs-base.ring_type) {
 case RING_DMA:
-   /* pad DMA ring to 8 DWs */
-   if (cs-ws-info.chip_class = SI) {
-   while (rcs-cdw  7)
-   OUT_CS(cs-base, 0xf000); /* NOP packet */
-   } else {
-   while (rcs-cdw  7)
-   OUT_CS(cs-base, 0x); /* NOP packet */
-   }
-   break;
+/* pad DMA ring to 8 DWs */
+if (cs-ws-info.chip_class = SI) {
+while (rcs-cdw  7)
+OUT_CS(cs-base, 0xf000); /* NOP packet */
+} else {
+while (rcs-cdw  7)
+OUT_CS(cs-base, 0x); /* NOP packet */
+}
+break;
 case RING_GFX:
-   /* pad DMA ring to 8 DWs to meet CP fetch alignment requirements
-* r6xx, requires at least 4 dw alignment to avoid a hw bug.
-*/
-   if (cs-ws-info.chip_class = SI) {
-   while (rcs-cdw  7)
-   OUT_CS(cs-base, 0x8000); /* type2 nop packet 
*/
-   } else {
-   while (rcs-cdw  7)
-   OUT_CS(cs-base, 0x1000); /* type3 nop packet 
*/
-   }
-   break;
+/* pad DMA ring to 8 DWs to meet CP fetch alignment requirements
+ * r6xx, requires at least 4 dw alignment to avoid a hw bug.
+ */
+if (cs-ws-info.chip_class = SI) {
+while (rcs-cdw  7)
+OUT_CS(cs-base, 0x8000); /* type2 nop packet */
+} else {
+while (rcs-cdw  7)
+OUT_CS(cs-base, 0x1000); /* type3 nop packet */
+}
+break;
 case RING_UVD:
-while (rcs-cdw  15)
-   OUT_CS(cs-base, 0x8000); /* type2 nop packet */
-   break;
+while (rcs-cdw  15)
+OUT_CS(cs-base, 0x8000); /* type2 nop packet */
+break;
 default:
-   break;
+break;
 }
 
 if (rcs-cdw  RADEON_MAX_CMDBUF_DWORDS) {

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


Mesa (master): r600g: force full cache for hyperz

2013-04-29 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: c7a13dc5f530783e2ec22af2e1d7206b4754da48
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c7a13dc5f530783e2ec22af2e1d7206b4754da48

Author: Jerome Glisse jgli...@redhat.com
Date:   Wed Apr 24 19:15:52 2013 -0400

r600g: force full cache for hyperz

Seems that in some case allowing half cache usage confuse the gpu
and trigger lockup. Force full cache use.

Should fix :
https://bugs.freedesktop.org/show_bug.cgi?id=59592
https://bugs.freedesktop.org/show_bug.cgi?id=60848
https://bugs.freedesktop.org/show_bug.cgi?id=60969
https://bugs.freedesktop.org/show_bug.cgi?id=61747
https://bugs.freedesktop.org/show_bug.cgi?id=62466
https://bugs.freedesktop.org/show_bug.cgi?id=62669
https://bugs.freedesktop.org/show_bug.cgi?id=62721
https://bugs.freedesktop.org/show_bug.cgi?id=63124

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

---

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

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 13f0678..6797b22 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1691,6 +1691,7 @@ static void evergreen_init_depth_surface(struct 
r600_context *rctx,
surf-db_htile_data_base = va  8;
surf-db_htile_surface = S_028ABC_HTILE_WIDTH(1) |
S_028ABC_HTILE_HEIGHT(1) |
+   S_028ABC_FULL_CACHE(1) |
S_028ABC_LINEAR(1);
surf-db_depth_info |= S_028040_TILE_SURFACE_ENABLE(1);
surf-db_preload_control = 0;
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index b054fef..4e0e4a6 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -1532,6 +1532,7 @@ static void r600_init_depth_surface(struct r600_context 
*rctx,
surf-db_htile_data_base = va  8;
surf-db_htile_surface = S_028D24_HTILE_WIDTH(1) |
S_028D24_HTILE_HEIGHT(1) |
+   S_028D24_FULL_CACHE(1) |
S_028D24_LINEAR(1);
/* preload is not working properly on r6xx/r7xx */
surf-db_depth_info |= S_028010_TILE_SURFACE_ENABLE(1);

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


Mesa (master): winsys/radeon: consolidate tracing into winsys v2

2013-04-25 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: abb96fdea70546f974ba59cbd00bc54afee9cfdb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=abb96fdea70546f974ba59cbd00bc54afee9cfdb

Author: Jerome Glisse jgli...@redhat.com
Date:   Tue Apr 23 19:22:33 2013 -0400

winsys/radeon: consolidate tracing into winsys v2

This move the tracing timeout and printing into winsys and add
an debug environement variable for it (R600_DEBUG=trace_cs).

Lot of file touched because of winsys API changes.

v2: Do not write lockup file if ib uniq id does not match last one

Signed-off-by: Jerome Glisse jgli...@redhat.com
Reviewed-by: Marek Olšák mar...@gmail.com

---

 src/gallium/drivers/r300/r300_context.c|2 +-
 src/gallium/drivers/r300/r300_flush.c  |6 ++--
 src/gallium/drivers/r600/evergreen_compute.c   |2 +-
 src/gallium/drivers/r600/r600_hw_context.c |   36 +---
 src/gallium/drivers/r600/r600_pipe.c   |   17 +
 src/gallium/drivers/r600/r600_pipe.h   |   11 +-
 src/gallium/drivers/r600/r600_state_common.c   |4 --
 src/gallium/drivers/radeon/radeon_uvd.c|4 +-
 src/gallium/drivers/radeonsi/r600_hw_context.c |2 +-
 src/gallium/drivers/radeonsi/radeonsi_compute.c|2 +-
 src/gallium/drivers/radeonsi/radeonsi_pipe.c   |2 +-
 src/gallium/winsys/radeon/drm/radeon_drm_cs.c  |   19 ++
 src/gallium/winsys/radeon/drm/radeon_drm_cs.h  |   11 +++---
 src/gallium/winsys/radeon/drm/radeon_drm_cs_dump.c |   30 ++--
 src/gallium/winsys/radeon/drm/radeon_drm_winsys.c  |2 +-
 src/gallium/winsys/radeon/drm/radeon_winsys.h  |   13 +--
 16 files changed, 68 insertions(+), 95 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_context.c 
b/src/gallium/drivers/r300/r300_context.c
index 340a7f0..ba1859b 100644
--- a/src/gallium/drivers/r300/r300_context.c
+++ b/src/gallium/drivers/r300/r300_context.c
@@ -379,7 +379,7 @@ struct pipe_context* r300_create_context(struct 
pipe_screen* screen,
  sizeof(struct pipe_transfer), 64,
  UTIL_SLAB_SINGLETHREADED);
 
-r300-cs = rws-cs_create(rws, RING_GFX);
+r300-cs = rws-cs_create(rws, RING_GFX, NULL);
 if (r300-cs == NULL)
 goto fail;
 
diff --git a/src/gallium/drivers/r300/r300_flush.c 
b/src/gallium/drivers/r300/r300_flush.c
index 10c4a30..709fe52 100644
--- a/src/gallium/drivers/r300/r300_flush.c
+++ b/src/gallium/drivers/r300/r300_flush.c
@@ -52,7 +52,7 @@ static void r300_flush_and_cleanup(struct r300_context *r300, 
unsigned flags)
 }
 
 r300-flush_counter++;
-r300-rws-cs_flush(r300-cs, flags);
+r300-rws-cs_flush(r300-cs, flags, 0);
 r300-dirty_hw = 0;
 
 /* New kitchen sink, baby. */
@@ -100,11 +100,11 @@ void r300_flush(struct pipe_context *pipe,
  * and we cannot emit an empty CS. Let's write to some reg. */
 CS_LOCALS(r300);
 OUT_CS_REG(RB3D_COLOR_CHANNEL_MASK, 0);
-r300-rws-cs_flush(r300-cs, flags);
+r300-rws-cs_flush(r300-cs, flags, 0);
 } else {
 /* Even if hw is not dirty, we should at least reset the CS in case
  * the space checking failed for the first draw operation. */
-r300-rws-cs_flush(r300-cs, flags);
+r300-rws-cs_flush(r300-cs, flags, 0);
 }
 }
 
diff --git a/src/gallium/drivers/r600/evergreen_compute.c 
b/src/gallium/drivers/r600/evergreen_compute.c
index 489629f..d6b0a47 100644
--- a/src/gallium/drivers/r600/evergreen_compute.c
+++ b/src/gallium/drivers/r600/evergreen_compute.c
@@ -463,7 +463,7 @@ static void compute_emit_cs(struct r600_context *ctx, const 
uint *block_layout,
flush_flags |= RADEON_FLUSH_KEEP_TILING_FLAGS;
}
 
-   ctx-ws-cs_flush(ctx-rings.gfx.cs, flush_flags);
+   ctx-ws-cs_flush(ctx-rings.gfx.cs, flush_flags, 
ctx-screen-cs_count++);
 
ctx-flags = 0;
 
diff --git a/src/gallium/drivers/r600/r600_hw_context.c 
b/src/gallium/drivers/r600/r600_hw_context.c
index b4fb3bf..3abce1e 100644
--- a/src/gallium/drivers/r600/r600_hw_context.c
+++ b/src/gallium/drivers/r600/r600_hw_context.c
@@ -137,21 +137,17 @@ void r600_need_cs_space(struct r600_context *ctx, 
unsigned num_dw,
for (i = 0; i  R600_NUM_ATOMS; i++) {
if (ctx-atoms[i]  ctx-atoms[i]-dirty) {
num_dw += ctx-atoms[i]-num_dw;
-#if R600_TRACE_CS
if (ctx-screen-trace_bo) {
num_dw += R600_TRACE_CS_DWORDS;
}
-#endif
}
}
 
/* The upper-bound of how much space a draw command would take. 
*/
num_dw += R600_MAX_FLUSH_CS_DWORDS + R600_MAX_DRAW_CS_DWORDS;
-#if R600_TRACE_CS
if (ctx-screen-trace_bo) {
num_dw

Mesa (master): radeonsi: add support for compressed texture v2

2013-04-18 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: d0e9aaa31cb13404914aea292879739d4044f856
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d0e9aaa31cb13404914aea292879739d4044f856

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Apr  8 10:57:05 2013 -0400

radeonsi: add support for compressed texture v2

Most test pass, issue are with border color and swizzle.

Based on ircnickmaelcum patch.

v2: Restaged commit hunk

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

---

 src/gallium/drivers/radeonsi/si_state.c |   71 ++-
 src/gallium/drivers/radeonsi/sid.h  |7 +++
 2 files changed, 76 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_state.c 
b/src/gallium/drivers/radeonsi/si_state.c
index 61ede64..a39843c 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -30,6 +30,7 @@
 #include util/u_helpers.h
 #include util/u_math.h
 #include util/u_pack_color.h
+#include util/u_format_s3tc.h
 #include tgsi/tgsi_parse.h
 #include radeonsi_pipe.h
 #include radeonsi_shader.h
@@ -1164,6 +1165,8 @@ static uint32_t si_translate_texformat(struct pipe_screen 
*screen,
   const struct util_format_description 
*desc,
   int first_non_void)
 {
+   struct r600_screen *rscreen = (struct r600_screen*)screen;
+   bool enable_s3tc = rscreen-info.drm_minor = 31;
boolean uniform = TRUE;
int i;
 
@@ -1205,7 +1208,51 @@ static uint32_t si_translate_texformat(struct 
pipe_screen *screen,
break;
}
 
-   /* TODO compressed formats */
+   if (desc-layout == UTIL_FORMAT_LAYOUT_RGTC) {
+   if (!enable_s3tc)
+   goto out_unknown;
+
+   switch (format) {
+   case PIPE_FORMAT_RGTC1_SNORM:
+   case PIPE_FORMAT_LATC1_SNORM:
+   case PIPE_FORMAT_RGTC1_UNORM:
+   case PIPE_FORMAT_LATC1_UNORM:
+   return V_008F14_IMG_DATA_FORMAT_BC4;
+   case PIPE_FORMAT_RGTC2_SNORM:
+   case PIPE_FORMAT_LATC2_SNORM:
+   case PIPE_FORMAT_RGTC2_UNORM:
+   case PIPE_FORMAT_LATC2_UNORM:
+   return V_008F14_IMG_DATA_FORMAT_BC5;
+   default:
+   goto out_unknown;
+   }
+   }
+
+   if (desc-layout == UTIL_FORMAT_LAYOUT_S3TC) {
+
+   if (!enable_s3tc)
+   goto out_unknown;
+
+   if (!util_format_s3tc_enabled) {
+   goto out_unknown;
+   }
+
+   switch (format) {
+   case PIPE_FORMAT_DXT1_RGB:
+   case PIPE_FORMAT_DXT1_RGBA:
+   case PIPE_FORMAT_DXT1_SRGB:
+   case PIPE_FORMAT_DXT1_SRGBA:
+   return V_008F14_IMG_DATA_FORMAT_BC1;
+   case PIPE_FORMAT_DXT3_RGBA:
+   case PIPE_FORMAT_DXT3_SRGBA:
+   return V_008F14_IMG_DATA_FORMAT_BC2;
+   case PIPE_FORMAT_DXT5_RGBA:
+   case PIPE_FORMAT_DXT5_SRGBA:
+   return V_008F14_IMG_DATA_FORMAT_BC3;
+   default:
+   goto out_unknown;
+   }
+   }
 
if (format == PIPE_FORMAT_R9G9B9E5_FLOAT) {
return V_008F14_IMG_DATA_FORMAT_5_9_9_9;
@@ -2109,7 +2156,27 @@ static struct pipe_sampler_view 
*si_create_sampler_view(struct pipe_context *ctx
break;
default:
if (first_non_void  0) {
-   num_format = V_008F14_IMG_NUM_FORMAT_FLOAT;
+   if (util_format_is_compressed(pipe_format)) {
+   switch (pipe_format) {
+   case PIPE_FORMAT_DXT1_SRGB:
+   case PIPE_FORMAT_DXT1_SRGBA:
+   case PIPE_FORMAT_DXT3_SRGBA:
+   case PIPE_FORMAT_DXT5_SRGBA:
+   num_format = 
V_008F14_IMG_NUM_FORMAT_SRGB;
+   break;
+   case PIPE_FORMAT_RGTC1_SNORM:
+   case PIPE_FORMAT_LATC1_SNORM:
+   case PIPE_FORMAT_RGTC2_SNORM:
+   case PIPE_FORMAT_LATC2_SNORM:
+   num_format = 
V_008F14_IMG_NUM_FORMAT_SNORM;
+   break;
+   default:
+   num_format = 
V_008F14_IMG_NUM_FORMAT_UNORM;
+   break;
+   }
+   } else {
+   num_format = V_008F14_IMG_NUM_FORMAT_FLOAT;
+   }
} else if (desc-colorspace == UTIL_FORMAT_COLORSPACE_SRGB

Mesa (master): radeonsi: add 2d tiling support for texture v3

2013-04-18 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: dc21e30a6283629bed6db282caff0af13f3b88ec
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=dc21e30a6283629bed6db282caff0af13f3b88ec

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Mar 22 17:55:49 2013 -0400

radeonsi: add 2d tiling support for texture v3

v2: Remove left over code
v3: Restage properly the commit so hunk of first one are not in
second one.

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

---

 configure.ac|2 +-
 src/gallium/drivers/radeonsi/r600_texture.c |   11 +++-
 src/gallium/drivers/radeonsi/si_state.c |   79 ---
 3 files changed, 20 insertions(+), 72 deletions(-)

diff --git a/configure.ac b/configure.ac
index 70c598e..6ffe3f2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -31,7 +31,7 @@ AC_SUBST([OSMESA_VERSION])
 
 dnl Versions for external dependencies
 LIBDRM_REQUIRED=2.4.24
-LIBDRM_RADEON_REQUIRED=2.4.42
+LIBDRM_RADEON_REQUIRED=2.4.44
 LIBDRM_INTEL_REQUIRED=2.4.38
 LIBDRM_NVVIEUX_REQUIRED=2.4.33
 LIBDRM_NOUVEAU_REQUIRED=2.4.33 libdrm = 2.4.41
diff --git a/src/gallium/drivers/radeonsi/r600_texture.c 
b/src/gallium/drivers/radeonsi/r600_texture.c
index 1b8382f..8992f9a 100644
--- a/src/gallium/drivers/radeonsi/r600_texture.c
+++ b/src/gallium/drivers/radeonsi/r600_texture.c
@@ -47,7 +47,6 @@ static void r600_copy_to_staging_texture(struct pipe_context 
*ctx, struct r600_t
transfer-box);
 }
 
-
 /* Copy from a transfer's staging texture to a full GPU one. */
 static void r600_copy_from_staging_texture(struct pipe_context *ctx, struct 
r600_transfer *rtransfer)
 {
@@ -152,12 +151,12 @@ static int r600_init_surface(struct r600_screen *rscreen,
 
if (!is_flushed_depth  is_depth) {
surface-flags |= RADEON_SURF_ZBUFFER;
-
if (is_stencil) {
surface-flags |= RADEON_SURF_SBUFFER |
RADEON_SURF_HAS_SBUFFER_MIPTREE;
}
}
+   surface-flags |= RADEON_SURF_HAS_TILE_MODE_INDEX;
return 0;
 }
 
@@ -530,7 +529,11 @@ struct pipe_resource *si_texture_create(struct pipe_screen 
*screen,
 
if (!(templ-flags  R600_RESOURCE_FLAG_TRANSFER) 
!(templ-bind  PIPE_BIND_SCANOUT)) {
-   array_mode = V_009910_ARRAY_1D_TILED_THIN1;
+   if (util_format_is_compressed(templ-format)) {
+   array_mode = V_009910_ARRAY_1D_TILED_THIN1;
+   } else {
+   array_mode = V_009910_ARRAY_2D_TILED_THIN1;
+   }
}
 
r = r600_init_surface(rscreen, surface, templ, array_mode,
@@ -620,6 +623,8 @@ struct pipe_resource *si_texture_from_handle(struct 
pipe_screen *screen,
if (r) {
return NULL;
}
+   /* always set the scanout flags */
+   surface.flags |= RADEON_SURF_SCANOUT;
return (struct pipe_resource *)r600_texture_create_object(screen, 
templ, array_mode,
  stride, 0, 
buf, FALSE, surface);
 }
diff --git a/src/gallium/drivers/radeonsi/si_state.c 
b/src/gallium/drivers/radeonsi/si_state.c
index ca9e8b4..61ede64 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -1541,67 +1541,16 @@ boolean si_is_format_supported(struct pipe_screen 
*screen,
return retval == usage;
 }
 
-static unsigned si_tile_mode_index(struct r600_resource_texture *rtex, 
unsigned level)
-{
-   if (util_format_is_depth_or_stencil(rtex-real_format)) {
-   if (rtex-surface.level[level].mode == RADEON_SURF_MODE_1D) {
-   return 4;
-   } else if (rtex-surface.level[level].mode == 
RADEON_SURF_MODE_2D) {
-   switch (rtex-real_format) {
-   case PIPE_FORMAT_Z16_UNORM:
-   return 5;
-   case PIPE_FORMAT_S8_UINT_Z24_UNORM:
-   case PIPE_FORMAT_X8Z24_UNORM:
-   case PIPE_FORMAT_Z24X8_UNORM:
-   case PIPE_FORMAT_Z24_UNORM_S8_UINT:
-   case PIPE_FORMAT_Z32_FLOAT:
-   case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
-   return 6;
-   default:
-   return 7;
-   }
-   }
-   }
+static unsigned si_tile_mode_index(struct r600_resource_texture *rtex, 
unsigned level, bool stencil)
+{
+   unsigned tile_mode_index = 0;
 
-   switch (rtex-surface.level[level].mode) {
-   default:
-   assert(!Invalid surface mode);
-   /* Fall through */
-   case RADEON_SURF_MODE_LINEAR_ALIGNED:
-   return 8;
-   case RADEON_SURF_MODE_1D:
-   if (rtex-surface.flags  RADEON_SURF_SCANOUT)
-   return 9;
-   else

Mesa (master): winsys/radeon: add command stream replay dump for faulty lockup v3

2013-04-05 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: b8998f976ee11e5bdffa78cd78278deeed2789c1
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b8998f976ee11e5bdffa78cd78278deeed2789c1

Author: Jerome Glisse jgli...@redhat.com
Date:   Wed Mar 27 11:04:29 2013 -0400

winsys/radeon: add command stream replay dump for faulty lockup v3

Build time option, set RADEON_CS_DUMP_ON_LOCKUP to 1 in radeon_drm_cs.h to
enable it.

When enabled after each cs submission the code will try to detect lockup by
waiting on one of the buffer of the cs to become idle, after a timeout it
will consider that the cs triggered a lockup and will write a radeon_lockup.c
file in current directory that have all information for replaying the cs.

To build this file :
gcc -O0 -g radeon_lockup.c -ldrm -o radeon_lockup -I/usr/include/libdrm

v2: Add radeon_ctx.h file to mesa git tree
v3: Slightly improve dumped file for easier editing, only dump first faulty cs

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

---

 src/gallium/winsys/radeon/drm/Makefile.sources |1 +
 src/gallium/winsys/radeon/drm/radeon_drm_bo.c  |   80 ---
 src/gallium/winsys/radeon/drm/radeon_drm_bo.h  |2 +
 src/gallium/winsys/radeon/drm/radeon_drm_cs.c  |4 +
 src/gallium/winsys/radeon/drm/radeon_drm_cs.h  |6 +
 src/gallium/winsys/radeon/drm/radeon_drm_cs_dump.c |  152 +
 src/gallium/winsys/radeon/tools/radeon_ctx.h   |  235 
 7 files changed, 443 insertions(+), 37 deletions(-)

diff --git a/src/gallium/winsys/radeon/drm/Makefile.sources 
b/src/gallium/winsys/radeon/drm/Makefile.sources
index 1d18d61..4ca5ebb 100644
--- a/src/gallium/winsys/radeon/drm/Makefile.sources
+++ b/src/gallium/winsys/radeon/drm/Makefile.sources
@@ -1,4 +1,5 @@
 C_SOURCES := \
radeon_drm_bo.c \
radeon_drm_cs.c \
+   radeon_drm_cs_dump.c \
radeon_drm_winsys.c
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c 
b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
index 61570d0..9e45dcc 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
@@ -396,14 +396,54 @@ static void radeon_bo_destroy(struct pb_buffer *_buf)
 FREE(bo);
 }
 
+void *radeon_bo_do_map(struct radeon_bo *bo)
+{
+struct drm_radeon_gem_mmap args = {0};
+void *ptr;
+
+/* Return the pointer if it's already mapped. */
+if (bo-ptr)
+return bo-ptr;
+
+/* Map the buffer. */
+pipe_mutex_lock(bo-map_mutex);
+/* Return the pointer if it's already mapped (in case of a race). */
+if (bo-ptr) {
+pipe_mutex_unlock(bo-map_mutex);
+return bo-ptr;
+}
+args.handle = bo-handle;
+args.offset = 0;
+args.size = (uint64_t)bo-base.size;
+if (drmCommandWriteRead(bo-rws-fd,
+DRM_RADEON_GEM_MMAP,
+args,
+sizeof(args))) {
+pipe_mutex_unlock(bo-map_mutex);
+fprintf(stderr, radeon: gem_mmap failed: %p 0x%08X\n,
+bo, bo-handle);
+return NULL;
+}
+
+ptr = os_mmap(0, args.size, PROT_READ|PROT_WRITE, MAP_SHARED,
+   bo-rws-fd, args.addr_ptr);
+if (ptr == MAP_FAILED) {
+pipe_mutex_unlock(bo-map_mutex);
+fprintf(stderr, radeon: mmap failed, errno: %i\n, errno);
+return NULL;
+}
+bo-ptr = ptr;
+pipe_mutex_unlock(bo-map_mutex);
+
+return bo-ptr;
+}
+
 static void *radeon_bo_map(struct radeon_winsys_cs_handle *buf,
struct radeon_winsys_cs *rcs,
enum pipe_transfer_usage usage)
 {
 struct radeon_bo *bo = (struct radeon_bo*)buf;
 struct radeon_drm_cs *cs = (struct radeon_drm_cs*)rcs;
-struct drm_radeon_gem_mmap args = {0};
-void *ptr;
 
 /* If it's not unsynchronized bo_map, flush CS if needed and then wait. */
 if (!(usage  PIPE_TRANSFER_UNSYNCHRONIZED)) {
@@ -466,41 +506,7 @@ static void *radeon_bo_map(struct radeon_winsys_cs_handle 
*buf,
 }
 }
 
-/* Return the pointer if it's already mapped. */
-if (bo-ptr)
-return bo-ptr;
-
-/* Map the buffer. */
-pipe_mutex_lock(bo-map_mutex);
-/* Return the pointer if it's already mapped (in case of a race). */
-if (bo-ptr) {
-pipe_mutex_unlock(bo-map_mutex);
-return bo-ptr;
-}
-args.handle = bo-handle;
-args.offset = 0;
-args.size = (uint64_t)bo-base.size;
-if (drmCommandWriteRead(bo-rws-fd,
-DRM_RADEON_GEM_MMAP,
-args,
-sizeof(args))) {
-pipe_mutex_unlock(bo-map_mutex);
-fprintf(stderr, radeon: gem_mmap failed: %p 0x%08X\n,
-bo, bo-handle);
-return NULL;
-}
-
-ptr = os_mmap(0, args.size, PROT_READ|PROT_WRITE, MAP_SHARED,
-   bo-rws-fd, args.addr_ptr);
-if (ptr == MAP_FAILED) {
-pipe_mutex_unlock(bo

Mesa (master): r600g: workaround hyperz lockup on evergreen

2013-02-28 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 6bc7605745d53df94398b724b66db74d23d09e03
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6bc7605745d53df94398b724b66db74d23d09e03

Author: Jerome Glisse jgli...@redhat.com
Date:   Wed Feb 20 16:20:17 2013 -0500

r600g: workaround hyperz lockup on evergreen

This work around disable hyperz if write to zbuffer is disabled. Somehow
using hyperz when not writting to the zbuffer trigger GPU lockup. See :

https://bugs.freedesktop.org/show_bug.cgi?id=60848

Candidate for 9.1

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

---

 src/gallium/drivers/r600/evergreen_state.c   |   10 +-
 src/gallium/drivers/r600/r600_pipe.h |4 +++-
 src/gallium/drivers/r600/r600_state.c|1 +
 src/gallium/drivers/r600/r600_state_common.c |   10 ++
 4 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 4a91942..2e301bc 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -858,6 +858,7 @@ static void *evergreen_create_dsa_state(struct pipe_context 
*ctx,
dsa-valuemask[1] = state-stencil[1].valuemask;
dsa-writemask[0] = state-stencil[0].writemask;
dsa-writemask[1] = state-stencil[1].writemask;
+   dsa-zwritemask = state-depth.writemask;
 
db_depth_control = S_028800_Z_ENABLE(state-depth.enabled) |
S_028800_Z_WRITE_ENABLE(state-depth.writemask) |
@@ -2286,7 +2287,14 @@ static void evergreen_emit_db_misc_state(struct 
r600_context *rctx, struct r600_
}
db_render_override |= S_02800C_NOOP_CULL_DISABLE(1);
}
-   if (rctx-db_state.rsurf  rctx-db_state.rsurf-htile_enabled) {
+   /* FIXME we should be able to use hyperz even if we are not writing to
+* zbuffer but somehow this trigger GPU lockup. See :
+*
+* https://bugs.freedesktop.org/show_bug.cgi?id=60848
+*
+* Disable hyperz for now if not writing to zbuffer.
+*/
+   if (rctx-db_state.rsurf  rctx-db_state.rsurf-htile_enabled  
rctx-zwritemask) {
/* FORCE_OFF means HiZ/HiS are determined by DB_SHADER_CONTROL 
*/
db_render_override |= 
S_02800C_FORCE_HIZ_ENABLE(V_02800C_FORCE_OFF);
/* This is to fix a lockup when hyperz and alpha test are 
enabled at
diff --git a/src/gallium/drivers/r600/r600_pipe.h 
b/src/gallium/drivers/r600/r600_pipe.h
index 88b587e..1d0ad79 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium/drivers/r600/r600_pipe.h
@@ -298,7 +298,8 @@ struct r600_dsa_state {
unsignedalpha_ref;
ubyte   valuemask[2];
ubyte   writemask[2];
-   unsignedsx_alpha_test_control;
+   unsignedzwritemask;
+   unsignedsx_alpha_test_control;
 };
 
 struct r600_pipe_shader;
@@ -513,6 +514,7 @@ struct r600_context {
boolalpha_to_one;
boolforce_blend_disable;
boolean dual_src_blend;
+   unsignedzwritemask;
 
/* Index buffer. */
struct pipe_index_bufferindex_buffer;
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index c6559bb..2d3ec93 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -842,6 +842,7 @@ static void *r600_create_dsa_state(struct pipe_context *ctx,
dsa-valuemask[1] = state-stencil[1].valuemask;
dsa-writemask[0] = state-stencil[0].writemask;
dsa-writemask[1] = state-stencil[1].writemask;
+   dsa-zwritemask = state-depth.writemask;
 
db_depth_control = S_028800_Z_ENABLE(state-depth.enabled) |
S_028800_Z_WRITE_ENABLE(state-depth.writemask) |
diff --git a/src/gallium/drivers/r600/r600_state_common.c 
b/src/gallium/drivers/r600/r600_state_common.c
index 1654233..fae28bc 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -284,6 +284,16 @@ static void r600_bind_dsa_state(struct pipe_context *ctx, 
void *state)
ref.valuemask[1] = dsa-valuemask[1];
ref.writemask[0] = dsa-writemask[0];
ref.writemask[1] = dsa-writemask[1];
+   if (rctx-zwritemask != dsa-zwritemask) {
+   rctx-zwritemask = dsa-zwritemask;
+   if (rctx-chip_class = EVERGREEN) {
+   /* work around some issue when not writting to zbuffer
+* we are having lockup on evergreen so do not enable
+* hyperz when not writting zbuffer
+*/
+   rctx-db_misc_state.atom.dirty = true

Mesa (9.1): r600g: workaround hyperz lockup on evergreen

2013-02-28 Thread Jerome Glisse
Module: Mesa
Branch: 9.1
Commit: b199a6414d02e271847cb556cc5f789b4b057105
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b199a6414d02e271847cb556cc5f789b4b057105

Author: Jerome Glisse jgli...@redhat.com
Date:   Wed Feb 20 16:20:17 2013 -0500

r600g: workaround hyperz lockup on evergreen

This work around disable hyperz if write to zbuffer is disabled. Somehow
using hyperz when not writting to the zbuffer trigger GPU lockup. See :

https://bugs.freedesktop.org/show_bug.cgi?id=60848

Candidate for 9.1

Signed-off-by: Jerome Glisse jgli...@redhat.com
(cherry picked from commit 6bc7605745d53df94398b724b66db74d23d09e03)

---

 src/gallium/drivers/r600/evergreen_state.c   |   10 +-
 src/gallium/drivers/r600/r600_pipe.h |4 +++-
 src/gallium/drivers/r600/r600_state.c|1 +
 src/gallium/drivers/r600/r600_state_common.c |   10 ++
 4 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 389ad3c..a982317 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -808,6 +808,7 @@ static void *evergreen_create_dsa_state(struct pipe_context 
*ctx,
dsa-valuemask[1] = state-stencil[1].valuemask;
dsa-writemask[0] = state-stencil[0].writemask;
dsa-writemask[1] = state-stencil[1].writemask;
+   dsa-zwritemask = state-depth.writemask;
 
db_depth_control = S_028800_Z_ENABLE(state-depth.enabled) |
S_028800_Z_WRITE_ENABLE(state-depth.writemask) |
@@ -,7 +2223,14 @@ static void evergreen_emit_db_misc_state(struct 
r600_context *rctx, struct r600_
}
db_render_override |= S_02800C_NOOP_CULL_DISABLE(1);
}
-   if (rctx-db_state.rsurf  rctx-db_state.rsurf-htile_enabled) {
+   /* FIXME we should be able to use hyperz even if we are not writing to
+* zbuffer but somehow this trigger GPU lockup. See :
+*
+* https://bugs.freedesktop.org/show_bug.cgi?id=60848
+*
+* Disable hyperz for now if not writing to zbuffer.
+*/
+   if (rctx-db_state.rsurf  rctx-db_state.rsurf-htile_enabled  
rctx-zwritemask) {
/* FORCE_OFF means HiZ/HiS are determined by DB_SHADER_CONTROL 
*/
db_render_override |= 
S_02800C_FORCE_HIZ_ENABLE(V_02800C_FORCE_OFF);
/* This is to fix a lockup when hyperz and alpha test are 
enabled at
diff --git a/src/gallium/drivers/r600/r600_pipe.h 
b/src/gallium/drivers/r600/r600_pipe.h
index ec59c92..1be4321 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium/drivers/r600/r600_pipe.h
@@ -298,7 +298,8 @@ struct r600_dsa_state {
unsignedalpha_ref;
ubyte   valuemask[2];
ubyte   writemask[2];
-   unsignedsx_alpha_test_control;
+   unsignedzwritemask;
+   unsignedsx_alpha_test_control;
 };
 
 struct r600_pipe_shader;
@@ -513,6 +514,7 @@ struct r600_context {
boolalpha_to_one;
boolforce_blend_disable;
boolean dual_src_blend;
+   unsignedzwritemask;
 
/* Index buffer. */
struct pipe_index_bufferindex_buffer;
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index 3f165f7..314c9ae 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -802,6 +802,7 @@ static void *r600_create_dsa_state(struct pipe_context *ctx,
dsa-valuemask[1] = state-stencil[1].valuemask;
dsa-writemask[0] = state-stencil[0].writemask;
dsa-writemask[1] = state-stencil[1].writemask;
+   dsa-zwritemask = state-depth.writemask;
 
db_depth_control = S_028800_Z_ENABLE(state-depth.enabled) |
S_028800_Z_WRITE_ENABLE(state-depth.writemask) |
diff --git a/src/gallium/drivers/r600/r600_state_common.c 
b/src/gallium/drivers/r600/r600_state_common.c
index 88bb62b..35d26b3 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -284,6 +284,16 @@ static void r600_bind_dsa_state(struct pipe_context *ctx, 
void *state)
ref.valuemask[1] = dsa-valuemask[1];
ref.writemask[0] = dsa-writemask[0];
ref.writemask[1] = dsa-writemask[1];
+   if (rctx-zwritemask != dsa-zwritemask) {
+   rctx-zwritemask = dsa-zwritemask;
+   if (rctx-chip_class = EVERGREEN) {
+   /* work around some issue when not writting to zbuffer
+* we are having lockup on evergreen so do not enable
+* hyperz when not writting zbuffer

Mesa (9.1): r600g: fix lockup when hyperz alpha test are enabled together . v3

2013-02-12 Thread Jerome Glisse
Module: Mesa
Branch: 9.1
Commit: 3ae8678f81ac65503595447763cb8447781155ba
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3ae8678f81ac65503595447763cb8447781155ba

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Feb  8 16:02:32 2013 -0500

r600g: fix lockup when hyperz  alpha test are enabled together. v3

Seems that alpha test being enabled confuse the GPU on the order in
which it should perform the Z testing. So force the order programmed
throught db shader control.

v2: Only force z order when alpha test is enabled
v3: Update db shader when binding new dsa + spelling fix

Signed-off-by: Jerome Glisse jgli...@redhat.com
Reviewed-by: Marek Olšák mar...@gmail.com
(cherry picked from commit 974b482acaf62ced1e8981761a8bda252bd51fe1)

---

 src/gallium/drivers/r600/evergreen_state.c   |   25 +++--
 src/gallium/drivers/r600/r600_state.c|   22 +-
 src/gallium/drivers/r600/r600_state_common.c |5 +
 3 files changed, 49 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index ad2f731..c39827f 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -2225,6 +2225,13 @@ static void evergreen_emit_db_misc_state(struct 
r600_context *rctx, struct r600_
if (rctx-db_state.rsurf  rctx-db_state.rsurf-htile_enabled) {
/* FORCE_OFF means HiZ/HiS are determined by DB_SHADER_CONTROL 
*/
db_render_override |= 
S_02800C_FORCE_HIZ_ENABLE(V_02800C_FORCE_OFF);
+   /* This is to fix a lockup when hyperz and alpha test are 
enabled at
+* the same time somehow GPU get confuse on which order to pick 
for
+* z test
+*/
+   if (rctx-alphatest_state.sx_alpha_test_control) {
+   db_render_override |= S_02800C_FORCE_SHADER_Z_ORDER(1);
+   }
} else {
db_render_override |= 
S_02800C_FORCE_HIZ_ENABLE(V_02800C_FORCE_DISABLE);
}
@@ -3214,7 +3221,7 @@ void evergreen_pipe_shader_ps(struct pipe_context *ctx, 
struct r600_pipe_shader
struct r600_context *rctx = (struct r600_context *)ctx;
struct r600_pipe_state *rstate = shader-rstate;
struct r600_shader *rshader = shader-shader;
-   unsigned i, exports_ps, num_cout, spi_ps_in_control_0, spi_input_z, 
spi_ps_in_control_1, db_shader_control;
+   unsigned i, exports_ps, num_cout, spi_ps_in_control_0, spi_input_z, 
spi_ps_in_control_1, db_shader_control = 0;
int pos_index = -1, face_index = -1;
int ninterp = 0;
boolean have_linear = FALSE, have_centroid = FALSE, have_perspective = 
FALSE;
@@ -3224,7 +3231,6 @@ void evergreen_pipe_shader_ps(struct pipe_context *ctx, 
struct r600_pipe_shader
 
rstate-nregs = 0;
 
-   db_shader_control = S_02880C_Z_ORDER(V_02880C_EARLY_Z_THEN_LATE_Z);
for (i = 0; i  rshader-ninput; i++) {
/* evergreen NUM_INTERP only contains values interpolated into 
the LDS,
   POSITION goes via GPRs from the SC so isn't counted */
@@ -3458,6 +3464,21 @@ void evergreen_update_db_shader_control(struct 
r600_context * rctx)

V_02880C_EXPORT_DB_FULL) |

S_02880C_ALPHA_TO_MASK_DISABLE(rctx-framebuffer.cb0_is_integer);
 
+   /* When alpha test is enabled we can't trust the hw to make the proper
+* decision on the order in which ztest should be run related to 
fragment
+* shader execution.
+*
+* If alpha test is enabled perform early z rejection (RE_Z) but don't 
early
+* write to the zbuffer. Write to zbuffer is delayed after fragment 
shader
+* execution and thus after alpha test so if discarded by the alpha test
+* the z value is not written.
+*/
+   if (rctx-alphatest_state.sx_alpha_test_control) {
+   db_shader_control |= S_02880C_Z_ORDER(V_02880C_RE_Z);
+   } else {
+   db_shader_control |= 
S_02880C_Z_ORDER(V_02880C_EARLY_Z_THEN_LATE_Z);
+   }
+
if (db_shader_control != rctx-db_misc_state.db_shader_control) {
rctx-db_misc_state.db_shader_control = db_shader_control;
rctx-db_misc_state.atom.dirty = true;
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index 1f50ed6..3f165f7 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -1940,6 +1940,13 @@ static void r600_emit_db_misc_state(struct r600_context 
*rctx, struct r600_atom
if (rctx-db_state.rsurf  rctx-db_state.rsurf-htile_enabled) {
/* FORCE_OFF means HiZ/HiS are determined by DB_SHADER_CONTROL 
*/
db_render_override |= 
S_028D10_FORCE_HIZ_ENABLE(V_028D10_FORCE_OFF

Mesa (master): winsys/radeon: fix bo with virtual address referencing mismatch

2013-02-11 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: a37835c8eda017f0c955e0927e7418e7f3ba3b73
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a37835c8eda017f0c955e0927e7418e7f3ba3b73

Author: Martin Andersson g02ma...@gmail.com
Date:   Sat Feb  2 17:55:07 2013 +0100

winsys/radeon: fix bo with virtual address referencing mismatch

If the same context try to flink and open the object, use the
same bo struct instead of opening a new gem handle for the object.
This way we avoid avoid having 2 different handle pointing to the
same kernel object which can latter lead to trouble with virtual
address.

Fix:
https://bugs.freedesktop.org/show_bug.cgi?id=60200

Signed-off-by: Martin Andersson g02ma...@gmail.com
Reviewed-by: Jerome Glisse jgli...@redhat.com

---

 src/gallium/winsys/radeon/drm/radeon_drm_bo.c |4 
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c 
b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
index bb6e954..2d41c26 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
@@ -963,6 +963,10 @@ static boolean radeon_winsys_bo_get_handle(struct 
pb_buffer *buffer,
 whandle-handle = bo-handle;
 }
 
+pipe_mutex_lock(bo-mgr-bo_handles_mutex);
+util_hash_table_set(bo-mgr-bo_handles, 
(void*)(uintptr_t)whandle-handle, bo);
+pipe_mutex_unlock(bo-mgr-bo_handles_mutex);
+
 whandle-stride = stride;
 return TRUE;
 }

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


Mesa (9.1): winsys/radeon: fix bo with virtual address referencing mismatch

2013-02-11 Thread Jerome Glisse
Module: Mesa
Branch: 9.1
Commit: 3b609f12f691717f297e8cbb5193edfc09670a6c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3b609f12f691717f297e8cbb5193edfc09670a6c

Author: Martin Andersson g02ma...@gmail.com
Date:   Sat Feb  2 17:55:07 2013 +0100

winsys/radeon: fix bo with virtual address referencing mismatch

If the same context try to flink and open the object, use the
same bo struct instead of opening a new gem handle for the object.
This way we avoid avoid having 2 different handle pointing to the
same kernel object which can latter lead to trouble with virtual
address.

Fix:
https://bugs.freedesktop.org/show_bug.cgi?id=60200

Signed-off-by: Martin Andersson g02ma...@gmail.com
Reviewed-by: Jerome Glisse jgli...@redhat.com
(cherry picked from commit a37835c8eda017f0c955e0927e7418e7f3ba3b73)

---

 src/gallium/winsys/radeon/drm/radeon_drm_bo.c |4 
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c 
b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
index bb6e954..2d41c26 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
@@ -963,6 +963,10 @@ static boolean radeon_winsys_bo_get_handle(struct 
pb_buffer *buffer,
 whandle-handle = bo-handle;
 }
 
+pipe_mutex_lock(bo-mgr-bo_handles_mutex);
+util_hash_table_set(bo-mgr-bo_handles, 
(void*)(uintptr_t)whandle-handle, bo);
+pipe_mutex_unlock(bo-mgr-bo_handles_mutex);
+
 whandle-stride = stride;
 return TRUE;
 }

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


Mesa (master): r600g: make sure async blit is done 8 * pitch at a time v2

2013-02-11 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 323a4488250f8f4e9981623b795763b86f5cae3f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=323a4488250f8f4e9981623b795763b86f5cae3f

Author: Jerome Glisse jgli...@redhat.com
Date:   Wed Feb  6 15:03:17 2013 -0500

r600g: make sure async blit is done 8 * pitch at a time v2

The blit must be aligned on 8 horizontal block.

v2: no need to align the reminder

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

---

 src/gallium/drivers/r600/r600_state.c |   13 +++--
 1 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index 67c4d99..5322850 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -3068,14 +3068,15 @@ static boolean r600_dma_copy_tile(struct r600_context 
*rctx,
return FALSE;
}
 
-   size = (copy_height * pitch)  2;
-   ncopy = (size / 0x) + !!(size % 0x);
+   /* It's a r6xx/r7xx limitation, the blit must be on 8 boundary for 
number
+* line in the blit. Compute max 8 line we can copy in the size limit
+*/
+   cheight = ((0x  2) / pitch)  0xfff8;
+   ncopy = (copy_height / cheight) + !!(copy_height % cheight);
r600_need_dma_space(rctx, ncopy * 7);
+
for (i = 0; i  ncopy; i++) {
-   cheight = copy_height;
-   if (((cheight * pitch)  2)  0x) {
-   cheight = (0x  2) / pitch;
-   }
+   cheight = cheight  copy_height ? copy_height : cheight;
size = (cheight * pitch)  2;
/* emit reloc before writting cs so that cs is always in 
consistent state */
r600_context_bo_reloc(rctx, rctx-rings.dma, rsrc-resource, 
RADEON_USAGE_READ);

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


Mesa (9.1): r600g: make sure async blit is done 8 * pitch at a time v2

2013-02-11 Thread Jerome Glisse
Module: Mesa
Branch: 9.1
Commit: 99adec8a88f239452feaf1fc58bec72bb8eb3984
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=99adec8a88f239452feaf1fc58bec72bb8eb3984

Author: Jerome Glisse jgli...@redhat.com
Date:   Wed Feb  6 15:03:17 2013 -0500

r600g: make sure async blit is done 8 * pitch at a time v2

The blit must be aligned on 8 horizontal block.

v2: no need to align the reminder

Signed-off-by: Jerome Glisse jgli...@redhat.com
(cherry picked from commit 323a4488250f8f4e9981623b795763b86f5cae3f)

---

 src/gallium/drivers/r600/r600_state.c |   13 +++--
 1 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index bf194f5..1f50ed6 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -3042,14 +3042,15 @@ static boolean r600_dma_copy_tile(struct r600_context 
*rctx,
return FALSE;
}
 
-   size = (copy_height * pitch)  2;
-   ncopy = (size / 0x) + !!(size % 0x);
+   /* It's a r6xx/r7xx limitation, the blit must be on 8 boundary for 
number
+* line in the blit. Compute max 8 line we can copy in the size limit
+*/
+   cheight = ((0x  2) / pitch)  0xfff8;
+   ncopy = (copy_height / cheight) + !!(copy_height % cheight);
r600_need_dma_space(rctx, ncopy * 7);
+
for (i = 0; i  ncopy; i++) {
-   cheight = copy_height;
-   if (((cheight * pitch)  2)  0x) {
-   cheight = (0x  2) / pitch;
-   }
+   cheight = cheight  copy_height ? copy_height : cheight;
size = (cheight * pitch)  2;
/* emit reloc before writting cs so that cs is always in 
consistent state */
r600_context_bo_reloc(rctx, rctx-rings.dma, rsrc-resource, 
RADEON_USAGE_READ);

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


Mesa (master): xorg: fix exa finish access

2013-02-08 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 3310acdf4756feb82bf043e7663b6dd8d6e3f7c9
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3310acdf4756feb82bf043e7663b6dd8d6e3f7c9

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Feb  8 18:57:42 2013 -0500

xorg: fix exa finish access

The exa core will already set the pointer to NULL prior calling
the callback function. So don't bail out in the callback if it's
already NULL.

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

---

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

diff --git a/src/gallium/state_trackers/xorg/xorg_exa.c 
b/src/gallium/state_trackers/xorg/xorg_exa.c
index f010be6..3e764f8 100644
--- a/src/gallium/state_trackers/xorg/xorg_exa.c
+++ b/src/gallium/state_trackers/xorg/xorg_exa.c
@@ -318,7 +318,7 @@ ExaFinishAccess(PixmapPtr pPix, int index)
 if (!priv)
return;
 
-if (!priv-map_transfer || pPix-devPrivate.ptr == NULL)
+if (!priv-map_transfer)
return;
 
 exa_debug_printf(ExaFinishAccess %d\n, index);

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


Mesa (9.1): xorg: fix exa finish access

2013-02-08 Thread Jerome Glisse
Module: Mesa
Branch: 9.1
Commit: 18ef6b1265dcd83f511f287388f5e8533e97b35a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=18ef6b1265dcd83f511f287388f5e8533e97b35a

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Feb  8 18:57:42 2013 -0500

xorg: fix exa finish access

The exa core will already set the pointer to NULL prior calling
the callback function. So don't bail out in the callback if it's
already NULL.

Signed-off-by: Jerome Glisse jgli...@redhat.com
(cherry picked from commit 3310acdf4756feb82bf043e7663b6dd8d6e3f7c9)

---

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

diff --git a/src/gallium/state_trackers/xorg/xorg_exa.c 
b/src/gallium/state_trackers/xorg/xorg_exa.c
index f010be6..3e764f8 100644
--- a/src/gallium/state_trackers/xorg/xorg_exa.c
+++ b/src/gallium/state_trackers/xorg/xorg_exa.c
@@ -318,7 +318,7 @@ ExaFinishAccess(PixmapPtr pPix, int index)
 if (!priv)
return;
 
-if (!priv-map_transfer || pPix-devPrivate.ptr == NULL)
+if (!priv-map_transfer)
return;
 
 exa_debug_printf(ExaFinishAccess %d\n, index);

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


Mesa (master): winsys/radeon: improve debuging printing

2013-02-08 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 9a4768456434f8719e6168254224c9554877230d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9a4768456434f8719e6168254224c9554877230d

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Feb  8 20:28:06 2013 -0500

winsys/radeon: improve debuging printing

Make sure one can identify virtual address failure from allocation
failure.

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

---

 src/gallium/winsys/radeon/drm/radeon_drm_bo.c |3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c 
b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
index 6daafc3..bb6e954 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
@@ -593,10 +593,11 @@ static struct pb_buffer *radeon_bomgr_create_bo(struct 
pb_manager *_mgr,
 va.offset = bo-va;
 r = drmCommandWriteRead(rws-fd, DRM_RADEON_GEM_VA, va, sizeof(va));
 if (r  va.operation == RADEON_VA_RESULT_ERROR) {
-fprintf(stderr, radeon: Failed to allocate a buffer:\n);
+fprintf(stderr, radeon: Failed to allocate virtual address for 
buffer:\n);
 fprintf(stderr, radeon:size  : %d bytes\n, size);
 fprintf(stderr, radeon:alignment : %d bytes\n, 
desc-alignment);
 fprintf(stderr, radeon:domains   : %d\n, 
args.initial_domain);
+fprintf(stderr, radeon:va: 0x%016llx\n, (unsigned 
long long)bo-va);
 radeon_bo_destroy(bo-base);
 return NULL;
 }

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


Mesa (9.1): winsys/radeon: improve debuging printing

2013-02-08 Thread Jerome Glisse
Module: Mesa
Branch: 9.1
Commit: a0528269a3673e4c4e43c96a9bdc2cb98f1968f2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a0528269a3673e4c4e43c96a9bdc2cb98f1968f2

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Feb  8 20:28:06 2013 -0500

winsys/radeon: improve debuging printing

Make sure one can identify virtual address failure from allocation
failure.

Signed-off-by: Jerome Glisse jgli...@redhat.com
(cherry picked from commit 9a4768456434f8719e6168254224c9554877230d)

---

 src/gallium/winsys/radeon/drm/radeon_drm_bo.c |3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c 
b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
index 6daafc3..bb6e954 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
@@ -593,10 +593,11 @@ static struct pb_buffer *radeon_bomgr_create_bo(struct 
pb_manager *_mgr,
 va.offset = bo-va;
 r = drmCommandWriteRead(rws-fd, DRM_RADEON_GEM_VA, va, sizeof(va));
 if (r  va.operation == RADEON_VA_RESULT_ERROR) {
-fprintf(stderr, radeon: Failed to allocate a buffer:\n);
+fprintf(stderr, radeon: Failed to allocate virtual address for 
buffer:\n);
 fprintf(stderr, radeon:size  : %d bytes\n, size);
 fprintf(stderr, radeon:alignment : %d bytes\n, 
desc-alignment);
 fprintf(stderr, radeon:domains   : %d\n, 
args.initial_domain);
+fprintf(stderr, radeon:va: 0x%016llx\n, (unsigned 
long long)bo-va);
 radeon_bo_destroy(bo-base);
 return NULL;
 }

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


Mesa (master): r600g: fix slice tile max for compressed texture and async dma

2013-02-07 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 681707abf2121e9d02c6fd13e312fd103f26949c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=681707abf2121e9d02c6fd13e312fd103f26949c

Author: Jerome Glisse jgli...@redhat.com
Date:   Wed Feb  6 13:54:02 2013 -0500

r600g: fix slice tile max for compressed texture and async dma

Was using the pixel size instead of the number of block for the slice
tile max computation which resulted in dma writing at wrong address.

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

---

 src/gallium/drivers/r600/evergreen_state.c |6 --
 src/gallium/drivers/r600/r600_state.c  |6 --
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index f076fca..211c218 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -3532,7 +3532,8 @@ static void evergreen_dma_copy_tile(struct r600_context 
*rctx,
if (dst_mode == RADEON_SURF_MODE_LINEAR) {
/* T2L */
array_mode = evergreen_array_mode(src_mode);
-   slice_tile_max = (((pitch * 
rsrc-surface.level[src_level].npix_y)  6) / bpp) - 1;
+   slice_tile_max = (rsrc-surface.level[src_level].nblk_x * 
rsrc-surface.level[src_level].nblk_y)  6;
+   slice_tile_max = slice_tile_max ? slice_tile_max - 1 : 0;
/* linear height must be the same as the slice tile max height, 
it's ok even
 * if the linear destination/source have smaller heigh as the 
size of the
 * dma packet will be using the copy_height which is always 
smaller or equal
@@ -3556,7 +3557,8 @@ static void evergreen_dma_copy_tile(struct r600_context 
*rctx,
} else {
/* L2T */
array_mode = evergreen_array_mode(dst_mode);
-   slice_tile_max = (((pitch * 
rdst-surface.level[dst_level].npix_y)  6) / bpp) - 1;
+   slice_tile_max = (rdst-surface.level[dst_level].nblk_x * 
rdst-surface.level[dst_level].nblk_y)  6;
+   slice_tile_max = slice_tile_max ? slice_tile_max - 1 : 0;
/* linear height must be the same as the slice tile max height, 
it's ok even
 * if the linear destination/source have smaller heigh as the 
size of the
 * dma packet will be using the copy_height which is always 
smaller or equal
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index 1e2f2dd..67c4d99 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -3027,7 +3027,8 @@ static boolean r600_dma_copy_tile(struct r600_context 
*rctx,
if (dst_mode == RADEON_SURF_MODE_LINEAR) {
/* T2L */
array_mode = r600_array_mode(src_mode);
-   slice_tile_max = (((pitch * 
rsrc-surface.level[src_level].npix_y)  6) / bpp) - 1;
+   slice_tile_max = (rsrc-surface.level[src_level].nblk_x * 
rsrc-surface.level[src_level].nblk_y)  6;
+   slice_tile_max = slice_tile_max ? slice_tile_max - 1 : 0;
/* linear height must be the same as the slice tile max height, 
it's ok even
 * if the linear destination/source have smaller heigh as the 
size of the
 * dma packet will be using the copy_height which is always 
smaller or equal
@@ -3045,7 +3046,8 @@ static boolean r600_dma_copy_tile(struct r600_context 
*rctx,
} else {
/* L2T */
array_mode = r600_array_mode(dst_mode);
-   slice_tile_max = (((pitch * 
rdst-surface.level[dst_level].npix_y)  6) / bpp) - 1;
+   slice_tile_max = (rdst-surface.level[dst_level].nblk_x * 
rdst-surface.level[dst_level].nblk_y)  6;
+   slice_tile_max = slice_tile_max ? slice_tile_max - 1 : 0;
/* linear height must be the same as the slice tile max height, 
it's ok even
 * if the linear destination/source have smaller heigh as the 
size of the
 * dma packet will be using the copy_height which is always 
smaller or equal

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


Mesa (9.1): r600g: fix slice tile max for compressed texture and async dma

2013-02-07 Thread Jerome Glisse
Module: Mesa
Branch: 9.1
Commit: d04b50b4de63cc76b2ac2a45e9e63728ae155b36
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d04b50b4de63cc76b2ac2a45e9e63728ae155b36

Author: Jerome Glisse jgli...@redhat.com
Date:   Wed Feb  6 13:54:02 2013 -0500

r600g: fix slice tile max for compressed texture and async dma

Was using the pixel size instead of the number of block for the slice
tile max computation which resulted in dma writing at wrong address.

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

---

 src/gallium/drivers/r600/evergreen_state.c |6 --
 src/gallium/drivers/r600/r600_state.c  |6 --
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 5dd8b13..ad2f731 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -3506,7 +3506,8 @@ static void evergreen_dma_copy_tile(struct r600_context 
*rctx,
if (dst_mode == RADEON_SURF_MODE_LINEAR) {
/* T2L */
array_mode = evergreen_array_mode(src_mode);
-   slice_tile_max = (((pitch * 
rsrc-surface.level[src_level].npix_y)  6) / bpp) - 1;
+   slice_tile_max = (rsrc-surface.level[src_level].nblk_x * 
rsrc-surface.level[src_level].nblk_y)  6;
+   slice_tile_max = slice_tile_max ? slice_tile_max - 1 : 0;
/* linear height must be the same as the slice tile max height, 
it's ok even
 * if the linear destination/source have smaller heigh as the 
size of the
 * dma packet will be using the copy_height which is always 
smaller or equal
@@ -3530,7 +3531,8 @@ static void evergreen_dma_copy_tile(struct r600_context 
*rctx,
} else {
/* L2T */
array_mode = evergreen_array_mode(dst_mode);
-   slice_tile_max = (((pitch * 
rdst-surface.level[dst_level].npix_y)  6) / bpp) - 1;
+   slice_tile_max = (rdst-surface.level[dst_level].nblk_x * 
rdst-surface.level[dst_level].nblk_y)  6;
+   slice_tile_max = slice_tile_max ? slice_tile_max - 1 : 0;
/* linear height must be the same as the slice tile max height, 
it's ok even
 * if the linear destination/source have smaller heigh as the 
size of the
 * dma packet will be using the copy_height which is always 
smaller or equal
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index 44cd00e..bf194f5 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -3001,7 +3001,8 @@ static boolean r600_dma_copy_tile(struct r600_context 
*rctx,
if (dst_mode == RADEON_SURF_MODE_LINEAR) {
/* T2L */
array_mode = r600_array_mode(src_mode);
-   slice_tile_max = (((pitch * 
rsrc-surface.level[src_level].npix_y)  6) / bpp) - 1;
+   slice_tile_max = (rsrc-surface.level[src_level].nblk_x * 
rsrc-surface.level[src_level].nblk_y)  6;
+   slice_tile_max = slice_tile_max ? slice_tile_max - 1 : 0;
/* linear height must be the same as the slice tile max height, 
it's ok even
 * if the linear destination/source have smaller heigh as the 
size of the
 * dma packet will be using the copy_height which is always 
smaller or equal
@@ -3019,7 +3020,8 @@ static boolean r600_dma_copy_tile(struct r600_context 
*rctx,
} else {
/* L2T */
array_mode = r600_array_mode(dst_mode);
-   slice_tile_max = (((pitch * 
rdst-surface.level[dst_level].npix_y)  6) / bpp) - 1;
+   slice_tile_max = (rdst-surface.level[dst_level].nblk_x * 
rdst-surface.level[dst_level].nblk_y)  6;
+   slice_tile_max = slice_tile_max ? slice_tile_max - 1 : 0;
/* linear height must be the same as the slice tile max height, 
it's ok even
 * if the linear destination/source have smaller heigh as the 
size of the
 * dma packet will be using the copy_height which is always 
smaller or equal

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


Mesa (master): r600g: add cs memory usage accounting and limit it v3

2013-01-31 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 5e0c956cb219e54dfc22e64ac3f00e22619c763f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5e0c956cb219e54dfc22e64ac3f00e22619c763f

Author: Jerome Glisse jgli...@redhat.com
Date:   Tue Jan 29 12:52:17 2013 -0500

r600g: add cs memory usage accounting and limit it v3

We are now seing cs that can go over the vram+gtt size to avoid
failing flush early cs that goes over 70% (gtt+vram) usage. 70%
is use to allow some fragmentation.

The idea is to compute a gross estimate of memory requirement of
each draw call. After each draw call, memory will be precisely
accounted. So the uncertainty is only on the current draw call.
In practice this gave very good estimate (+/- 10% of the target
memory limit).

v2: Remove left over from testing version, remove useless NULL
checking. Improve commit message.
v3: Add comment to code on memory accounting precision

Signed-off-by: Jerome Glisse jgli...@redhat.com
Reviewed-by: Marek Olšák mar...@gmail.com

---

 src/gallium/drivers/r600/evergreen_state.c|4 +++
 src/gallium/drivers/r600/r600_hw_context.c|   12 ++
 src/gallium/drivers/r600/r600_pipe.h  |   28 +
 src/gallium/drivers/r600/r600_state.c |3 ++
 src/gallium/drivers/r600/r600_state_common.c  |   13 ++-
 src/gallium/winsys/radeon/drm/radeon_drm_cs.c |   11 +
 src/gallium/winsys/radeon/drm/radeon_winsys.h |   10 +
 7 files changed, 80 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 0a3861f..5dd8b13 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1668,6 +1668,8 @@ static void evergreen_set_framebuffer_state(struct 
pipe_context *ctx,
surf = (struct r600_surface*)state-cbufs[i];
rtex = (struct r600_texture*)surf-base.texture;
 
+   r600_context_add_resource_size(ctx, state-cbufs[i]-texture);
+
if (!surf-color_initialized) {
evergreen_init_color_surface(rctx, surf);
}
@@ -1699,6 +1701,8 @@ static void evergreen_set_framebuffer_state(struct 
pipe_context *ctx,
if (state-zsbuf) {
surf = (struct r600_surface*)state-zsbuf;
 
+   r600_context_add_resource_size(ctx, state-zsbuf-texture);
+
if (!surf-depth_initialized) {
evergreen_init_depth_surface(rctx, surf);
}
diff --git a/src/gallium/drivers/r600/r600_hw_context.c 
b/src/gallium/drivers/r600/r600_hw_context.c
index 23f488a..a89f230 100644
--- a/src/gallium/drivers/r600/r600_hw_context.c
+++ b/src/gallium/drivers/r600/r600_hw_context.c
@@ -359,6 +359,16 @@ out_err:
 void r600_need_cs_space(struct r600_context *ctx, unsigned num_dw,
boolean count_draw_in)
 {
+   if (!ctx-ws-cs_memory_below_limit(ctx-rings.gfx.cs, ctx-vram, 
ctx-gtt)) {
+   ctx-gtt = 0;
+   ctx-vram = 0;
+   ctx-rings.gfx.flush(ctx, RADEON_FLUSH_ASYNC);
+   return;
+   }
+   /* all will be accounted once relocation are emited */
+   ctx-gtt = 0;
+   ctx-vram = 0;
+
/* The number of dwords we already used in the CS so far. */
num_dw += ctx-rings.gfx.cs-cdw;
 
@@ -784,6 +794,8 @@ void r600_begin_new_cs(struct r600_context *ctx)
 
ctx-pm4_dirty_cdwords = 0;
ctx-flags = 0;
+   ctx-gtt = 0;
+   ctx-vram = 0;
 
/* Begin a new CS. */
r600_emit_command_buffer(ctx-rings.gfx.cs, ctx-start_cs_cmd);
diff --git a/src/gallium/drivers/r600/r600_pipe.h 
b/src/gallium/drivers/r600/r600_pipe.h
index 3ff42d3..ec59c92 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium/drivers/r600/r600_pipe.h
@@ -447,6 +447,10 @@ struct r600_context {
unsignedbackend_mask;
unsignedmax_db; /* for OQ */
 
+   /* current unaccounted memory usage */
+   uint64_tvram;
+   uint64_tgtt;
+
/* Miscellaneous state objects. */
void*custom_dsa_flush;
void*custom_blend_resolve;
@@ -998,4 +1002,28 @@ static INLINE unsigned u_max_layer(struct pipe_resource 
*r, unsigned level)
}
 }
 
+static INLINE void r600_context_add_resource_size(struct pipe_context *ctx, 
struct pipe_resource *r)
+{
+   struct r600_context *rctx = (struct r600_context *)ctx;
+   struct r600_resource *rr = (struct r600_resource *)r;
+
+   if (r == NULL) {
+   return;
+   }
+
+   /*
+* The idea is to compute a gross estimate of memory requirement of
+* each draw call. After each draw call, memory will be precisely
+* accounted. So the uncertainty is only on the current draw call

Mesa (9.1): r600g: fix htile buffer leak

2013-01-31 Thread Jerome Glisse
Module: Mesa
Branch: 9.1
Commit: 3b8d4f941f34a5e839c40606074d77822b8ca8c7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3b8d4f941f34a5e839c40606074d77822b8ca8c7

Author: Marek Olšák mar...@gmail.com
Date:   Thu Jan 31 15:29:16 2013 +0100

r600g: fix htile buffer leak

NOTE: This is a candidate for the 9.1 branch.

---

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

diff --git a/src/gallium/drivers/r600/r600_texture.c 
b/src/gallium/drivers/r600/r600_texture.c
index 1d04cc0..85fc887 100644
--- a/src/gallium/drivers/r600/r600_texture.c
+++ b/src/gallium/drivers/r600/r600_texture.c
@@ -270,6 +270,7 @@ static void r600_texture_destroy(struct pipe_screen *screen,
if (rtex-flushed_depth_texture)
pipe_resource_reference((struct pipe_resource 
**)rtex-flushed_depth_texture, NULL);
 
+pipe_resource_reference((struct pipe_resource**)rtex-htile, NULL);
pb_reference(resource-buf, NULL);
FREE(rtex);
 }

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


Mesa (9.1): r600g: add cs memory usage accounting and limit it v3

2013-01-31 Thread Jerome Glisse
Module: Mesa
Branch: 9.1
Commit: 9d8a866db319421b63ef3784ae22e51a06c94803
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9d8a866db319421b63ef3784ae22e51a06c94803

Author: Jerome Glisse jgli...@redhat.com
Date:   Tue Jan 29 12:52:17 2013 -0500

r600g: add cs memory usage accounting and limit it v3

We are now seing cs that can go over the vram+gtt size to avoid
failing flush early cs that goes over 70% (gtt+vram) usage. 70%
is use to allow some fragmentation.

The idea is to compute a gross estimate of memory requirement of
each draw call. After each draw call, memory will be precisely
accounted. So the uncertainty is only on the current draw call.
In practice this gave very good estimate (+/- 10% of the target
memory limit).

v2: Remove left over from testing version, remove useless NULL
checking. Improve commit message.
v3: Add comment to code on memory accounting precision

Signed-off-by: Jerome Glisse jgli...@redhat.com
Reviewed-by: Marek Olšák mar...@gmail.com

---

 src/gallium/drivers/r600/evergreen_state.c|4 +++
 src/gallium/drivers/r600/r600_hw_context.c|   12 ++
 src/gallium/drivers/r600/r600_pipe.h  |   28 +
 src/gallium/drivers/r600/r600_state.c |3 ++
 src/gallium/drivers/r600/r600_state_common.c  |   13 ++-
 src/gallium/winsys/radeon/drm/radeon_drm_cs.c |   11 +
 src/gallium/winsys/radeon/drm/radeon_winsys.h |   10 +
 7 files changed, 80 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 0a3861f..5dd8b13 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1668,6 +1668,8 @@ static void evergreen_set_framebuffer_state(struct 
pipe_context *ctx,
surf = (struct r600_surface*)state-cbufs[i];
rtex = (struct r600_texture*)surf-base.texture;
 
+   r600_context_add_resource_size(ctx, state-cbufs[i]-texture);
+
if (!surf-color_initialized) {
evergreen_init_color_surface(rctx, surf);
}
@@ -1699,6 +1701,8 @@ static void evergreen_set_framebuffer_state(struct 
pipe_context *ctx,
if (state-zsbuf) {
surf = (struct r600_surface*)state-zsbuf;
 
+   r600_context_add_resource_size(ctx, state-zsbuf-texture);
+
if (!surf-depth_initialized) {
evergreen_init_depth_surface(rctx, surf);
}
diff --git a/src/gallium/drivers/r600/r600_hw_context.c 
b/src/gallium/drivers/r600/r600_hw_context.c
index 23f488a..a89f230 100644
--- a/src/gallium/drivers/r600/r600_hw_context.c
+++ b/src/gallium/drivers/r600/r600_hw_context.c
@@ -359,6 +359,16 @@ out_err:
 void r600_need_cs_space(struct r600_context *ctx, unsigned num_dw,
boolean count_draw_in)
 {
+   if (!ctx-ws-cs_memory_below_limit(ctx-rings.gfx.cs, ctx-vram, 
ctx-gtt)) {
+   ctx-gtt = 0;
+   ctx-vram = 0;
+   ctx-rings.gfx.flush(ctx, RADEON_FLUSH_ASYNC);
+   return;
+   }
+   /* all will be accounted once relocation are emited */
+   ctx-gtt = 0;
+   ctx-vram = 0;
+
/* The number of dwords we already used in the CS so far. */
num_dw += ctx-rings.gfx.cs-cdw;
 
@@ -784,6 +794,8 @@ void r600_begin_new_cs(struct r600_context *ctx)
 
ctx-pm4_dirty_cdwords = 0;
ctx-flags = 0;
+   ctx-gtt = 0;
+   ctx-vram = 0;
 
/* Begin a new CS. */
r600_emit_command_buffer(ctx-rings.gfx.cs, ctx-start_cs_cmd);
diff --git a/src/gallium/drivers/r600/r600_pipe.h 
b/src/gallium/drivers/r600/r600_pipe.h
index 3ff42d3..ec59c92 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium/drivers/r600/r600_pipe.h
@@ -447,6 +447,10 @@ struct r600_context {
unsignedbackend_mask;
unsignedmax_db; /* for OQ */
 
+   /* current unaccounted memory usage */
+   uint64_tvram;
+   uint64_tgtt;
+
/* Miscellaneous state objects. */
void*custom_dsa_flush;
void*custom_blend_resolve;
@@ -998,4 +1002,28 @@ static INLINE unsigned u_max_layer(struct pipe_resource 
*r, unsigned level)
}
 }
 
+static INLINE void r600_context_add_resource_size(struct pipe_context *ctx, 
struct pipe_resource *r)
+{
+   struct r600_context *rctx = (struct r600_context *)ctx;
+   struct r600_resource *rr = (struct r600_resource *)r;
+
+   if (r == NULL) {
+   return;
+   }
+
+   /*
+* The idea is to compute a gross estimate of memory requirement of
+* each draw call. After each draw call, memory will be precisely
+* accounted. So the uncertainty is only on the current draw call

Mesa (9.0): r600g: add cs memory usage accounting and limit it v3 ( backport for mesa 9.0)

2013-01-31 Thread Jerome Glisse
Module: Mesa
Branch: 9.0
Commit: 78222e63630280b96488de0d51d1b2578e26f814
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=78222e63630280b96488de0d51d1b2578e26f814

Author: Jerome Glisse jgli...@redhat.com
Date:   Wed Jan 30 15:02:32 2013 -0500

r600g: add cs memory usage accounting and limit it v3 (backport for mesa 9.0)

We are now seing cs that can go over the vram+gtt size to avoid
failing flush early cs that goes over 70% (gtt+vram) usage. 70%
is use to allow some fragmentation.

The idea is to compute a gross estimate of memory requirement of
each draw call. After each draw call, memory will be precisely
accounted. So the uncertainty is only on the current draw call.
In practice this gave very good estimate (+/- 10% of the target
memory limit).

v2: Remove left over from testing version, remove useless NULL
checking. Improve commit message.
v3: Add comment to code on memory accounting precision

This version is a backport for mesa 9.0

Signed-off-by: Jerome Glisse jgli...@redhat.com
Reviewed-by: Marek Olšák mar...@gmail.com

---

 src/gallium/drivers/r600/evergreen_state.c|4 +++
 src/gallium/drivers/r600/r600_hw_context.c|   12 ++
 src/gallium/drivers/r600/r600_pipe.h  |   28 +
 src/gallium/drivers/r600/r600_state.c |4 +++
 src/gallium/drivers/r600/r600_state_common.c  |   13 ++-
 src/gallium/winsys/radeon/drm/radeon_drm_cs.c |   11 +
 src/gallium/winsys/radeon/drm/radeon_winsys.h |   10 +
 7 files changed, 81 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 6bf4247..a17ba17 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1721,6 +1721,8 @@ static void evergreen_set_framebuffer_state(struct 
pipe_context *ctx,
res = (struct r600_resource*)surf-base.texture;
rtex = (struct r600_texture*)res;
 
+   r600_context_add_resource_size(ctx, state-cbufs[i]-texture);
+
if (!surf-color_initialized) {
evergreen_init_color_surface(rctx, surf);
}
@@ -1787,6 +1789,8 @@ static void evergreen_set_framebuffer_state(struct 
pipe_context *ctx,
surf = (struct r600_surface*)state-zsbuf;
res = (struct r600_resource*)surf-base.texture;
 
+   r600_context_add_resource_size(ctx, state-zsbuf-texture);
+
if (!surf-depth_initialized) {
evergreen_init_depth_surface(rctx, surf);
}
diff --git a/src/gallium/drivers/r600/r600_hw_context.c 
b/src/gallium/drivers/r600/r600_hw_context.c
index af27fd9..d5efd86 100644
--- a/src/gallium/drivers/r600/r600_hw_context.c
+++ b/src/gallium/drivers/r600/r600_hw_context.c
@@ -635,6 +635,16 @@ void r600_need_cs_space(struct r600_context *ctx, unsigned 
num_dw,
 {
struct r600_atom *state;
 
+   if (!ctx-ws-cs_memory_below_limit(ctx-cs, ctx-vram, ctx-gtt)) {
+   ctx-gtt = 0;
+   ctx-vram = 0;
+   r600_flush(ctx-context, NULL, RADEON_FLUSH_ASYNC);
+   return;
+   }
+   /* all will be accounted once relocation are emited */
+   ctx-gtt = 0;
+   ctx-vram = 0;
+
/* The number of dwords we already used in the CS so far. */
num_dw += ctx-cs-cdw;
 
@@ -953,6 +963,8 @@ void r600_context_flush(struct r600_context *ctx, unsigned 
flags)
 
ctx-pm4_dirty_cdwords = 0;
ctx-flags = 0;
+   ctx-gtt = 0;
+   ctx-vram = 0;
 
/* Begin a new CS. */
r600_emit_atom(ctx, ctx-start_cs_cmd.atom);
diff --git a/src/gallium/drivers/r600/r600_pipe.h 
b/src/gallium/drivers/r600/r600_pipe.h
index 721334d..ba75c9d 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium/drivers/r600/r600_pipe.h
@@ -371,6 +371,10 @@ struct r600_context {
 
unsigned default_ps_gprs, default_vs_gprs;
 
+   /* current unaccounted memory usage */
+   uint64_tvram;
+   uint64_tgtt;
+
/* States based on r600_atom. */
struct list_headdirty_states;
struct r600_command_buffer  start_cs_cmd; /* invariant state mostly 
*/
@@ -886,4 +890,28 @@ static INLINE uint64_t r600_resource_va(struct pipe_screen 
*screen, struct pipe_
return rscreen-ws-buffer_get_virtual_address(rresource-cs_buf);
 }
 
+static INLINE void r600_context_add_resource_size(struct pipe_context *ctx, 
struct pipe_resource *r)
+{
+   struct r600_context *rctx = (struct r600_context *)ctx;
+   struct r600_resource *rr = (struct r600_resource *)r;
+
+   if (r == NULL) {
+   return;
+   }
+
+   /*
+* The idea is to compute a gross estimate of memory requirement of
+* each draw call. After each draw call, memory will be precisely
+* accounted

Mesa (master): radeon/winsys: add dma ring support to winsys v3

2013-01-28 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 6c064fd7492ea835f873112bc3189bb1920aad32
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6c064fd7492ea835f873112bc3189bb1920aad32

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Jan  7 11:49:23 2013 -0500

radeon/winsys: add dma ring support to winsys v3

Add ring support, you can create a cs for each ring. DMA ring is
bit special regarding relocation as you must emit as much relocation
as there is use of the buffer.

v2: - Improved comment on relocation changes
- Use a single thread to queue cs submittion this simplify driver
  code while not impacting performances. Rational for this is that
  you have to wait for all previous submission to have completed
  so there was never a case while we could have 2 different thread
  submitting a command stream at the same time. This code just
  consolidate submission into one single thread per winsys.
v3: - Do not use semaphore for empty queue signaling, instead use
  cond var. This is because it's tricky to maintain an even number
  of call to semaphore wait and semaphore signal (the number of
  cs in the stack would for instance make that number vary).

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

---

 src/gallium/drivers/r300/r300_context.c   |2 +-
 src/gallium/drivers/r600/r600_pipe.c  |2 +-
 src/gallium/drivers/radeonsi/radeonsi_pipe.c  |2 +-
 src/gallium/winsys/radeon/drm/radeon_drm_bo.c |2 +-
 src/gallium/winsys/radeon/drm/radeon_drm_cs.c |  160 -
 src/gallium/winsys/radeon/drm/radeon_drm_cs.h |8 +-
 src/gallium/winsys/radeon/drm/radeon_drm_winsys.c |   87 +++
 src/gallium/winsys/radeon/drm/radeon_drm_winsys.h |   17 +++
 src/gallium/winsys/radeon/drm/radeon_winsys.h |   20 +++-
 9 files changed, 218 insertions(+), 82 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_context.c 
b/src/gallium/drivers/r300/r300_context.c
index d8af13f..340a7f0 100644
--- a/src/gallium/drivers/r300/r300_context.c
+++ b/src/gallium/drivers/r300/r300_context.c
@@ -379,7 +379,7 @@ struct pipe_context* r300_create_context(struct 
pipe_screen* screen,
  sizeof(struct pipe_transfer), 64,
  UTIL_SLAB_SINGLETHREADED);
 
-r300-cs = rws-cs_create(rws);
+r300-cs = rws-cs_create(rws, RING_GFX);
 if (r300-cs == NULL)
 goto fail;
 
diff --git a/src/gallium/drivers/r600/r600_pipe.c 
b/src/gallium/drivers/r600/r600_pipe.c
index fda5074..e4a35cf 100644
--- a/src/gallium/drivers/r600/r600_pipe.c
+++ b/src/gallium/drivers/r600/r600_pipe.c
@@ -289,7 +289,7 @@ static struct pipe_context *r600_create_context(struct 
pipe_screen *screen, void
goto fail;
}
 
-   rctx-cs = rctx-ws-cs_create(rctx-ws);
+   rctx-cs = rctx-ws-cs_create(rctx-ws, RING_GFX);
rctx-ws-cs_set_flush_callback(rctx-cs, r600_flush_from_winsys, rctx);
 
rctx-uploader = u_upload_create(rctx-context, 1024 * 1024, 256,
diff --git a/src/gallium/drivers/radeonsi/radeonsi_pipe.c 
b/src/gallium/drivers/radeonsi/radeonsi_pipe.c
index 2f97609..471dd48 100644
--- a/src/gallium/drivers/radeonsi/radeonsi_pipe.c
+++ b/src/gallium/drivers/radeonsi/radeonsi_pipe.c
@@ -225,7 +225,7 @@ static struct pipe_context *r600_create_context(struct 
pipe_screen *screen, void
case TAHITI:
si_init_state_functions(rctx);
LIST_INITHEAD(rctx-active_query_list);
-   rctx-cs = rctx-ws-cs_create(rctx-ws);
+   rctx-cs = rctx-ws-cs_create(rctx-ws, RING_GFX);
rctx-max_db = 8;
si_init_config(rctx);
break;
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c 
b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
index 897e962..6daafc3 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
@@ -453,7 +453,7 @@ static void *radeon_bo_map(struct radeon_winsys_cs_handle 
*buf,
 } else {
 /* Try to avoid busy-waiting in radeon_bo_wait. */
 if (p_atomic_read(bo-num_active_ioctls))
-radeon_drm_cs_sync_flush(cs);
+radeon_drm_cs_sync_flush(rcs);
 }
 
 radeon_bo_wait((struct pb_buffer*)bo, RADEON_USAGE_READWRITE);
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_cs.c 
b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c
index c5e7f1e..cab2704 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_cs.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c
@@ -90,6 +90,10 @@
 #define RADEON_CS_RING_COMPUTE  1
 #endif
 
+#ifndef RADEON_CS_RING_DMA
+#define RADEON_CS_RING_DMA  2
+#endif
+
 #ifndef RADEON_CS_END_OF_FRAME
 #define RADEON_CS_END_OF_FRAME  0x04
 #endif
@@ -158,10 +162,8 @@ static void radeon_destroy_cs_context(struct 
radeon_cs_context *csc)
 FREE(csc-relocs

Mesa (master): r600g: add multi ring support with dma as first second ring v4

2013-01-28 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: bff07638a86d36ac826fb287214eda9ce31c02ad
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bff07638a86d36ac826fb287214eda9ce31c02ad

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Jan  7 14:25:11 2013 -0500

r600g: add multi ring support with dma as first second ring v4

We keep track of ring emission order in a stack, whenever we need to
flush we empty the stack in a fifo order. There is few helpers function
for bo mapping and other ring activities that will make sure that
the ring stack is properly flush and submitted.

v2: fix st flush path, and other flush path to properly flush all
rings if necessary
v3: - improve name of ring helpers
- make sure that each time a cs is gona be written it endup at
  top of the stack to avoid any issue such as :
  STACK[0] = dma (withbo A,B)
  STACK[1] = gfx (withbo C,D)
  Now if code try to emit a dma command relative to bo C or D
  it will start writting cmd stream into the cs and once it
  reach the point where it adds relocation it will flush.
  At that point the cs will have cmd that don't have proper
  relocation into the relocation buffer and kernel will just
  refuse to run.
v4: - Drop the stack idea as it turn out there is no way to use it
  or benefit from it. Any time the driver start command on other
  ring, it always need to flush the previous ring. So make code
  simpler by not using a stack.

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

---

 src/gallium/drivers/r600/evergreen_compute.c   |   30 ++--
 .../drivers/r600/evergreen_compute_internal.c  |   42 +++---
 src/gallium/drivers/r600/evergreen_hw_context.c|4 +-
 src/gallium/drivers/r600/evergreen_state.c |   56 +
 src/gallium/drivers/r600/r600_asm.c|3 +-
 src/gallium/drivers/r600/r600_buffer.c |   17 ++-
 src/gallium/drivers/r600/r600_hw_context.c |   51 
 src/gallium/drivers/r600/r600_pipe.c   |  142 +---
 src/gallium/drivers/r600/r600_pipe.h   |   40 +-
 src/gallium/drivers/r600/r600_query.c  |   24 ++--
 src/gallium/drivers/r600/r600_shader.c |2 +-
 src/gallium/drivers/r600/r600_state.c  |   48 ---
 src/gallium/drivers/r600/r600_state_common.c   |   29 +++--
 src/gallium/drivers/r600/r600_texture.c|   15 +-
 14 files changed, 327 insertions(+), 176 deletions(-)

Diff:   
http://cgit.freedesktop.org/mesa/mesa/diff/?id=bff07638a86d36ac826fb287214eda9ce31c02ad
___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600g: add async for staging buffer upload v2

2013-01-28 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 325422c49449acdd8df1eb2ca8ed81f7696c38cc
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=325422c49449acdd8df1eb2ca8ed81f7696c38cc

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Jan  7 17:45:59 2013 -0500

r600g: add async for staging buffer upload v2

v2: Add virtual address to dma src/dst offset for cayman

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

---

 src/gallium/drivers/r600/evergreen_hw_context.c |   46 +
 src/gallium/drivers/r600/evergreen_state.c  |  201 +++
 src/gallium/drivers/r600/evergreend.h   |   15 ++
 src/gallium/drivers/r600/r600.h |   27 +++
 src/gallium/drivers/r600/r600_buffer.c  |   27 +++-
 src/gallium/drivers/r600/r600_hw_context.c  |   48 +-
 src/gallium/drivers/r600/r600_pipe.c|6 +-
 src/gallium/drivers/r600/r600_pipe.h|9 +
 src/gallium/drivers/r600/r600_state.c   |  190 +
 src/gallium/drivers/r600/r600_state_common.c|6 +-
 src/gallium/drivers/r600/r600_texture.c |   24 ++-
 src/gallium/drivers/r600/r600d.h|   15 ++
 12 files changed, 596 insertions(+), 18 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_hw_context.c 
b/src/gallium/drivers/r600/evergreen_hw_context.c
index fa90c9a..ca4f4b3 100644
--- a/src/gallium/drivers/r600/evergreen_hw_context.c
+++ b/src/gallium/drivers/r600/evergreen_hw_context.c
@@ -26,6 +26,7 @@
 #include r600_hw_context_priv.h
 #include evergreend.h
 #include util/u_memory.h
+#include util/u_math.h
 
 static const struct r600_reg cayman_config_reg_list[] = {
{R_009100_SPI_CONFIG_CNTL, REG_FLAG_ENABLE_ALWAYS | 
REG_FLAG_FLUSH_CHANGE, 0},
@@ -238,3 +239,48 @@ void evergreen_set_streamout_enable(struct r600_context 
*ctx, unsigned buffer_en
r600_write_context_reg(cs, R_028B94_VGT_STRMOUT_CONFIG, 
S_028B94_STREAMOUT_0_EN(0));
}
 }
+
+void evergreen_dma_copy(struct r600_context *rctx,
+   struct pipe_resource *dst,
+   struct pipe_resource *src,
+   unsigned long dst_offset,
+   unsigned long src_offset,
+   unsigned long size)
+{
+   struct radeon_winsys_cs *cs = rctx-rings.dma.cs;
+   unsigned i, ncopy, csize, sub_cmd, shift;
+   struct r600_resource *rdst = (struct r600_resource*)dst;
+   struct r600_resource *rsrc = (struct r600_resource*)src;
+
+   /* make sure that the dma ring is only one active */
+   rctx-rings.gfx.flush(rctx, RADEON_FLUSH_ASYNC);
+   dst_offset += r600_resource_va(rctx-screen-screen, dst);
+   src_offset += r600_resource_va(rctx-screen-screen, src);
+
+   /* see if we use dword or byte copy */
+   if (!(dst_offset  0x3)  !(src_offset  0x3)  !(size  0x3)) {
+   size = 2;
+   sub_cmd = 0x00;
+   shift = 2;
+   } else {
+   sub_cmd = 0x40;
+   shift = 0;
+   }
+   ncopy = (size / 0x000f) + !!(size % 0x000f);
+
+   r600_need_dma_space(rctx, ncopy * 5);
+   for (i = 0; i  ncopy; i++) {
+   csize = size  0x000f ? size : 0x000f;
+   /* emit reloc before writting cs so that cs is always in 
consistent state */
+   r600_context_bo_reloc(rctx, rctx-rings.dma, rsrc, 
RADEON_USAGE_READ);
+   r600_context_bo_reloc(rctx, rctx-rings.dma, rdst, 
RADEON_USAGE_WRITE);
+   cs-buf[cs-cdw++] = DMA_PACKET(DMA_PACKET_COPY, sub_cmd, 
csize);
+   cs-buf[cs-cdw++] = dst_offset  0x;
+   cs-buf[cs-cdw++] = src_offset  0x;
+   cs-buf[cs-cdw++] = (dst_offset  32UL)  0xff;
+   cs-buf[cs-cdw++] = (src_offset  32UL)  0xff;
+   dst_offset += csize  shift;
+   src_offset += csize  shift;
+   size -= csize;
+   }
+}
diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index d03c376..be1c427 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -30,6 +30,20 @@
 #include util/u_framebuffer.h
 #include util/u_dual_blend.h
 #include evergreen_compute.h
+#include util/u_math.h
+
+static INLINE unsigned evergreen_array_mode(unsigned mode)
+{
+   switch (mode) {
+   case RADEON_SURF_MODE_LINEAR_ALIGNED:   return 
V_028C70_ARRAY_LINEAR_ALIGNED;
+   break;
+   case RADEON_SURF_MODE_1D:   return 
V_028C70_ARRAY_1D_TILED_THIN1;
+   break;
+   case RADEON_SURF_MODE_2D:   return 
V_028C70_ARRAY_2D_TILED_THIN1;
+   default:
+   case RADEON_SURF_MODE_LINEAR:   return 
V_028C70_ARRAY_LINEAR_GENERAL;
+   }
+}
 
 static uint32_t eg_num_banks(uint32_t nbanks)
 {
@@ -3445,3 +3459,190 @@ void evergreen_update_db_shader_control(struct 
r600_context * rctx)
rctx

Mesa (master): r600g: fix segfault with old kernel

2013-01-28 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 72916698b056d0559263e84372bb45cd83a1c2c2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=72916698b056d0559263e84372bb45cd83a1c2c2

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Jan 28 14:48:46 2013 -0500

r600g: fix segfault with old kernel

Old kernel do not have dma support, patch pushed were missing some
of the check needed to not use dma.

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

---

 src/gallium/drivers/r600/evergreen_compute.c |4 +++-
 src/gallium/drivers/r600/r600_pipe.c |   20 +---
 src/gallium/drivers/r600/r600_pipe.h |2 +-
 src/gallium/drivers/r600/r600_state_common.c |4 +++-
 src/gallium/drivers/r600/r600_texture.c  |4 +++-
 5 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_compute.c 
b/src/gallium/drivers/r600/evergreen_compute.c
index f4a7905..128464e 100644
--- a/src/gallium/drivers/r600/evergreen_compute.c
+++ b/src/gallium/drivers/r600/evergreen_compute.c
@@ -321,7 +321,9 @@ static void compute_emit_cs(struct r600_context *ctx, const 
uint *block_layout,
ctx-cs_shader_state.shader-resources;
 
/* make sure that the gfx ring is only one active */
-   ctx-rings.dma.flush(ctx, RADEON_FLUSH_ASYNC);
+   if (ctx-rings.dma.cs) {
+   ctx-rings.dma.flush(ctx, RADEON_FLUSH_ASYNC);
+   }
 
/* Initialize all the compute-related registers.
 *
diff --git a/src/gallium/drivers/r600/r600_pipe.c 
b/src/gallium/drivers/r600/r600_pipe.c
index 6767412..a59578d 100644
--- a/src/gallium/drivers/r600/r600_pipe.c
+++ b/src/gallium/drivers/r600/r600_pipe.c
@@ -151,7 +151,9 @@ static void r600_flush_from_st(struct pipe_context *ctx,
*rfence = r600_create_fence(rctx);
}
/* flush gfx  dma ring, order does not matter as only one can be live 
*/
-   rctx-rings.dma.flush(rctx, fflags);
+   if (rctx-rings.dma.cs) {
+   rctx-rings.dma.flush(rctx, fflags);
+   }
rctx-rings.gfx.flush(rctx, fflags);
 }
 
@@ -179,8 +181,10 @@ boolean r600_rings_is_buffer_referenced(struct 
r600_context *ctx,
if (ctx-ws-cs_is_buffer_referenced(ctx-rings.gfx.cs, buf, usage)) {
return TRUE;
}
-   if (ctx-ws-cs_is_buffer_referenced(ctx-rings.dma.cs, buf, usage)) {
-   return TRUE;
+   if (ctx-rings.dma.cs) {
+   if (ctx-ws-cs_is_buffer_referenced(ctx-rings.dma.cs, buf, 
usage)) {
+   return TRUE;
+   }
}
return FALSE;
 }
@@ -211,10 +215,12 @@ void *r600_buffer_mmap_sync_with_rings(struct 
r600_context *ctx,
return NULL;
}
}
-   if (ctx-ws-cs_is_buffer_referenced(ctx-rings.dma.cs, 
resource-cs_buf, rusage)  ctx-rings.dma.cs-cdw) {
-   ctx-rings.dma.flush(ctx, flags);
-   if (usage  PIPE_TRANSFER_DONTBLOCK) {
-   return NULL;
+   if (ctx-rings.dma.cs) {
+   if (ctx-ws-cs_is_buffer_referenced(ctx-rings.dma.cs, 
resource-cs_buf, rusage)  ctx-rings.dma.cs-cdw) {
+   ctx-rings.dma.flush(ctx, flags);
+   if (usage  PIPE_TRANSFER_DONTBLOCK) {
+   return NULL;
+   }
}
}
 
diff --git a/src/gallium/drivers/r600/r600_pipe.h 
b/src/gallium/drivers/r600/r600_pipe.h
index 31dcd05..0f51eb2 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium/drivers/r600/r600_pipe.h
@@ -869,7 +869,7 @@ static INLINE unsigned r600_context_bo_reloc(struct 
r600_context *ctx,
 * look serialized from driver pov
 */
if (!ring-flushing) {
-   if (ring == ctx-rings.gfx) {
+   if (ring == ctx-rings.gfx  ctx-rings.dma.cs) {
/* flush dma ring */
ctx-rings.dma.flush(ctx, RADEON_FLUSH_ASYNC);
} else {
diff --git a/src/gallium/drivers/r600/r600_state_common.c 
b/src/gallium/drivers/r600/r600_state_common.c
index b547d64..9386f61 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -1274,7 +1274,9 @@ static void r600_draw_vbo(struct pipe_context *ctx, const 
struct pipe_draw_info
}
 
/* make sure that the gfx ring is only one active */
-   rctx-rings.dma.flush(rctx, RADEON_FLUSH_ASYNC);
+   if (rctx-rings.dma.cs) {
+   rctx-rings.dma.flush(rctx, RADEON_FLUSH_ASYNC);
+   }
 
if (!r600_update_derived_state(rctx)) {
/* useless to render because current rendering command
diff --git a/src/gallium/drivers/r600/r600_texture.c 
b/src/gallium/drivers/r600/r600_texture.c
index 96c3729..1d04cc0 100644
--- a/src/gallium/drivers/r600/r600_texture.c
+++ b/src/gallium/drivers/r600/r600_texture.c
@@ -851,7 +851,9 @@ static

Mesa (master): r600g: real fix for non 3.8 kernel

2013-01-28 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: da638781f63df2020f6e6ab537226cd58232bd99
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=da638781f63df2020f6e6ab537226cd58232bd99

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Jan 28 17:14:09 2013 -0500

r600g: real fix for non 3.8 kernel

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

---

 src/gallium/drivers/r600/r600_pipe.h |8 +---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_pipe.h 
b/src/gallium/drivers/r600/r600_pipe.h
index 0f51eb2..3ff42d3 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium/drivers/r600/r600_pipe.h
@@ -869,9 +869,11 @@ static INLINE unsigned r600_context_bo_reloc(struct 
r600_context *ctx,
 * look serialized from driver pov
 */
if (!ring-flushing) {
-   if (ring == ctx-rings.gfx  ctx-rings.dma.cs) {
-   /* flush dma ring */
-   ctx-rings.dma.flush(ctx, RADEON_FLUSH_ASYNC);
+   if (ring == ctx-rings.gfx) {
+   if (ctx-rings.dma.cs) {
+   /* flush dma ring */
+   ctx-rings.dma.flush(ctx, RADEON_FLUSH_ASYNC);
+   }
} else {
/* flush gfx ring */
ctx-rings.gfx.flush(ctx, RADEON_FLUSH_ASYNC);

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


Mesa (9.1): r600g: real fix for non 3.8 kernel

2013-01-28 Thread Jerome Glisse
Module: Mesa
Branch: 9.1
Commit: d8d17441e2b5b777b12b3fdeea9d33aa7510f3f1
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d8d17441e2b5b777b12b3fdeea9d33aa7510f3f1

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Jan 28 17:14:09 2013 -0500

r600g: real fix for non 3.8 kernel

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

---

 src/gallium/drivers/r600/r600_pipe.h |8 +---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_pipe.h 
b/src/gallium/drivers/r600/r600_pipe.h
index 0f51eb2..3ff42d3 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium/drivers/r600/r600_pipe.h
@@ -869,9 +869,11 @@ static INLINE unsigned r600_context_bo_reloc(struct 
r600_context *ctx,
 * look serialized from driver pov
 */
if (!ring-flushing) {
-   if (ring == ctx-rings.gfx  ctx-rings.dma.cs) {
-   /* flush dma ring */
-   ctx-rings.dma.flush(ctx, RADEON_FLUSH_ASYNC);
+   if (ring == ctx-rings.gfx) {
+   if (ctx-rings.dma.cs) {
+   /* flush dma ring */
+   ctx-rings.dma.flush(ctx, RADEON_FLUSH_ASYNC);
+   }
} else {
/* flush gfx ring */
ctx-rings.gfx.flush(ctx, RADEON_FLUSH_ASYNC);

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


Mesa (master): r600g: use uint64_t instead of unsigned long for proper 32bits cpu support

2013-01-28 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: e1598cb642334c809e6ec219d793e7bc85a213de
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e1598cb642334c809e6ec219d793e7bc85a213de

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Jan 28 19:07:10 2013 -0500

r600g: use uint64_t instead of unsigned long for proper 32bits cpu support

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

---

 src/gallium/drivers/r600/evergreen_hw_context.c |6 +++---
 src/gallium/drivers/r600/evergreen_state.c  |4 ++--
 src/gallium/drivers/r600/r600.h |   12 ++--
 src/gallium/drivers/r600/r600_hw_context.c  |6 +++---
 src/gallium/drivers/r600/r600_state.c   |4 ++--
 5 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_hw_context.c 
b/src/gallium/drivers/r600/evergreen_hw_context.c
index ca4f4b3..bb47530 100644
--- a/src/gallium/drivers/r600/evergreen_hw_context.c
+++ b/src/gallium/drivers/r600/evergreen_hw_context.c
@@ -243,9 +243,9 @@ void evergreen_set_streamout_enable(struct r600_context 
*ctx, unsigned buffer_en
 void evergreen_dma_copy(struct r600_context *rctx,
struct pipe_resource *dst,
struct pipe_resource *src,
-   unsigned long dst_offset,
-   unsigned long src_offset,
-   unsigned long size)
+   uint64_t dst_offset,
+   uint64_t src_offset,
+   uint64_t size)
 {
struct radeon_winsys_cs *cs = rctx-rings.dma.cs;
unsigned i, ncopy, csize, sub_cmd, shift;
diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index be1c427..0a3861f 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -3481,7 +3481,7 @@ static void evergreen_dma_copy_tile(struct r600_context 
*rctx,
unsigned array_mode, lbpp, pitch_tile_max, slice_tile_max, size;
unsigned ncopy, height, cheight, detile, i, x, y, z, src_mode, dst_mode;
unsigned sub_cmd, bank_h, bank_w, mt_aspect, nbanks, tile_split;
-   unsigned long base, addr;
+   uint64_t base, addr;
 
/* make sure that the dma ring is only one active */
rctx-rings.gfx.flush(rctx, RADEON_FLUSH_ASYNC);
@@ -3625,7 +3625,7 @@ boolean evergreen_dma_blit(struct pipe_context *ctx,
}
 
if (src_mode == dst_mode) {
-   unsigned long dst_offset, src_offset;
+   uint64_t dst_offset, src_offset;
/* simple dma blit would do NOTE code here assume :
 *   src_box.x/y == 0
 *   dst_x/y == 0
diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h
index a383c90..08b77e4 100644
--- a/src/gallium/drivers/r600/r600.h
+++ b/src/gallium/drivers/r600/r600.h
@@ -174,9 +174,9 @@ void r600_need_dma_space(struct r600_context *ctx, unsigned 
num_dw);
 void r600_dma_copy(struct r600_context *rctx,
struct pipe_resource *dst,
struct pipe_resource *src,
-   unsigned long dst_offset,
-   unsigned long src_offset,
-   unsigned long size);
+   uint64_t dst_offset,
+   uint64_t src_offset,
+   uint64_t size);
 boolean r600_dma_blit(struct pipe_context *ctx,
struct pipe_resource *dst,
unsigned dst_level,
@@ -187,9 +187,9 @@ boolean r600_dma_blit(struct pipe_context *ctx,
 void evergreen_dma_copy(struct r600_context *rctx,
struct pipe_resource *dst,
struct pipe_resource *src,
-   unsigned long dst_offset,
-   unsigned long src_offset,
-   unsigned long size);
+   uint64_t dst_offset,
+   uint64_t src_offset,
+   uint64_t size);
 boolean evergreen_dma_blit(struct pipe_context *ctx,
struct pipe_resource *dst,
unsigned dst_level,
diff --git a/src/gallium/drivers/r600/r600_hw_context.c 
b/src/gallium/drivers/r600/r600_hw_context.c
index ebafd97..23f488a 100644
--- a/src/gallium/drivers/r600/r600_hw_context.c
+++ b/src/gallium/drivers/r600/r600_hw_context.c
@@ -1160,9 +1160,9 @@ void r600_need_dma_space(struct r600_context *ctx, 
unsigned num_dw)
 void r600_dma_copy(struct r600_context *rctx,
struct pipe_resource *dst,
struct pipe_resource *src,
-   unsigned long dst_offset,
-   unsigned long src_offset,
-   unsigned long size)
+   uint64_t dst_offset,
+   uint64_t src_offset,
+   uint64_t size)
 {
struct radeon_winsys_cs *cs = rctx-rings.dma.cs;
unsigned i, ncopy, csize, shift;
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index 6b4b2c3..c0bc2a5 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium

Mesa (9.1): r600g: use uint64_t instead of unsigned long for proper 32bits cpu support

2013-01-28 Thread Jerome Glisse
Module: Mesa
Branch: 9.1
Commit: af2d8f8072c53d4c63ed22b74f78213c1181c1eb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=af2d8f8072c53d4c63ed22b74f78213c1181c1eb

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Jan 28 19:07:10 2013 -0500

r600g: use uint64_t instead of unsigned long for proper 32bits cpu support

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

---

 src/gallium/drivers/r600/evergreen_hw_context.c |6 +++---
 src/gallium/drivers/r600/evergreen_state.c  |4 ++--
 src/gallium/drivers/r600/r600.h |   12 ++--
 src/gallium/drivers/r600/r600_hw_context.c  |6 +++---
 src/gallium/drivers/r600/r600_state.c   |4 ++--
 5 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_hw_context.c 
b/src/gallium/drivers/r600/evergreen_hw_context.c
index ca4f4b3..bb47530 100644
--- a/src/gallium/drivers/r600/evergreen_hw_context.c
+++ b/src/gallium/drivers/r600/evergreen_hw_context.c
@@ -243,9 +243,9 @@ void evergreen_set_streamout_enable(struct r600_context 
*ctx, unsigned buffer_en
 void evergreen_dma_copy(struct r600_context *rctx,
struct pipe_resource *dst,
struct pipe_resource *src,
-   unsigned long dst_offset,
-   unsigned long src_offset,
-   unsigned long size)
+   uint64_t dst_offset,
+   uint64_t src_offset,
+   uint64_t size)
 {
struct radeon_winsys_cs *cs = rctx-rings.dma.cs;
unsigned i, ncopy, csize, sub_cmd, shift;
diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index be1c427..0a3861f 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -3481,7 +3481,7 @@ static void evergreen_dma_copy_tile(struct r600_context 
*rctx,
unsigned array_mode, lbpp, pitch_tile_max, slice_tile_max, size;
unsigned ncopy, height, cheight, detile, i, x, y, z, src_mode, dst_mode;
unsigned sub_cmd, bank_h, bank_w, mt_aspect, nbanks, tile_split;
-   unsigned long base, addr;
+   uint64_t base, addr;
 
/* make sure that the dma ring is only one active */
rctx-rings.gfx.flush(rctx, RADEON_FLUSH_ASYNC);
@@ -3625,7 +3625,7 @@ boolean evergreen_dma_blit(struct pipe_context *ctx,
}
 
if (src_mode == dst_mode) {
-   unsigned long dst_offset, src_offset;
+   uint64_t dst_offset, src_offset;
/* simple dma blit would do NOTE code here assume :
 *   src_box.x/y == 0
 *   dst_x/y == 0
diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h
index a383c90..08b77e4 100644
--- a/src/gallium/drivers/r600/r600.h
+++ b/src/gallium/drivers/r600/r600.h
@@ -174,9 +174,9 @@ void r600_need_dma_space(struct r600_context *ctx, unsigned 
num_dw);
 void r600_dma_copy(struct r600_context *rctx,
struct pipe_resource *dst,
struct pipe_resource *src,
-   unsigned long dst_offset,
-   unsigned long src_offset,
-   unsigned long size);
+   uint64_t dst_offset,
+   uint64_t src_offset,
+   uint64_t size);
 boolean r600_dma_blit(struct pipe_context *ctx,
struct pipe_resource *dst,
unsigned dst_level,
@@ -187,9 +187,9 @@ boolean r600_dma_blit(struct pipe_context *ctx,
 void evergreen_dma_copy(struct r600_context *rctx,
struct pipe_resource *dst,
struct pipe_resource *src,
-   unsigned long dst_offset,
-   unsigned long src_offset,
-   unsigned long size);
+   uint64_t dst_offset,
+   uint64_t src_offset,
+   uint64_t size);
 boolean evergreen_dma_blit(struct pipe_context *ctx,
struct pipe_resource *dst,
unsigned dst_level,
diff --git a/src/gallium/drivers/r600/r600_hw_context.c 
b/src/gallium/drivers/r600/r600_hw_context.c
index ebafd97..23f488a 100644
--- a/src/gallium/drivers/r600/r600_hw_context.c
+++ b/src/gallium/drivers/r600/r600_hw_context.c
@@ -1160,9 +1160,9 @@ void r600_need_dma_space(struct r600_context *ctx, 
unsigned num_dw)
 void r600_dma_copy(struct r600_context *rctx,
struct pipe_resource *dst,
struct pipe_resource *src,
-   unsigned long dst_offset,
-   unsigned long src_offset,
-   unsigned long size)
+   uint64_t dst_offset,
+   uint64_t src_offset,
+   uint64_t size)
 {
struct radeon_winsys_cs *cs = rctx-rings.dma.cs;
unsigned i, ncopy, csize, shift;
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index 6b4b2c3..c0bc2a5 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium

Mesa (master): r600g/radeon/winsys: indentation cleanup

2013-01-07 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: d499ff98cd69c9ec6c43ad8ececa4c3b61889ab9
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d499ff98cd69c9ec6c43ad8ececa4c3b61889ab9

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Jan  4 11:46:13 2013 -0500

r600g/radeon/winsys: indentation cleanup

Signed-off-by: Jerome Glisse jgli...@redhat.com
Reviewed-by: Alex Deucher alexander.deuc...@amd.com
Reviewed-by: Marek Olšák mar...@gmail.com

---

 src/gallium/drivers/r600/r600_pipe.c  |   18 +-
 src/gallium/drivers/r600/r600_pipe.h  |2 +-
 src/gallium/winsys/radeon/drm/radeon_drm_bo.c |3 +--
 src/gallium/winsys/radeon/drm/radeon_drm_cs.h |2 +-
 4 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_pipe.c 
b/src/gallium/drivers/r600/r600_pipe.c
index f6db3bf..7a7a431 100644
--- a/src/gallium/drivers/r600/r600_pipe.c
+++ b/src/gallium/drivers/r600/r600_pipe.c
@@ -292,21 +292,21 @@ static struct pipe_context *r600_create_context(struct 
pipe_screen *screen, void
rctx-cs = rctx-ws-cs_create(rctx-ws);
rctx-ws-cs_set_flush_callback(rctx-cs, r600_flush_from_winsys, rctx);
 
-rctx-uploader = u_upload_create(rctx-context, 1024 * 1024, 256,
- PIPE_BIND_INDEX_BUFFER |
- PIPE_BIND_CONSTANT_BUFFER);
-if (!rctx-uploader)
-goto fail;
+   rctx-uploader = u_upload_create(rctx-context, 1024 * 1024, 256,
+   PIPE_BIND_INDEX_BUFFER |
+   PIPE_BIND_CONSTANT_BUFFER);
+   if (!rctx-uploader)
+   goto fail;
 
rctx-allocator_fetch_shader = u_suballocator_create(rctx-context, 64 
* 1024, 256,
 0, 
PIPE_USAGE_STATIC, FALSE);
-if (!rctx-allocator_fetch_shader)
-goto fail;
+   if (!rctx-allocator_fetch_shader)
+   goto fail;
 
rctx-allocator_so_filled_size = u_suballocator_create(rctx-context, 
4096, 4,
-   0, 
PIPE_USAGE_STATIC, TRUE);
+   0, 
PIPE_USAGE_STATIC, TRUE);
 if (!rctx-allocator_so_filled_size)
-goto fail;
+   goto fail;
 
rctx-blitter = util_blitter_create(rctx-context);
if (rctx-blitter == NULL)
diff --git a/src/gallium/drivers/r600/r600_pipe.h 
b/src/gallium/drivers/r600/r600_pipe.h
index 6b7c053..934a6f5 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium/drivers/r600/r600_pipe.h
@@ -408,7 +408,7 @@ struct r600_context {
struct radeon_winsys*ws;
struct radeon_winsys_cs *cs;
struct blitter_context  *blitter;
-   struct u_upload_mgr *uploader;
+   struct u_upload_mgr *uploader;
struct u_suballocator   *allocator_so_filled_size;
struct u_suballocator   *allocator_fetch_shader;
struct util_slab_mempoolpool_transfers;
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c 
b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
index 07e92c5..897e962 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
@@ -802,8 +802,7 @@ static void radeon_bo_set_tiling(struct pb_buffer *_buf,
 sizeof(args));
 }
 
-static struct radeon_winsys_cs_handle *radeon_drm_get_cs_handle(
-struct pb_buffer *_buf)
+static struct radeon_winsys_cs_handle *radeon_drm_get_cs_handle(struct 
pb_buffer *_buf)
 {
 /* return radeon_bo. */
 return (struct radeon_winsys_cs_handle*)get_radeon_bo(_buf);
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_cs.h 
b/src/gallium/winsys/radeon/drm/radeon_drm_cs.h
index 6336d3a..286eb6a 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_cs.h
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_cs.h
@@ -33,7 +33,7 @@
 struct radeon_cs_context {
 uint32_tbuf[RADEON_MAX_CMDBUF_DWORDS];
 
-int fd;
+int fd;
 struct drm_radeon_cscs;
 struct drm_radeon_cs_chunk  chunks[3];
 uint64_tchunk_array[3];

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


Mesa (master): radeon/winsys: move radeon family/ class identification to winsys

2013-01-07 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: ca474f98f2cda5cb333e9f851c7e0e31c9a6f823
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ca474f98f2cda5cb333e9f851c7e0e31c9a6f823

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Jan  4 16:34:52 2013 -0500

radeon/winsys: move radeon family/class identification to winsys

Upcoming async dma support rely on winsys knowing about GPU families.

Signed-off-by: Jerome Glisse jgli...@redhat.com
Reviewed-by: Alex Deucher alexander.deuc...@amd.com
Reviewed-by: Marek Olšák mar...@gmail.com

---

 src/gallium/drivers/r300/r300_chipset.c   |   57 ++-
 src/gallium/drivers/r300/r300_chipset.h   |   27 -
 src/gallium/drivers/r300/r300_emit.c  |4 +-
 src/gallium/drivers/r300/r300_query.c |2 +-
 src/gallium/drivers/r300/r300_texture_desc.c  |   12 +-
 src/gallium/drivers/r600/r600.h   |   37 ---
 src/gallium/drivers/r600/r600_asm.c   |5 +-
 src/gallium/drivers/r600/r600_pipe.c  |   32 ++
 src/gallium/drivers/r600/r600_shader.c|1 +
 src/gallium/drivers/radeonsi/r600.h   |   12 --
 src/gallium/winsys/radeon/drm/radeon_drm_winsys.c |   96 +++---
 src/gallium/winsys/radeon/drm/radeon_drm_winsys.h |6 +-
 src/gallium/winsys/radeon/drm/radeon_winsys.h |  112 +
 13 files changed, 227 insertions(+), 176 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_chipset.c 
b/src/gallium/drivers/r300/r300_chipset.c
index beaa1f4..11061ed 100644
--- a/src/gallium/drivers/r300/r300_chipset.c
+++ b/src/gallium/drivers/r300/r300_chipset.c
@@ -22,6 +22,7 @@
  * USE OR OTHER DEALINGS IN THE SOFTWARE. */
 
 #include r300_chipset.h
+#include ../../winsys/radeon/drm/radeon_winsys.h
 
 #include util/u_debug.h
 #include util/u_memory.h
@@ -62,7 +63,7 @@ void r300_parse_chipset(uint32_t pci_id, struct 
r300_capabilities* caps)
 switch (pci_id) {
 #define CHIPSET(pci_id, name, chipfamily) \
 case pci_id: \
-caps-family = CHIP_FAMILY_##chipfamily; \
+caps-family = CHIP_##chipfamily; \
 break;
 #include pci_ids/r300_pci_ids.h
 #undef CHIPSET
@@ -81,71 +82,71 @@ void r300_parse_chipset(uint32_t pci_id, struct 
r300_capabilities* caps)
 
 
 switch (caps-family) {
-case CHIP_FAMILY_R300:
-case CHIP_FAMILY_R350:
+case CHIP_R300:
+case CHIP_R350:
 caps-high_second_pipe = TRUE;
 caps-num_vert_fpus = 4;
 caps-hiz_ram = R300_HIZ_LIMIT;
 caps-zmask_ram = PIPE_ZMASK_SIZE;
 break;
 
-case CHIP_FAMILY_RV350:
-case CHIP_FAMILY_RV370:
+case CHIP_RV350:
+case CHIP_RV370:
 caps-high_second_pipe = TRUE;
 caps-num_vert_fpus = 2;
 caps-zmask_ram = RV3xx_ZMASK_SIZE;
 break;
 
-case CHIP_FAMILY_RV380:
+case CHIP_RV380:
 caps-high_second_pipe = TRUE;
 caps-num_vert_fpus = 2;
 caps-hiz_ram = R300_HIZ_LIMIT;
 caps-zmask_ram = RV3xx_ZMASK_SIZE;
 break;
 
-case CHIP_FAMILY_RS400:
-case CHIP_FAMILY_RS600:
-case CHIP_FAMILY_RS690:
-case CHIP_FAMILY_RS740:
+case CHIP_RS400:
+case CHIP_RS600:
+case CHIP_RS690:
+case CHIP_RS740:
 break;
 
-case CHIP_FAMILY_RC410:
-case CHIP_FAMILY_RS480:
+case CHIP_RC410:
+case CHIP_RS480:
 caps-zmask_ram = RV3xx_ZMASK_SIZE;
 break;
 
-case CHIP_FAMILY_R420:
-case CHIP_FAMILY_R423:
-case CHIP_FAMILY_R430:
-case CHIP_FAMILY_R480:
-case CHIP_FAMILY_R481:
-case CHIP_FAMILY_RV410:
+case CHIP_R420:
+case CHIP_R423:
+case CHIP_R430:
+case CHIP_R480:
+case CHIP_R481:
+case CHIP_RV410:
 caps-num_vert_fpus = 6;
 caps-hiz_ram = R300_HIZ_LIMIT;
 caps-zmask_ram = PIPE_ZMASK_SIZE;
 break;
 
-case CHIP_FAMILY_R520:
+case CHIP_R520:
 caps-num_vert_fpus = 8;
 caps-hiz_ram = R300_HIZ_LIMIT;
 caps-zmask_ram = PIPE_ZMASK_SIZE;
 break;
 
-case CHIP_FAMILY_RV515:
+case CHIP_RV515:
 caps-num_vert_fpus = 2;
 caps-hiz_ram = R300_HIZ_LIMIT;
 caps-zmask_ram = PIPE_ZMASK_SIZE;
 break;
 
-case CHIP_FAMILY_RV530:
+case CHIP_RV530:
 caps-num_vert_fpus = 5;
 caps-hiz_ram = RV530_HIZ_LIMIT;
 caps-zmask_ram = PIPE_ZMASK_SIZE;
 break;
 
-case CHIP_FAMILY_R580:
-case CHIP_FAMILY_RV560:
-case CHIP_FAMILY_RV570:
+case CHIP_R580:
+case CHIP_RV560:
+case CHIP_RV570:
 caps-num_vert_fpus = 8;
 caps-hiz_ram = RV530_HIZ_LIMIT;
 caps-zmask_ram = PIPE_ZMASK_SIZE;
@@ -153,12 +154,12 @@ void r300_parse_chipset(uint32_t pci_id, struct 
r300_capabilities* caps)
 }
 
 caps-num_tex_units = 16;
-caps-is_r400 = caps-family = CHIP_FAMILY_R420  caps-family  
CHIP_FAMILY_RV515;
-caps-is_r500 = caps-family = CHIP_FAMILY_RV515;
-caps

Mesa (master): r600g: rework flusing and synchronization pattern v7

2012-12-20 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 24b1206ab2dcd506aaac3ef656aebc8bc20cd27a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=24b1206ab2dcd506aaac3ef656aebc8bc20cd27a

Author: Jerome Glisse jgli...@redhat.com
Date:   Thu Nov  1 16:09:40 2012 -0400

r600g: rework flusing and synchronization pattern v7

This bring r600g allmost inline with closed source driver when
it comes to flushing and synchronization pattern.

v2-v4: history lost somewhere in outer space
v5: Fix compute size of flushing, use define for flags, update
worst case cs size requirement for flush, treat rs780 and
newer as r7xx when it comes to streamout.
v6: Fix num dw computation for framebuffer state, remove dead
code, use define instead of hardcoded value.
v7: Remove dead code

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

---

 src/gallium/drivers/r600/evergreen_compute.c   |8 +-
 .../drivers/r600/evergreen_compute_internal.c  |4 +-
 src/gallium/drivers/r600/evergreen_state.c |4 +-
 src/gallium/drivers/r600/r600.h|   16 +--
 src/gallium/drivers/r600/r600_hw_context.c |  178 ++--
 src/gallium/drivers/r600/r600_hw_context_priv.h|2 +-
 src/gallium/drivers/r600/r600_state.c  |   20 ++-
 src/gallium/drivers/r600/r600_state_common.c   |   19 +--
 8 files changed, 89 insertions(+), 162 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_compute.c 
b/src/gallium/drivers/r600/evergreen_compute.c
index 66b0cc6..ea75d80 100644
--- a/src/gallium/drivers/r600/evergreen_compute.c
+++ b/src/gallium/drivers/r600/evergreen_compute.c
@@ -98,7 +98,7 @@ static void evergreen_cs_set_vertex_buffer(
 
/* The vertex instructions in the compute shaders use the texture cache,
 * so we need to invalidate it. */
-   rctx-flags |= R600_CONTEXT_TEX_FLUSH;
+   rctx-flags |= R600_CONTEXT_GPU_FLUSH;
state-enabled_mask |= 1  vb_index;
state-dirty_mask |= 1  vb_index;
state-atom.dirty = true;
@@ -329,7 +329,7 @@ static void compute_emit_cs(struct r600_context *ctx, const 
uint *block_layout,
 */
r600_emit_command_buffer(ctx-cs, ctx-start_compute_cs_cmd);
 
-   ctx-flags |= R600_CONTEXT_CB_FLUSH;
+   ctx-flags |= R600_CONTEXT_WAIT_IDLE | R600_CONTEXT_FLUSH_AND_INV;
r600_flush_emit(ctx);
 
/* Emit colorbuffers. */
@@ -409,7 +409,7 @@ static void compute_emit_cs(struct r600_context *ctx, const 
uint *block_layout,
 
/* XXX evergreen_flush_emit() hardcodes the CP_COHER_SIZE to 0x
 */
-   ctx-flags |= R600_CONTEXT_CB_FLUSH;
+   ctx-flags |= R600_CONTEXT_GPU_FLUSH;
r600_flush_emit(ctx);
 
 #if 0
@@ -468,7 +468,7 @@ void evergreen_emit_cs_shader(
r600_write_value(cs, r600_context_bo_reloc(rctx, kernel-code_bo,
RADEON_USAGE_READ));
 
-   rctx-flags |= R600_CONTEXT_SHADERCONST_FLUSH;
+   rctx-flags |= R600_CONTEXT_GPU_FLUSH;
 }
 
 static void evergreen_launch_grid(
diff --git a/src/gallium/drivers/r600/evergreen_compute_internal.c 
b/src/gallium/drivers/r600/evergreen_compute_internal.c
index f7aebf2..94f556f 100644
--- a/src/gallium/drivers/r600/evergreen_compute_internal.c
+++ b/src/gallium/drivers/r600/evergreen_compute_internal.c
@@ -545,7 +545,7 @@ void evergreen_set_tex_resource(
 
util_format_get_blockwidth(tmp-resource.b.b.format) *
 view-base.texture-width0*height*depth;
 
-   pipe-ctx-flags |= R600_CONTEXT_TEX_FLUSH;
+   pipe-ctx-flags |= R600_CONTEXT_GPU_FLUSH;
 
evergreen_emit_force_reloc(res);
evergreen_emit_force_reloc(res);
@@ -604,7 +604,7 @@ void evergreen_set_const_cache(
res-usage = RADEON_USAGE_READ;
res-coher_bo_size = size;
 
-   pipe-ctx-flags |= R600_CONTEXT_SHADERCONST_FLUSH;
+   pipe-ctx-flags |= R600_CONTEXT_GPU_FLUSH;
 }
 
 struct r600_resource* r600_compute_buffer_alloc_vram(
diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 996c1b4..58964c4 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1557,14 +1557,14 @@ static void evergreen_set_framebuffer_state(struct 
pipe_context *ctx,
uint32_t i, log_samples;
 
if (rctx-framebuffer.state.nr_cbufs) {
-   rctx-flags |= R600_CONTEXT_CB_FLUSH;
+   rctx-flags |= R600_CONTEXT_WAIT_IDLE | 
R600_CONTEXT_FLUSH_AND_INV;
 
if (rctx-framebuffer.state.cbufs[0]-texture-nr_samples  1) {
rctx-flags |= R600_CONTEXT_FLUSH_AND_INV_CB_META;
}
}
if (rctx-framebuffer.state.zsbuf) {
-   rctx-flags |= R600_CONTEXT_DB_FLUSH;
+   rctx-flags |= R600_CONTEXT_WAIT_IDLE | 
R600_CONTEXT_FLUSH_AND_INV;
}
 
util_copy_framebuffer_state(rctx

Mesa (master): r600g: add htile support v16

2012-12-20 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 6532eb17baff6e61b427f29e076883f8941ae664
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6532eb17baff6e61b427f29e076883f8941ae664

Author: Jerome Glisse jgli...@redhat.com
Date:   Thu Oct 11 10:40:30 2012 -0400

r600g: add htile support v16

htile is used for HiZ and HiS support and fast Z/S clears.
This commit just adds the htile setup and Fast Z clear.
We don't take full advantage of HiS with that patch.

v2 really use fast clear, still random issue with some tiles
   need to try more flush combination, fix depth/stencil
   texture decompression
v3 fix random issue on r6xx/r7xx
v4 rebase on top of lastest mesa, disable CB export when clearing
   htile surface to avoid wasting bandwidth
v5 resummarize htile surface when uploading z value. Fix z/stencil
   decompression, the custom blitter with custom dsa is no longer
   needed.
v6 Reorganize render control/override update mecanism, fixing more
   issues in the process.
v7 Add nop after depth surface base update to work around some htile
   flushing issue. For htile to 8x8 on r6xx/r7xx as other combination
   have issue. Do not enable hyperz when flushing/uncompressing
   depth buffer.
v8 Fix htile surface, preload and prefetch setup. Only set preload
   and prefetch on htile surface clear like fglrx. Record depth
   clear value per level. Support several level for the htile
   surface. First depth clear can't be a fast clear.
v9 Fix comments, properly account new register in emit function,
   disable fast zclear if clearing different layer of texture
   array to different value
v10 Disable hyperz for texture array making test simpler. Force
db_misc_state update when no depth buffer is bound. Remove
unused variable, rename depth_clearstencil to depth_clear.
Don't allocate htile surface for flushed depth. Something
broken the cliprect change, this need to be investigated.
v11 Rebase on top of newer mesa
v12 Rebase on top of newer mesa
v13 Rebase on top of newer mesa, htile surface need to be initialized
to zero, somehow special casing first clear to not use fast clear
and thus initialize the htile surface with proper value does not
work in all case.
v14 Use resource not texture for htile buffer make the htile buffer
size computation easier and simpler. Disable preload on evergreen
as its still troublesome in some case
v15 Cleanup some comment and remove some left over
v16 Define name for bit 20 of CP_COHER_CNTL

Signed-off-by: Pierre-Eric Pelloux-Prayer pell...@gmail.com
Signed-off-by: Alex Deucher alexander.deuc...@amd.com
Signed-off-by: Jerome Glisse jgli...@redhat.com

---

 src/gallium/drivers/r600/evergreen_state.c |   65 ---
 src/gallium/drivers/r600/evergreend.h  |2 +
 src/gallium/drivers/r600/r600_blit.c   |   28 
 src/gallium/drivers/r600/r600_hw_context.c |7 ++-
 src/gallium/drivers/r600/r600_pipe.c   |8 +++
 src/gallium/drivers/r600/r600_pipe.h   |   26 +++
 src/gallium/drivers/r600/r600_resource.h   |9 
 src/gallium/drivers/r600/r600_state.c  |   57 ++--
 src/gallium/drivers/r600/r600_texture.c|   38 
 src/gallium/drivers/r600/r600d.h   |5 ++
 10 files changed, 221 insertions(+), 24 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 58964c4..032af78 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1545,6 +1545,18 @@ static void evergreen_init_depth_surface(struct 
r600_context *rctx,
S_028044_FORMAT(V_028044_STENCIL_8);
}
 
+   surf-htile_enabled = 0;
+   /* use htile only for first level */
+   if (rtex-htile  !level) {
+   surf-htile_enabled = 1;
+   surf-db_htile_data_base = 0;
+   surf-db_htile_surface = S_028ABC_HTILE_WIDTH(1) |
+   S_028ABC_HTILE_HEIGHT(1) |
+   S_028ABC_LINEAR(1);
+   surf-db_depth_info |= S_028040_TILE_SURFACE_ENABLE(1);
+   surf-db_preload_control = 0;
+   }
+
surf-depth_initialized = true;
 }
 
@@ -1625,6 +1637,16 @@ static void evergreen_set_framebuffer_state(struct 
pipe_context *ctx,
rctx-poly_offset_state.zs_format = 
state-zsbuf-format;
rctx-poly_offset_state.atom.dirty = true;
}
+
+   if (rctx-db_state.rsurf != surf) {
+   rctx-db_state.rsurf = surf;
+   rctx-db_state.atom.dirty = true;
+   rctx-db_misc_state.atom.dirty = true;
+   }
+   } else if (rctx-db_state.rsurf) {
+   rctx-db_state.rsurf = NULL;
+   rctx-db_state.atom.dirty = true;
+   rctx-db_misc_state.atom.dirty = true

Mesa (master): r600g: add cs tracing infrastructure for lockup pin pointing

2012-12-20 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: e8ca1a53a625544ea30b394be905ff7e51d78af6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e8ca1a53a625544ea30b394be905ff7e51d78af6

Author: Jerome Glisse jgli...@redhat.com
Date:   Wed Dec 19 12:23:50 2012 -0500

r600g: add cs tracing infrastructure for lockup pin pointing

It's a build time option you need to set R600_TRACE_CS to 1 and it
will print to stderr all cs along as cs trace point value which
gave last offset into a cs process by the GPU.

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

---

 src/gallium/drivers/r600/r600_hw_context.c  |   41 +++
 src/gallium/drivers/r600/r600_hw_context_priv.h |5 ++-
 src/gallium/drivers/r600/r600_pipe.c|   20 +++
 src/gallium/drivers/r600/r600_pipe.h|   16 +
 src/gallium/drivers/r600/r600_state_common.c|   26 ++
 5 files changed, 106 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_hw_context.c 
b/src/gallium/drivers/r600/r600_hw_context.c
index cdd31a4..6c8cb9d 100644
--- a/src/gallium/drivers/r600/r600_hw_context.c
+++ b/src/gallium/drivers/r600/r600_hw_context.c
@@ -27,6 +27,7 @@
 #include r600d.h
 #include util/u_memory.h
 #include errno.h
+#include unistd.h
 
 /* Get backends mask */
 void r600_get_backend_mask(struct r600_context *ctx)
@@ -369,6 +370,11 @@ void r600_need_cs_space(struct r600_context *ctx, unsigned 
num_dw,
for (i = 0; i  R600_NUM_ATOMS; i++) {
if (ctx-atoms[i]  ctx-atoms[i]-dirty) {
num_dw += ctx-atoms[i]-num_dw;
+#if R600_TRACE_CS
+   if (ctx-screen-trace_bo) {
+   num_dw += R600_TRACE_CS_DWORDS;
+   }
+#endif
}
}
 
@@ -376,6 +382,11 @@ void r600_need_cs_space(struct r600_context *ctx, unsigned 
num_dw,
 
/* The upper-bound of how much space a draw command would take. 
*/
num_dw += R600_MAX_FLUSH_CS_DWORDS + R600_MAX_DRAW_CS_DWORDS;
+#if R600_TRACE_CS
+   if (ctx-screen-trace_bo) {
+   num_dw += R600_TRACE_CS_DWORDS;
+   }
+#endif
}
 
/* Count in queries_suspend. */
@@ -717,7 +728,37 @@ void r600_context_flush(struct r600_context *ctx, unsigned 
flags)
}
 
/* Flush the CS. */
+#if R600_TRACE_CS
+   if (ctx-screen-trace_bo) {
+   struct r600_screen *rscreen = ctx-screen;
+   unsigned i;
+
+   for (i = 0; i  cs-cdw; i++) {
+   fprintf(stderr, [%4d] [%5d] 0x%08x\n, 
rscreen-cs_count, i, cs-buf[i]);
+   }
+   rscreen-cs_count++;
+   }
+#endif
ctx-ws-cs_flush(ctx-cs, flags);
+#if R600_TRACE_CS
+   if (ctx-screen-trace_bo) {
+   struct r600_screen *rscreen = ctx-screen;
+   unsigned i;
+
+   for (i = 0; i  10; i++) {
+   usleep(5);
+   if (!ctx-ws-buffer_is_busy(rscreen-trace_bo-buf, 
RADEON_USAGE_READWRITE)) {
+   break;
+   }
+   }
+   if (i == 10) {
+   fprintf(stderr, timeout on cs lockup likely happen at 
cs %d dw %d\n,
+   rscreen-trace_ptr[1], rscreen-trace_ptr[0]);
+   } else {
+   fprintf(stderr, cs %d executed in %dms\n, 
rscreen-trace_ptr[1], i * 5);
+   }
+   }
+#endif
 
r600_begin_new_cs(ctx);
 }
diff --git a/src/gallium/drivers/r600/r600_hw_context_priv.h 
b/src/gallium/drivers/r600/r600_hw_context_priv.h
index 050c472..692e6ec 100644
--- a/src/gallium/drivers/r600/r600_hw_context_priv.h
+++ b/src/gallium/drivers/r600/r600_hw_context_priv.h
@@ -29,8 +29,9 @@
 #include r600_pipe.h
 
 /* the number of CS dwords for flushing and drawing */
-#define R600_MAX_FLUSH_CS_DWORDS 12
-#define R600_MAX_DRAW_CS_DWORDS 34
+#define R600_MAX_FLUSH_CS_DWORDS   12
+#define R600_MAX_DRAW_CS_DWORDS34
+#define R600_TRACE_CS_DWORDS   7
 
 /* these flags are used in register flags and added into block flags */
 #define REG_FLAG_NEED_BO 1
diff --git a/src/gallium/drivers/r600/r600_pipe.c 
b/src/gallium/drivers/r600/r600_pipe.c
index 290aa51..b02f875 100644
--- a/src/gallium/drivers/r600/r600_pipe.c
+++ b/src/gallium/drivers/r600/r600_pipe.c
@@ -723,6 +723,12 @@ static void r600_destroy_screen(struct pipe_screen* 
pscreen)
rscreen-ws-buffer_unmap(rscreen-fences.bo-cs_buf);
pipe_resource_reference((struct 
pipe_resource**)rscreen-fences.bo, NULL);
}
+#if R600_TRACE_CS
+   if (rscreen-trace_bo) {
+   rscreen-ws-buffer_unmap(rscreen-trace_bo-cs_buf);
+   pipe_resource_reference((struct 
pipe_resource**)rscreen-trace_bo, NULL);
+   }
+#endif

Mesa (master): Revert r600g: work around ddx over alignment

2012-12-19 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 50880314e35661f0ea7ab3f092741df79c855d90
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=50880314e35661f0ea7ab3f092741df79c855d90

Author: Jerome Glisse jgli...@redhat.com
Date:   Wed Dec 19 09:56:17 2012 -0500

Revert r600g: work around ddx over alignment

This reverts commit d8287bac1fd4a77abc2db38de134f14176740d23.

Cause more issue than it fix. Need to think of a proper solution.

---

 src/gallium/drivers/r600/r600_texture.c |   12 +++-
 1 files changed, 3 insertions(+), 9 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_texture.c 
b/src/gallium/drivers/r600/r600_texture.c
index 9373451..56e9b64 100644
--- a/src/gallium/drivers/r600/r600_texture.c
+++ b/src/gallium/drivers/r600/r600_texture.c
@@ -89,8 +89,7 @@ static int r600_init_surface(struct r600_screen *rscreen,
 struct radeon_surface *surface,
 const struct pipe_resource *ptex,
 unsigned array_mode,
-bool is_flushed_depth,
-bool from_ddx)
+bool is_flushed_depth)
 {
const struct util_format_description *desc =
util_format_description(ptex-format);
@@ -108,10 +107,6 @@ static int r600_init_surface(struct r600_screen *rscreen,
surface-array_size = 1;
surface-last_level = ptex-last_level;
 
-   if (from_ddx) {
-   surface-npix_y = align(surface-npix_y, 8);
-   }
-
if (rscreen-chip_class = EVERGREEN  !is_flushed_depth 
ptex-format == PIPE_FORMAT_Z32_FLOAT_S8X24_UINT) {
surface-bpe = 4; /* stencil is allocated separately on 
evergreen */
@@ -544,8 +539,7 @@ struct pipe_resource *r600_texture_create(struct 
pipe_screen *screen,
}
 
r = r600_init_surface(rscreen, surface, templ, array_mode,
- templ-flags  R600_RESOURCE_FLAG_FLUSHED_DEPTH,
- false);
+ templ-flags  R600_RESOURCE_FLAG_FLUSHED_DEPTH);
if (r) {
return NULL;
}
@@ -633,7 +627,7 @@ struct pipe_resource *r600_texture_from_handle(struct 
pipe_screen *screen,
else
array_mode = V_038000_ARRAY_LINEAR_ALIGNED;
 
-   r = r600_init_surface(rscreen, surface, templ, array_mode, false, 
true);
+   r = r600_init_surface(rscreen, surface, templ, array_mode, false);
if (r) {
return NULL;
}

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


Mesa (master): r600g: work around ddx over alignment

2012-12-18 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: d8287bac1fd4a77abc2db38de134f14176740d23
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d8287bac1fd4a77abc2db38de134f14176740d23

Author: Jerome Glisse jgli...@redhat.com
Date:   Tue Dec 18 12:45:31 2012 -0500

r600g: work around ddx over alignment

This force surface allocated from ddx to be consider as height
aligned on 8 and fix 1D-2D tiling transition that result from
this.

Signed-off-by: Jerome Glisse jgli...@redhat.com
Reviewed-by: Marek Olšák mar...@gmail.com

---

 src/gallium/drivers/r600/r600_texture.c |   12 +---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_texture.c 
b/src/gallium/drivers/r600/r600_texture.c
index 56e9b64..9373451 100644
--- a/src/gallium/drivers/r600/r600_texture.c
+++ b/src/gallium/drivers/r600/r600_texture.c
@@ -89,7 +89,8 @@ static int r600_init_surface(struct r600_screen *rscreen,
 struct radeon_surface *surface,
 const struct pipe_resource *ptex,
 unsigned array_mode,
-bool is_flushed_depth)
+bool is_flushed_depth,
+bool from_ddx)
 {
const struct util_format_description *desc =
util_format_description(ptex-format);
@@ -107,6 +108,10 @@ static int r600_init_surface(struct r600_screen *rscreen,
surface-array_size = 1;
surface-last_level = ptex-last_level;
 
+   if (from_ddx) {
+   surface-npix_y = align(surface-npix_y, 8);
+   }
+
if (rscreen-chip_class = EVERGREEN  !is_flushed_depth 
ptex-format == PIPE_FORMAT_Z32_FLOAT_S8X24_UINT) {
surface-bpe = 4; /* stencil is allocated separately on 
evergreen */
@@ -539,7 +544,8 @@ struct pipe_resource *r600_texture_create(struct 
pipe_screen *screen,
}
 
r = r600_init_surface(rscreen, surface, templ, array_mode,
- templ-flags  R600_RESOURCE_FLAG_FLUSHED_DEPTH);
+ templ-flags  R600_RESOURCE_FLAG_FLUSHED_DEPTH,
+ false);
if (r) {
return NULL;
}
@@ -627,7 +633,7 @@ struct pipe_resource *r600_texture_from_handle(struct 
pipe_screen *screen,
else
array_mode = V_038000_ARRAY_LINEAR_ALIGNED;
 
-   r = r600_init_surface(rscreen, surface, templ, array_mode, false);
+   r = r600_init_surface(rscreen, surface, templ, array_mode, false, 
true);
if (r) {
return NULL;
}

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


Mesa (master): r600g: avoid shader needing too many gpr to lockup the gpu v2

2012-10-31 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 470952f751d1327831c638ee369b7f0f2e20e6fb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=470952f751d1327831c638ee369b7f0f2e20e6fb

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Oct 26 18:59:05 2012 -0400

r600g: avoid shader needing too many gpr to lockup the gpu v2

On r6xx/r7xx shader resource management need to make sure that the
shader does not goes over the gpr register limit. Each specific
asic has a maxmimum register that can be split btw shader stage.
For each stage the shader must not use more register than the
limit programmed.

v2: Print an error message when discarding draw. Don't add another
boolean to context structure, but rather propagate the discard
boolean through the call chain.

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

---

 src/gallium/drivers/r600/r600_pipe.h |2 +-
 src/gallium/drivers/r600/r600_state.c|   67 ++
 src/gallium/drivers/r600/r600_state_common.c |   27 ++-
 3 files changed, 62 insertions(+), 34 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_pipe.h 
b/src/gallium/drivers/r600/r600_pipe.h
index 238ab16..342ab87 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium/drivers/r600/r600_pipe.h
@@ -620,7 +620,7 @@ void *r600_create_db_flush_dsa(struct r600_context *rctx);
 void *r600_create_resolve_blend(struct r600_context *rctx);
 void *r700_create_resolve_blend(struct r600_context *rctx);
 void *r600_create_decompress_blend(struct r600_context *rctx);
-void r600_adjust_gprs(struct r600_context *rctx);
+bool r600_adjust_gprs(struct r600_context *rctx);
 boolean r600_is_format_supported(struct pipe_screen *screen,
 enum pipe_format format,
 enum pipe_texture_target target,
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index f3af568..5c52f3d 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -2186,36 +2186,61 @@ void r600_init_state_functions(struct r600_context 
*rctx)
 }
 
 /* Adjust GPR allocation on R6xx/R7xx */
-void r600_adjust_gprs(struct r600_context *rctx)
+bool r600_adjust_gprs(struct r600_context *rctx)
 {
-   unsigned num_ps_gprs = rctx-default_ps_gprs;
-   unsigned num_vs_gprs = rctx-default_vs_gprs;
+   unsigned num_ps_gprs = rctx-ps_shader-current-shader.bc.ngpr;
+   unsigned num_vs_gprs = rctx-vs_shader-current-shader.bc.ngpr;
+   unsigned new_num_ps_gprs = num_ps_gprs;
+   unsigned new_num_vs_gprs = num_vs_gprs;
+   unsigned cur_num_ps_gprs = 
G_008C04_NUM_PS_GPRS(rctx-config_state.sq_gpr_resource_mgmt_1);
+   unsigned cur_num_vs_gprs = 
G_008C04_NUM_VS_GPRS(rctx-config_state.sq_gpr_resource_mgmt_1);
+   unsigned def_num_ps_gprs = rctx-default_ps_gprs;
+   unsigned def_num_vs_gprs = rctx-default_vs_gprs;
+   unsigned def_num_clause_temp_gprs = rctx-r6xx_num_clause_temp_gprs;
+   /* hardware will reserve twice num_clause_temp_gprs */
+   unsigned max_gprs = def_num_ps_gprs + def_num_vs_gprs + 
def_num_clause_temp_gprs * 2;
unsigned tmp;
-   int diff;
 
-   if (rctx-ps_shader-current-shader.bc.ngpr  rctx-default_ps_gprs) {
-   diff = rctx-ps_shader-current-shader.bc.ngpr - 
rctx-default_ps_gprs;
-   num_vs_gprs -= diff;
-   num_ps_gprs += diff;
-   }
-
-   if (rctx-vs_shader-current-shader.bc.ngpr  rctx-default_vs_gprs)
-   {
-   diff = rctx-vs_shader-current-shader.bc.ngpr - 
rctx-default_vs_gprs;
-   num_ps_gprs -= diff;
-   num_vs_gprs += diff;
+   /* the sum of all SQ_GPR_RESOURCE_MGMT*.NUM_*_GPRS must = to max_gprs 
*/
+   if (new_num_ps_gprs  cur_num_ps_gprs || new_num_vs_gprs  
cur_num_vs_gprs) {
+   /* try to use switch back to default */
+   if (new_num_ps_gprs  def_num_ps_gprs || new_num_vs_gprs  
def_num_vs_gprs) {
+   /* always privilege vs stage so that at worst we have 
the
+* pixel stage producing wrong output (not the vertex
+* stage) */
+   new_num_ps_gprs = max_gprs - (new_num_vs_gprs + 
def_num_clause_temp_gprs * 2);
+   new_num_vs_gprs = num_vs_gprs;
+   } else {
+   new_num_ps_gprs = def_num_ps_gprs;
+   new_num_vs_gprs = def_num_vs_gprs;
+   }
+   } else {
+   return true;
}
 
-   tmp = 0;
-   tmp |= S_008C04_NUM_PS_GPRS(num_ps_gprs);
-   tmp |= S_008C04_NUM_VS_GPRS(num_vs_gprs);
-   tmp |= S_008C04_NUM_CLAUSE_TEMP_GPRS(rctx-r6xx_num_clause_temp_gprs);
-
-   if (tmp != rctx-config_state.sq_gpr_resource_mgmt_1) {
+   /* SQ_PGM_RESOURCES_*.NUM_GPRS must always be program to a value =
+* SQ_GPR_RESOURCE_MGMT*.NUM_*_GPRS otherwise the GPU

Mesa (master): r600g: avoid GPU doing constant preload from random address

2012-09-11 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 841c1b5f5423d7994ff0f6773639934d75bd1fca
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=841c1b5f5423d7994ff0f6773639934d75bd1fca

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Sep  7 15:00:20 2012 -0400

r600g: avoid GPU doing constant preload from random address

Previous command stream might have set any of the constant buffer
and the previous address might no longer be valid thus GPU might
preload constant from random invalid address and possibly triggering
lockup.

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

---

 src/gallium/drivers/r600/evergreen_state.c |   20 
 src/gallium/drivers/r600/r600_state.c  |   20 
 2 files changed, 40 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 9a5183e..405d1b0 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -2602,6 +2602,26 @@ void evergreen_init_common_regs(struct 
r600_command_buffer *cb,
r600_store_context_reg(cb, R_028848_SQ_PGM_RESOURCES_2_PS, 
S_028848_SINGLE_ROUND(V_SQ_ROUND_NEAREST_EVEN));
r600_store_context_reg(cb, R_028864_SQ_PGM_RESOURCES_2_VS, 
S_028864_SINGLE_ROUND(V_SQ_ROUND_NEAREST_EVEN));
 
+   /* to avoid GPU doing any preloading of constant from random address */
+   r600_store_context_reg_seq(cb, R_028140_ALU_CONST_BUFFER_SIZE_PS_0, 8);
+   r600_store_value(cb, 0); /* R_028140_ALU_CONST_BUFFER_SIZE_PS_0 */
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_context_reg_seq(cb, R_028180_ALU_CONST_BUFFER_SIZE_VS_0, 8);
+   r600_store_value(cb, 0); /* R_028180_ALU_CONST_BUFFER_SIZE_VS_0 */
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+
r600_store_context_reg(cb, R_028354_SX_SURFACE_SYNC, 
S_028354_SURFACE_SYNC_MASK(0xf));
 
return;
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index ccafdc6..b363dc1 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -2381,6 +2381,26 @@ void r600_init_atom_start_cs(struct r600_context *rctx)
r600_store_value(cb, 0); /* R_0288C4_SQ_REDUC_RING_ITEMSIZE */
r600_store_value(cb, 0); /* R_0288C8_SQ_GS_VERT_ITEMSIZE */
 
+   /* to avoid GPU doing any preloading of constant from random address */
+   r600_store_context_reg_seq(cb, R_028140_ALU_CONST_BUFFER_SIZE_PS_0, 8);
+   r600_store_value(cb, 0); /* R_028140_ALU_CONST_BUFFER_SIZE_PS_0 */
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_context_reg_seq(cb, R_028180_ALU_CONST_BUFFER_SIZE_VS_0, 8);
+   r600_store_value(cb, 0); /* R_028180_ALU_CONST_BUFFER_SIZE_VS_0 */
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+   r600_store_value(cb, 0);
+
r600_store_context_reg_seq(cb, R_028A10_VGT_OUTPUT_PATH_CNTL, 13);
r600_store_value(cb, 0); /* R_028A10_VGT_OUTPUT_PATH_CNTL */
r600_store_value(cb, 0); /* R_028A14_VGT_HOS_CNTL */

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


Mesa (master): r600g: fix num of dwords needed for alphatest_state atom

2012-09-06 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 935a72944751e6bc0a5df779eef44766c7b52baa
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=935a72944751e6bc0a5df779eef44766c7b52baa

Author: Jerome Glisse jgli...@redhat.com
Date:   Thu Sep  6 15:09:21 2012 -0400

r600g: fix num of dwords needed for alphatest_state atom

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

---

 src/gallium/drivers/r600/r600_state_common.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_state_common.c 
b/src/gallium/drivers/r600/r600_state_common.c
index 68f53c6..26af6f6 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -108,7 +108,7 @@ void r600_init_common_atoms(struct r600_context *rctx)
 {
r600_init_atom(rctx-surface_sync_cmd.atom,r600_emit_surface_sync, 
5, EMIT_EARLY);
r600_init_atom(rctx-r6xx_flush_and_inv_cmd,   
r600_emit_r6xx_flush_and_inv,   2, EMIT_EARLY);
-   r600_init_atom(rctx-alphatest_state.atom, 
r600_emit_alphatest_state,  3, 0);
+   r600_init_atom(rctx-alphatest_state.atom, 
r600_emit_alphatest_state,  6, 0);
r600_atom_dirty(rctx, rctx-alphatest_state.atom);
 }
 

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


Mesa (master): r600g: order atom emission v3

2012-09-06 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 5ceb87286f2e1b5b8527ba18a844abf450903175
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5ceb87286f2e1b5b8527ba18a844abf450903175

Author: Jerome Glisse jgli...@redhat.com
Date:   Wed Sep  5 15:18:24 2012 -0400

r600g: order atom emission v3

To avoid GPU lockup registers must be emited in a specific order
(no kidding ...). This patch rework atom emission so order in which
atom are emited in respect to each other is always the same. We
don't have any informations on what is the correct order so order
will need to be infered from fglrx command stream.

v2: add comment warning that atom order should not be taken lightly
v3: rebase on top of alphatest atom fix

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

---

 src/gallium/drivers/r600/evergreen_compute.c |2 +-
 src/gallium/drivers/r600/evergreen_state.c   |   63 +
 src/gallium/drivers/r600/r600_hw_context.c   |   10 +++--
 src/gallium/drivers/r600/r600_pipe.c |1 -
 src/gallium/drivers/r600/r600_pipe.h |   33 --
 src/gallium/drivers/r600/r600_state.c|   53 +++---
 src/gallium/drivers/r600/r600_state_common.c |   36 ---
 7 files changed, 116 insertions(+), 82 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_compute.c 
b/src/gallium/drivers/r600/evergreen_compute.c
index acf91ba..3533312 100644
--- a/src/gallium/drivers/r600/evergreen_compute.c
+++ b/src/gallium/drivers/r600/evergreen_compute.c
@@ -583,7 +583,7 @@ void evergreen_init_atom_start_compute_cs(struct 
r600_context *ctx)
/* since all required registers are initialised in the
 * start_compute_cs_cmd atom, we can EMIT_EARLY here.
 */
-   r600_init_command_buffer(cb, 256, EMIT_EARLY);
+   r600_init_command_buffer(ctx, cb, 1, 256);
cb-pkt_flags = RADEON_CP_PACKET3_COMPUTE_MODE;
 
switch (ctx-family) {
diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index bda8ed5..9a5183e 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -2161,27 +2161,50 @@ static void cayman_emit_sample_mask(struct r600_context 
*rctx, struct r600_atom
 
 void evergreen_init_state_functions(struct r600_context *rctx)
 {
-   r600_init_atom(rctx-cb_misc_state.atom, evergreen_emit_cb_misc_state, 
0, 0);
-   r600_atom_dirty(rctx, rctx-cb_misc_state.atom);
-   r600_init_atom(rctx-db_misc_state.atom, evergreen_emit_db_misc_state, 
7, 0);
-   r600_atom_dirty(rctx, rctx-db_misc_state.atom);
-   r600_init_atom(rctx-vertex_buffer_state.atom, 
evergreen_fs_emit_vertex_buffers, 0, 0);
-   r600_init_atom(rctx-cs_vertex_buffer_state.atom, 
evergreen_cs_emit_vertex_buffers, 0, 0);
-   r600_init_atom(rctx-vs_constbuf_state.atom, 
evergreen_emit_vs_constant_buffers, 0, 0);
-   r600_init_atom(rctx-ps_constbuf_state.atom, 
evergreen_emit_ps_constant_buffers, 0, 0);
-   r600_init_atom(rctx-vs_samplers.views.atom, 
evergreen_emit_vs_sampler_views, 0, 0);
-   r600_init_atom(rctx-ps_samplers.views.atom, 
evergreen_emit_ps_sampler_views, 0, 0);
-   r600_init_atom(rctx-cs_shader_state.atom, evergreen_emit_cs_shader, 
0, 0);
-   r600_init_atom(rctx-vs_samplers.atom_sampler, 
evergreen_emit_vs_sampler, 0, 0);
-   r600_init_atom(rctx-ps_samplers.atom_sampler, 
evergreen_emit_ps_sampler, 0, 0);
-
-   if (rctx-chip_class == EVERGREEN)
-   r600_init_atom(rctx-sample_mask.atom, 
evergreen_emit_sample_mask, 3, 0);
-   else
-   r600_init_atom(rctx-sample_mask.atom, 
cayman_emit_sample_mask, 4, 0);
+   unsigned id = 4;
+
+   /* !!!
+*  To avoid GPU lockup registers must be emited in a specific order
+* (no kidding ...). The order below is important and have been
+* partialy infered from analyzing fglrx command stream.
+*
+* Don't reorder atom without carefully checking the effect (GPU lockup
+* or piglit regression).
+* !!!
+*/
+
+   /* shader const */
+   r600_init_atom(rctx, rctx-vs_constbuf_state.atom, id++, 
evergreen_emit_vs_constant_buffers, 0);
+   r600_init_atom(rctx, rctx-ps_constbuf_state.atom, id++, 
evergreen_emit_ps_constant_buffers, 0);
+   /* shader program */
+   r600_init_atom(rctx, rctx-cs_shader_state.atom, id++, 
evergreen_emit_cs_shader, 0);
+   /* sampler */
+   r600_init_atom(rctx, rctx-vs_samplers.atom_sampler, id++, 
evergreen_emit_vs_sampler, 0);
+   r600_init_atom(rctx, rctx-ps_samplers.atom_sampler, id++, 
evergreen_emit_ps_sampler, 0);
+   /* resources */
+   r600_init_atom(rctx, rctx-vertex_buffer_state.atom, id++, 
evergreen_fs_emit_vertex_buffers, 0);
+   r600_init_atom(rctx, rctx-cs_vertex_buffer_state.atom, id++, 
evergreen_cs_emit_vertex_buffers, 0);
+   r600_init_atom(rctx, rctx-vs_samplers.views.atom, id

Mesa (9.0): r600g: fix num of dwords needed for alphatest_state atom

2012-09-06 Thread Jerome Glisse
Module: Mesa
Branch: 9.0
Commit: 41d14eaf193c6b1eb87fe1998808a887f1c6c698
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=41d14eaf193c6b1eb87fe1998808a887f1c6c698

Author: Jerome Glisse jgli...@redhat.com
Date:   Thu Sep  6 15:09:21 2012 -0400

r600g: fix num of dwords needed for alphatest_state atom

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

---

 src/gallium/drivers/r600/r600_state_common.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_state_common.c 
b/src/gallium/drivers/r600/r600_state_common.c
index 68f53c6..26af6f6 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -108,7 +108,7 @@ void r600_init_common_atoms(struct r600_context *rctx)
 {
r600_init_atom(rctx-surface_sync_cmd.atom,r600_emit_surface_sync, 
5, EMIT_EARLY);
r600_init_atom(rctx-r6xx_flush_and_inv_cmd,   
r600_emit_r6xx_flush_and_inv,   2, EMIT_EARLY);
-   r600_init_atom(rctx-alphatest_state.atom, 
r600_emit_alphatest_state,  3, 0);
+   r600_init_atom(rctx-alphatest_state.atom, 
r600_emit_alphatest_state,  6, 0);
r600_atom_dirty(rctx, rctx-alphatest_state.atom);
 }
 

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


Mesa (master): r600g: atomize sampler state v2

2012-08-06 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 2df399c34bb39122a45bdd5b430b48346542e1cb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2df399c34bb39122a45bdd5b430b48346542e1cb

Author: Jerome Glisse jgli...@redhat.com
Date:   Wed Aug  1 15:53:11 2012 -0400

r600g: atomize sampler state v2

Use atom for sampler state. Does not provide new functionality
or fix any bug. Just a step toward full atom base r600g.

v2: Split seamless on r6xx/r7xx into it's own atom. Make sure it's
emited after sampler and with a pipeline flush before otherwise
it does not take effect.

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

---

 src/gallium/drivers/r600/evergreen_hw_context.c |  117 
 src/gallium/drivers/r600/evergreen_state.c  |  136 ---
 src/gallium/drivers/r600/r600.h |5 +-
 src/gallium/drivers/r600/r600_hw_context.c  |  149 +---
 src/gallium/drivers/r600/r600_pipe.h|   24 ++-
 src/gallium/drivers/r600/r600_state.c   |  215 +++
 src/gallium/drivers/r600/r600_state_common.c|   66 +++-
 7 files changed, 261 insertions(+), 451 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_hw_context.c 
b/src/gallium/drivers/r600/evergreen_hw_context.c
index 199033f..6494786 100644
--- a/src/gallium/drivers/r600/evergreen_hw_context.c
+++ b/src/gallium/drivers/r600/evergreen_hw_context.c
@@ -575,37 +575,6 @@ static const struct r600_reg cayman_context_reg_list[] = {
{R_028EAC_CB_COLOR11_DIM, 0, 0},
 };
 
-/* SHADER SAMPLER BORDER EG/CM */
-static int evergreen_state_sampler_border_init(struct r600_context *ctx, 
uint32_t offset, unsigned id)
-{
-   struct r600_reg r600_shader_sampler_border[] = {
-   {R_00A400_TD_PS_SAMPLER0_BORDER_INDEX, 0, 0},
-   {R_00A404_TD_PS_SAMPLER0_BORDER_RED, 0, 0},
-   {R_00A408_TD_PS_SAMPLER0_BORDER_GREEN, 0, 0},
-   {R_00A40C_TD_PS_SAMPLER0_BORDER_BLUE, 0, 0},
-   {R_00A410_TD_PS_SAMPLER0_BORDER_ALPHA, 0, 0},
-   };
-   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;
-   int r;
-
-   for (int i = 0; i  nreg; i++) {
-   r600_shader_sampler_border[i].offset -= 
R_00A400_TD_PS_SAMPLER0_BORDER_INDEX;
-   r600_shader_sampler_border[i].offset += fake_offset;
-   }
-   r = r600_context_add_block(ctx, r600_shader_sampler_border, nreg, 
PKT3_SET_CONFIG_REG, 0);
-   if (r) {
-   return r;
-   }
-   /* set proper offset */
-   range = ctx-range[CTX_RANGE_ID(r600_shader_sampler_border[0].offset)];
-   block = 
range-blocks[CTX_BLOCK_ID(r600_shader_sampler_border[0].offset)];
-   block-pm4[1] = (offset - EVERGREEN_CONFIG_REG_OFFSET)  2;
-   return 0;
-}
-
 static int evergreen_loop_const_init(struct r600_context *ctx, uint32_t offset)
 {
unsigned nreg = 32;
@@ -646,32 +615,6 @@ int evergreen_context_init(struct r600_context *ctx)
if (r)
goto out_err;
 
-
-   /* PS SAMPLER */
-   for (int j = 0, offset = 0; j  18; j++, offset += 0xC) {
-   r = r600_state_sampler_init(ctx, offset);
-   if (r)
-   goto out_err;
-   }
-   /* VS SAMPLER */
-   for (int j = 0, offset = 0xD8; j  18; j++, offset += 0xC) {
-   r = r600_state_sampler_init(ctx, offset);
-   if (r)
-   goto out_err;
-   }
-   /* PS SAMPLER BORDER */
-   for (int j = 0; j  18; j++) {
-   r = evergreen_state_sampler_border_init(ctx, 
R_00A400_TD_PS_SAMPLER0_BORDER_INDEX, j);
-   if (r)
-   goto out_err;
-   }
-   /* VS SAMPLER BORDER */
-   for (int j = 0; j  18; j++) {
-   r = evergreen_state_sampler_border_init(ctx, 
R_00A414_TD_VS_SAMPLER0_BORDER_INDEX, j);
-   if (r)
-   goto out_err;
-   }
-
/* PS loop const */
evergreen_loop_const_init(ctx, 0);
/* VS loop const */
@@ -688,66 +631,6 @@ out_err:
return r;
 }
 
-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) 
* 0x100 + 0x4 + id * 0x1C;
-   struct r600_range *range;
-   struct r600_block *block;
-   int i;
-   int dirty;
-
-   range = ctx-range[CTX_RANGE_ID(fake_offset)];
-   block = range-blocks[CTX_BLOCK_ID(fake_offset)];
-   if (state == NULL) {
-   block-status = ~(R600_BLOCK_STATUS_ENABLED | 
R600_BLOCK_STATUS_DIRTY);
-   LIST_DELINIT(block-list);
-   LIST_DELINIT(block-enable_list

Mesa (master): r600g: enable streamout only on 2.14 or latter kernel

2012-07-24 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 1ffac44e83a6fa6f486c6493e1d4eda259938ebb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1ffac44e83a6fa6f486c6493e1d4eda259938ebb

Author: Jerome Glisse jgli...@redhat.com
Date:   Tue Jul 24 15:05:43 2012 -0400

r600g: enable streamout only on 2.14 or latter kernel

The kernel streamout support was supposed to get into 3.3 along
the tiling change and thus use the same kernel version bump of
2.13 to report userspace that streamout register were supported.

This is not what happen. So as streamout kernel support did not
bump the kernel driver version, rely on kernel 2.14 version bump
to know if streamout is enabled or not. Which means you need at
least 3.4 kernel.

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

---

 src/gallium/drivers/r600/r600_pipe.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_pipe.c 
b/src/gallium/drivers/r600/r600_pipe.c
index 52725fc..17cc8e9 100644
--- a/src/gallium/drivers/r600/r600_pipe.c
+++ b/src/gallium/drivers/r600/r600_pipe.c
@@ -902,7 +902,7 @@ struct pipe_screen *r600_screen_create(struct radeon_winsys 
*ws)
switch (rscreen-chip_class) {
case R600:
case EVERGREEN:
-   rscreen-has_streamout = rscreen-info.drm_minor = 13;
+   rscreen-has_streamout = rscreen-info.drm_minor = 14;
break;
case R700:
rscreen-has_streamout = rscreen-info.drm_minor = 17;

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


Mesa (master): r600g: don't emit forbidden register on old kernel

2012-07-23 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: b7b5a77ec0fa715f09cef32083f818e745772f91
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b7b5a77ec0fa715f09cef32083f818e745772f91

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Jul 23 11:26:24 2012 -0400

r600g: don't emit forbidden register on old kernel

Fix https://bugs.freedesktop.org/show_bug.cgi?id=52313

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

---

 src/gallium/drivers/r600/evergreen_state.c |4 +++-
 src/gallium/drivers/r600/r600_state.c  |4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 9313cb4..61d893b 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -2107,7 +2107,9 @@ static void cayman_init_atom_start_cs(struct r600_context 
*rctx)
 
r600_store_context_reg(cb, R_028354_SX_SURFACE_SYNC, 
S_028354_SURFACE_SYNC_MASK(0xf));
r600_store_context_reg(cb, R_028800_DB_DEPTH_CONTROL, 0);
-   r600_store_context_reg(cb, R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET, 0);
+   if (rctx-screen-has_streamout) {
+   r600_store_context_reg(cb, 
R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET, 0);
+   }
 
eg_store_loop_const(cb, R_03A200_SQ_LOOP_CONST_0, 0x01000FFF);
eg_store_loop_const(cb, R_03A200_SQ_LOOP_CONST_0 + (32 * 4), 
0x01000FFF);
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index 50a7bec..82f5ffb 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -2258,7 +2258,9 @@ void r600_init_atom_start_cs(struct r600_context *rctx)
if (rctx-chip_class == R700  rctx-screen-has_streamout)
r600_store_context_reg(cb, R_028354_SX_SURFACE_SYNC, 
S_028354_SURFACE_SYNC_MASK(0xf));
r600_store_context_reg(cb, R_028800_DB_DEPTH_CONTROL, 0);
-   r600_store_context_reg(cb, R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET, 0);
+   if (rctx-screen-has_streamout) {
+   r600_store_context_reg(cb, 
R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET, 0);
+   }
 
r600_store_loop_const(cb, R_03E200_SQ_LOOP_CONST_0, 0x1000FFF);
r600_store_loop_const(cb, R_03E200_SQ_LOOP_CONST_0 + (32 * 4), 
0x1000FFF);

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


Mesa (master): r600g: don't emit forbidden reg with old kernel on evergreen

2012-07-23 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: cb149bf9e12aebd38bd0a6d009673e8400659110
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=cb149bf9e12aebd38bd0a6d009673e8400659110

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Jul 23 11:42:36 2012 -0400

r600g: don't emit forbidden reg with old kernel on evergreen

Fix https://bugs.freedesktop.org/show_bug.cgi?id=52313

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

---

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

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 61d893b..654aeff 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -2595,7 +2595,9 @@ void evergreen_init_atom_start_cs(struct r600_context 
*rctx)
 
r600_store_context_reg(cb, R_028354_SX_SURFACE_SYNC, 
S_028354_SURFACE_SYNC_MASK(0xf));
r600_store_context_reg(cb, R_028800_DB_DEPTH_CONTROL, 0);
-   r600_store_context_reg(cb, R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET, 0);
+   if (rctx-screen-has_streamout) {
+   r600_store_context_reg(cb, 
R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET, 0);
+   }
 
eg_store_loop_const(cb, R_03A200_SQ_LOOP_CONST_0, 0x01000FFF);
eg_store_loop_const(cb, R_03A200_SQ_LOOP_CONST_0 + (32 * 4), 
0x01000FFF);

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


Mesa (master): r600g: fix z/stencil texture creation v2

2012-06-19 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: b4f0ab0b22625ac1bb3cf16342039557c086ebae
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b4f0ab0b22625ac1bb3cf16342039557c086ebae

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Jun 15 13:01:49 2012 -0400

r600g: fix z/stencil texture creation v2

z or stencil texture should not be created with the z/stencil
flags for surface creation as they are intended to be bound
as texture.

v2: remove broken code

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

---

 src/gallium/drivers/r600/r600_texture.c |   32 --
 1 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_texture.c 
b/src/gallium/drivers/r600/r600_texture.c
index 5b15990..fe9a923 100644
--- a/src/gallium/drivers/r600/r600_texture.c
+++ b/src/gallium/drivers/r600/r600_texture.c
@@ -237,7 +237,7 @@ static void r600_texture_set_array_mode(struct pipe_screen 
*screen,
 
 static int r600_init_surface(struct radeon_surface *surface,
 const struct pipe_resource *ptex,
-unsigned array_mode)
+unsigned array_mode, bool is_transfer)
 {
surface-npix_x = ptex-width0;
surface-npix_y = ptex-height0;
@@ -298,7 +298,7 @@ static int r600_init_surface(struct radeon_surface *surface,
if (ptex-bind  PIPE_BIND_SCANOUT) {
surface-flags |= RADEON_SURF_SCANOUT;
}
-   if (util_format_is_depth_and_stencil(ptex-format)) {
+   if (util_format_is_depth_and_stencil(ptex-format)  !is_transfer) {
surface-flags |= RADEON_SURF_ZBUFFER;
surface-flags |= RADEON_SURF_SBUFFER;
}
@@ -316,11 +316,6 @@ static int r600_setup_surface(struct pipe_screen *screen,
unsigned i;
int r;
 
-   if (util_format_is_depth_or_stencil(rtex-real_format)) {
-   rtex-surface.flags |= RADEON_SURF_ZBUFFER;
-   rtex-surface.flags |= RADEON_SURF_SBUFFER;
-   }
-
r = rscreen-ws-surface_init(rscreen-ws, rtex-surface);
if (r) {
return r;
@@ -572,7 +567,8 @@ r600_texture_create_object(struct pipe_screen *screen,
r600_setup_miptree(screen, rtex, array_mode);
if (rscreen-use_surface_alloc) {
rtex-surface = *surface;
-   r = r600_setup_surface(screen, rtex, array_mode, 
pitch_in_bytes_override);
+   r = r600_setup_surface(screen, rtex, array_mode,
+  pitch_in_bytes_override);
if (r) {
FREE(rtex);
return NULL;
@@ -642,7 +638,8 @@ struct pipe_resource *r600_texture_create(struct 
pipe_screen *screen,
}
}
 
-   r = r600_init_surface(surface, templ, array_mode);
+   r = r600_init_surface(surface, templ, array_mode,
+ templ-flags  R600_RESOURCE_FLAG_TRANSFER);
if (r) {
return NULL;
}
@@ -723,7 +720,7 @@ struct pipe_resource *r600_texture_from_handle(struct 
pipe_screen *screen,
else
array_mode = 0;
 
-   r = r600_init_surface(surface, templ, array_mode);
+   r = r600_init_surface(surface, templ, array_mode, 0);
if (r) {
return NULL;
}
@@ -796,8 +793,9 @@ struct pipe_transfer* r600_texture_get_transfer(struct 
pipe_context *ctx,
 * the CPU is much happier reading out of cached system memory
 * than uncached VRAM.
 */
-   if (R600_TEX_IS_TILED(rtex, level))
+   if (R600_TEX_IS_TILED(rtex, level)) {
use_staging_texture = TRUE;
+   }
 
if ((usage  PIPE_TRANSFER_READ)  u_box_volume(box)  1024)
use_staging_texture = TRUE;
@@ -805,15 +803,18 @@ struct pipe_transfer* r600_texture_get_transfer(struct 
pipe_context *ctx,
/* Use a staging texture for uploads if the underlying BO is busy. */
if (!(usage  PIPE_TRANSFER_READ) 
(rctx-ws-cs_is_buffer_referenced(rctx-cs, rtex-resource.cs_buf, 
RADEON_USAGE_READWRITE) ||
-rctx-ws-buffer_is_busy(rtex-resource.buf, 
RADEON_USAGE_READWRITE)))
+rctx-ws-buffer_is_busy(rtex-resource.buf, 
RADEON_USAGE_READWRITE))) {
use_staging_texture = TRUE;
+   }
 
if (!permit_hardware_blit(ctx-screen, texture) ||
-   (texture-flags  R600_RESOURCE_FLAG_TRANSFER))
+   (texture-flags  R600_RESOURCE_FLAG_TRANSFER)) {
use_staging_texture = FALSE;
+   }
 
-   if (use_staging_texture  (usage  PIPE_TRANSFER_MAP_DIRECTLY))
+   if (use_staging_texture  (usage  PIPE_TRANSFER_MAP_DIRECTLY)) {
return NULL;
+   }
 
trans = CALLOC_STRUCT(r600_transfer);
if (trans == NULL)
@@ -898,8 +899,9 @@ void r600_texture_transfer_destroy(struct pipe_context *ctx,
}
 
if (rtex-is_depth  !rtex

Mesa (master): radeon/r600g: fix virtual address space allocation

2012-02-21 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: e372e53ee0ed57072322003e508b3ca4c58076be
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e372e53ee0ed57072322003e508b3ca4c58076be

Author: Jerome Glisse jgli...@redhat.com
Date:   Tue Feb 21 12:34:54 2012 -0500

radeon/r600g: fix virtual address space allocation

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

---

 src/gallium/winsys/radeon/drm/radeon_drm_bo.c |3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c 
b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
index 8e73e6f..31a47c6 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
@@ -211,6 +211,9 @@ static uint64_t radeon_bomgr_find_va(struct radeon_bomgr 
*mgr, uint64_t size, ui
 waste = waste ? alignment - waste : 0;
 }
 offset += waste;
+if (offset = (hole-offset + hole-size)) {
+continue;
+}
 if (!waste  hole-size == size) {
 offset = hole-offset;
 list_del(hole-list);

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


Mesa (master): r600g: fix tiling with cayman and virtual memory

2012-02-14 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 356eb0aadbb977b0732da077ad31cd66d1b53e23
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=356eb0aadbb977b0732da077ad31cd66d1b53e23

Author: Jerome Glisse jgli...@redhat.com
Date:   Tue Feb 14 16:26:12 2012 -0500

r600g: fix tiling with cayman and virtual memory

The virtual address but follow the alignment requirement of the
tiled surface. The bo from handle case is not properly fix. Need
bigger change for a proper fix. Work around that by enforcing 1M
alignment for those bo.

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

---

 src/gallium/winsys/radeon/drm/radeon_drm_bo.c |   38 ++--
 1 files changed, 28 insertions(+), 10 deletions(-)

diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c 
b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
index adee7b2..8e73e6f 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
@@ -196,32 +196,50 @@ static boolean radeon_bo_is_busy(struct pb_buffer *_buf,
 }
 }
 
-static uint64_t radeon_bomgr_find_va(struct radeon_bomgr *mgr, uint64_t size)
+static uint64_t radeon_bomgr_find_va(struct radeon_bomgr *mgr, uint64_t size, 
uint64_t alignment)
 {
 struct radeon_bo_va_hole *hole, *n;
-uint64_t offset = 0;
+uint64_t offset = 0, waste = 0;
 
 pipe_mutex_lock(mgr-bo_va_mutex);
 /* first look for a hole */
 LIST_FOR_EACH_ENTRY_SAFE(hole, n, mgr-va_holes, list) {
-if (hole-size == size) {
+offset = hole-offset;
+waste = 0;
+if (alignment) {
+waste = offset % alignment;
+waste = waste ? alignment - waste : 0;
+}
+offset += waste;
+if (!waste  hole-size == size) {
 offset = hole-offset;
 list_del(hole-list);
 FREE(hole);
 pipe_mutex_unlock(mgr-bo_va_mutex);
 return offset;
 }
-if (hole-size  size) {
-offset = hole-offset;
-hole-size -= size;
-hole-offset += size;
+if ((hole-size - waste) = size) {
+if (waste) {
+n = CALLOC_STRUCT(radeon_bo_va_hole);
+n-size = waste;
+n-offset = hole-offset;
+list_add(n-list, mgr-va_holes);
+}
+hole-size -= (size + waste);
+hole-offset += size + waste;
 pipe_mutex_unlock(mgr-bo_va_mutex);
 return offset;
 }
 }
 
 offset = mgr-va_offset;
-mgr-va_offset += size;
+waste = 0;
+if (alignment) {
+waste = offset % alignment;
+waste = waste ? alignment - waste : 0;
+}
+offset += waste;
+mgr-va_offset += size + waste;
 pipe_mutex_unlock(mgr-bo_va_mutex);
 return offset;
 }
@@ -517,7 +535,7 @@ static struct pb_buffer *radeon_bomgr_create_bo(struct 
pb_manager *_mgr,
 struct drm_radeon_gem_va va;
 
 bo-va_size = align(size,  4096);
-bo-va = radeon_bomgr_find_va(mgr, bo-va_size);
+bo-va = radeon_bomgr_find_va(mgr, bo-va_size, desc-alignment);
 
 va.handle = bo-handle;
 va.vm_id = 0;
@@ -818,7 +836,7 @@ done:
 struct drm_radeon_gem_va va;
 
 bo-va_size = ((bo-base.size + 4095)  ~4095);
-bo-va = radeon_bomgr_find_va(mgr, bo-va_size);
+bo-va = radeon_bomgr_find_va(mgr, bo-va_size, 1  20);
 
 va.handle = bo-handle;
 va.operation = RADEON_VA_MAP;

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


Mesa (master): r600g: add support for common surface allocator for tiling v13

2012-02-06 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: c0c979eebc076b95cc8d18a013ce2968fe6311ad
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c0c979eebc076b95cc8d18a013ce2968fe6311ad

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Jan 30 17:22:13 2012 -0500

r600g: add support for common surface allocator for tiling v13

Tiled surface have all kind of alignment constraint that needs to
be met. Instead of having all this code duplicated btw ddx and
mesa use common code in libdrm_radeon this also ensure that both
ddx and mesa compute those alignment in the same way.

v2 fix evergreen
v3 fix compressed texture and workaround cube texture issue by
   disabling 2D array mode for cubemap (need to check if r7xx and
   newer are also affected by the issue)
v4 fix texture array
v5 fix evergreen and newer, split surface values computation from
   mipmap tree generation so that we can get them directly from the
   ddx
v6 final fix to evergreen tile split value
v7 fix mipmap offset to avoid to use random value, use color view
   depth view to address different layer as hardware is doing some
   magic rotation depending on the layer
v8 fix COLOR_VIEW on r6xx for linear array mode, use COLOR_VIEW on
   evergreen, align bytes per pixel to a multiple of a dword
v9 fix handling of stencil on evergreen, half fix for compressed
   texture
v10 fix evergreen compressed texture proper support for stencil
tile split. Fix stencil issue when array mode was clear by
the kernel, always program stencil bo. On evergreen depth
buffer bo need to be big enough to hold depth buffer + stencil
buffer as even with stencil disabled things get written there.
v11 rebase on top of mesa, fix pitch issue with 1d surface on evergreen,
old ddx overestimate those. Fix linear case when pitch*height  64.
Fix r300g.
v12 Fix linear case when pitch*height  64 for old path, adapt to
libdrm API change
v13 add libdrm check

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

---

 configure.ac  |4 +-
 src/gallium/drivers/r300/r300_texture.c   |2 +-
 src/gallium/drivers/r600/evergreen_state.c|  352 ++---
 src/gallium/drivers/r600/evergreend.h |   22 ++
 src/gallium/drivers/r600/r600_blit.c  |   27 ++-
 src/gallium/drivers/r600/r600_hw_context.c|3 +
 src/gallium/drivers/r600/r600_pipe.h  |1 +
 src/gallium/drivers/r600/r600_resource.h  |1 +
 src/gallium/drivers/r600/r600_state.c |  256 
 src/gallium/drivers/r600/r600_texture.c   |  198 +++-
 src/gallium/targets/dri-r300/Makefile |2 +
 src/gallium/targets/dri-r600/Makefile |2 +-
 src/gallium/targets/egl-static/Makefile   |2 +
 src/gallium/targets/va-r300/Makefile  |2 +-
 src/gallium/targets/va-r600/Makefile  |2 +-
 src/gallium/targets/vdpau-r300/Makefile   |2 +-
 src/gallium/targets/vdpau-r600/Makefile   |2 +-
 src/gallium/targets/xorg-r300/Makefile|2 +-
 src/gallium/targets/xorg-r600/Makefile|2 +-
 src/gallium/winsys/radeon/drm/radeon_drm_bo.c |   29 ++-
 src/gallium/winsys/radeon/drm/radeon_drm_winsys.c |   26 ++
 src/gallium/winsys/radeon/drm/radeon_drm_winsys.h |1 +
 src/gallium/winsys/radeon/drm/radeon_winsys.h |   25 ++-
 23 files changed, 832 insertions(+), 133 deletions(-)

Diff:   
http://cgit.freedesktop.org/mesa/mesa/diff/?id=c0c979eebc076b95cc8d18a013ce2968fe6311ad
___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600g: add support for virtual address space on cayman v11

2012-01-13 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: bb1f0cf3508630a9a93512c79badf8c493c46743
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bb1f0cf3508630a9a93512c79badf8c493c46743

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Dec  2 10:20:29 2011 -0500

r600g: add support for virtual address space on cayman v11

Virtual address space put the userspace in charge of their GPU
address space. It's up to userspace to bind bo into the virtual
address space. Command stream can them be executed using the
IB_VM chunck.

This patch add support for this configuration. It doesn't remove
the 64K ib size limit thought this limit can be extanded up to
1M for IB_VM chunk.

v2: fix rendering
v3: fix rendering when using index buffer
v4: make vm conditional on kernel support add basic va management
v5: catch the case when we already have va for a bo
v6: agd5f: update on top of ioctl changes
v7: agd5f: further ioctl updates
v8: indentation cleanup + fix non cayman
v9: rebase against lastest mesa + improvement from Marek  Michel
v10: fix cut/paste bug
v11: don't rely on updated radeon_drm.h

Signed-off-by: Jerome Glisse jgli...@redhat.com
Signed-off-by: Alex Deucher alexander.deuc...@amd.com

---

 src/gallium/drivers/r600/evergreen_hw_context.c   |9 +-
 src/gallium/drivers/r600/evergreen_state.c|   49 --
 src/gallium/drivers/r600/r600_hw_context.c|   47 --
 src/gallium/drivers/r600/r600_pipe.h  |3 +-
 src/gallium/drivers/r600/r600_resource.c  |   11 +
 src/gallium/drivers/r600/r600_resource.h  |2 +
 src/gallium/drivers/r600/r600_state_common.c  |   14 +-
 src/gallium/winsys/radeon/drm/radeon_drm_bo.c |  209 +
 src/gallium/winsys/radeon/drm/radeon_drm_bo.h |2 +
 src/gallium/winsys/radeon/drm/radeon_drm_cs.c |   34 +++-
 src/gallium/winsys/radeon/drm/radeon_drm_cs.h |4 +-
 src/gallium/winsys/radeon/drm/radeon_drm_winsys.c |   23 +++
 src/gallium/winsys/radeon/drm/radeon_winsys.h |   11 +
 13 files changed, 370 insertions(+), 48 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_hw_context.c 
b/src/gallium/drivers/r600/evergreen_hw_context.c
index bd1d969..e75eaf2 100644
--- a/src/gallium/drivers/r600/evergreen_hw_context.c
+++ b/src/gallium/drivers/r600/evergreen_hw_context.c
@@ -1135,6 +1135,7 @@ void evergreen_context_draw(struct r600_context *ctx, 
const struct r600_draw *dr
struct r600_block *dirty_block = NULL;
struct r600_block *next_block;
uint32_t *pm4;
+   uint64_t va;
 
if (draw-indices) {
ndwords = 11;
@@ -1174,9 +1175,11 @@ void evergreen_context_draw(struct r600_context *ctx, 
const struct r600_draw *dr
pm4[2] = PKT3(PKT3_NUM_INSTANCES, 0, ctx-predicate_drawing);
pm4[3] = draw-vgt_num_instances;
if (draw-indices) {
-   pm4[4] = PKT3(PKT3_DRAW_INDEX, 3, ctx-predicate_drawing);
-   pm4[5] = draw-indices_bo_offset;
-   pm4[6] = 0;
+   va = r600_resource_va(ctx-screen-screen, 
(void*)draw-indices);
+   va += draw-indices_bo_offset;
+   pm4[4] = PKT3(PKT3_DRAW_INDEX, 3, ctx-predicate_drawing);
+   pm4[5] = va;
+   pm4[6] = (va  32UL)  0xFF;
pm4[7] = draw-vgt_num_indices;
pm4[8] = draw-vgt_draw_initiator;
pm4[9] = PKT3(PKT3_NOP, 0, ctx-predicate_drawing);
diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index f3aab69..df6ad28 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1105,8 +1105,8 @@ static struct pipe_sampler_view 
*evergreen_create_sampler_view(struct pipe_conte
rstate-val[1] = (S_030004_TEX_HEIGHT(height - 1) |
  S_030004_TEX_DEPTH(depth - 1) |
  S_030004_ARRAY_MODE(array_mode));
-   rstate-val[2] = tmp-offset[0]  8;
-   rstate-val[3] = tmp-offset[1]  8;
+   rstate-val[2] = (tmp-offset[0] + r600_resource_va(ctx-screen, 
texture))  8;
+   rstate-val[3] = (tmp-offset[1] + r600_resource_va(ctx-screen, 
texture))  8;
rstate-val[4] = (word4 |
  
S_030010_SRF_MODE_ALL(V_030010_SRF_MODE_ZERO_CLAMP_MINUS_ONE) |
  S_030010_ENDIAN_SWAP(endian) |
@@ -1343,7 +1343,7 @@ static void evergreen_cb(struct r600_pipe_context *rctx, 
struct r600_pipe_state
unsigned pitch, slice;
unsigned color_info;
unsigned format, swap, ntype, endian;
-   unsigned offset;
+   uint64_t offset;
unsigned tile_type;
const struct util_format_description *desc;
int i;
@@ -1443,10 +1443,13 @@ static void evergreen_cb(struct r600_pipe_context 
*rctx, struct r600_pipe_state
} else /* workaround for linear buffers */
tile_type = 1;
 
+   offset += r600_resource_va(rctx-context.screen

Mesa (master): radeon/winsys: fix get info ioctl error checking

2012-01-09 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: b82a2a848c2f614be6186f411bc366ebe2f189bc
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b82a2a848c2f614be6186f411bc366ebe2f189bc

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Jan  9 14:59:56 2012 -0500

radeon/winsys: fix get info ioctl error checking

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

---

 src/gallium/winsys/radeon/drm/radeon_drm_winsys.c |8 +---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c 
b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
index 442bd2a..f337411 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
@@ -138,9 +138,11 @@ static boolean radeon_get_drm_value(int fd, unsigned 
request,
 info.request = request;
 
 retval = drmCommandWriteRead(fd, DRM_RADEON_INFO, info, sizeof(info));
-if (retval  errname) {
-fprintf(stderr, radeon: Failed to get %s, error number %d\n,
-errname, retval);
+if (retval) {
+if (errname) {
+fprintf(stderr, radeon: Failed to get %s, error number %d\n,
+errname, retval);
+}
 return FALSE;
 }
 return TRUE;

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


Mesa (master): gallium/radeon: fix indentation

2011-12-05 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: bbc320a94def6178028a4c46012c737839e1cf61
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bbc320a94def6178028a4c46012c737839e1cf61

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Dec  5 18:40:53 2011 -0500

gallium/radeon: fix indentation

Indentation cleanup, to keep consistency.

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

---

 src/gallium/winsys/radeon/drm/radeon_drm_bo.c |   44 ++--
 src/gallium/winsys/radeon/drm/radeon_drm_cs.h |2 +-
 src/gallium/winsys/radeon/drm/radeon_drm_winsys.c |8 ++--
 src/gallium/winsys/radeon/drm/radeon_winsys.h |2 +-
 4 files changed, 28 insertions(+), 28 deletions(-)

diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c 
b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
index d3de6eb..ccf9c4f 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
@@ -44,15 +44,15 @@
 #define RADEON_BO_FLAGS_MICRO_TILE_SQUARE 0x20
 
 #ifndef DRM_RADEON_GEM_WAIT
-#define DRM_RADEON_GEM_WAIT0x2b
+#define DRM_RADEON_GEM_WAIT 0x2b
 
-#define RADEON_GEM_NO_WAIT 0x1
-#define RADEON_GEM_USAGE_READ  0x2
-#define RADEON_GEM_USAGE_WRITE 0x4
+#define RADEON_GEM_NO_WAIT  0x1
+#define RADEON_GEM_USAGE_READ   0x2
+#define RADEON_GEM_USAGE_WRITE  0x4
 
 struct drm_radeon_gem_wait {
-   uint32_thandle;
-   uint32_tflags;  /* one of RADEON_GEM_* */
+uint32_thandle;
+uint32_tflags;  /* one of RADEON_GEM_* */
 };
 
 #endif
@@ -91,9 +91,9 @@ static struct radeon_bo *get_radeon_bo(struct pb_buffer *_buf)
 if (_buf-vtbl == radeon_bo_vtbl) {
 bo = radeon_bo(_buf);
 } else {
-   struct pb_buffer *base_buf;
-   pb_size offset;
-   pb_get_base_buffer(_buf, base_buf, offset);
+struct pb_buffer *base_buf;
+pb_size offset;
+pb_get_base_buffer(_buf, base_buf, offset);
 
 if (base_buf-vtbl == radeon_bo_vtbl)
 bo = radeon_bo(base_buf);
@@ -161,7 +161,7 @@ static void radeon_bo_destroy(struct pb_buffer *_buf)
 if (bo-name) {
 pipe_mutex_lock(bo-mgr-bo_handles_mutex);
 util_hash_table_remove(bo-mgr-bo_handles,
-  (void*)(uintptr_t)bo-name);
+   (void*)(uintptr_t)bo-name);
 pipe_mutex_unlock(bo-mgr-bo_handles_mutex);
 }
 
@@ -305,16 +305,16 @@ static void radeon_bo_unmap_internal(struct pb_buffer 
*_buf)
 }
 
 static void radeon_bo_get_base_buffer(struct pb_buffer *buf,
- struct pb_buffer **base_buf,
- unsigned *offset)
+  struct pb_buffer **base_buf,
+  unsigned *offset)
 {
 *base_buf = buf;
 *offset = 0;
 }
 
 static enum pipe_error radeon_bo_validate(struct pb_buffer *_buf,
- struct pb_validate *vl,
- unsigned flags)
+  struct pb_validate *vl,
+  unsigned flags)
 {
 /* Always pinned */
 return PIPE_OK;
@@ -335,8 +335,8 @@ const struct pb_vtbl radeon_bo_vtbl = {
 };
 
 static struct pb_buffer *radeon_bomgr_create_bo(struct pb_manager *_mgr,
-   pb_size size,
-   const struct pb_desc *desc)
+pb_size size,
+const struct pb_desc *desc)
 {
 struct radeon_bomgr *mgr = radeon_bomgr(_mgr);
 struct radeon_drm_winsys *rws = mgr-rws;
@@ -367,7 +367,7 @@ static struct pb_buffer *radeon_bomgr_create_bo(struct 
pb_manager *_mgr,
 
 bo = CALLOC_STRUCT(radeon_bo);
 if (!bo)
-   return NULL;
+return NULL;
 
 pipe_reference_init(bo-base.reference, 1);
 bo-base.alignment = desc-alignment;
@@ -431,7 +431,7 @@ struct pb_manager *radeon_bomgr_create(struct 
radeon_drm_winsys *rws)
 
 mgr = CALLOC_STRUCT(radeon_bomgr);
 if (!mgr)
-   return NULL;
+return NULL;
 
 mgr-base.destroy = radeon_bomgr_destroy;
 mgr-base.create_buffer = radeon_bomgr_create_bo;
@@ -470,10 +470,10 @@ static void radeon_bo_get_tiling(struct pb_buffer *_buf,
 *microtiled = RADEON_LAYOUT_LINEAR;
 *macrotiled = RADEON_LAYOUT_LINEAR;
 if (args.tiling_flags  RADEON_BO_FLAGS_MICRO_TILE)
-   *microtiled = RADEON_LAYOUT_TILED;
+*microtiled = RADEON_LAYOUT_TILED;
 
 if (args.tiling_flags  RADEON_BO_FLAGS_MACRO_TILE)
-   *macrotiled = RADEON_LAYOUT_TILED;
+*macrotiled = RADEON_LAYOUT_TILED;
 }
 
 static void radeon_bo_set_tiling(struct pb_buffer *_buf,
@@ -565,13 +565,13 @@ radeon_winsys_bo_create(struct radeon_winsys *rws,
 /* Assign a buffer manager. */
 if (bind  (PIPE_BIND_VERTEX_BUFFER

Mesa (master): r600g: fix error path and use util_slab_free

2011-12-05 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: e368eefc6866d78e2a004db2fdb13e08e06e0839
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e368eefc6866d78e2a004db2fdb13e08e06e0839

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Dec  5 18:42:38 2011 -0500

r600g: fix error path and use util_slab_free

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

---

 src/gallium/drivers/r600/r600_buffer.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_buffer.c 
b/src/gallium/drivers/r600/r600_buffer.c
index f1b6956..f438886 100644
--- a/src/gallium/drivers/r600/r600_buffer.c
+++ b/src/gallium/drivers/r600/r600_buffer.c
@@ -177,7 +177,7 @@ struct pipe_resource *r600_buffer_create(struct pipe_screen 
*screen,
rbuffer-b.user_ptr = NULL;
 
if (!r600_init_resource(rscreen, rbuffer, templ-width0, alignment, 
templ-bind, templ-usage)) {
-   FREE(rbuffer);
+   util_slab_free(rscreen-pool_buffers, rbuffer);
return NULL;
}
return rbuffer-b.b.b;

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


Mesa (master): r600g: LIT: fix xy slots order

2011-06-24 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 8567e02dca6a944c703185f268a7a624fdd65482
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8567e02dca6a944c703185f268a7a624fdd65482

Author: Vadim Girlin vadimgir...@gmail.com
Date:   Fri Jun 24 20:29:11 2011 +0400

r600g: LIT: fix xy slots order

Signed-off-by: Vadim Girlin vadimgir...@gmail.com

---

 src/gallium/drivers/r600/r600_shader.c |   22 +++---
 1 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index 86fdfbc..904cc69 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -1391,6 +1391,17 @@ static int tgsi_lit(struct r600_shader_ctx *ctx)
}
}
 
+   /* dst.x, - 1.0  */
+   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  = V_SQ_ALU_SRC_1; /*1.0*/
+   alu.src[0].chan = 0;
+   tgsi_dst(ctx, inst-Dst[0], 0, alu.dst);
+   alu.dst.write = (inst-Dst[0].Register.WriteMask  0)  1;
+   r = r600_bc_add_alu(ctx-bc, alu);
+   if (r)
+   return r;
+
/* dst.y = max(src.x, 0.0) */
memset(alu, 0, sizeof(struct r600_bc_alu));
alu.inst = CTX_INST(V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MAX);
@@ -1403,17 +1414,6 @@ static int tgsi_lit(struct r600_shader_ctx *ctx)
if (r)
return r;
 
-   /* dst.x, - 1.0  */
-   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  = V_SQ_ALU_SRC_1; /*1.0*/
-   alu.src[0].chan = 0;
-   tgsi_dst(ctx, inst-Dst[0], 0, alu.dst);
-   alu.dst.write = (inst-Dst[0].Register.WriteMask  0)  1;
-   r = r600_bc_add_alu(ctx-bc, alu);
-   if (r)
-   return r;
-
/* dst.w, - 1.0  */
memset(alu, 0, sizeof(struct r600_bc_alu));
alu.inst = CTX_INST(V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOV);

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


Mesa (master): r600g: optimize spi update

2011-06-24 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: d81126b714cd4de0ab036bb22bf4103f5fcec015
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d81126b714cd4de0ab036bb22bf4103f5fcec015

Author: Vadim Girlin vadimgir...@gmail.com
Date:   Fri Jun 24 20:29:12 2011 +0400

r600g: optimize spi update

Signed-off-by: Vadim Girlin vadimgir...@gmail.com

---

 src/gallium/drivers/r600/r600_pipe.h |1 +
 src/gallium/drivers/r600/r600_state_common.c |   10 +++---
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_pipe.h 
b/src/gallium/drivers/r600/r600_pipe.h
index 9941bbf..63ddd39 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium/drivers/r600/r600_pipe.h
@@ -202,6 +202,7 @@ struct r600_pipe_context {
struct pipe_query   *saved_render_cond;
unsignedsaved_render_cond_mode;
/* shader information */
+   boolean spi_dirty;
unsignedsprite_coord_enable;
boolean flatshade;
boolean export_16bpc;
diff --git a/src/gallium/drivers/r600/r600_state_common.c 
b/src/gallium/drivers/r600/r600_state_common.c
index 30c6181..259f426 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -112,7 +112,7 @@ void r600_bind_rs_state(struct pipe_context *ctx, void 
*state)
r600_polygon_offset_update(rctx);
}
if (rctx-ps_shader  rctx-vs_shader)
-   r600_spi_update(rctx);
+   rctx-spi_dirty = true;
 }
 
 void r600_delete_rs_state(struct pipe_context *ctx, void *state)
@@ -274,7 +274,7 @@ void r600_bind_ps_shader(struct pipe_context *ctx, void 
*state)
r600_context_pipe_state_set(rctx-ctx, 
rctx-ps_shader-rstate);
}
if (rctx-ps_shader  rctx-vs_shader) {
-   r600_spi_update(rctx);
+   rctx-spi_dirty = true;
r600_adjust_gprs(rctx);
}
 }
@@ -289,7 +289,7 @@ void r600_bind_vs_shader(struct pipe_context *ctx, void 
*state)
r600_context_pipe_state_set(rctx-ctx, 
rctx-vs_shader-rstate);
}
if (rctx-ps_shader  rctx-vs_shader) {
-   r600_spi_update(rctx);
+   rctx-spi_dirty = true;
r600_adjust_gprs(rctx);
}
 }
@@ -391,6 +391,7 @@ static void r600_spi_update(struct r600_pipe_context *rctx)
r600_pipe_state_mod_reg(rstate, tmp);
}
 
+   rctx-spi_dirty = false;
r600_context_pipe_state_set(rctx-ctx, rstate);
 }
 
@@ -573,6 +574,9 @@ void r600_draw_vbo(struct pipe_context *ctx, const struct 
pipe_draw_info *info)
if (r600_conv_pipe_prim(draw.info.mode, prim))
return;
 
+   if (rctx-spi_dirty)
+   r600_spi_update(rctx);
+
if (rctx-alpha_ref_dirty)
r600_update_alpha_ref(rctx);
 

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


Mesa (master): r600g: implement fragment and vertex color clamp

2011-06-24 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: eafd331cf3b024001abd3f64861f41cd33a9acb2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=eafd331cf3b024001abd3f64861f41cd33a9acb2

Author: Vadim Girlin vadimgir...@gmail.com
Date:   Fri Jun 24 20:29:13 2011 +0400

r600g: implement fragment and vertex color clamp

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=38440

Signed-off-by: Vadim Girlin vadimgir...@gmail.com

---

 src/gallium/drivers/r600/evergreen_state.c   |2 +
 src/gallium/drivers/r600/r600_pipe.c |2 +-
 src/gallium/drivers/r600/r600_pipe.h |7 +++-
 src/gallium/drivers/r600/r600_shader.c   |   52 +++---
 src/gallium/drivers/r600/r600_shader.h   |1 +
 src/gallium/drivers/r600/r600_state.c|2 +
 src/gallium/drivers/r600/r600_state_common.c |   30 ++-
 7 files changed, 87 insertions(+), 9 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index f86e4d4..dfe7896 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -256,6 +256,8 @@ static void *evergreen_create_rs_state(struct pipe_context 
*ctx,
}
 
rstate = rs-rstate;
+   rs-clamp_vertex_color = state-clamp_vertex_color;
+   rs-clamp_fragment_color = state-clamp_fragment_color;
rs-flatshade = state-flatshade;
rs-sprite_coord_enable = state-sprite_coord_enable;
 
diff --git a/src/gallium/drivers/r600/r600_pipe.c 
b/src/gallium/drivers/r600/r600_pipe.c
index 38801d6..12599bf 100644
--- a/src/gallium/drivers/r600/r600_pipe.c
+++ b/src/gallium/drivers/r600/r600_pipe.c
@@ -377,6 +377,7 @@ static int r600_get_param(struct pipe_screen* pscreen, enum 
pipe_cap param)
case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
case PIPE_CAP_SM3:
case PIPE_CAP_SEAMLESS_CUBE_MAP:
+   case PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL:
return 1;
 
/* Supported except the original R600. */
@@ -392,7 +393,6 @@ static int r600_get_param(struct pipe_screen* pscreen, enum 
pipe_cap param)
/* Unsupported features. */
case PIPE_CAP_STREAM_OUTPUT:
case PIPE_CAP_PRIMITIVE_RESTART:
-   case PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL:
case PIPE_CAP_TGSI_INSTANCEID:
case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
diff --git a/src/gallium/drivers/r600/r600_pipe.h 
b/src/gallium/drivers/r600/r600_pipe.h
index 63ddd39..dc9aad0 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium/drivers/r600/r600_pipe.h
@@ -88,6 +88,8 @@ struct r600_pipe_sampler_view {
 
 struct r600_pipe_rasterizer {
struct r600_pipe_state  rstate;
+   boolean clamp_vertex_color;
+   boolean clamp_fragment_color;
boolean flatshade;
unsignedsprite_coord_enable;
float   offset_units;
@@ -125,6 +127,7 @@ struct r600_pipe_shader {
struct r600_bo  *bo;
struct r600_bo  *bo_fetch;
struct r600_vertex_element  vertex_elements;
+   struct tgsi_token   *tokens;
 };
 
 struct r600_pipe_sampler_state {
@@ -202,6 +205,8 @@ struct r600_pipe_context {
struct pipe_query   *saved_render_cond;
unsignedsaved_render_cond_mode;
/* shader information */
+   boolean clamp_vertex_color;
+   boolean clamp_fragment_color;
boolean spi_dirty;
unsignedsprite_coord_enable;
boolean flatshade;
@@ -265,7 +270,7 @@ void r600_init_query_functions(struct r600_pipe_context 
*rctx);
 void r600_init_context_resource_functions(struct r600_pipe_context *r600);
 
 /* r600_shader.c */
-int r600_pipe_shader_create(struct pipe_context *ctx, struct r600_pipe_shader 
*shader, const struct tgsi_token *tokens);
+int r600_pipe_shader_create(struct pipe_context *ctx, struct r600_pipe_shader 
*shader);
 void r600_pipe_shader_destroy(struct pipe_context *ctx, struct 
r600_pipe_shader *shader);
 int r600_find_vs_semantic_index(struct r600_shader *vs,
struct r600_shader *ps, int id);
diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index 904cc69..2e5d4a6 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -118,9 +118,9 @@ static int r600_pipe_shader(struct pipe_context *ctx, 
struct r600_pipe_shader *s
return 0;
 }
 
-static int r600_shader_from_tgsi(const struct tgsi_token *tokens, struct 
r600_shader *shader);
+static int r600_shader_from_tgsi(struct r600_pipe_context * rctx, struct 

Mesa (master): r600g: add support for anisotropic filtering

2011-05-09 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: ad904cdf98be576ba652fe1c16ab722d52365782
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ad904cdf98be576ba652fe1c16ab722d52365782

Author: Carl-Philip Haensch carli@carli-laptop.(none)
Date:   Fri May  6 22:48:08 2011 +0200

r600g: add support for anisotropic filtering

---

 src/gallium/drivers/r600/r600_state.c |   20 +---
 src/gallium/drivers/r600/r600d.h  |9 +
 2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index 3f979cf..aeffb9e 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -364,6 +364,17 @@ static void *r600_create_rs_state(struct pipe_context *ctx,
return rstate;
 }
 
+
+
+static inline unsigned r600_tex_aniso_filter(unsigned filter)
+{
+   if (filter = 1)   return 0;
+   if (filter = 2)   return 1;
+   if (filter = 4)   return 2;
+   if (filter = 8)   return 3;
+/* else */return 4;
+}
+
 static void *r600_create_sampler_state(struct pipe_context *ctx,
const struct pipe_sampler_state *state)
 {
@@ -376,13 +387,15 @@ static void *r600_create_sampler_state(struct 
pipe_context *ctx,
 
rstate-id = R600_PIPE_STATE_SAMPLER;
util_pack_color(state-border_color, PIPE_FORMAT_B8G8R8A8_UNORM, uc);
+   unsigned aniso_flag_offset = state-max_anisotropy  1 ? 4 : 0;
r600_pipe_state_add_reg(rstate, R_03C000_SQ_TEX_SAMPLER_WORD0_0,
S_03C000_CLAMP_X(r600_tex_wrap(state-wrap_s)) |
S_03C000_CLAMP_Y(r600_tex_wrap(state-wrap_t)) |
S_03C000_CLAMP_Z(r600_tex_wrap(state-wrap_r)) |
-   
S_03C000_XY_MAG_FILTER(r600_tex_filter(state-mag_img_filter)) |
-   
S_03C000_XY_MIN_FILTER(r600_tex_filter(state-min_img_filter)) |
+   
S_03C000_XY_MAG_FILTER(r600_tex_filter(state-mag_img_filter) | 
aniso_flag_offset) |
+   
S_03C000_XY_MIN_FILTER(r600_tex_filter(state-min_img_filter) | 
aniso_flag_offset) |

S_03C000_MIP_FILTER(r600_tex_mipfilter(state-min_mip_filter)) |
+   
S_03C000_ANISO(r600_tex_aniso_filter(state-max_anisotropy)) |

S_03C000_DEPTH_COMPARE_FUNCTION(r600_tex_compare(state-compare_func)) |
S_03C000_BORDER_COLOR_TYPE(uc.ui ? 
V_03C000_SQ_TEX_BORDER_COLOR_REGISTER : 0), 0x, NULL);
r600_pipe_state_add_reg(rstate, R_03C004_SQ_TEX_SAMPLER_WORD1_0,
@@ -492,7 +505,8 @@ static struct pipe_sampler_view 
*r600_create_sampler_view(struct pipe_context *c
S_038014_BASE_ARRAY(state-u.tex.first_layer) |
S_038014_LAST_ARRAY(state-u.tex.last_layer), 
0x, NULL);
r600_pipe_state_add_reg(rstate, R_038018_RESOURCE0_WORD6,
-   
S_038018_TYPE(V_038010_SQ_TEX_VTX_VALID_TEXTURE), 0x, NULL);
+   
S_038018_TYPE(V_038010_SQ_TEX_VTX_VALID_TEXTURE) |
+   S_038018_ANISO(4 /* max 16 samples */), 
0x, NULL);
 
return resource-base;
 }
diff --git a/src/gallium/drivers/r600/r600d.h b/src/gallium/drivers/r600/r600d.h
index 8296b52..c997462 100644
--- a/src/gallium/drivers/r600/r600d.h
+++ b/src/gallium/drivers/r600/r600d.h
@@ -1012,6 +1012,9 @@
 #define   S_038018_MPEG_CLAMP(x)   (((x)  0x3)  0)
 #define   G_038018_MPEG_CLAMP(x)   (((x)  0)  0x3)
 #define   C_038018_MPEG_CLAMP  0xFFFC
+#define   S_038018_ANISO(x)(((x)  0x7)  2)
+#define   G_038018_ANISO(x)(((x)  2)  0x7)
+#define   C_038018_ANISO   0xFFE3
 #define   S_038018_PERF_MODULATION(x)  (((x)  0x7)  5)
 #define   G_038018_PERF_MODULATION(x)  (((x)  5)  0x7)
 #define   C_038018_PERF_MODULATION 0xFF1F
@@ -1090,6 +1093,9 @@
 #define   S_03C000_MIP_FILTER(x)   (((x)  0x3)  17)
 #define   G_03C000_MIP_FILTER(x)   (((x)  17)  0x3)
 #define   C_03C000_MIP_FILTER  0xFFF9
+#define   S_03C000_ANISO(x)(((x)  0x7)  19)
+#define   G_03C000_ANISO(x)(((x)  19)  0x7)
+#define   C_03C000_ANISO   0xFFB7
 #define   S_03C000_BORDER_COLOR_TYPE(x)(((x)  0x3)  22)
 #define   G_03C000_BORDER_COLOR_TYPE(x)(((x)  22)  0x3)
 #define   C_03C000_BORDER_COLOR_TYPE   0xFF3F
@@ -1152,6 +1158,9 @@
 #define   S_03C008_PERF_Z(x)   (((x)  0x3)  18)
 #define   G_03C008_PERF_Z(x)   (((x)  18)  0x3)
 #define  

Mesa (master): r600g: anisotropic filtering support for evergreen hw

2011-05-09 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: b9e8ea6a2717422ea71887beda093fe1dfbd1200
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b9e8ea6a2717422ea71887beda093fe1dfbd1200

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon May  9 12:09:51 2011 -0400

r600g: anisotropic filtering support for evergreen hw

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

---

 src/gallium/drivers/r600/evergreen_state.c |   10 +++---
 src/gallium/drivers/r600/evergreend.h  |6 ++
 src/gallium/drivers/r600/r600_pipe.h   |9 +
 src/gallium/drivers/r600/r600_state.c  |   17 +++--
 src/gallium/drivers/r600/r600d.h   |   12 ++--
 5 files changed, 31 insertions(+), 23 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 502f266..654b04e 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -310,6 +310,7 @@ static void *evergreen_create_sampler_state(struct 
pipe_context *ctx,
 {
struct r600_pipe_state *rstate = CALLOC_STRUCT(r600_pipe_state);
union util_color uc;
+   unsigned aniso_flag_offset = state-max_anisotropy  1 ? 2 : 0;
 
if (rstate == NULL) {
return NULL;
@@ -321,9 +322,10 @@ static void *evergreen_create_sampler_state(struct 
pipe_context *ctx,
S_03C000_CLAMP_X(r600_tex_wrap(state-wrap_s)) |
S_03C000_CLAMP_Y(r600_tex_wrap(state-wrap_t)) |
S_03C000_CLAMP_Z(r600_tex_wrap(state-wrap_r)) |
-   
S_03C000_XY_MAG_FILTER(r600_tex_filter(state-mag_img_filter)) |
-   
S_03C000_XY_MIN_FILTER(r600_tex_filter(state-min_img_filter)) |
+   
S_03C000_XY_MAG_FILTER(r600_tex_filter(state-mag_img_filter) | 
aniso_flag_offset) |
+   
S_03C000_XY_MIN_FILTER(r600_tex_filter(state-min_img_filter) | 
aniso_flag_offset) |

S_03C000_MIP_FILTER(r600_tex_mipfilter(state-min_mip_filter)) |
+   
S_03C000_MAX_ANISO(r600_tex_aniso_filter(state-max_anisotropy)) |

S_03C000_DEPTH_COMPARE_FUNCTION(r600_tex_compare(state-compare_func)) |
S_03C000_BORDER_COLOR_TYPE(uc.ui ? 
V_03C000_SQ_TEX_BORDER_COLOR_REGISTER : 0), 0x, NULL);
r600_pipe_state_add_reg(rstate, R_03C004_SQ_TEX_SAMPLER_WORD1_0,
@@ -429,7 +431,9 @@ static struct pipe_sampler_view 
*evergreen_create_sampler_view(struct pipe_conte
S_030014_LAST_LEVEL(state-u.tex.last_level) |
S_030014_BASE_ARRAY(0) |
S_030014_LAST_ARRAY(0), 0x, NULL);
-   r600_pipe_state_add_reg(rstate, R_030018_RESOURCE0_WORD6, 0x0, 
0x, NULL);
+   r600_pipe_state_add_reg(rstate, R_030018_RESOURCE0_WORD6,
+   S_030018_MAX_ANISO(4 /* max 16 samples */),
+   0x, NULL);
r600_pipe_state_add_reg(rstate, R_03001C_RESOURCE0_WORD7,
S_03001C_DATA_FORMAT(format) |

S_03001C_TYPE(V_03001C_SQ_TEX_VTX_VALID_TEXTURE), 0x, NULL);
diff --git a/src/gallium/drivers/r600/evergreend.h 
b/src/gallium/drivers/r600/evergreend.h
index 670606d..3e87810 100644
--- a/src/gallium/drivers/r600/evergreend.h
+++ b/src/gallium/drivers/r600/evergreend.h
@@ -1027,6 +1027,9 @@
 #define   G_030014_LAST_ARRAY(x)   (((x)  17)  0x1FFF)
 #define   C_030014_LAST_ARRAY  0xC001
 #define R_030018_SQ_TEX_RESOURCE_WORD6_0 0x030018
+#define   S_030018_MAX_ANISO(x)(((x)  0x7)  0)
+#define   G_030018_MAX_ANISO(x)(((x)  0)  0x7)
+#define   C_030018_MAX_ANISO   0xFFF8
 #define   S_030018_PERF_MODULATION(x)  (((x)  0x7)  3)
 #define   G_030018_PERF_MODULATION(x)  (((x)  3)  0x7)
 #define   C_030018_PERF_MODULATION 0xFFC7
@@ -1141,6 +1144,9 @@
 #define   S_03C000_MIP_FILTER(x)   (((x)  0x3)  15)
 #define   G_03C000_MIP_FILTER(x)   (((x)  15)  0x3)
 #define   C_03C000_MIP_FILTER  0xFFFE7FFF
+#define   S_03C000_MAX_ANISO(x)(((x)  0x7)  17)
+#define   G_03C000_MAX_ANISO(x)(((x)  17)  0x7)
+#define   C_03C000_MAX_ANISO   0xFFF1
 #define   S_03C000_BORDER_COLOR_TYPE(x)(((x)  0x3)  20)
 #define   G_03C000_BORDER_COLOR_TYPE(x)(((x)  20)  0x3)
 #define   C_03C000_BORDER_COLOR_TYPE   0xFFCF
diff --git a/src/gallium/drivers/r600/r600_pipe.h 
b/src/gallium/drivers/r600/r600_pipe.h
index aa5ef4e..0e4cfeb 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium

Mesa (master): r600g: implement the pipe_screen fence functions

2011-03-29 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 948e1eb8e9c166ad5b74abc630d0760768ce78c9
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=948e1eb8e9c166ad5b74abc630d0760768ce78c9

Author: Fredrik Höglund fred...@kde.org
Date:   Tue Mar 29 19:43:59 2011 +0200

r600g: implement the pipe_screen fence functions

v2: Allocate the fences from a single shared buffer object.
v3: Allocate the r600_fence structs in blocks of 16.
Spin a few times before calling sched_yield in r600_fence_finish().

---

 src/gallium/drivers/r600/r600.h   |2 +
 src/gallium/drivers/r600/r600_pipe.c  |  145 +
 src/gallium/drivers/r600/r600_pipe.h  |   27 +
 src/gallium/winsys/r600/drm/r600_hw_context.c |   23 
 4 files changed, 197 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h
index 0b7d6f7..75b8b50 100644
--- a/src/gallium/drivers/r600/r600.h
+++ b/src/gallium/drivers/r600/r600.h
@@ -288,6 +288,8 @@ void r600_context_queries_suspend(struct r600_context *ctx);
 void r600_context_queries_resume(struct r600_context *ctx);
 void r600_query_predication(struct r600_context *ctx, struct r600_query 
*query, int operation,
int flag_wait);
+void r600_context_emit_fence(struct r600_context *ctx, struct r600_bo *fence,
+ unsigned offset, unsigned value);
 
 int evergreen_context_init(struct r600_context *ctx, struct radeon *radeon);
 void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw 
*draw);
diff --git a/src/gallium/drivers/r600/r600_pipe.c 
b/src/gallium/drivers/r600/r600_pipe.c
index 0e28bda..c5fc2ba 100644
--- a/src/gallium/drivers/r600/r600_pipe.c
+++ b/src/gallium/drivers/r600/r600_pipe.c
@@ -37,6 +37,7 @@
 #include util/u_memory.h
 #include util/u_inlines.h
 #include util/u_upload_mgr.h
+#include os/os_time.h
 #include pipebuffer/pb_buffer.h
 #include r600.h
 #include r600d.h
@@ -48,15 +49,82 @@
 /*
  * pipe_context
  */
+static struct r600_fence *r600_create_fence(struct r600_pipe_context *ctx)
+{
+   struct r600_fence *fence = NULL;
+
+   if (!ctx-fences.bo) {
+   /* Create the shared buffer object */
+   ctx-fences.bo = r600_bo(ctx-radeon, 4096, 0, 0, 0);
+   if (!ctx-fences.bo) {
+   R600_ERR(r600: failed to create bo for fence 
objects\n);
+   return NULL;
+   }
+   ctx-fences.data = r600_bo_map(ctx-radeon, ctx-fences.bo, 
PB_USAGE_UNSYNCHRONIZED, NULL);
+   }
+
+   if (!LIST_IS_EMPTY(ctx-fences.pool)) {
+   struct r600_fence *entry;
+
+   /* Try to find a freed fence that has been signalled */
+   LIST_FOR_EACH_ENTRY(entry, ctx-fences.pool, head) {
+   if (ctx-fences.data[entry-index] != 0) {
+   LIST_DELINIT(entry-head);
+   fence = entry;
+   break;
+   }
+   }
+   }
+
+   if (!fence) {
+   /* Allocate a new fence */
+   struct r600_fence_block *block;
+   unsigned index;
+
+   if ((ctx-fences.next_index + 1) = 1024) {
+   R600_ERR(r600: too many concurrent fences\n);
+   return NULL;
+   }
+
+   index = ctx-fences.next_index++;
+
+   if (!(index % FENCE_BLOCK_SIZE)) {
+   /* Allocate a new block */
+   block = CALLOC_STRUCT(r600_fence_block);
+   if (block == NULL)
+   return NULL;
+
+   LIST_ADD(block-head, ctx-fences.blocks);
+   } else {
+   block = LIST_ENTRY(struct r600_fence_block, 
ctx-fences.blocks.next, head);
+   }
+
+   fence = block-fences[index % FENCE_BLOCK_SIZE];
+   fence-ctx = ctx;
+   fence-index = index;
+   }
+
+   pipe_reference_init(fence-reference, 1);
+
+   ctx-fences.data[fence-index] = 0;
+   r600_context_emit_fence(ctx-ctx, ctx-fences.bo, fence-index, 1);
+   return fence;
+}
+
 static void r600_flush(struct pipe_context *ctx,
struct pipe_fence_handle **fence)
 {
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+   struct r600_fence **rfence = (struct r600_fence**)fence;
+
 #if 0
static int dc = 0;
char dname[256];
 #endif
 
+   if (rfence)
+   *rfence = r600_create_fence(rctx);
+
if (!rctx-ctx.pm4_cdwords)
return;
 
@@ -112,6 +180,18 @@ static void r600_destroy_context(struct pipe_context 
*context)
u_vbuf_mgr_destroy(rctx-vbuf_mgr);
util_slab_destroy(rctx-pool_transfers);
 
+   if (rctx-fences.bo) {
+   struct r600_fence_block *entry, *tmp;
+

Mesa (master): r600g: implement texture barrier

2011-03-29 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: d04ab396a54d29948363c3353efa5aaa888076a3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d04ab396a54d29948363c3353efa5aaa888076a3

Author: Fredrik Höglund fred...@kde.org
Date:   Tue Mar 29 19:52:03 2011 +0200

r600g: implement texture barrier

---

 src/gallium/drivers/r600/evergreen_state.c|1 +
 src/gallium/drivers/r600/r600.h   |1 +
 src/gallium/drivers/r600/r600_pipe.h  |2 ++
 src/gallium/drivers/r600/r600_state.c |8 
 src/gallium/winsys/r600/drm/r600_hw_context.c |   17 +
 5 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 7743266..8f93eb8 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -920,6 +920,7 @@ void evergreen_init_state_functions(struct 
r600_pipe_context *rctx)
rctx-context.set_viewport_state = evergreen_set_viewport_state;
rctx-context.sampler_view_destroy = r600_sampler_view_destroy;
rctx-context.redefine_user_buffer = u_default_redefine_user_buffer;
+   rctx-context.texture_barrier = r600_texture_barrier;
 }
 
 void evergreen_init_config(struct r600_pipe_context *rctx)
diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h
index 75b8b50..4256a7e 100644
--- a/src/gallium/drivers/r600/r600.h
+++ b/src/gallium/drivers/r600/r600.h
@@ -290,6 +290,7 @@ void r600_query_predication(struct r600_context *ctx, 
struct r600_query *query,
int flag_wait);
 void r600_context_emit_fence(struct r600_context *ctx, struct r600_bo *fence,
  unsigned offset, unsigned value);
+void r600_context_flush_all(struct r600_context *ctx, unsigned flush_flags);
 
 int evergreen_context_init(struct r600_context *ctx, struct radeon *radeon);
 void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw 
*draw);
diff --git a/src/gallium/drivers/r600/r600_pipe.h 
b/src/gallium/drivers/r600/r600_pipe.h
index 88aff0e..5b26d1f 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium/drivers/r600/r600_pipe.h
@@ -298,6 +298,8 @@ void r600_set_constant_buffer(struct pipe_context *ctx, 
uint shader, uint index,
  struct pipe_resource *buffer);
 void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info 
*info);
 
+void r600_texture_barrier(struct pipe_context *ctx);
+
 /*
  * common helpers
  */
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index d3adf03..e202056 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -934,6 +934,13 @@ static void r600_set_framebuffer_state(struct pipe_context 
*ctx,
}
 }
 
+void r600_texture_barrier(struct pipe_context *ctx)
+{
+   struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+
+   r600_context_flush_all(rctx-ctx, S_0085F0_TC_ACTION_ENA(1));
+}
+
 void r600_init_state_functions(struct r600_pipe_context *rctx)
 {
rctx-context.create_blend_state = r600_create_blend_state;
@@ -974,6 +981,7 @@ void r600_init_state_functions(struct r600_pipe_context 
*rctx)
rctx-context.set_viewport_state = r600_set_viewport_state;
rctx-context.sampler_view_destroy = r600_sampler_view_destroy;
rctx-context.redefine_user_buffer = u_default_redefine_user_buffer;
+   rctx-context.texture_barrier = r600_texture_barrier;
 }
 
 void r600_init_config(struct r600_pipe_context *rctx)
diff --git a/src/gallium/winsys/r600/drm/r600_hw_context.c 
b/src/gallium/winsys/r600/drm/r600_hw_context.c
index 48bce81..7f8da12 100644
--- a/src/gallium/winsys/r600/drm/r600_hw_context.c
+++ b/src/gallium/winsys/r600/drm/r600_hw_context.c
@@ -771,6 +771,23 @@ static void rv6xx_context_surface_base_update(struct 
r600_context *ctx,
}
 }
 
+/* Flushes all surfaces */
+void r600_context_flush_all(struct r600_context *ctx, unsigned flush_flags)
+{
+   unsigned ndwords = 5;
+
+   if ((ctx-pm4_dirty_cdwords + ndwords + ctx-pm4_cdwords)  
ctx-pm4_ndwords) {
+   /* need to flush */
+   r600_context_flush(ctx);
+   }
+
+   ctx-pm4[ctx-pm4_cdwords++] = PKT3(PKT3_SURFACE_SYNC, 3, 
ctx-predicate_drawing);
+   ctx-pm4[ctx-pm4_cdwords++] = flush_flags; /* CP_COHER_CNTL */
+   ctx-pm4[ctx-pm4_cdwords++] = 0x;  /* CP_COHER_SIZE */
+   ctx-pm4[ctx-pm4_cdwords++] = 0;   /* CP_COHER_BASE */
+   ctx-pm4[ctx-pm4_cdwords++] = 0x000A;  /* POLL_INTERVAL */
+}
+
 void r600_context_bo_flush(struct r600_context *ctx, unsigned flush_flags,
unsigned flush_mask, struct r600_bo *rbo)
 {

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org

Mesa (master): r600g: indentation fixes

2011-02-28 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: c33e091d17b90df61f7b3873a2f124c4f26adf06
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c33e091d17b90df61f7b3873a2f124c4f26adf06

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Feb 28 13:33:13 2011 -0500

r600g: indentation fixes

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

---

 src/gallium/drivers/r600/r600.h  |6 ++--
 src/gallium/drivers/r600/r600_asm.c  |   48 +-
 src/gallium/drivers/r600/r600_buffer.c   |   16 
 src/gallium/drivers/r600/r600_pipe.c |3 +-
 src/gallium/drivers/r600/r600_shader.c   |   46 
 src/gallium/drivers/r600/r600_state_common.c |   12 +++---
 6 files changed, 65 insertions(+), 66 deletions(-)

diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h
index 64c52bc..1b76f00 100644
--- a/src/gallium/drivers/r600/r600.h
+++ b/src/gallium/drivers/r600/r600.h
@@ -118,10 +118,10 @@ unsigned r600_get_clock_crystal_freq(struct radeon 
*radeon);
 /* r600_bo.c */
 struct r600_bo;
 struct r600_bo *r600_bo(struct radeon *radeon,
-unsigned size, unsigned alignment,
-unsigned binding, unsigned usage);
+   unsigned size, unsigned alignment,
+   unsigned binding, unsigned usage);
 struct r600_bo *r600_bo_handle(struct radeon *radeon,
-  unsigned handle, unsigned *array_mode);
+   unsigned handle, unsigned *array_mode);
 void *r600_bo_map(struct radeon *radeon, struct r600_bo *bo, unsigned usage, 
void *ctx);
 void r600_bo_unmap(struct radeon *radeon, struct r600_bo *bo);
 void r600_bo_reference(struct radeon *radeon, struct r600_bo **dst,
diff --git a/src/gallium/drivers/r600/r600_asm.c 
b/src/gallium/drivers/r600/r600_asm.c
index 5d59356..a319747 100644
--- a/src/gallium/drivers/r600/r600_asm.c
+++ b/src/gallium/drivers/r600/r600_asm.c
@@ -2070,7 +2070,7 @@ int r600_vertex_elements_build_fetch_shader(struct 
r600_pipe_context *rctx, stru
unsigned fetch_resource_start = rctx-family = CHIP_CEDAR ? 0 : 160;
unsigned format, num_format, format_comp;
u32 *bytecode;
-int i, r;
+   int i, r;
 
/* vertex elements offset need special handling, if offset is bigger
+ * than what we can put in fetch instruction then we need to alterate
@@ -2090,23 +2090,23 @@ int r600_vertex_elements_build_fetch_shader(struct 
r600_pipe_context *rctx, stru
return r;
 
for (i = 0; i  ve-count; i++) {
-   if (elements[i].instance_divisor  1) {
+   if (elements[i].instance_divisor  1) {
struct r600_bc_alu alu;
 
memset(alu, 0, sizeof(alu));
-alu.inst = BC_INST(bc, 
V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_INT_TO_FLT);
-alu.src[0].sel = 0;
-alu.src[0].chan = 3;
+   alu.inst = BC_INST(bc, 
V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_INT_TO_FLT);
+   alu.src[0].sel = 0;
+   alu.src[0].chan = 3;
 
alu.dst.sel = i + 1;
alu.dst.chan = 3;
alu.dst.write = 1;
alu.last = 1;
 
-if ((r = r600_bc_add_alu(bc, alu))) {
+   if ((r = r600_bc_add_alu(bc, alu))) {
r600_bc_clear(bc);
-return r;
-}
+   return r;
+   }
 
memset(alu, 0, sizeof(alu));
alu.inst = BC_INST(bc, 
V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MUL);
@@ -2121,10 +2121,10 @@ int r600_vertex_elements_build_fetch_shader(struct 
r600_pipe_context *rctx, stru
alu.dst.write = 1;
alu.last = 1;
 
-if ((r = r600_bc_add_alu(bc, alu))) {
+   if ((r = r600_bc_add_alu(bc, alu))) {
r600_bc_clear(bc);
-return r;
-}
+   return r;
+   }
 
memset(alu, 0, sizeof(alu));
alu.inst = BC_INST(bc, 
V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_TRUNC);
@@ -2136,26 +2136,26 @@ int r600_vertex_elements_build_fetch_shader(struct 
r600_pipe_context *rctx, stru
alu.dst.write = 1;
alu.last = 1;
 
-if ((r = r600_bc_add_alu(bc, alu))) {
+   if ((r = r600_bc_add_alu(bc, alu))) {
r600_bc_clear(bc);
-return r;
-}
+   return r

Mesa (master): gallium/st: place value check before value is use

2011-02-25 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 8e17adfdbd96ba1a11cda329ddfd2b997255ea20
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8e17adfdbd96ba1a11cda329ddfd2b997255ea20

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Feb 25 11:49:23 2011 -0500

gallium/st: place value check before value is use

7.9  7.10 candidate

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

---

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

diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c 
b/src/mesa/state_tracker/st_mesa_to_tgsi.c
index 5c68fd7..c07739f 100644
--- a/src/mesa/state_tracker/st_mesa_to_tgsi.c
+++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c
@@ -224,9 +224,9 @@ src_register( struct st_translate *t,
 
case PROGRAM_TEMPORARY:
   assert(index = 0);
+  assert(index  Elements(t-temps));
   if (ureg_dst_is_undef(t-temps[index]))
  t-temps[index] = ureg_DECL_temporary( t-ureg );
-  assert(index  Elements(t-temps));
   return ureg_src(t-temps[index]);
 
case PROGRAM_NAMED_PARAM:

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


Mesa (master): gallium/tgsi: shuffle ureg_src structure to work around gcc4 .6.0 issue

2011-02-25 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: b0e8aec5ab7f0e81dc0ea6c79ac7db2cca4788ed
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b0e8aec5ab7f0e81dc0ea6c79ac7db2cca4788ed

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Feb 25 11:56:29 2011 -0500

gallium/tgsi: shuffle ureg_src structure to work around gcc4.6.0 issue

There is an issue with gcc 4.6.0 that leads to segfault/assert with mesa
due to ureg_src size, reshuffling the structure member to better better
alignment work around the issue.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47893

7.9 + 7.10 candidate

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

---

 src/gallium/auxiliary/tgsi/tgsi_ureg.h |   28 ++--
 1 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.h 
b/src/gallium/auxiliary/tgsi/tgsi_ureg.h
index b8d193f..9d5553f 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_ureg.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.h
@@ -43,24 +43,24 @@ struct ureg_program;
  */
 struct ureg_src
 {
-   unsigned File: 4;  /* TGSI_FILE_ */
-   unsigned SwizzleX: 2;  /* TGSI_SWIZZLE_ */
-   unsigned SwizzleY: 2;  /* TGSI_SWIZZLE_ */
-   unsigned SwizzleZ: 2;  /* TGSI_SWIZZLE_ */
-   unsigned SwizzleW: 2;  /* TGSI_SWIZZLE_ */
-   unsigned Indirect: 1;  /* BOOL */
-   unsigned DimIndirect : 1;  /* BOOL */
-   unsigned Dimension   : 1;  /* BOOL */
-   unsigned Absolute: 1;  /* BOOL */
-   unsigned Negate  : 1;  /* BOOL */
-   int  Index   : 16; /* SINT */
+   unsigned File : 4;  /* TGSI_FILE_ */
+   unsigned SwizzleX : 2;  /* TGSI_SWIZZLE_ */
+   unsigned SwizzleY : 2;  /* TGSI_SWIZZLE_ */
+   unsigned SwizzleZ : 2;  /* TGSI_SWIZZLE_ */
+   unsigned SwizzleW : 2;  /* TGSI_SWIZZLE_ */
+   unsigned Indirect : 1;  /* BOOL */
+   unsigned DimIndirect  : 1;  /* BOOL */
+   unsigned Dimension: 1;  /* BOOL */
+   unsigned Absolute : 1;  /* BOOL */
+   unsigned Negate   : 1;  /* BOOL */
unsigned IndirectFile : 4;  /* TGSI_FILE_ */
-   int  IndirectIndex: 16; /* SINT */
unsigned IndirectSwizzle  : 2;  /* TGSI_SWIZZLE_ */
-   int  DimensionIndex   : 16; /* SINT */
unsigned DimIndFile   : 4;  /* TGSI_FILE_ */
-   int  DimIndIndex  : 16; /* SINT */
unsigned DimIndSwizzle: 2;  /* TGSI_SWIZZLE_ */
+   int  Index: 16; /* SINT */
+   int  IndirectIndex: 16; /* SINT */
+   int  DimensionIndex   : 16; /* SINT */
+   int  DimIndIndex  : 16; /* SINT */
 };
 
 /* Very similar to a tgsi_dst_register, removing unsupported fields

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


Demos (master): perf/glslstateschange: evaluate shader/ texture state change performance

2011-01-13 Thread Jerome Glisse
Module: Demos
Branch: master
Commit: 014a0c44bd7656446df1b1f8f485bc14b7fd68eb
URL:
http://cgit.freedesktop.org/mesa/demos/commit/?id=014a0c44bd7656446df1b1f8f485bc14b7fd68eb

Author: Jerome Glisse jgli...@redhat.com
Date:   Tue Jan 11 16:45:14 2011 -0500

perf/glslstateschange: evaluate shader/texture state change performance

Many GL applications change shader  bound texture btw draw operation,
this test try to evaluate the speed of such change in the stack.

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

---

 src/perf/Makefile.am|4 +-
 src/perf/glslstateschange.c |  272 +++
 src/perf/glslstateschange1.frag |   19 +++
 src/perf/glslstateschange1.vert |   14 ++
 src/perf/glslstateschange2.frag |   17 +++
 src/perf/glslstateschange2.vert |   14 ++
 6 files changed, 339 insertions(+), 1 deletions(-)

diff --git a/src/perf/Makefile.am b/src/perf/Makefile.am
index 789aeef..5b00c11 100644
--- a/src/perf/Makefile.am
+++ b/src/perf/Makefile.am
@@ -50,7 +50,8 @@ bin_PROGRAMS = \
swapbuffers \
teximage \
vbo \
-   vertexrate
+   vertexrate \
+   glslstateschange
 endif
 
 copytex_LDADD = libperf.la
@@ -63,3 +64,4 @@ swapbuffers_LDADD = libperf.la
 teximage_LDADD = libperf.la
 vbo_LDADD = libperf.la
 vertexrate_LDADD = libperf.la
+glslstateschange_LDADD = libperf.la ../util/libutil.la
diff --git a/src/perf/glslstateschange.c b/src/perf/glslstateschange.c
new file mode 100644
index 000..0ea8a7b
--- /dev/null
+++ b/src/perf/glslstateschange.c
@@ -0,0 +1,272 @@
+/**
+ * Test states change when using shaders  textures.
+ *
+ * Copyright (C) 2008  Brian Paul   All Rights Reserved.
+ * Copyright (C) 2011  Red Hat  All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the Software),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, 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 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
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+#include assert.h
+#include math.h
+#include stdio.h
+#include stdlib.h
+#include string.h
+#include GL/glew.h
+#include GL/glut.h
+#include readtex.h
+#include shaderutil.h
+#include glmain.h
+#include common.h
+
+static const char *VertFile1 = glslstateschange1.vert;
+static const char *FragFile1 = glslstateschange1.frag;
+static const char *VertFile2 = glslstateschange2.vert;
+static const char *FragFile2 = glslstateschange2.frag;
+static struct uniform_info Uniforms1[] = {
+   { tex1,  1, GL_SAMPLER_2D, { 0, 0, 0, 0 }, -1 },
+   { tex2,  1, GL_SAMPLER_2D, { 1, 0, 0, 0 }, -1 },
+   { UniV1, 1, GL_FLOAT_VEC4, { 0.8, 0.2, 0.2, 0 }, -1 },
+   { UniV2, 1, GL_FLOAT_VEC4, { 0.6, 0.6, 0.6, 0 }, -1 },
+   END_OF_UNIFORMS
+};
+static struct uniform_info Uniforms2[] = {
+   { tex1,  1, GL_SAMPLER_2D, { 0, 0, 0, 0 }, -1 },
+   { tex2,  1, GL_SAMPLER_2D, { 1, 0, 0, 0 }, -1 },
+   { UniV1, 1, GL_FLOAT_VEC4, { 0.8, 0.2, 0.2, 0 }, -1 },
+   { UniV2, 1, GL_FLOAT_VEC4, { 0.6, 0.6, 0.6, 0 }, -1 },
+   END_OF_UNIFORMS
+};
+static GLuint Program1;
+static GLuint Program2;
+static GLint P1VertCoord_attr = -1;
+static GLint P1TexCoord0_attr = -1, P1TexCoord1_attr = -1;
+static GLint P2VertCoord_attr = -1;
+static GLint P2TexCoord0_attr = -1, P2TexCoord1_attr = -1;
+
+static const char *TexFiles[4] =
+   {
+  ../images/tile.rgb,
+  ../images/tree2.rgba,
+  ../images/tile.rgb,
+  ../images/tree2.rgba
+   };
+GLuint texObj[4];
+
+
+int WinWidth = 500, WinHeight = 500;
+
+static GLfloat Xrot = 0.0, Yrot = .0, Zrot = 0.0;
+static GLfloat EyeDist = 10;
+
+
+
+static const GLfloat Tex0Coords[4][2] = {
+   { 0.0, 0.0 }, { 2.0, 0.0 }, { 2.0, 2.0 }, { 0.0, 2.0 }
+};
+
+static const GLfloat Tex1Coords[4][2] = {
+   { 0.0, 0.0 }, { 1.0, 0.0 }, { 1.0, 1.0 }, { 0.0, 1.0 }
+};
+
+static const GLfloat VertCoords[4][2] = {
+   { -3.0, -3.0 }, { 3.0, -3.0 }, { 3.0, 3.0 }, { -3.0, 3.0 }
+};
+
+static void
+DrawPolygonArray(GLint VertCoord_attr,
+ GLint TexCoord0_attr,
+ GLint TexCoord1_attr)
+{
+   void *vertPtr, *tex0Ptr, *tex1Ptr;
+
+   vertPtr = VertCoords;
+   tex0Ptr = Tex0Coords;
+   tex1Ptr = Tex1Coords

Mesa (master): r600g: move user fence into base radeon structure

2011-01-11 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 63b9790a55038c262b57c846a5f7067ea33fc60f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=63b9790a55038c262b57c846a5f7067ea33fc60f

Author: Jerome Glisse jgli...@redhat.com
Date:   Tue Jan 11 14:29:33 2011 -0500

r600g: move user fence into base radeon structure

This avoid any issue when context is free and we still try to
access fence through radeon structure.

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

---

 src/gallium/drivers/r600/r600.h|3 -
 src/gallium/winsys/r600/drm/evergreen_hw_context.c |5 +--
 src/gallium/winsys/r600/drm/r600_drm.c |   22 +
 src/gallium/winsys/r600/drm/r600_hw_context.c  |   48 ++--
 src/gallium/winsys/r600/drm/r600_priv.h|3 +
 src/gallium/winsys/r600/drm/radeon_bo.c|4 +-
 6 files changed, 42 insertions(+), 43 deletions(-)

diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h
index 335f282..a852bef 100644
--- a/src/gallium/drivers/r600/r600.h
+++ b/src/gallium/drivers/r600/r600.h
@@ -248,10 +248,7 @@ struct r600_context {
u32 *pm4;
struct list_headquery_list;
unsignednum_query_running;
-   unsignedfence;
struct list_headfenced_bo;
-   unsigned*cfence;
-   struct r600_bo  *fence_bo;
 };
 
 struct r600_draw {
diff --git a/src/gallium/winsys/r600/drm/evergreen_hw_context.c 
b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
index 47d73c2..3fdafc3 100644
--- a/src/gallium/winsys/r600/drm/evergreen_hw_context.c
+++ b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
@@ -621,10 +621,7 @@ int evergreen_context_init(struct r600_context *ctx, 
struct radeon *radeon)
/* save 16dwords space for fence mecanism */
ctx-pm4_ndwords -= 16;
 
-   r = r600_context_init_fence(ctx);
-   if (r) {
-   goto out_err;
-   }
+   LIST_INITHEAD(ctx-fenced_bo);
 
/* init dirty list */
LIST_INITHEAD(ctx-dirty);
diff --git a/src/gallium/winsys/r600/drm/r600_drm.c 
b/src/gallium/winsys/r600/drm/r600_drm.c
index 36ec583..ee262c3 100644
--- a/src/gallium/winsys/r600/drm/r600_drm.c
+++ b/src/gallium/winsys/r600/drm/r600_drm.c
@@ -30,6 +30,7 @@
 #include sys/ioctl.h
 #include util/u_inlines.h
 #include util/u_debug.h
+#include pipebuffer/pb_bufmgr.h
 #include r600.h
 #include r600_priv.h
 #include r600_drm_public.h
@@ -125,6 +126,18 @@ static int radeon_drm_get_tiling(struct radeon *radeon)
return 0;
 }
 
+static int radeon_init_fence(struct radeon *radeon)
+{
+   radeon-fence = 1;
+   radeon-fence_bo = r600_bo(radeon, 4096, 0, 0, 0);
+   if (radeon-fence_bo == NULL) {
+   return -ENOMEM;
+   }
+   radeon-cfence = r600_bo_map(radeon, radeon-fence_bo, 
PB_USAGE_UNSYNCHRONIZED, NULL);
+   *radeon-cfence = 0;
+   return 0;
+}
+
 static struct radeon *radeon_new(int fd, unsigned device)
 {
struct radeon *radeon;
@@ -198,6 +211,11 @@ static struct radeon *radeon_new(int fd, unsigned device)
if (radeon-bomgr == NULL) {
return NULL;
}
+   r = radeon_init_fence(radeon);
+   if (r) {
+   radeon_decref(radeon);
+   return NULL;
+   }
return radeon;
 }
 
@@ -214,6 +232,10 @@ struct radeon *radeon_decref(struct radeon *radeon)
return NULL;
}
 
+   if (radeon-fence_bo) {
+   r600_bo_reference(radeon, radeon-fence_bo, NULL);
+   }
+
if (radeon-bomgr)
r600_bomgr_destroy(radeon-bomgr);
 
diff --git a/src/gallium/winsys/r600/drm/r600_hw_context.c 
b/src/gallium/winsys/r600/drm/r600_hw_context.c
index d01ec3e..f10e2fd 100644
--- a/src/gallium/winsys/r600/drm/r600_hw_context.c
+++ b/src/gallium/winsys/r600/drm/r600_hw_context.c
@@ -40,27 +40,13 @@
 
 #define GROUP_FORCE_NEW_BLOCK  0
 
-int r600_context_init_fence(struct r600_context *ctx)
-{
-   ctx-fence = 1;
-   ctx-fence_bo = r600_bo(ctx-radeon, 4096, 0, 0, 0);
-   if (ctx-fence_bo == NULL) {
-   return -ENOMEM;
-   }
-   ctx-cfence = r600_bo_map(ctx-radeon, ctx-fence_bo, 
PB_USAGE_UNSYNCHRONIZED, NULL);
-   *ctx-cfence = 0;
-   ctx-radeon-cfence = ctx-cfence;
-   LIST_INITHEAD(ctx-fenced_bo);
-   return 0;
-}
-
 static void INLINE r600_context_update_fenced_list(struct r600_context *ctx)
 {
for (int i = 0; i  ctx-creloc; i++) {
if (!LIST_IS_EMPTY(ctx-bo[i]-fencedlist))
LIST_DELINIT(ctx-bo[i]-fencedlist);
LIST_ADDTAIL(ctx-bo[i]-fencedlist, ctx-fenced_bo);
-   ctx-bo[i]-fence = ctx-fence;
+   ctx-bo[i]-fence = ctx-radeon-fence;
ctx-bo[i]-ctx = ctx;
}
 }
@@ -71,7 +57,7 @@ static void INLINE r600_context_fence_wraparound(struct 
r600_context *ctx, unsig

Mesa (master): noop: remove dead dri target

2011-01-11 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 0865af4b42bc82816f751e3a96971375f2adbfb4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0865af4b42bc82816f751e3a96971375f2adbfb4

Author: Jerome Glisse jgli...@redhat.com
Date:   Tue Jan 11 14:46:09 2011 -0500

noop: remove dead dri target

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

---

 configure.ac  |   13 -
 src/gallium/targets/dri-noop/Makefile |   34 -
 src/gallium/targets/dri-noop/SConscript   |   31 
 src/gallium/targets/dri-noop/swrast_drm_api.c |   63 -
 4 files changed, 0 insertions(+), 141 deletions(-)

diff --git a/configure.ac b/configure.ac
index b6f7d86..d9220c8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1701,19 +1701,6 @@ if test x$enable_gallium_swrast = xyes || test 
x$enable_gallium_swrast = xau
 fi
 fi
 
-dnl
-dnl Gallium noop configuration
-dnl
-AC_ARG_ENABLE([gallium-noop],
-[AS_HELP_STRING([--enable-gallium-noop],
-[build gallium radeon @:@default=disabled@:@])],
-[enable_gallium_noop=$enableval],
-[enable_gallium_noop=auto])
-if test x$enable_gallium_noop = xyes; then
-GALLIUM_DRIVERS_DIRS=$GALLIUM_DRIVERS_DIRS noop
-GALLIUM_TARGET_DIRS=$GALLIUM_TARGET_DIRS dri-noop
-fi
-
 dnl prepend CORE_DIRS to SRC_DIRS
 SRC_DIRS=$CORE_DIRS $SRC_DIRS
 
diff --git a/src/gallium/targets/dri-noop/Makefile 
b/src/gallium/targets/dri-noop/Makefile
deleted file mode 100644
index 21c5f4f..000
--- a/src/gallium/targets/dri-noop/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-TOP = ../../../..
-include $(TOP)/configs/current
-
-LIBNAME = noop_dri.so
-
-DRIVER_DEFINES = \
-   -D__NOT_HAVE_DRM_H
-
-PIPE_DRIVERS = \
-   $(TOP)/src/gallium/state_trackers/dri/sw/libdrisw.a \
-   $(TOP)/src/gallium/winsys/sw/dri/libswdri.a \
-   $(TOP)/src/gallium/drivers/softpipe/libsoftpipe.a \
-   $(TOP)/src/gallium/drivers/trace/libtrace.a \
-   $(TOP)/src/gallium/drivers/rbug/librbug.a \
-   $(TOP)/src/gallium/drivers/noop/libnoop.a
-
-SWRAST_COMMON_GALLIUM_SOURCES = \
-   $(TOP)/src/mesa/drivers/dri/common/utils.c \
-   $(TOP)/src/mesa/drivers/dri/common/drisw_util.c \
-   $(TOP)/src/mesa/drivers/dri/common/xmlconfig.c
-
-C_SOURCES = \
-   swrast_drm_api.c \
-   $(SWRAST_COMMON_GALLIUM_SOURCES) \
-   $(DRIVER_SOURCES)
-
-ASM_SOURCES =
-
-include ../Makefile.dri
-
-INCLUDES += \
-   -I$(TOP)/src/gallium/winsys/sw/dri
-
-symlinks:
diff --git a/src/gallium/targets/dri-noop/SConscript 
b/src/gallium/targets/dri-noop/SConscript
deleted file mode 100644
index 9c04ee6..000
--- a/src/gallium/targets/dri-noop/SConscript
+++ /dev/null
@@ -1,31 +0,0 @@
-Import('*')
-
-env = drienv.Clone()
-
-env.Append(CPPPATH = [
-'#/src/gallium/winsys/sw/dri',
-])
-
-env.Prepend(LIBS = [
-st_drisw,
-ws_dri,
-noop,
-mesa,
-glsl,
-gallium,
-COMMON_DRI_SW_OBJECTS
-])
-
-env.Prepend(LIBS = [noop])
-
-swrastg_sources = [
-'swrast_drm_api.c'
-]
-
-module = env.LoadableModule(
-target ='noop_dri.so',
-source = swrastg_sources,
-SHLIBPREFIX = '',
-)
-
-env.Alias('dri-noop', module)
diff --git a/src/gallium/targets/dri-noop/swrast_drm_api.c 
b/src/gallium/targets/dri-noop/swrast_drm_api.c
deleted file mode 100644
index a99779f..000
--- a/src/gallium/targets/dri-noop/swrast_drm_api.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- *
- * Copyright 2009, VMware, Inc.
- * All Rights Reserved.
- * Copyright 2010 George Sapountzis gsapount...@gmail.com
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * Software), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **/
-
-#include pipe/p_compiler.h
-#include util/u_memory.h
-#include dri_sw_winsys.h
-#include noop/noop_public.h
-
-#include target-helpers/inline_debug_helper.h
-#include target

Mesa (master): noop: make noop useable like trace or rbug

2011-01-09 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 3349517351059dcd70a81b31bdffe9835bd8f216
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3349517351059dcd70a81b31bdffe9835bd8f216

Author: Jerome Glisse jgli...@redhat.com
Date:   Sun Jan  9 21:04:41 2011 -0500

noop: make noop useable like trace or rbug

If you want to enable noop set GALLIUM_NOOP=1 as an env variable.
You need first to enable noop wrapping for your driver see change
to src/gallium/targets/dri-r600/ in this commit as an example.

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

---

 configs/default|2 +-
 configure.ac   |2 +-
 .../auxiliary/target-helpers/inline_noop_helper.h  |   51 +
 src/gallium/drivers/noop/noop_pipe.c   |   77 +---
 src/gallium/drivers/noop/noop_public.h |5 +-
 src/gallium/targets/dri-r600/Makefile  |5 +-
 src/gallium/targets/dri-r600/target.c  |2 +-
 7 files changed, 92 insertions(+), 52 deletions(-)

diff --git a/configs/default b/configs/default
index 3ce90ef..394dc17 100644
--- a/configs/default
+++ b/configs/default
@@ -107,7 +107,7 @@ EGL_DRIVERS_DIRS = glx
 # Gallium directories and 
 GALLIUM_DIRS = auxiliary drivers state_trackers
 GALLIUM_AUXILIARIES = $(TOP)/src/gallium/auxiliary/libgallium.a
-GALLIUM_DRIVERS_DIRS = softpipe trace rbug identity galahad i915 i965 svga 
r300 nvfx nv50 failover
+GALLIUM_DRIVERS_DIRS = softpipe trace rbug noop identity galahad i915 i965 
svga r300 nvfx nv50 failover
 GALLIUM_DRIVERS = $(foreach 
DIR,$(GALLIUM_DRIVERS_DIRS),$(TOP)/src/gallium/drivers/$(DIR)/lib$(DIR).a)
 GALLIUM_WINSYS_DIRS = sw sw/xlib
 GALLIUM_TARGET_DIRS = libgl-xlib
diff --git a/configure.ac b/configure.ac
index bcf7cd3..ca2a05c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -588,7 +588,7 @@ GLU_DIRS=sgi
 GALLIUM_DIRS=auxiliary drivers state_trackers
 GALLIUM_TARGET_DIRS=
 GALLIUM_WINSYS_DIRS=sw
-GALLIUM_DRIVERS_DIRS=softpipe failover galahad trace rbug identity
+GALLIUM_DRIVERS_DIRS=softpipe failover galahad trace rbug noop identity
 GALLIUM_STATE_TRACKERS_DIRS=
 
 # build glapi if OpenGL is enabled
diff --git a/src/gallium/auxiliary/target-helpers/inline_noop_helper.h 
b/src/gallium/auxiliary/target-helpers/inline_noop_helper.h
new file mode 100644
index 000..77c7cfd
--- /dev/null
+++ b/src/gallium/auxiliary/target-helpers/inline_noop_helper.h
@@ -0,0 +1,51 @@
+
+#ifndef INLINE_DEBUG_HELPER_H
+#define INLINE_DEBUG_HELPER_H
+
+#include pipe/p_compiler.h
+#include util/u_debug.h
+
+
+/* Helper function to wrap a screen with
+ * one or more debug driver: rbug, trace.
+ */
+
+#ifdef GALLIUM_TRACE
+#include trace/tr_public.h
+#endif
+
+#ifdef GALLIUM_RBUG
+#include rbug/rbug_public.h
+#endif
+
+#ifdef GALLIUM_GALAHAD
+#include galahad/glhd_public.h
+#endif
+
+#ifdef GALLIUM_NOOP
+#include noop/noop_public.h
+#endif
+
+static INLINE struct pipe_screen *
+debug_screen_wrap(struct pipe_screen *screen)
+{
+#if defined(GALLIUM_RBUG)
+   screen = rbug_screen_create(screen);
+#endif
+
+#if defined(GALLIUM_TRACE)
+   screen = trace_screen_create(screen);
+#endif
+
+#if defined(GALLIUM_GALAHAD)
+   screen = galahad_screen_create(screen);
+#endif
+
+#if defined(GALLIUM_NOOP)
+   screen = noop_screen_create(screen);
+#endif
+
+   return screen;
+}
+
+#endif
diff --git a/src/gallium/drivers/noop/noop_pipe.c 
b/src/gallium/drivers/noop/noop_pipe.c
index c9c463f..8c9efc2 100644
--- a/src/gallium/drivers/noop/noop_pipe.c
+++ b/src/gallium/drivers/noop/noop_pipe.c
@@ -30,10 +30,16 @@
 #include util/u_inlines.h
 #include util/u_format.h
 #include noop_public.h
-#include state_tracker/sw_winsys.h
+
+DEBUG_GET_ONCE_BOOL_OPTION(noop, GALLIUM_NOOP, FALSE)
 
 void noop_init_state_functions(struct pipe_context *ctx);
 
+struct noop_pipe_screen {
+   struct pipe_screen  pscreen;
+   struct pipe_screen  *oscreen;
+};
+
 /*
  * query
  */
@@ -108,52 +114,29 @@ static struct pipe_resource *noop_resource_create(struct 
pipe_screen *screen,
FREE(nresource);
return NULL;
}
-#if 0
-   if (nresource-base.bind  (PIPE_BIND_DISPLAY_TARGET |
-   PIPE_BIND_SCANOUT |
-   PIPE_BIND_SHARED)) {
-   struct sw_winsys *winsys = (struct sw_winsys *)screen-winsys;
-   unsigned stride;
-
-   nresource-dt = winsys-displaytarget_create(winsys, 
nresource-base.bind,
-   
nresource-base.format,
-   
nresource-base.width0, 
-   
nresource-base.height0,
-   16, stride);
-   }
-#endif
return nresource-base;
 }
 
-static struct pipe_resource *noop_resource_from_handle(struct pipe_screen

Mesa (7.10): r600g: fix bo size when creating bo from handle

2011-01-06 Thread Jerome Glisse
Module: Mesa
Branch: 7.10
Commit: e7b12f2a0e88e754c68faf7c0e034f7bfc0775f1
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e7b12f2a0e88e754c68faf7c0e034f7bfc0775f1

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Dec 10 11:17:27 2010 -0500

r600g: fix bo size when creating bo from handle

Spoted by Alex Diomin

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

---

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

diff --git a/src/gallium/winsys/r600/drm/r600_bo.c 
b/src/gallium/winsys/r600/drm/r600_bo.c
index 137402c..6a3737f 100644
--- a/src/gallium/winsys/r600/drm/r600_bo.c
+++ b/src/gallium/winsys/r600/drm/r600_bo.c
@@ -85,7 +85,7 @@ struct r600_bo *r600_bo_handle(struct radeon *radeon,
free(bo);
return NULL;
}
-   bo-size = bo-size;
+   bo-size = rbo-size;
bo-domains = (RADEON_GEM_DOMAIN_CPU |
RADEON_GEM_DOMAIN_GTT |
RADEON_GEM_DOMAIN_VRAM);

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


Mesa (7.10): r600g: properly unset vertex buffer

2011-01-06 Thread Jerome Glisse
Module: Mesa
Branch: 7.10
Commit: ece71d605bdc2f1196599bd26ad00e06126fe2c3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ece71d605bdc2f1196599bd26ad00e06126fe2c3

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Dec 20 15:30:42 2010 -0500

r600g: properly unset vertex buffer

Fix bug http://bugs.freedesktop.org/show_bug.cgi?id=32455

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

---

 src/gallium/drivers/r600/evergreen_state.c   |   10 +-
 src/gallium/drivers/r600/r600_state.c|   10 +-
 src/gallium/drivers/r600/r600_state_common.c |   14 --
 3 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 07496eb..af19beb 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1327,16 +1327,16 @@ void evergreen_vertex_buffer_update(struct 
r600_pipe_context *rctx)
vbuffer_index = 
rctx-vertex_elements-elements[i].vertex_buffer_index;
vertex_buffer = rctx-vertex_buffer[vbuffer_index];
rbuffer = (struct r600_resource*)vertex_buffer-buffer;
-   offset = rctx-vertex_elements-vbuffer_offset[i] +
-   vertex_buffer-buffer_offset +
-   r600_bo_offset(rbuffer-bo);
+   offset = rctx-vertex_elements-vbuffer_offset[i];
} else {
/* bind vertex buffer once */
vertex_buffer = rctx-vertex_buffer[i];
rbuffer = (struct r600_resource*)vertex_buffer-buffer;
-   offset = vertex_buffer-buffer_offset +
-   r600_bo_offset(rbuffer-bo);
+   offset = 0;
}
+   if (vertex_buffer == NULL)
+   continue;
+   offset += vertex_buffer-buffer_offset + 
r600_bo_offset(rbuffer-bo);
 
r600_pipe_state_add_reg(rstate, R_03_RESOURCE0_WORD0,
offset, 0x, rbuffer-bo);
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index cd5f079..0d76afd 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -167,16 +167,16 @@ void r600_vertex_buffer_update(struct r600_pipe_context 
*rctx)
vbuffer_index = 
rctx-vertex_elements-elements[i].vertex_buffer_index;
vertex_buffer = rctx-vertex_buffer[vbuffer_index];
rbuffer = (struct r600_resource*)vertex_buffer-buffer;
-   offset = rctx-vertex_elements-vbuffer_offset[i] +
-   vertex_buffer-buffer_offset +
-   r600_bo_offset(rbuffer-bo);
+   offset = rctx-vertex_elements-vbuffer_offset[i];
} else {
/* bind vertex buffer once */
vertex_buffer = rctx-vertex_buffer[i];
rbuffer = (struct r600_resource*)vertex_buffer-buffer;
-   offset = vertex_buffer-buffer_offset +
-   r600_bo_offset(rbuffer-bo);
+   offset = 0;
}
+   if (vertex_buffer == NULL)
+   continue;
+   offset += vertex_buffer-buffer_offset + 
r600_bo_offset(rbuffer-bo);
 
r600_pipe_state_add_reg(rstate, R_038000_RESOURCE0_WORD0,
offset, 0x, rbuffer-bo);
diff --git a/src/gallium/drivers/r600/r600_state_common.c 
b/src/gallium/drivers/r600/r600_state_common.c
index 99b372c..f488cf7 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -179,8 +179,16 @@ void r600_set_vertex_buffers(struct pipe_context *ctx, 
unsigned count,
struct pipe_vertex_buffer *vbo;
unsigned max_index = (unsigned)-1;
 
-   for (int i = 0; i  rctx-nvertex_buffer; i++) {
-   pipe_resource_reference(rctx-vertex_buffer[i].buffer, NULL);
+   if (rctx-family = CHIP_CEDAR) {
+   for (int i = 0; i  rctx-nvertex_buffer; i++) {
+   pipe_resource_reference(rctx-vertex_buffer[i].buffer, 
NULL);
+   evergreen_fs_resource_set(rctx-ctx, NULL, i);
+   }
+   } else {
+   for (int i = 0; i  rctx-nvertex_buffer; i++) {
+   pipe_resource_reference(rctx-vertex_buffer[i].buffer, 
NULL);
+   r600_context_pipe_state_set_fs_resource(rctx-ctx, 
NULL, i);
+   }
}
memcpy(rctx-vertex_buffer, buffers, sizeof(struct pipe_vertex_buffer) 
* count);
 
@@ -188,6 +196,8 @@ void r600_set_vertex_buffers(struct pipe_context *ctx

Mesa (7.10): r600g: fix segfault when translating vertex buffer

2011-01-06 Thread Jerome Glisse
Module: Mesa
Branch: 7.10
Commit: 44346148446bc0cb89e3f003f249a98721bec6f4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=44346148446bc0cb89e3f003f249a98721bec6f4

Author: Jerome Glisse jgli...@redhat.com
Date:   Tue Dec 14 13:50:46 2010 -0500

r600g: fix segfault when translating vertex buffer

Note the support for non float vertex draw likely regressed need to
find what we want to do there.

candidates for 7.10 branches

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

---

 src/gallium/drivers/r600/evergreen_state.c   |5 -
 src/gallium/drivers/r600/r600_state.c|9 -
 src/gallium/drivers/r600/r600_state_common.c |5 +
 src/gallium/drivers/r600/r600_translate.c|   12 +---
 4 files changed, 10 insertions(+), 21 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index a9d4a86..07496eb 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1295,11 +1295,6 @@ void evergreen_vertex_buffer_update(struct 
r600_pipe_context *rctx)
if (rctx-vertex_elements == NULL || !rctx-nvertex_buffer)
return;
 
-   /* delete previous translated vertex elements */
-   if (rctx-tran.new_velems) {
-   r600_end_vertex_translate(rctx);
-   }
-
if (rctx-vertex_elements-incompatible_layout) {
/* translate rebind new vertex elements so
 * return once translated
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index 67ea217..cd5f079 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -135,11 +135,6 @@ void r600_vertex_buffer_update(struct r600_pipe_context 
*rctx)
if (rctx-vertex_elements == NULL || !rctx-nvertex_buffer)
return;
 
-   /* delete previous translated vertex elements */
-   if (rctx-tran.new_velems) {
-   r600_end_vertex_translate(rctx);
-   }
-
if (rctx-vertex_elements-incompatible_layout) {
/* translate rebind new vertex elements so
 * return once translated
@@ -280,7 +275,6 @@ void r600_draw_vbo(struct pipe_context *ctx, const struct 
pipe_draw_info *info)
 {
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
struct r600_drawl draw;
-   boolean translate = FALSE;
 
memset(draw, 0, sizeof(struct r600_drawl));
draw.ctx = ctx;
@@ -312,9 +306,6 @@ void r600_draw_vbo(struct pipe_context *ctx, const struct 
pipe_draw_info *info)
}
r600_draw_common(draw);
 
-   if (translate)
-   r600_end_vertex_translate(rctx);
-
pipe_resource_reference(draw.index_buffer, NULL);
 }
 
diff --git a/src/gallium/drivers/r600/r600_state_common.c 
b/src/gallium/drivers/r600/r600_state_common.c
index 1333808..99b372c 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -119,6 +119,11 @@ void r600_bind_vertex_elements(struct pipe_context *ctx, 
void *state)
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
struct r600_vertex_element *v = (struct r600_vertex_element*)state;
 
+   /* delete previous translated vertex elements */
+   if (rctx-tran.new_velems) {
+   r600_end_vertex_translate(rctx);
+   }
+
rctx-vertex_elements = v;
if (v) {
rctx-states[v-rstate.id] = v-rstate;
diff --git a/src/gallium/drivers/r600/r600_translate.c 
b/src/gallium/drivers/r600/r600_translate.c
index 1c227d3..ba12eee 100644
--- a/src/gallium/drivers/r600/r600_translate.c
+++ b/src/gallium/drivers/r600/r600_translate.c
@@ -42,6 +42,7 @@ void r600_begin_vertex_translate(struct r600_pipe_context 
*rctx)
struct pipe_resource *out_buffer;
unsigned i, num_verts;
struct pipe_vertex_element new_velems[PIPE_MAX_ATTRIBS];
+   void *tmp;
 
/* Initialize the translate key, i.e. the recipe how vertices should be
 * translated. */
@@ -159,8 +160,9 @@ void r600_begin_vertex_translate(struct r600_pipe_context 
*rctx)
}
}
 
-   rctx-tran.new_velems = pipe-create_vertex_elements_state(pipe, 
ve-count, new_velems);
-   pipe-bind_vertex_elements_state(pipe, rctx-tran.new_velems);
+   tmp = pipe-create_vertex_elements_state(pipe, ve-count, new_velems);
+   pipe-bind_vertex_elements_state(pipe, tmp);
+   rctx-tran.new_velems = tmp;
 
pipe_resource_reference(out_buffer, NULL);
 }
@@ -173,15 +175,11 @@ void r600_end_vertex_translate(struct r600_pipe_context 
*rctx)
return;
}
/* Restore vertex elements. */
-   if (rctx-vertex_elements == rctx-tran.new_velems) {
-   pipe-bind_vertex_elements_state(pipe, NULL);
-   }
pipe-delete_vertex_elements_state(pipe, rctx-tran.new_velems

Mesa (7.10): r600g: need to reference upload buffer as the might still live accross flush

2011-01-06 Thread Jerome Glisse
Module: Mesa
Branch: 7.10
Commit: 0fc205152c0706cff0eb9835e6a249376581366d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0fc205152c0706cff0eb9835e6a249376581366d

Author: Jerome Glisse jgli...@redhat.com
Date:   Wed Dec 15 12:07:09 2010 -0500

r600g: need to reference upload buffer as the might still live accross flush

Can't get away from referencing upload buffer as after flush a vertex buffer
using the upload buffer might still be active. Likely need to simplify the
pipe_refence a bit so we don't waste so much cpu time in it.

candidates for 7.10 branch

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

---

 src/gallium/drivers/r600/r600_buffer.c |2 +-
 src/gallium/drivers/r600/r600_upload.c |4 +++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_buffer.c 
b/src/gallium/drivers/r600/r600_buffer.c
index 7d29f76..a17c54d 100644
--- a/src/gallium/drivers/r600/r600_buffer.c
+++ b/src/gallium/drivers/r600/r600_buffer.c
@@ -103,7 +103,7 @@ static void r600_buffer_destroy(struct pipe_screen *screen,
 {
struct r600_resource_buffer *rbuffer = r600_buffer(buf);
 
-   if (!rbuffer-uploaded  rbuffer-r.bo) {
+   if (rbuffer-r.bo) {
r600_bo_reference((struct radeon*)screen-winsys, 
rbuffer-r.bo, NULL);
}
rbuffer-r.bo = NULL;
diff --git a/src/gallium/drivers/r600/r600_upload.c 
b/src/gallium/drivers/r600/r600_upload.c
index ac72854..44102ff 100644
--- a/src/gallium/drivers/r600/r600_upload.c
+++ b/src/gallium/drivers/r600/r600_upload.c
@@ -69,6 +69,7 @@ void r600_upload_flush(struct r600_upload *upload)
upload-default_size = MAX2(upload-total_alloc_size, 
upload-default_size);
upload-total_alloc_size = 0;
upload-size = 0;
+   upload-offset = 0;
upload-ptr = NULL;
upload-buffer = NULL;
 }
@@ -105,7 +106,8 @@ int r600_upload_buffer(struct r600_upload *upload, unsigned 
offset,
memcpy(upload-ptr + upload-offset, (uint8_t *) in_ptr + offset, size);
*out_offset = upload-offset;
*out_size = upload-size;
-   *out_buffer = upload-buffer;
+   *out_buffer = NULL;
+   r600_bo_reference(upload-rctx-radeon, out_buffer, upload-buffer);
upload-offset += alloc_size;
 
return 0;

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


Mesa (7.10): r600g: avoid segfault

2011-01-06 Thread Jerome Glisse
Module: Mesa
Branch: 7.10
Commit: 34c58f6d469242616579e95df9a5909a9e177988
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=34c58f6d469242616579e95df9a5909a9e177988

Author: Jerome Glisse jgli...@redhat.com
Date:   Tue Dec 21 10:49:53 2010 -0500

r600g: avoid segfault

Candidates 7.10

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

---

 src/gallium/drivers/r600/evergreen_state.c |2 +-
 src/gallium/drivers/r600/r600_state.c  |2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index af19beb..8a69a10 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1334,7 +1334,7 @@ void evergreen_vertex_buffer_update(struct 
r600_pipe_context *rctx)
rbuffer = (struct r600_resource*)vertex_buffer-buffer;
offset = 0;
}
-   if (vertex_buffer == NULL)
+   if (vertex_buffer == NULL || rbuffer == NULL)
continue;
offset += vertex_buffer-buffer_offset + 
r600_bo_offset(rbuffer-bo);
 
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index 0d76afd..9b099df 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -174,7 +174,7 @@ void r600_vertex_buffer_update(struct r600_pipe_context 
*rctx)
rbuffer = (struct r600_resource*)vertex_buffer-buffer;
offset = 0;
}
-   if (vertex_buffer == NULL)
+   if (vertex_buffer == NULL || rbuffer == NULL)
continue;
offset += vertex_buffer-buffer_offset + 
r600_bo_offset(rbuffer-bo);
 

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


Mesa (7.10): r600g: fix evergreen segfaults.

2011-01-06 Thread Jerome Glisse
Module: Mesa
Branch: 7.10
Commit: 949c24862afcaf50b2c204f88582099c60fdbc51
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=949c24862afcaf50b2c204f88582099c60fdbc51

Author: Dave Airlie airl...@redhat.com
Date:   Wed Dec 22 14:54:17 2010 +1000

r600g: fix evergreen segfaults.

evergreen was crashing running even gears here.

This is a 7.10 candidate if its broken the same.

Signed-off-by: Dave Airlie airl...@redhat.com

---

 src/gallium/drivers/r600/r600_state_common.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_state_common.c 
b/src/gallium/drivers/r600/r600_state_common.c
index f488cf7..3603376 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -182,7 +182,7 @@ void r600_set_vertex_buffers(struct pipe_context *ctx, 
unsigned count,
if (rctx-family = CHIP_CEDAR) {
for (int i = 0; i  rctx-nvertex_buffer; i++) {
pipe_resource_reference(rctx-vertex_buffer[i].buffer, 
NULL);
-   evergreen_fs_resource_set(rctx-ctx, NULL, i);
+   
evergreen_context_pipe_state_set_fs_resource(rctx-ctx, NULL, i);
}
} else {
for (int i = 0; i  rctx-nvertex_buffer; i++) {

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


Mesa (7.10): r600g: hack around property unknown issues.

2011-01-06 Thread Jerome Glisse
Module: Mesa
Branch: 7.10
Commit: 9ba827100a2d49ca839c7c8a1d0dec258b5c7ecd
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9ba827100a2d49ca839c7c8a1d0dec258b5c7ecd

Author: Dave Airlie airl...@redhat.com
Date:   Fri Dec 24 17:33:41 2010 +1000

r600g: hack around property unknown issues.

should fix https://bugs.freedesktop.org/show_bug.cgi?id=32619

Need to add proper support for properties later.

Signed-off-by: Dave Airlie airl...@redhat.com

---

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

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index 9c7b7f0..bb5038c 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -589,6 +589,8 @@ int r600_shader_from_tgsi(const struct tgsi_token *tokens, 
struct r600_shader *s
if (r)
goto out_err;
break;
+   case TGSI_TOKEN_TYPE_PROPERTY:
+   break;
default:
R600_ERR(unsupported token type %d\n, 
ctx.parse.FullToken.Token.Type);
r = -EINVAL;

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


Mesa (7.10): r600g: remove useless switch statements

2011-01-06 Thread Jerome Glisse
Module: Mesa
Branch: 7.10
Commit: 002ce07abe5581d98b72ea30dc5982fe6de0db3b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=002ce07abe5581d98b72ea30dc5982fe6de0db3b

Author: Alex Deucher alexdeuc...@gmail.com
Date:   Wed Dec 22 01:30:41 2010 -0500

r600g: remove useless switch statements

Signed-off-by: Alex Deucher alexdeuc...@gmail.com

---

 src/gallium/winsys/r600/drm/r600.c |   52 ---
 src/gallium/winsys/r600/drm/r600_drm.c |   53 
 2 files changed, 0 insertions(+), 105 deletions(-)

diff --git a/src/gallium/winsys/r600/drm/r600.c 
b/src/gallium/winsys/r600/drm/r600.c
index b88733f..82a55ac 100644
--- a/src/gallium/winsys/r600/drm/r600.c
+++ b/src/gallium/winsys/r600/drm/r600.c
@@ -79,58 +79,6 @@ struct radeon *r600_new(int fd, unsigned device)
r600_delete(r600);
return NULL;
}
-   switch (r600-family) {
-   case CHIP_R600:
-   case CHIP_RV610:
-   case CHIP_RV630:
-   case CHIP_RV670:
-   case CHIP_RV620:
-   case CHIP_RV635:
-   case CHIP_RS780:
-   case CHIP_RS880:
-   case CHIP_RV770:
-   case CHIP_RV730:
-   case CHIP_RV710:
-   case CHIP_RV740:
-   case CHIP_CEDAR:
-   case CHIP_REDWOOD:
-   case CHIP_JUNIPER:
-   case CHIP_CYPRESS:
-   case CHIP_HEMLOCK:
-   case CHIP_PALM:
-   break;
-   case CHIP_R100:
-   case CHIP_RV100:
-   case CHIP_RS100:
-   case CHIP_RV200:
-   case CHIP_RS200:
-   case CHIP_R200:
-   case CHIP_RV250:
-   case CHIP_RS300:
-   case CHIP_RV280:
-   case CHIP_R300:
-   case CHIP_R350:
-   case CHIP_RV350:
-   case CHIP_RV380:
-   case CHIP_R420:
-   case CHIP_R423:
-   case CHIP_RV410:
-   case CHIP_RS400:
-   case CHIP_RS480:
-   case CHIP_RS600:
-   case CHIP_RS690:
-   case CHIP_RS740:
-   case CHIP_RV515:
-   case CHIP_R520:
-   case CHIP_RV530:
-   case CHIP_RV560:
-   case CHIP_RV570:
-   case CHIP_R580:
-   default:
-   R600_ERR(unknown or unsupported chipset 0x%04X\n, 
r600-device);
-   break;
-   }
-
/* setup class */
switch (r600-family) {
case CHIP_R600:
diff --git a/src/gallium/winsys/r600/drm/r600_drm.c 
b/src/gallium/winsys/r600/drm/r600_drm.c
index 3cbbf91..94ed3ed 100644
--- a/src/gallium/winsys/r600/drm/r600_drm.c
+++ b/src/gallium/winsys/r600/drm/r600_drm.c
@@ -134,59 +134,6 @@ static struct radeon *radeon_new(int fd, unsigned device)
fprintf(stderr, Unknown chipset 0x%04X\n, radeon-device);
return radeon_decref(radeon);
}
-   switch (radeon-family) {
-   case CHIP_R600:
-   case CHIP_RV610:
-   case CHIP_RV630:
-   case CHIP_RV670:
-   case CHIP_RV620:
-   case CHIP_RV635:
-   case CHIP_RS780:
-   case CHIP_RS880:
-   case CHIP_RV770:
-   case CHIP_RV730:
-   case CHIP_RV710:
-   case CHIP_RV740:
-   case CHIP_CEDAR:
-   case CHIP_REDWOOD:
-   case CHIP_JUNIPER:
-   case CHIP_CYPRESS:
-   case CHIP_HEMLOCK:
-   case CHIP_PALM:
-   break;
-   case CHIP_R100:
-   case CHIP_RV100:
-   case CHIP_RS100:
-   case CHIP_RV200:
-   case CHIP_RS200:
-   case CHIP_R200:
-   case CHIP_RV250:
-   case CHIP_RS300:
-   case CHIP_RV280:
-   case CHIP_R300:
-   case CHIP_R350:
-   case CHIP_RV350:
-   case CHIP_RV380:
-   case CHIP_R420:
-   case CHIP_R423:
-   case CHIP_RV410:
-   case CHIP_RS400:
-   case CHIP_RS480:
-   case CHIP_RS600:
-   case CHIP_RS690:
-   case CHIP_RS740:
-   case CHIP_RV515:
-   case CHIP_R520:
-   case CHIP_RV530:
-   case CHIP_RV560:
-   case CHIP_RV570:
-   case CHIP_R580:
-   default:
-   fprintf(stderr, %s unknown or unsupported chipset 0x%04X\n,
-   __func__, radeon-device);
-   break;
-   }
-
/* setup class */
switch (radeon-family) {
case CHIP_R600:

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


Mesa (master): r600g: avoid segfault

2010-12-21 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: fa62cf7450595b3d99259b5a212df301ca711d4b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fa62cf7450595b3d99259b5a212df301ca711d4b

Author: Jerome Glisse jgli...@redhat.com
Date:   Tue Dec 21 10:49:53 2010 -0500

r600g: avoid segfault

Candidates 7.10

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

---

 src/gallium/drivers/r600/evergreen_state.c |2 +-
 src/gallium/drivers/r600/r600_state.c  |2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index af19beb..8a69a10 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1334,7 +1334,7 @@ void evergreen_vertex_buffer_update(struct 
r600_pipe_context *rctx)
rbuffer = (struct r600_resource*)vertex_buffer-buffer;
offset = 0;
}
-   if (vertex_buffer == NULL)
+   if (vertex_buffer == NULL || rbuffer == NULL)
continue;
offset += vertex_buffer-buffer_offset + 
r600_bo_offset(rbuffer-bo);
 
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index 0d76afd..9b099df 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -174,7 +174,7 @@ void r600_vertex_buffer_update(struct r600_pipe_context 
*rctx)
rbuffer = (struct r600_resource*)vertex_buffer-buffer;
offset = 0;
}
-   if (vertex_buffer == NULL)
+   if (vertex_buffer == NULL || rbuffer == NULL)
continue;
offset += vertex_buffer-buffer_offset + 
r600_bo_offset(rbuffer-bo);
 

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


Mesa (master): r600g: properly unset vertex buffer

2010-12-20 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: abe9ffc25c8d65b48ae02cdc8445b212b9f61632
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=abe9ffc25c8d65b48ae02cdc8445b212b9f61632

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Dec 20 15:30:42 2010 -0500

r600g: properly unset vertex buffer

Fix bug http://bugs.freedesktop.org/show_bug.cgi?id=32455

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

---

 src/gallium/drivers/r600/evergreen_state.c   |   10 +-
 src/gallium/drivers/r600/r600_state.c|   10 +-
 src/gallium/drivers/r600/r600_state_common.c |   14 --
 3 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 07496eb..af19beb 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1327,16 +1327,16 @@ void evergreen_vertex_buffer_update(struct 
r600_pipe_context *rctx)
vbuffer_index = 
rctx-vertex_elements-elements[i].vertex_buffer_index;
vertex_buffer = rctx-vertex_buffer[vbuffer_index];
rbuffer = (struct r600_resource*)vertex_buffer-buffer;
-   offset = rctx-vertex_elements-vbuffer_offset[i] +
-   vertex_buffer-buffer_offset +
-   r600_bo_offset(rbuffer-bo);
+   offset = rctx-vertex_elements-vbuffer_offset[i];
} else {
/* bind vertex buffer once */
vertex_buffer = rctx-vertex_buffer[i];
rbuffer = (struct r600_resource*)vertex_buffer-buffer;
-   offset = vertex_buffer-buffer_offset +
-   r600_bo_offset(rbuffer-bo);
+   offset = 0;
}
+   if (vertex_buffer == NULL)
+   continue;
+   offset += vertex_buffer-buffer_offset + 
r600_bo_offset(rbuffer-bo);
 
r600_pipe_state_add_reg(rstate, R_03_RESOURCE0_WORD0,
offset, 0x, rbuffer-bo);
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index cd5f079..0d76afd 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -167,16 +167,16 @@ void r600_vertex_buffer_update(struct r600_pipe_context 
*rctx)
vbuffer_index = 
rctx-vertex_elements-elements[i].vertex_buffer_index;
vertex_buffer = rctx-vertex_buffer[vbuffer_index];
rbuffer = (struct r600_resource*)vertex_buffer-buffer;
-   offset = rctx-vertex_elements-vbuffer_offset[i] +
-   vertex_buffer-buffer_offset +
-   r600_bo_offset(rbuffer-bo);
+   offset = rctx-vertex_elements-vbuffer_offset[i];
} else {
/* bind vertex buffer once */
vertex_buffer = rctx-vertex_buffer[i];
rbuffer = (struct r600_resource*)vertex_buffer-buffer;
-   offset = vertex_buffer-buffer_offset +
-   r600_bo_offset(rbuffer-bo);
+   offset = 0;
}
+   if (vertex_buffer == NULL)
+   continue;
+   offset += vertex_buffer-buffer_offset + 
r600_bo_offset(rbuffer-bo);
 
r600_pipe_state_add_reg(rstate, R_038000_RESOURCE0_WORD0,
offset, 0x, rbuffer-bo);
diff --git a/src/gallium/drivers/r600/r600_state_common.c 
b/src/gallium/drivers/r600/r600_state_common.c
index 99b372c..f488cf7 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -179,8 +179,16 @@ void r600_set_vertex_buffers(struct pipe_context *ctx, 
unsigned count,
struct pipe_vertex_buffer *vbo;
unsigned max_index = (unsigned)-1;
 
-   for (int i = 0; i  rctx-nvertex_buffer; i++) {
-   pipe_resource_reference(rctx-vertex_buffer[i].buffer, NULL);
+   if (rctx-family = CHIP_CEDAR) {
+   for (int i = 0; i  rctx-nvertex_buffer; i++) {
+   pipe_resource_reference(rctx-vertex_buffer[i].buffer, 
NULL);
+   evergreen_fs_resource_set(rctx-ctx, NULL, i);
+   }
+   } else {
+   for (int i = 0; i  rctx-nvertex_buffer; i++) {
+   pipe_resource_reference(rctx-vertex_buffer[i].buffer, 
NULL);
+   r600_context_pipe_state_set_fs_resource(rctx-ctx, 
NULL, i);
+   }
}
memcpy(rctx-vertex_buffer, buffers, sizeof(struct pipe_vertex_buffer) 
* count);
 
@@ -188,6 +196,8 @@ void r600_set_vertex_buffers(struct pipe_context *ctx

Mesa (master): r600g: need to reference upload buffer as the might still live accross flush

2010-12-15 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 3861a1001c5ad0dd0de3b0befabf3ed69da9dc5e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3861a1001c5ad0dd0de3b0befabf3ed69da9dc5e

Author: Jerome Glisse jgli...@redhat.com
Date:   Wed Dec 15 12:07:09 2010 -0500

r600g: need to reference upload buffer as the might still live accross flush

Can't get away from referencing upload buffer as after flush a vertex buffer
using the upload buffer might still be active. Likely need to simplify the
pipe_refence a bit so we don't waste so much cpu time in it.

candidates for 7.10 branch

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

---

 src/gallium/drivers/r600/r600_buffer.c |2 +-
 src/gallium/drivers/r600/r600_upload.c |4 +++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_buffer.c 
b/src/gallium/drivers/r600/r600_buffer.c
index 7d29f76..a17c54d 100644
--- a/src/gallium/drivers/r600/r600_buffer.c
+++ b/src/gallium/drivers/r600/r600_buffer.c
@@ -103,7 +103,7 @@ static void r600_buffer_destroy(struct pipe_screen *screen,
 {
struct r600_resource_buffer *rbuffer = r600_buffer(buf);
 
-   if (!rbuffer-uploaded  rbuffer-r.bo) {
+   if (rbuffer-r.bo) {
r600_bo_reference((struct radeon*)screen-winsys, 
rbuffer-r.bo, NULL);
}
rbuffer-r.bo = NULL;
diff --git a/src/gallium/drivers/r600/r600_upload.c 
b/src/gallium/drivers/r600/r600_upload.c
index ac72854..44102ff 100644
--- a/src/gallium/drivers/r600/r600_upload.c
+++ b/src/gallium/drivers/r600/r600_upload.c
@@ -69,6 +69,7 @@ void r600_upload_flush(struct r600_upload *upload)
upload-default_size = MAX2(upload-total_alloc_size, 
upload-default_size);
upload-total_alloc_size = 0;
upload-size = 0;
+   upload-offset = 0;
upload-ptr = NULL;
upload-buffer = NULL;
 }
@@ -105,7 +106,8 @@ int r600_upload_buffer(struct r600_upload *upload, unsigned 
offset,
memcpy(upload-ptr + upload-offset, (uint8_t *) in_ptr + offset, size);
*out_offset = upload-offset;
*out_size = upload-size;
-   *out_buffer = upload-buffer;
+   *out_buffer = NULL;
+   r600_bo_reference(upload-rctx-radeon, out_buffer, upload-buffer);
upload-offset += alloc_size;
 
return 0;

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


Mesa (master): r600g: fix pow(0, 0) evaluating to NaN

2010-12-15 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 66f55de31e15f97ad1d16c573756738218c02109
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=66f55de31e15f97ad1d16c573756738218c02109

Author: Fredrik Höglund fred...@kde.org
Date:   Wed Dec 15 20:00:42 2010 +0100

r600g: fix pow(0, 0) evaluating to NaN

We have to use the non-IEEE compliant version of MUL here, since
log2(0) is -inf, and 0 * -inf is NaN in IEEE arithmetic.

candidates for 7.10 branch

---

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

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index d645502..9c7b7f0 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -1451,7 +1451,7 @@ static int tgsi_pow(struct r600_shader_ctx *ctx)
return r;
/* b * LOG2(a) */
memset(alu, 0, sizeof(struct r600_bc_alu));
-   alu.inst = CTX_INST(V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MUL_IEEE);
+   alu.inst = CTX_INST(V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MUL);
r = tgsi_src(ctx, inst-Src[1], alu.src[0]);
if (r)
return r;

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


Mesa (master): gallium: properly check for src-dst blit compatibilities

2010-12-15 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: dbb679e51d7e91e98d1d48d0c93be69bfabbba23
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=dbb679e51d7e91e98d1d48d0c93be69bfabbba23

Author: Jerome Glisse jgli...@redhat.com
Date:   Wed Dec 15 15:27:16 2010 -0500

gallium: properly check for src-dst blit compatibilities

Spotted by Christoph Bumiller  Jose Fonseca

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

---

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

diff --git a/src/gallium/auxiliary/util/u_blitter.c 
b/src/gallium/auxiliary/util/u_blitter.c
index 4c986e3..545021d 100644
--- a/src/gallium/auxiliary/util/u_blitter.c
+++ b/src/gallium/auxiliary/util/u_blitter.c
@@ -738,8 +738,8 @@ void util_blitter_copy_region(struct blitter_context 
*blitter,
   assert(!is_overlap(srcbox-x, srcbox-x + width, srcbox-y, srcbox-y + 
height,
  dstx, dstx + width, dsty, dsty + height));
} else {
-  assert(util_is_format_compatible(util_format_description(dst-format),
-   util_format_description(src-format)));
+  assert(util_is_format_compatible(util_format_description(src-format),
+   util_format_description(dst-format)));
}
assert(src-target  PIPE_MAX_TEXTURE_TYPES);
/* XXX should handle 3d regions */

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


Mesa (master): r600g: fix segfault when translating vertex buffer

2010-12-14 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 54773415f407678eb9728ac347cc8302e2d76c74
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=54773415f407678eb9728ac347cc8302e2d76c74

Author: Jerome Glisse jgli...@redhat.com
Date:   Tue Dec 14 13:50:46 2010 -0500

r600g: fix segfault when translating vertex buffer

Note the support for non float vertex draw likely regressed need to
find what we want to do there.

candidates for 7.10 branches

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

---

 src/gallium/drivers/r600/evergreen_state.c   |5 -
 src/gallium/drivers/r600/r600_state.c|9 -
 src/gallium/drivers/r600/r600_state_common.c |5 +
 src/gallium/drivers/r600/r600_translate.c|   12 +---
 4 files changed, 10 insertions(+), 21 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index a9d4a86..07496eb 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1295,11 +1295,6 @@ void evergreen_vertex_buffer_update(struct 
r600_pipe_context *rctx)
if (rctx-vertex_elements == NULL || !rctx-nvertex_buffer)
return;
 
-   /* delete previous translated vertex elements */
-   if (rctx-tran.new_velems) {
-   r600_end_vertex_translate(rctx);
-   }
-
if (rctx-vertex_elements-incompatible_layout) {
/* translate rebind new vertex elements so
 * return once translated
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index 67ea217..cd5f079 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -135,11 +135,6 @@ void r600_vertex_buffer_update(struct r600_pipe_context 
*rctx)
if (rctx-vertex_elements == NULL || !rctx-nvertex_buffer)
return;
 
-   /* delete previous translated vertex elements */
-   if (rctx-tran.new_velems) {
-   r600_end_vertex_translate(rctx);
-   }
-
if (rctx-vertex_elements-incompatible_layout) {
/* translate rebind new vertex elements so
 * return once translated
@@ -280,7 +275,6 @@ void r600_draw_vbo(struct pipe_context *ctx, const struct 
pipe_draw_info *info)
 {
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
struct r600_drawl draw;
-   boolean translate = FALSE;
 
memset(draw, 0, sizeof(struct r600_drawl));
draw.ctx = ctx;
@@ -312,9 +306,6 @@ void r600_draw_vbo(struct pipe_context *ctx, const struct 
pipe_draw_info *info)
}
r600_draw_common(draw);
 
-   if (translate)
-   r600_end_vertex_translate(rctx);
-
pipe_resource_reference(draw.index_buffer, NULL);
 }
 
diff --git a/src/gallium/drivers/r600/r600_state_common.c 
b/src/gallium/drivers/r600/r600_state_common.c
index 1333808..99b372c 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -119,6 +119,11 @@ void r600_bind_vertex_elements(struct pipe_context *ctx, 
void *state)
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
struct r600_vertex_element *v = (struct r600_vertex_element*)state;
 
+   /* delete previous translated vertex elements */
+   if (rctx-tran.new_velems) {
+   r600_end_vertex_translate(rctx);
+   }
+
rctx-vertex_elements = v;
if (v) {
rctx-states[v-rstate.id] = v-rstate;
diff --git a/src/gallium/drivers/r600/r600_translate.c 
b/src/gallium/drivers/r600/r600_translate.c
index 1c227d3..ba12eee 100644
--- a/src/gallium/drivers/r600/r600_translate.c
+++ b/src/gallium/drivers/r600/r600_translate.c
@@ -42,6 +42,7 @@ void r600_begin_vertex_translate(struct r600_pipe_context 
*rctx)
struct pipe_resource *out_buffer;
unsigned i, num_verts;
struct pipe_vertex_element new_velems[PIPE_MAX_ATTRIBS];
+   void *tmp;
 
/* Initialize the translate key, i.e. the recipe how vertices should be
 * translated. */
@@ -159,8 +160,9 @@ void r600_begin_vertex_translate(struct r600_pipe_context 
*rctx)
}
}
 
-   rctx-tran.new_velems = pipe-create_vertex_elements_state(pipe, 
ve-count, new_velems);
-   pipe-bind_vertex_elements_state(pipe, rctx-tran.new_velems);
+   tmp = pipe-create_vertex_elements_state(pipe, ve-count, new_velems);
+   pipe-bind_vertex_elements_state(pipe, tmp);
+   rctx-tran.new_velems = tmp;
 
pipe_resource_reference(out_buffer, NULL);
 }
@@ -173,15 +175,11 @@ void r600_end_vertex_translate(struct r600_pipe_context 
*rctx)
return;
}
/* Restore vertex elements. */
-   if (rctx-vertex_elements == rctx-tran.new_velems) {
-   pipe-bind_vertex_elements_state(pipe, NULL);
-   }
pipe-delete_vertex_elements_state(pipe, rctx-tran.new_velems

Mesa (master): r600g: fix bo size when creating bo from handle

2010-12-10 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: b22c8e8bbcdff7933b0354197c101738c99ea7d0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b22c8e8bbcdff7933b0354197c101738c99ea7d0

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Dec 10 11:17:27 2010 -0500

r600g: fix bo size when creating bo from handle

Spoted by Alex Diomin

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

---

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

diff --git a/src/gallium/winsys/r600/drm/r600_bo.c 
b/src/gallium/winsys/r600/drm/r600_bo.c
index 137402c..6a3737f 100644
--- a/src/gallium/winsys/r600/drm/r600_bo.c
+++ b/src/gallium/winsys/r600/drm/r600_bo.c
@@ -85,7 +85,7 @@ struct r600_bo *r600_bo_handle(struct radeon *radeon,
free(bo);
return NULL;
}
-   bo-size = bo-size;
+   bo-size = rbo-size;
bo-domains = (RADEON_GEM_DOMAIN_CPU |
RADEON_GEM_DOMAIN_GTT |
RADEON_GEM_DOMAIN_VRAM);

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


Mesa (master): r600g: avoid using pb* helper we are loosing previous cpu cycle with it

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

Author: Jerome Glisse jgli...@redhat.com
Date:   Thu Dec  9 13:07:10 2010 -0500

r600g: avoid using pb* helper we are loosing previous cpu cycle with it

r600g is up to a point where all small CPU cycle matter and pb* turn
high on profile. It's mostly because pb try to be generic and thus
trigger unecessary check for r600g driver. To avoid having too much
abstraction  too much depth in the call embedded everythings into
r600_bo. Make code simpler  faster. The performance win highly depend
on the CPU  application considered being more important on slower CPU
and marginal/unoticeable on faster one.

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

---

 src/gallium/winsys/r600/drm/Makefile   |4 +-
 src/gallium/winsys/r600/drm/evergreen_hw_context.c |1 -
 src/gallium/winsys/r600/drm/r600.c |1 -
 src/gallium/winsys/r600/drm/r600_bo.c  |  171 +++--
 src/gallium/winsys/r600/drm/r600_bomgr.c   |  161 
 src/gallium/winsys/r600/drm/r600_drm.c |   16 +-
 src/gallium/winsys/r600/drm/r600_hw_context.c  |   19 +-
 src/gallium/winsys/r600/drm/r600_priv.h|  119 +++--
 src/gallium/winsys/r600/drm/radeon_bo_pb.c |  260 
 9 files changed, 364 insertions(+), 388 deletions(-)

diff --git a/src/gallium/winsys/r600/drm/Makefile 
b/src/gallium/winsys/r600/drm/Makefile
index a396205..91c6501 100644
--- a/src/gallium/winsys/r600/drm/Makefile
+++ b/src/gallium/winsys/r600/drm/Makefile
@@ -8,12 +8,12 @@ C_SOURCES = \
bof.c \
evergreen_hw_context.c \
radeon_bo.c \
-   radeon_bo_pb.c \
radeon_pciid.c \
r600.c \
r600_bo.c \
r600_drm.c \
-   r600_hw_context.c
+   r600_hw_context.c \
+   r600_bomgr.c
 
 LIBRARY_INCLUDES = -I$(TOP)/src/gallium/drivers/r600 \
   $(shell pkg-config libdrm --cflags-only-I)
diff --git a/src/gallium/winsys/r600/drm/evergreen_hw_context.c 
b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
index e1f163e..2175d57 100644
--- a/src/gallium/winsys/r600/drm/evergreen_hw_context.c
+++ b/src/gallium/winsys/r600/drm/evergreen_hw_context.c
@@ -36,7 +36,6 @@
 #include pipe/p_compiler.h
 #include util/u_inlines.h
 #include util/u_memory.h
-#include pipebuffer/pb_bufmgr.h
 #include r600_priv.h
 
 #define GROUP_FORCE_NEW_BLOCK  0
diff --git a/src/gallium/winsys/r600/drm/r600.c 
b/src/gallium/winsys/r600/drm/r600.c
index f5e53e2..b88733f 100644
--- a/src/gallium/winsys/r600/drm/r600.c
+++ b/src/gallium/winsys/r600/drm/r600.c
@@ -27,7 +27,6 @@
 #include radeon_drm.h
 #include pipe/p_compiler.h
 #include util/u_inlines.h
-#include pipebuffer/pb_bufmgr.h
 #include r600_priv.h
 
 enum radeon_family r600_get_family(struct radeon *r600)
diff --git a/src/gallium/winsys/r600/drm/r600_bo.c 
b/src/gallium/winsys/r600/drm/r600_bo.c
index 251f009..933b169 100644
--- a/src/gallium/winsys/r600/drm/r600_bo.c
+++ b/src/gallium/winsys/r600/drm/r600_bo.c
@@ -36,142 +36,153 @@ struct r600_bo *r600_bo(struct radeon *radeon,
unsigned size, unsigned alignment,
unsigned binding, unsigned usage)
 {
-   struct r600_bo *ws_bo = calloc(1, sizeof(struct r600_bo));
-   struct pb_desc desc;
-   struct pb_manager *man;
+   struct r600_bo *bo;
+   struct radeon_bo *rbo;
 
-   desc.alignment = alignment;
-   desc.usage = (PB_USAGE_CPU_READ_WRITE | PB_USAGE_GPU_READ_WRITE);
-   ws_bo-size = size;
+   if (binding  (PIPE_BIND_CONSTANT_BUFFER | PIPE_BIND_VERTEX_BUFFER | 
PIPE_BIND_INDEX_BUFFER)) {
+   bo = r600_bomgr_bo_create(radeon-bomgr, size, alignment, 
*radeon-cfence);
+   if (bo) {
+   return bo;
+   }
+   }
 
-   if (binding  (PIPE_BIND_CONSTANT_BUFFER | PIPE_BIND_VERTEX_BUFFER | 
PIPE_BIND_INDEX_BUFFER))
-   man = radeon-cman;
-   else
-   man = radeon-kman;
+   rbo = radeon_bo(radeon, 0, size, alignment);
+   if (rbo == NULL) {
+   return NULL;
+   }
+
+   bo = calloc(1, sizeof(struct r600_bo));
+   bo-size = size;
+   bo-alignment = alignment;
+   bo-bo = rbo;
+   if (binding  (PIPE_BIND_CONSTANT_BUFFER | PIPE_BIND_VERTEX_BUFFER | 
PIPE_BIND_INDEX_BUFFER)) {
+   r600_bomgr_bo_init(radeon-bomgr, bo);
+   }
 
/* Staging resources particpate in transfers and blits only
 * and are used for uploads and downloads from regular
 * resources.  We generate them internally for some transfers.
 */
if (usage == PIPE_USAGE_STAGING)
-ws_bo-domains = RADEON_GEM_DOMAIN_CPU | RADEON_GEM_DOMAIN_GTT;
-else
-ws_bo-domains = (RADEON_GEM_DOMAIN_CPU

Mesa (master): r600g: specialized upload manager

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

Author: Jerome Glisse jgli...@redhat.com
Date:   Wed Dec  8 13:41:25 2010 -0500

r600g: specialized upload manager

Allow important performance increase by doing hw specific implementation
of the upload manager helper. Drop the range flushing that is not hit with
this code (and wasn't with previous neither). Performance improvement are
mostly visible on slow CPU.

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

---

 src/gallium/drivers/r600/Makefile  |3 +-
 src/gallium/drivers/r600/evergreen_state.c |2 +-
 src/gallium/drivers/r600/r600_buffer.c |  114 +---
 src/gallium/drivers/r600/r600_pipe.c   |   21 +
 src/gallium/drivers/r600/r600_pipe.h   |5 +-
 src/gallium/drivers/r600/r600_resource.h   |   25 --
 src/gallium/drivers/r600/r600_state.c  |3 +-
 src/gallium/drivers/r600/r600_upload.c |  112 +++
 8 files changed, 176 insertions(+), 109 deletions(-)

diff --git a/src/gallium/drivers/r600/Makefile 
b/src/gallium/drivers/r600/Makefile
index a484f38..b476b9a 100644
--- a/src/gallium/drivers/r600/Makefile
+++ b/src/gallium/drivers/r600/Makefile
@@ -21,6 +21,7 @@ C_SOURCES = \
evergreen_state.c \
eg_asm.c \
r600_translate.c \
-   r600_state_common.c
+   r600_state_common.c \
+   r600_upload.c
 
 include ../../Makefile.template
diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 9e1a5e1..a9d4a86 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1346,7 +1346,7 @@ void evergreen_vertex_buffer_update(struct 
r600_pipe_context *rctx)
r600_pipe_state_add_reg(rstate, R_03_RESOURCE0_WORD0,
offset, 0x, rbuffer-bo);
r600_pipe_state_add_reg(rstate, R_030004_RESOURCE0_WORD1,
-   rbuffer-size - offset - 1, 0x, 
NULL);
+   rbuffer-bo_size - offset - 1, 
0x, NULL);
r600_pipe_state_add_reg(rstate, R_030008_RESOURCE0_WORD2,
S_030008_STRIDE(vertex_buffer-stride),
0x, NULL);
diff --git a/src/gallium/drivers/r600/r600_buffer.c 
b/src/gallium/drivers/r600/r600_buffer.c
index 03a61a3..7d29f76 100644
--- a/src/gallium/drivers/r600/r600_buffer.c
+++ b/src/gallium/drivers/r600/r600_buffer.c
@@ -29,7 +29,6 @@
 #include util/u_math.h
 #include util/u_inlines.h
 #include util/u_memory.h
-#include util/u_upload_mgr.h
 #include state_tracker/drm_driver.h
 #include xf86drm.h
 #include radeon_drm.h
@@ -53,12 +52,13 @@ struct pipe_resource *r600_buffer_create(struct pipe_screen 
*screen,
 
rbuffer-magic = R600_BUFFER_MAGIC;
rbuffer-user_buffer = NULL;
-   rbuffer-num_ranges = 0;
rbuffer-r.base.b = *templ;
pipe_reference_init(rbuffer-r.base.b.reference, 1);
rbuffer-r.base.b.screen = screen;
rbuffer-r.base.vtbl = r600_buffer_vtbl;
rbuffer-r.size = rbuffer-r.base.b.width0;
+   rbuffer-r.bo_size = rbuffer-r.size;
+   rbuffer-uploaded = FALSE;
bo = r600_bo((struct radeon*)screen-winsys, rbuffer-r.base.b.width0, 
alignment, rbuffer-r.base.b.bind, rbuffer-r.base.b.usage);
if (bo == NULL) {
FREE(rbuffer);
@@ -91,9 +91,10 @@ struct pipe_resource *r600_user_buffer_create(struct 
pipe_screen *screen,
rbuffer-r.base.b.depth0 = 1;
rbuffer-r.base.b.array_size = 1;
rbuffer-r.base.b.flags = 0;
-   rbuffer-num_ranges = 0;
rbuffer-r.bo = NULL;
+   rbuffer-r.bo_size = 0;
rbuffer-user_buffer = ptr;
+   rbuffer-uploaded = FALSE;
return rbuffer-r.base.b;
 }
 
@@ -102,9 +103,10 @@ static void r600_buffer_destroy(struct pipe_screen *screen,
 {
struct r600_resource_buffer *rbuffer = r600_buffer(buf);
 
-   if (rbuffer-r.bo) {
+   if (!rbuffer-uploaded  rbuffer-r.bo) {
r600_bo_reference((struct radeon*)screen-winsys, 
rbuffer-r.bo, NULL);
}
+   rbuffer-r.bo = NULL;
FREE(rbuffer);
 }
 
@@ -114,29 +116,10 @@ static void *r600_buffer_transfer_map(struct pipe_context 
*pipe,
struct r600_resource_buffer *rbuffer = r600_buffer(transfer-resource);
int write = 0;
uint8_t *data;
-   int i;
-   boolean flush = FALSE;
 
if (rbuffer-user_buffer)
return (uint8_t*)rbuffer-user_buffer + transfer-box.x;
 
-   if (transfer-usage  PIPE_TRANSFER_DISCARD) {
-   for (i = 0; i  rbuffer-num_ranges; i++) {
-   if ((transfer-box.x = rbuffer-ranges[i].start) 
-   (transfer-box.x

Mesa (master): r600g: indentation cleanup

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

Author: Jerome Glisse jgli...@redhat.com
Date:   Thu Dec  9 16:16:22 2010 -0500

r600g: indentation cleanup

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

---

 src/gallium/drivers/r600/r600_pipe.h |4 +-
 src/gallium/drivers/r600/r600_resource.h |   40 ++---
 2 files changed, 21 insertions(+), 23 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_pipe.h 
b/src/gallium/drivers/r600/r600_pipe.h
index f7f6f63..43dbee9 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium/drivers/r600/r600_pipe.h
@@ -111,7 +111,7 @@ struct r600_pipe_shader {
 #define NUM_TEX_UNITS 16
 
 struct r600_textures_info {
-   struct r600_pipe_sampler_view   *views[NUM_TEX_UNITS];
+   struct r600_pipe_sampler_view   *views[NUM_TEX_UNITS];
unsignedn_views;
void*samplers[NUM_TEX_UNITS];
unsignedn_samplers;
@@ -271,13 +271,13 @@ void r600_sampler_view_destroy(struct pipe_context *ctx,
 void r600_bind_state(struct pipe_context *ctx, void *state);
 void r600_delete_state(struct pipe_context *ctx, void *state);
 void r600_bind_vertex_elements(struct pipe_context *ctx, void *state);
-
 void *r600_create_shader_state(struct pipe_context *ctx,
   const struct pipe_shader_state *state);
 void r600_bind_ps_shader(struct pipe_context *ctx, void *state);
 void r600_bind_vs_shader(struct pipe_context *ctx, void *state);
 void r600_delete_ps_shader(struct pipe_context *ctx, void *state);
 void r600_delete_vs_shader(struct pipe_context *ctx, void *state);
+
 /*
  * common helpers
  */
diff --git a/src/gallium/drivers/r600/r600_resource.h 
b/src/gallium/drivers/r600/r600_resource.h
index e21916f..8ca2769 100644
--- a/src/gallium/drivers/r600/r600_resource.h
+++ b/src/gallium/drivers/r600/r600_resource.h
@@ -62,7 +62,21 @@ struct r600_resource_texture {
unsignedtile_type;
unsigneddepth;
unsigneddirty;
-   struct r600_resource_texture*flushed_depth_texture;
+   struct r600_resource_texture*flushed_depth_texture;
+};
+
+#define R600_BUFFER_MAGIC 0xabcd1600
+
+struct r600_resource_buffer {
+   struct r600_resourcer;
+   uint32_tmagic;
+   void*user_buffer;
+   booluploaded;
+};
+
+struct r600_surface {
+   struct pipe_surface base;
+   unsignedaligned_height;
 };
 
 void r600_init_screen_resource_functions(struct pipe_screen *screen);
@@ -74,23 +88,14 @@ struct pipe_resource *r600_texture_from_handle(struct 
pipe_screen *screen,
const struct pipe_resource 
*base,
struct winsys_handle *whandle);
 
-#define R600_BUFFER_MAGIC 0xabcd1600
-
-struct r600_resource_buffer {
-   struct r600_resource r;
-   uint32_t magic;
-   void *user_buffer;
-   bool uploaded;
-};
-
 /* r600_buffer */
 static INLINE struct r600_resource_buffer *r600_buffer(struct pipe_resource 
*buffer)
 {
if (buffer) {
assert(((struct r600_resource_buffer *)buffer)-magic == 
R600_BUFFER_MAGIC);
return (struct r600_resource_buffer *)buffer;
-}
-return NULL;
+   }
+   return NULL;
 }
 
 static INLINE boolean r600_buffer_is_user_buffer(struct pipe_resource *buffer)
@@ -100,10 +105,8 @@ static INLINE boolean r600_buffer_is_user_buffer(struct 
pipe_resource *buffer)
return r600_buffer(buffer)-user_buffer ? TRUE : FALSE;
 }
 
-int r600_texture_depth_flush(struct pipe_context *ctx,
-struct pipe_resource *texture);
-
-extern int (*r600_blit_uncompress_depth_ptr)(struct pipe_context *ctx, struct 
r600_resource_texture *texture);
+int r600_texture_depth_flush(struct pipe_context *ctx, struct pipe_resource 
*texture);
+int (*r600_blit_uncompress_depth_ptr)(struct pipe_context *ctx, struct 
r600_resource_texture *texture);
 
 /* r600_texture.c texture transfer functions. */
 struct pipe_transfer* r600_texture_get_transfer(struct pipe_context *ctx,
@@ -118,11 +121,6 @@ void* r600_texture_transfer_map(struct pipe_context *ctx,
 void r600_texture_transfer_unmap(struct pipe_context *ctx,
 struct pipe_transfer* transfer);
 
-struct r600_surface {
-   struct pipe_surface base;
-   unsigned aligned_height;
-};
-
 struct r600_pipe_context;
 struct r600_upload *r600_upload_create(struct r600_pipe_context *rctx,
unsigned default_size,

___
mesa-commit mailing list
mesa

Mesa (master): r600g: remove dead code

2010-12-07 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 69251fc4cd5f71be403e08398bc43d19052a640d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=69251fc4cd5f71be403e08398bc43d19052a640d

Author: Jerome Glisse jgli...@redhat.com
Date:   Tue Dec  7 16:11:51 2010 -0500

r600g: remove dead code

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

---

 src/gallium/drivers/r600/evergreen_state.c |   77 +---
 src/gallium/drivers/r600/r600_asm.c|2 +-
 src/gallium/drivers/r600/r600_pipe.h   |2 +-
 src/gallium/drivers/r600/r600_shader.c |  140 +---
 src/gallium/drivers/r600/r600_shader.h |1 -
 src/gallium/drivers/r600/r600_state.c  |   54 +---
 6 files changed, 8 insertions(+), 268 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index feb30f3..9e1a5e1 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1372,27 +1372,12 @@ int r600_conv_pipe_prim(unsigned pprim, unsigned *prim);
 void evergreen_draw(struct pipe_context *ctx, const struct pipe_draw_info 
*info)
 {
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-   struct r600_pipe_state *rstate;
struct r600_resource *rbuffer;
-   unsigned i, j, offset, prim;
u32 vgt_dma_index_type, vgt_draw_initiator, mask;
-   struct pipe_vertex_buffer *vertex_buffer;
struct r600_draw rdraw;
struct r600_pipe_state vgt;
struct r600_drawl draw;
-   boolean translate = FALSE;
-
-#if 0
-   if (rctx-vertex_elements-incompatible_layout) {
-   r600_begin_vertex_translate(rctx);
-   translate = TRUE;
-   }
-
-   if (rctx-any_user_vbs) {
-   r600_upload_user_buffers(rctx);
-   rctx-any_user_vbs = FALSE;
-   }
-#endif
+   unsigned prim;
 
memset(draw, 0, sizeof(struct r600_drawl));
draw.ctx = ctx;
@@ -1457,53 +1442,8 @@ void evergreen_draw(struct pipe_context *ctx, const 
struct pipe_draw_info *info)
return;
}
 
-#if 0
-   /* rebuild vertex shader if input format changed */
-   if (r600_pipe_shader_update(rctx-context, rctx-vs_shader))
-   return;
-   if (r600_pipe_shader_update(rctx-context, rctx-ps_shader))
-   return;
-#endif
-
evergreen_spi_update(rctx);
 
-#if 0
-   for (i = 0 ; i  rctx-vertex_elements-count; i++) {
-   uint32_t word3, word2;
-   uint32_t format;
-   rstate = rctx-vs_resource[i];
-
-   rstate-id = R600_PIPE_STATE_RESOURCE;
-   rstate-nregs = 0;
-
-   j = rctx-vertex_elements-elements[i].vertex_buffer_index;
-   vertex_buffer = rctx-vertex_buffer[j];
-   rbuffer = (struct r600_resource*)vertex_buffer-buffer;
-   offset = rctx-vertex_elements-elements[i].src_offset +
-   vertex_buffer-buffer_offset +
-   r600_bo_offset(rbuffer-bo);
-
-   format = 
r600_translate_vertex_data_type(rctx-vertex_elements-hw_format[i]);
-
-   word2 = format | S_030008_STRIDE(vertex_buffer-stride);
-
-   word3 = S_03000C_DST_SEL_X(V_03000C_SQ_SEL_X) |
-   S_03000C_DST_SEL_Y(V_03000C_SQ_SEL_Y) |
-   S_03000C_DST_SEL_Z(V_03000C_SQ_SEL_Z) |
-   S_03000C_DST_SEL_W(V_03000C_SQ_SEL_W);
-
-   r600_pipe_state_add_reg(rstate, R_03_RESOURCE0_WORD0, 
offset, 0x, rbuffer-bo);
-   r600_pipe_state_add_reg(rstate, R_030004_RESOURCE0_WORD1, 
rbuffer-size - offset - 1, 0x, NULL);
-   r600_pipe_state_add_reg(rstate, R_030008_RESOURCE0_WORD2, 
word2, 0x, NULL);
-   r600_pipe_state_add_reg(rstate, R_03000C_RESOURCE0_WORD3, 
word3, 0x, NULL);
-   r600_pipe_state_add_reg(rstate, R_030010_RESOURCE0_WORD4, 
0x, 0x, NULL);
-   r600_pipe_state_add_reg(rstate, R_030014_RESOURCE0_WORD5, 
0x, 0x, NULL);
-   r600_pipe_state_add_reg(rstate, R_030018_RESOURCE0_WORD6, 
0x, 0x, NULL);
-   r600_pipe_state_add_reg(rstate, R_03001C_RESOURCE0_WORD7, 
0xC000, 0x, NULL);
-   evergreen_fs_resource_set(rctx-ctx, rstate, i);
-   }
-#endif
-
mask = 0;
for (int i = 0; i  rctx-framebuffer.nr_cbufs; i++) {
mask |= (0xF  (i * 4));
@@ -1532,18 +1472,14 @@ void evergreen_draw(struct pipe_context *ctx, const 
struct pipe_draw_info *info)
}
evergreen_context_draw(rctx-ctx, rdraw);
 
-   if (translate)
-   r600_end_vertex_translate(rctx);
-
pipe_resource_reference(draw.index_buffer, NULL);
 }
 
 void evergreen_pipe_shader_ps(struct pipe_context *ctx, struct 
r600_pipe_shader *shader)
 {
-   struct

Mesa (master): r600g: fix userspace fence against lastest kernel

2010-12-07 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: b7617346dcff50a66a10c61b95c33682cf629c9e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b7617346dcff50a66a10c61b95c33682cf629c9e

Author: Jerome Glisse jgli...@redhat.com
Date:   Tue Dec  7 15:15:58 2010 -0500

r600g: fix userspace fence against lastest kernel

R6XX GPU doesn't like to have two partial flush writting
back to memory in row without a prior flush of the pipeline.
Add PS_PARTIAL_FLUSH to flush all work between the CP and
the ES, GS, VS, PS shaders.

Thanks a lot to Alban Browaeys (prahal on irc) for investigating
this issue.

Signed-off-by: Alban Browaeys pra...@yahoo.com
Signed-off-by: Jerome Glisse jgli...@redhat.com

---

 src/gallium/winsys/r600/drm/r600_hw_context.c |2 ++
 src/gallium/winsys/r600/drm/r600d.h   |1 +
 2 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/src/gallium/winsys/r600/drm/r600_hw_context.c 
b/src/gallium/winsys/r600/drm/r600_hw_context.c
index b2da7bf..0f2724f 100644
--- a/src/gallium/winsys/r600/drm/r600_hw_context.c
+++ b/src/gallium/winsys/r600/drm/r600_hw_context.c
@@ -1112,6 +1112,8 @@ void r600_context_flush(struct r600_context *ctx)
r600_context_queries_suspend(ctx);
 
/* emit fence */
+   ctx-pm4[ctx-pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE, 0);
+   ctx-pm4[ctx-pm4_cdwords++] = EVENT_TYPE(EVENT_TYPE_PS_PARTIAL_FLUSH) 
| EVENT_INDEX(4);
ctx-pm4[ctx-pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE_EOP, 4);
ctx-pm4[ctx-pm4_cdwords++] = 
EVENT_TYPE(EVENT_TYPE_CACHE_FLUSH_AND_INV_TS_EVENT) | EVENT_INDEX(5);
ctx-pm4[ctx-pm4_cdwords++] = 0;
diff --git a/src/gallium/winsys/r600/drm/r600d.h 
b/src/gallium/winsys/r600/drm/r600d.h
index 4a08d50..1c1ac76 100644
--- a/src/gallium/winsys/r600/drm/r600d.h
+++ b/src/gallium/winsys/r600/drm/r600d.h
@@ -91,6 +91,7 @@
 #define PKT3_SET_CTL_CONST 0x6F
 #define PKT3_SURFACE_BASE_UPDATE   0x73
 
+#define EVENT_TYPE_PS_PARTIAL_FLUSH0x10
 #define EVENT_TYPE_CACHE_FLUSH_AND_INV_TS_EVENT 0x14
 #define EVENT_TYPE_ZPASS_DONE  0x15
 #define EVENT_TYPE_CACHE_FLUSH_AND_INV_EVENT   0x16

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


Mesa (master): r600g: build fetch shader from vertex elements

2010-12-06 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: fa86fc564aea4e40c89f6fc889e6a5bf817634b3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fa86fc564aea4e40c89f6fc889e6a5bf817634b3

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Dec  3 20:47:02 2010 -0500

r600g: build fetch shader from vertex elements

Vertex elements change are less frequent than draw call, those to
avoid rebuilding fetch shader to often build the fetch shader along
vertex elements. This also allow to move vertex buffer setup out
of draw path and make update to it less frequent.

Shader update can still be improved to only update SPI regs (based
on some rasterizer state like flat shading or point sprite ...).

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

---

 src/gallium/drivers/r600/eg_asm.c|   35 +++
 src/gallium/drivers/r600/evergreen_state.c   |   97 -
 src/gallium/drivers/r600/r600_asm.c  |  317 ++
 src/gallium/drivers/r600/r600_asm.h  |8 +
 src/gallium/drivers/r600/r600_buffer.c   |5 +-
 src/gallium/drivers/r600/r600_pipe.c |2 +
 src/gallium/drivers/r600/r600_pipe.h |   20 ++-
 src/gallium/drivers/r600/r600_shader.c   |   18 +-
 src/gallium/drivers/r600/r600_state.c|   83 +++
 src/gallium/drivers/r600/r600_state_common.c |   35 +++-
 src/gallium/drivers/r600/r600_translate.c|   43 ++--
 11 files changed, 619 insertions(+), 44 deletions(-)

diff --git a/src/gallium/drivers/r600/eg_asm.c 
b/src/gallium/drivers/r600/eg_asm.c
index 21d66fa..b79875c 100644
--- a/src/gallium/drivers/r600/eg_asm.c
+++ b/src/gallium/drivers/r600/eg_asm.c
@@ -27,6 +27,7 @@
 #include r600_asm.h
 #include eg_sq.h
 #include r600_opcodes.h
+#include evergreend.h
 
 int eg_bc_cf_build(struct r600_bc *bc, struct r600_bc_cf *cf)
 {
@@ -89,3 +90,37 @@ int eg_bc_cf_build(struct r600_bc *bc, struct r600_bc_cf *cf)
}
return 0;
 }
+
+void eg_cf_vtx(struct r600_vertex_element *ve, u32 *bytecode, unsigned count)
+{
+   struct r600_pipe_state *rstate;
+   unsigned i = 0;
+
+   if (count  8) {
+   bytecode[i++] = S_SQ_CF_WORD0_ADDR(8  1);
+   bytecode[i++] = 
S_SQ_CF_WORD1_CF_INST(EG_V_SQ_CF_WORD1_SQ_CF_INST_VTX) |
+   S_SQ_CF_WORD1_BARRIER(1) |
+   S_SQ_CF_WORD1_COUNT(8 - 1);
+   bytecode[i++] = S_SQ_CF_WORD0_ADDR(40  1);
+   bytecode[i++] = 
S_SQ_CF_WORD1_CF_INST(EG_V_SQ_CF_WORD1_SQ_CF_INST_VTX) |
+   S_SQ_CF_WORD1_BARRIER(1) |
+   S_SQ_CF_WORD1_COUNT(count - 8 - 1);
+   } else {
+   bytecode[i++] = S_SQ_CF_WORD0_ADDR(8  1);
+   bytecode[i++] = 
S_SQ_CF_WORD1_CF_INST(EG_V_SQ_CF_WORD1_SQ_CF_INST_VTX) |
+   S_SQ_CF_WORD1_BARRIER(1) |
+   S_SQ_CF_WORD1_COUNT(count - 1);
+   }
+   bytecode[i++] = S_SQ_CF_WORD0_ADDR(0);
+   bytecode[i++] = 
S_SQ_CF_WORD1_CF_INST(EG_V_SQ_CF_WORD1_SQ_CF_INST_RETURN) |
+   S_SQ_CF_WORD1_BARRIER(1);
+
+   rstate = ve-rstate;
+   rstate-id = R600_PIPE_STATE_FETCH_SHADER;
+   rstate-nregs = 0;
+   r600_pipe_state_add_reg(rstate, R_0288A8_SQ_PGM_RESOURCES_FS,
+   0x, 0x, NULL);
+   r600_pipe_state_add_reg(rstate, R_0288A4_SQ_PGM_START_FS,
+   (r600_bo_offset(ve-fetch_shader))  8,
+   0x, ve-fetch_shader);
+}
diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index ebd541d..b313d52 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1259,6 +1259,90 @@ void evergreen_polygon_offset_update(struct 
r600_pipe_context *rctx)
}
 }
 
+void evergreen_vertex_buffer_update(struct r600_pipe_context *rctx)
+{
+   struct r600_pipe_state *rstate;
+   struct r600_resource *rbuffer;
+   struct pipe_vertex_buffer *vertex_buffer;
+   unsigned i, offset;
+
+   /* we don't update until we know vertex elements */
+   if (rctx-vertex_elements == NULL || !rctx-nvertex_buffer)
+   return;
+
+   /* delete previous translated vertex elements */
+   if (rctx-tran.new_velems) {
+   r600_end_vertex_translate(rctx);
+   }
+
+   if (rctx-vertex_elements-incompatible_layout) {
+   /* translate rebind new vertex elements so
+* return once translated
+*/
+   r600_begin_vertex_translate(rctx);
+   return;
+   }
+
+   if (rctx-any_user_vbs) {
+   r600_upload_user_buffers(rctx);
+   rctx-any_user_vbs = FALSE;
+   }
+
+   if (rctx-vertex_elements-vbuffer_need_offset) {
+   /* one resource per vertex elements */
+   rctx-nvs_resource = rctx

Mesa (master): r600g: avoid useless shader rebuild at draw call

2010-12-06 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: afc56b1861c1dae4137493af4c0e6dacc6ee41f9
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=afc56b1861c1dae4137493af4c0e6dacc6ee41f9

Author: Jerome Glisse jgli...@redhat.com
Date:   Sun Dec  5 19:24:03 2010 -0500

r600g: avoid useless shader rebuild at draw call

Avoid rebuilding constant shader state at each draw call,
factor out spi update that might change at each draw call.
Best would be to update spi only when revealent states
change (likely only flat shading  sprite point).

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

---

 src/gallium/drivers/r600/evergreen_state.c   |   55 --
 src/gallium/drivers/r600/r600_pipe.c |4 +-
 src/gallium/drivers/r600/r600_shader.c   |   36 ++--
 src/gallium/drivers/r600/r600_shader.h   |1 -
 src/gallium/drivers/r600/r600_state.c|   50 +++-
 src/gallium/drivers/r600/r600_state_common.c |6 +++
 src/gallium/drivers/r600/r600_translate.c|3 +
 7 files changed, 108 insertions(+), 47 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index b313d52..feb30f3 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1239,6 +1239,7 @@ void evergreen_polygon_offset_update(struct 
r600_pipe_context *rctx)
default:
return;
}
+   /* FIXME some of those reg can be computed with cso */
offset_db_fmt_cntl |= 
S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS(depth);
r600_pipe_state_add_reg(state,
R_028B80_PA_SU_POLY_OFFSET_FRONT_SCALE,
@@ -1259,6 +1260,30 @@ void evergreen_polygon_offset_update(struct 
r600_pipe_context *rctx)
}
 }
 
+static void evergreen_spi_update(struct r600_pipe_context *rctx)
+{
+   struct r600_pipe_shader *shader = rctx-ps_shader;
+   struct r600_pipe_state rstate;
+   struct r600_shader *rshader = shader-shader;
+   unsigned i, tmp;
+
+   rstate.nregs = 0;
+   for (i = 0; i  rshader-ninput; i++) {
+   tmp = 
S_028644_SEMANTIC(r600_find_vs_semantic_index(rctx-vs_shader-shader, 
rshader, i));
+   if (rshader-input[i].name == TGSI_SEMANTIC_COLOR ||
+   rshader-input[i].name == TGSI_SEMANTIC_BCOLOR 
||
+   rshader-input[i].name == 
TGSI_SEMANTIC_POSITION) {
+   tmp |= S_028644_FLAT_SHADE(rctx-flatshade);
+   }
+   if (rshader-input[i].name == TGSI_SEMANTIC_GENERIC 
+   rctx-sprite_coord_enable  (1  
rshader-input[i].sid)) {
+   tmp |= S_028644_PT_SPRITE_TEX(1);
+   }
+   r600_pipe_state_add_reg(rstate, R_028644_SPI_PS_INPUT_CNTL_0 + 
i * 4, tmp, 0x, NULL);
+   }
+   r600_context_pipe_state_set(rctx-ctx, rstate);
+}
+
 void evergreen_vertex_buffer_update(struct r600_pipe_context *rctx)
 {
struct r600_pipe_state *rstate;
@@ -1417,12 +1442,30 @@ void evergreen_draw(struct pipe_context *ctx, const 
struct pipe_draw_info *info)
}
if (r600_conv_pipe_prim(draw.mode, prim))
return;
+   if (unlikely(rctx-ps_shader == NULL)) {
+   R600_ERR(missing vertex shader\n);
+   return;
+   }
+   if (unlikely(rctx-vs_shader == NULL)) {
+   R600_ERR(missing vertex shader\n);
+   return;
+   }
+   /* there should be enough input */
+   if (rctx-vertex_elements-count  
rctx-vs_shader-shader.bc.nresource) {
+   R600_ERR(%d resources provided, expecting %d\n,
+   rctx-vertex_elements-count, 
rctx-vs_shader-shader.bc.nresource);
+   return;
+   }
 
+#if 0
/* rebuild vertex shader if input format changed */
if (r600_pipe_shader_update(rctx-context, rctx-vs_shader))
return;
if (r600_pipe_shader_update(rctx-context, rctx-ps_shader))
return;
+#endif
+
+   evergreen_spi_update(rctx);
 
 #if 0
for (i = 0 ; i  rctx-vertex_elements-count; i++) {
@@ -1506,11 +1549,9 @@ void evergreen_pipe_shader_ps(struct pipe_context *ctx, 
struct r600_pipe_shader
boolean have_linear = FALSE, have_centroid = FALSE, have_perspective = 
FALSE;
unsigned spi_baryc_cntl;
 
-   /* clear previous register */
rstate-nregs = 0;
 
for (i = 0; i  rshader-ninput; i++) {
-   tmp = 
S_028644_SEMANTIC(r600_find_vs_semantic_index(rctx-vs_shader-shader, 
rshader, i));
/* evergreen NUM_INTERP only contains values interpolated into 
the LDS,
   POSITION goes via GPRs from the SC so isn't counted */
if (rshader-input[i].name == TGSI_SEMANTIC_POSITION)
@@ -1528,16 +1569,6 @@ void evergreen_pipe_shader_ps(struct

Mesa (master): r600g: remove useless flush map

2010-12-06 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: e0d554ab787c6f356d51df4d6266d4deb1199565
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e0d554ab787c6f356d51df4d6266d4deb1199565

Author: Jerome Glisse jgli...@redhat.com
Date:   Mon Dec  6 09:49:16 2010 -0500

r600g: remove useless flush map

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

---

 src/gallium/winsys/r600/drm/r600_hw_context.c |2 -
 src/gallium/winsys/r600/drm/radeon_bo_pb.c|   29 +
 2 files changed, 1 insertions(+), 30 deletions(-)

diff --git a/src/gallium/winsys/r600/drm/r600_hw_context.c 
b/src/gallium/winsys/r600/drm/r600_hw_context.c
index 50b7e6d..b2da7bf 100644
--- a/src/gallium/winsys/r600/drm/r600_hw_context.c
+++ b/src/gallium/winsys/r600/drm/r600_hw_context.c
@@ -,8 +,6 @@ void r600_context_flush(struct r600_context *ctx)
/* suspend queries */
r600_context_queries_suspend(ctx);
 
-   radeon_bo_pbmgr_flush_maps(ctx-radeon-kman);
-
/* emit fence */
ctx-pm4[ctx-pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE_EOP, 4);
ctx-pm4[ctx-pm4_cdwords++] = 
EVENT_TYPE(EVENT_TYPE_CACHE_FLUSH_AND_INV_TS_EVENT) | EVENT_INDEX(5);
diff --git a/src/gallium/winsys/r600/drm/radeon_bo_pb.c 
b/src/gallium/winsys/r600/drm/radeon_bo_pb.c
index 312552f..4bd3ae3 100644
--- a/src/gallium/winsys/r600/drm/radeon_bo_pb.c
+++ b/src/gallium/winsys/r600/drm/radeon_bo_pb.c
@@ -35,7 +35,6 @@ struct radeon_bo_pb {
struct radeon_bo *bo;
 
struct radeon_bo_pbmgr *mgr;
-   struct list_head maplist;
 };
 
 extern const struct pb_vtbl radeon_bo_pb_vtbl;
@@ -50,7 +49,6 @@ static INLINE struct radeon_bo_pb *radeon_bo_pb(struct 
pb_buffer *buf)
 struct radeon_bo_pbmgr {
struct pb_manager b;
struct radeon *radeon;
-   struct list_head buffer_map_list;
 };
 
 static INLINE struct radeon_bo_pbmgr *radeon_bo_pbmgr(struct pb_manager *mgr)
@@ -66,10 +64,7 @@ static void radeon_bo_pb_destroy(struct pb_buffer *_buf)
/* If this buffer is on the list of buffers to unmap,
 * do the unmapping now.
 */
-   if (!LIST_IS_EMPTY(buf-maplist))
-   radeon_bo_unmap(buf-mgr-radeon, buf-bo);
-
-   LIST_DEL(buf-maplist);
+   radeon_bo_unmap(buf-mgr-radeon, buf-bo);
radeon_bo_reference(buf-mgr-radeon, buf-bo, NULL);
FREE(buf);
 }
@@ -85,7 +80,6 @@ radeon_bo_pb_map_internal(struct pb_buffer *_buf,
if (radeon_bo_map(buf-mgr-radeon, buf-bo)) {
return NULL;
}
-   LIST_DELINIT(buf-maplist);
return buf-bo-data;
}
 
@@ -116,14 +110,11 @@ radeon_bo_pb_map_internal(struct pb_buffer *_buf,
return NULL;
}
 out:
-   LIST_DELINIT(buf-maplist);
return buf-bo-data;
 }
 
 static void radeon_bo_pb_unmap_internal(struct pb_buffer *_buf)
 {
-   struct radeon_bo_pb *buf = radeon_bo_pb(_buf);
-   LIST_ADDTAIL(buf-maplist, buf-mgr-buffer_map_list);
 }
 
 static void
@@ -178,7 +169,6 @@ radeon_bo_pb_create_buffer_from_handle(struct pb_manager 
*_mgr,
return NULL;
}
 
-   LIST_INITHEAD(bo-maplist);
pipe_reference_init(bo-b.base.reference, 1);
bo-b.base.alignment = 0;
bo-b.base.usage = PB_USAGE_GPU_WRITE | PB_USAGE_GPU_READ;
@@ -211,8 +201,6 @@ radeon_bo_pb_create_buffer(struct pb_manager *_mgr,
bo-b.vtbl = radeon_bo_pb_vtbl;
bo-mgr = mgr;
 
-   LIST_INITHEAD(bo-maplist);
-
bo-bo = radeon_bo(radeon, 0, size, desc-alignment);
if (bo-bo == NULL)
goto error2;
@@ -250,24 +238,9 @@ struct pb_manager *radeon_bo_pbmgr_create(struct radeon 
*radeon)
mgr-b.flush = radeon_bo_pbmgr_flush;
 
mgr-radeon = radeon;
-   LIST_INITHEAD(mgr-buffer_map_list);
return mgr-b;
 }
 
-void radeon_bo_pbmgr_flush_maps(struct pb_manager *_mgr)
-{
-   struct radeon_bo_pbmgr *mgr = radeon_bo_pbmgr(_mgr);
-   struct radeon_bo_pb *rpb = NULL;
-   struct radeon_bo_pb *t_rpb;
-
-   LIST_FOR_EACH_ENTRY_SAFE(rpb, t_rpb, mgr-buffer_map_list, maplist) {
-   radeon_bo_unmap(mgr-radeon, rpb-bo);
-   LIST_DELINIT(rpb-maplist);
-   }
-
-   LIST_INITHEAD(mgr-buffer_map_list);
-}
-
 struct radeon_bo *radeon_bo_pb_get_bo(struct pb_buffer *_buf)
 {
struct radeon_bo_pb *buf;

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


Mesa (master): r600g: dump raw shader output for debugging

2010-12-03 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 833f3a488a7ba0fa59e25f1e518f6b4616270143
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=833f3a488a7ba0fa59e25f1e518f6b4616270143

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Dec  3 11:34:47 2010 -0500

r600g: dump raw shader output for debugging

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

---

 src/gallium/drivers/r600/r600_asm.c|   25 +
 src/gallium/drivers/r600/r600_asm.h|1 +
 src/gallium/drivers/r600/r600_shader.c |1 +
 3 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_asm.c 
b/src/gallium/drivers/r600/r600_asm.c
index edadedf..73daa00 100644
--- a/src/gallium/drivers/r600/r600_asm.c
+++ b/src/gallium/drivers/r600/r600_asm.c
@@ -947,3 +947,28 @@ void r600_bc_clear(struct r600_bc *bc)
 
LIST_INITHEAD(cf-list);
 }
+
+void r600_bc_dump(struct r600_bc *bc)
+{
+   unsigned i;
+   char chip = '6';
+
+   switch (bc-chiprev) {
+   case 1:
+   chip = '7';
+   break;
+   case 2:
+   chip = 'E';
+   break;
+   case 0:
+   default:
+   chip = '6';
+   break;
+   }
+   fprintf(stderr, bytecode %d dw ---\n, bc-ndw);
+   fprintf(stderr,  %c\n, chip);
+   for (i = 0; i  bc-ndw; i++) {
+   fprintf(stderr, 0x%08X\n, bc-bytecode[i]);
+   }
+   fprintf(stderr, --\n);
+}
diff --git a/src/gallium/drivers/r600/r600_asm.h 
b/src/gallium/drivers/r600/r600_asm.h
index f2016af..1be5e4a 100644
--- a/src/gallium/drivers/r600/r600_asm.h
+++ b/src/gallium/drivers/r600/r600_asm.h
@@ -200,6 +200,7 @@ int r600_bc_add_output(struct r600_bc *bc, const struct 
r600_bc_output *output);
 int r600_bc_build(struct r600_bc *bc);
 int r600_bc_add_cfinst(struct r600_bc *bc, int inst);
 int r600_bc_add_alu_type(struct r600_bc *bc, const struct r600_bc_alu *alu, 
int type);
+void r600_bc_dump(struct r600_bc *bc);
 
 /* r700_asm.c */
 int r700_bc_alu_build(struct r600_bc *bc, struct r600_bc_alu *alu, unsigned 
id);
diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index 77b1809..b6d815f 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -351,6 +351,7 @@ int r600_pipe_shader_create(struct pipe_context *ctx, 
struct r600_pipe_shader *s
return r;
}
}
+//r600_bc_dump(shader-shader.bc);
 //fprintf(stderr, 
__\n);
return 0;
 }

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


Mesa (master): r600g: set address of pop instructions to next instruction

2010-12-03 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: cd431a12bf1f0c47dac6bf10c2d9edb5726fe6fe
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=cd431a12bf1f0c47dac6bf10c2d9edb5726fe6fe

Author: Fabian Bieler der.f...@gmx.net
Date:   Fri Dec  3 03:39:48 2010 +0100

r600g: set address of pop instructions to next instruction

---

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

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index b6d815f..60e6794 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -2805,6 +2805,7 @@ static int pops(struct r600_shader_ctx *ctx, int pops)
 {
r600_bc_add_cfinst(ctx-bc, CTX_INST(V_SQ_CF_WORD1_SQ_CF_INST_POP));
ctx-bc-cf_last-pop_count = pops;
+   ctx-bc-cf_last-cf_addr = ctx-bc-cf_last-id + 2;
return 0;
 }
 

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


Mesa (master): r600g: update polygon offset only when rasterizer or zbuffer change

2010-12-03 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 0b841b0349d7aca218eac4e9d9b7b1406ad71944
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0b841b0349d7aca218eac4e9d9b7b1406ad71944

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Dec  3 12:20:40 2010 -0500

r600g: update polygon offset only when rasterizer or zbuffer change

Aim is to build as little state as possible in draw functions.

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

---

 src/gallium/drivers/r600/evergreen_state.c   |   92 +++---
 src/gallium/drivers/r600/r600_pipe.h |4 +
 src/gallium/drivers/r600/r600_state.c|   92 +++---
 src/gallium/drivers/r600/r600_state_common.c |6 ++
 4 files changed, 114 insertions(+), 80 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index bee6752..9f44645 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -833,6 +833,10 @@ static void evergreen_set_framebuffer_state(struct 
pipe_context *ctx,
free(rctx-states[R600_PIPE_STATE_FRAMEBUFFER]);
rctx-states[R600_PIPE_STATE_FRAMEBUFFER] = rstate;
r600_context_pipe_state_set(rctx-ctx, rstate);
+
+   if (state-zsbuf) {
+   evergreen_polygon_offset_update(rctx);
+   }
 }
 
 static void evergreen_set_constant_buffer(struct pipe_context *ctx, uint 
shader, uint index,
@@ -1208,6 +1212,54 @@ r600_pipe_state_add_reg(rstate, R_028810_PA_CL_CLIP_CNTL,
r600_context_pipe_state_set(rctx-ctx, rstate);
 }
 
+void evergreen_polygon_offset_update(struct r600_pipe_context *rctx)
+{
+   struct r600_pipe_state state;
+
+   state.id = R600_PIPE_STATE_POLYGON_OFFSET;
+   state.nregs = 0;
+   if (rctx-rasterizer  rctx-framebuffer.zsbuf) {
+   float offset_units = rctx-rasterizer-offset_units;
+   unsigned offset_db_fmt_cntl = 0, depth;
+
+   switch (rctx-framebuffer.zsbuf-texture-format) {
+   case PIPE_FORMAT_Z24X8_UNORM:
+   case PIPE_FORMAT_Z24_UNORM_S8_USCALED:
+   depth = -24;
+   offset_units *= 2.0f;
+   break;
+   case PIPE_FORMAT_Z32_FLOAT:
+   depth = -23;
+   offset_units *= 1.0f;
+   offset_db_fmt_cntl |= 
S_028B78_POLY_OFFSET_DB_IS_FLOAT_FMT(1);
+   break;
+   case PIPE_FORMAT_Z16_UNORM:
+   depth = -16;
+   offset_units *= 4.0f;
+   break;
+   default:
+   return;
+   }
+   offset_db_fmt_cntl |= 
S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS(depth);
+   r600_pipe_state_add_reg(state,
+   R_028B80_PA_SU_POLY_OFFSET_FRONT_SCALE,
+   fui(rctx-rasterizer-offset_scale), 
0x, NULL);
+   r600_pipe_state_add_reg(state,
+   R_028B84_PA_SU_POLY_OFFSET_FRONT_OFFSET,
+   fui(offset_units), 0x, NULL);
+   r600_pipe_state_add_reg(state,
+   R_028B88_PA_SU_POLY_OFFSET_BACK_SCALE,
+   fui(rctx-rasterizer-offset_scale), 
0x, NULL);
+   r600_pipe_state_add_reg(state,
+   R_028B8C_PA_SU_POLY_OFFSET_BACK_OFFSET,
+   fui(offset_units), 0x, NULL);
+   r600_pipe_state_add_reg(state,
+   R_028B78_PA_SU_POLY_OFFSET_DB_FMT_CNTL,
+   offset_db_fmt_cntl, 0x, NULL);
+   r600_context_pipe_state_set(rctx-ctx, state);
+   }
+}
+
 int r600_conv_pipe_prim(unsigned pprim, unsigned *prim);
 void evergreen_draw(struct pipe_context *ctx, const struct pipe_draw_info 
*info)
 {
@@ -1336,46 +1388,6 @@ void evergreen_draw(struct pipe_context *ctx, const 
struct pipe_draw_info *info)
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;
-   unsigned offset_db_fmt_cntl = 0, depth;
-
-   switch (rctx-framebuffer.zsbuf-texture-format) {
-   case PIPE_FORMAT_Z24X8_UNORM:
-   case PIPE_FORMAT_Z24_UNORM_S8_USCALED:
-   depth = -24;
-   offset_units *= 2.0f;
-   break;
-   case PIPE_FORMAT_Z32_FLOAT:
-   depth = -23;
-   offset_units *= 1.0f

Mesa (master): r600g: indentation fix

2010-12-03 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 119f00659c03c48cfab0f2770dd6b6fb89af31e4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=119f00659c03c48cfab0f2770dd6b6fb89af31e4

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Dec  3 12:56:51 2010 -0500

r600g: indentation fix

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

---

 src/gallium/drivers/r600/evergreen_state.c |3 +-
 src/gallium/drivers/r600/r600_blit.c   |   12 +-
 src/gallium/drivers/r600/r600_buffer.c |6 +-
 src/gallium/drivers/r600/r600_pipe.c   |6 +-
 src/gallium/drivers/r600/r600_pipe.h   |   19 ++--
 src/gallium/drivers/r600/r600_shader.c |4 +-
 src/gallium/drivers/r600/r600_texture.c|  156 ++--
 7 files changed, 101 insertions(+), 105 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 9f44645..ebd541d 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1206,8 +1206,7 @@ void evergreen_init_config(struct r600_pipe_context *rctx)
r600_pipe_state_add_reg(rstate, R_0283F8_SQ_VTX_SEMANTIC_30, 0x0, 
0x, NULL);
r600_pipe_state_add_reg(rstate, R_0283FC_SQ_VTX_SEMANTIC_31, 0x0, 
0x, NULL);
 
-r600_pipe_state_add_reg(rstate, R_028810_PA_CL_CLIP_CNTL,
-   0x0, 0x, NULL);
+   r600_pipe_state_add_reg(rstate, R_028810_PA_CL_CLIP_CNTL, 0x0, 
0x, NULL);
 
r600_context_pipe_state_set(rctx-ctx, rstate);
 }
diff --git a/src/gallium/drivers/r600/r600_blit.c 
b/src/gallium/drivers/r600/r600_blit.c
index f35eacd..0f04136 100644
--- a/src/gallium/drivers/r600/r600_blit.c
+++ b/src/gallium/drivers/r600/r600_blit.c
@@ -159,12 +159,12 @@ static void r600_clear_depth_stencil(struct pipe_context 
*ctx,
 
 /* Copy a block of pixels from one surface to another using HW. */
 static void r600_hw_copy_region(struct pipe_context *ctx,
-struct pipe_resource *dst,
-unsigned dst_level,
-unsigned dstx, unsigned dsty, unsigned dstz,
-struct pipe_resource *src,
-unsigned src_level,
-const struct pipe_box *src_box)
+   struct pipe_resource *dst,
+   unsigned dst_level,
+   unsigned dstx, unsigned dsty, unsigned dstz,
+   struct pipe_resource *src,
+   unsigned src_level,
+   const struct pipe_box *src_box)
 {
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
 
diff --git a/src/gallium/drivers/r600/r600_buffer.c 
b/src/gallium/drivers/r600/r600_buffer.c
index 76f9d88..51b8aba 100644
--- a/src/gallium/drivers/r600/r600_buffer.c
+++ b/src/gallium/drivers/r600/r600_buffer.c
@@ -130,9 +130,9 @@ static void *r600_buffer_transfer_map(struct pipe_context 
*pipe,
r600_bo_reference((struct radeon*)pipe-winsys, 
rbuffer-r.bo, NULL);
rbuffer-num_ranges = 0;
rbuffer-r.bo = r600_bo((struct 
radeon*)pipe-winsys,
-
rbuffer-r.base.b.width0, 0,
-rbuffer-r.base.b.bind,
-
rbuffer-r.base.b.usage);
+   
rbuffer-r.base.b.width0, 0,
+   rbuffer-r.base.b.bind,
+   
rbuffer-r.base.b.usage);
break;
}
}
diff --git a/src/gallium/drivers/r600/r600_pipe.c 
b/src/gallium/drivers/r600/r600_pipe.c
index 4592cbc..fa0b635 100644
--- a/src/gallium/drivers/r600/r600_pipe.c
+++ b/src/gallium/drivers/r600/r600_pipe.c
@@ -420,9 +420,9 @@ static boolean r600_is_format_supported(struct pipe_screen* 
screen,
}
 
if ((usage  (PIPE_BIND_RENDER_TARGET |
-  PIPE_BIND_DISPLAY_TARGET |
-  PIPE_BIND_SCANOUT |
-  PIPE_BIND_SHARED)) 
+   PIPE_BIND_DISPLAY_TARGET |
+   PIPE_BIND_SCANOUT |
+   PIPE_BIND_SHARED)) 
r600_is_colorbuffer_format_supported(format)) {
retval |= usage 
(PIPE_BIND_RENDER_TARGET |
diff --git a/src/gallium/drivers/r600/r600_pipe.h 
b/src/gallium/drivers/r600/r600_pipe.h
index e4d5dd4..deec946 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium/drivers/r600/r600_pipe.h
@@ -103,19 +103,20 @@ struct r600_pipe_shader {
 
 struct r600_textures_info {
struct

Mesa (master): r600g: more indentation fix + warning silencing + dead code removal

2010-12-03 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: edda44e0dc72302afa04a767772d5d97ab9d9aa6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=edda44e0dc72302afa04a767772d5d97ab9d9aa6

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Dec  3 13:06:53 2010 -0500

r600g: more indentation fix + warning silencing + dead code removal

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

---

 src/gallium/drivers/r600/r600.h|2 +
 src/gallium/drivers/r600/r600_texture.c|2 -
 src/gallium/winsys/r600/drm/r600_drm.c |   17 ---
 src/gallium/winsys/r600/drm/r600_priv.h|5 +--
 src/gallium/winsys/r600/drm/radeon_pciid.c |   79 +---
 5 files changed, 14 insertions(+), 91 deletions(-)

diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h
index 2ab60f3..aa456d4 100644
--- a/src/gallium/drivers/r600/r600.h
+++ b/src/gallium/drivers/r600/r600.h
@@ -294,4 +294,6 @@ void evergreen_context_pipe_state_set_fs_resource(struct 
r600_context *ctx, stru
 void evergreen_context_pipe_state_set_ps_sampler(struct r600_context *ctx, 
struct r600_pipe_state *state, unsigned id);
 void evergreen_context_pipe_state_set_vs_sampler(struct r600_context *ctx, 
struct r600_pipe_state *state, unsigned id);
 
+struct radeon *radeon_decref(struct radeon *radeon);
+
 #endif
diff --git a/src/gallium/drivers/r600/r600_texture.c 
b/src/gallium/drivers/r600/r600_texture.c
index 1a2fd4e..d4d9b07 100644
--- a/src/gallium/drivers/r600/r600_texture.c
+++ b/src/gallium/drivers/r600/r600_texture.c
@@ -170,8 +170,6 @@ static unsigned r600_texture_get_stride(struct pipe_screen 
*screen,
unsigned level)
 {
struct pipe_resource *ptex = rtex-resource.base.b;
-   struct radeon *radeon = (struct radeon *)screen-winsys;
-   enum chip_class chipc = r600_get_family_class(radeon);
unsigned width, stride, tile_width;
 
if (rtex-pitch_override)
diff --git a/src/gallium/winsys/r600/drm/r600_drm.c 
b/src/gallium/winsys/r600/drm/r600_drm.c
index e83cc44..8c84712 100644
--- a/src/gallium/winsys/r600/drm/r600_drm.c
+++ b/src/gallium/winsys/r600/drm/r600_drm.c
@@ -40,6 +40,9 @@
 #ifndef RADEON_INFO_TILING_CONFIG
 #define RADEON_INFO_TILING_CONFIG 0x6
 #endif
+
+static struct radeon *radeon_new(int fd, unsigned device);
+
 static int radeon_get_device(struct radeon *radeon)
 {
struct drm_radeon_info info;
@@ -108,7 +111,7 @@ static int radeon_drm_get_tiling(struct radeon *radeon)
return 0;
 }
 
-struct radeon *radeon_new(int fd, unsigned device)
+static struct radeon *radeon_new(int fd, unsigned device)
 {
struct radeon *radeon;
int r;
@@ -249,14 +252,14 @@ struct radeon *radeon_decref(struct radeon *radeon)
return NULL;
}
 
-if (radeon-cman)
-   radeon-cman-destroy(radeon-cman);
+   if (radeon-cman)
+   radeon-cman-destroy(radeon-cman);
 
-if (radeon-kman)
-   radeon-kman-destroy(radeon-kman);
+   if (radeon-kman)
+   radeon-kman-destroy(radeon-kman);
 
-if (radeon-fd = 0)
-   drmClose(radeon-fd);
+   if (radeon-fd = 0)
+   drmClose(radeon-fd);
 
free(radeon);
return NULL;
diff --git a/src/gallium/winsys/r600/drm/r600_priv.h 
b/src/gallium/winsys/r600/drm/r600_priv.h
index 9fd77b7..193af98 100644
--- a/src/gallium/winsys/r600/drm/r600_priv.h
+++ b/src/gallium/winsys/r600/drm/r600_priv.h
@@ -78,7 +78,7 @@ struct r600_bo {
struct pb_buffer*pb;
unsignedsize;
unsignedtiling_flags;
-   unsignedkernel_pitch;
+   unsignedkernel_pitch;
unsigneddomains;
 };
 
@@ -86,9 +86,6 @@ struct r600_bo {
 /* radeon_pciid.c */
 unsigned radeon_family_from_device(unsigned device);
 
-/* r600_drm.c */
-struct radeon *radeon_decref(struct radeon *radeon);
-
 /* radeon_bo.c */
 struct radeon_bo *radeon_bo(struct radeon *radeon, unsigned handle,
unsigned size, unsigned alignment);
diff --git a/src/gallium/winsys/r600/drm/radeon_pciid.c 
b/src/gallium/winsys/r600/drm/radeon_pciid.c
index 18bddc1..92560a4 100644
--- a/src/gallium/winsys/r600/drm/radeon_pciid.c
+++ b/src/gallium/winsys/r600/drm/radeon_pciid.c
@@ -24,7 +24,7 @@
  *  Jerome Glisse
  */
 #include stdlib.h
-#include r600.h
+#include r600_priv.h
 
 struct pci_id {
unsignedvendor;
@@ -460,80 +460,3 @@ unsigned radeon_family_from_device(unsigned device)
}
return CHIP_UNKNOWN;
 }
-
-int radeon_is_family_compatible(unsigned family1, unsigned family2)
-{
-   switch (family1) {
-   case CHIP_R600:
-   case CHIP_RV610:
-   case CHIP_RV630:
-   case CHIP_RV670:
-   case CHIP_RV620:
-   case CHIP_RV635:
-   case CHIP_RS780:
-   case CHIP_RS880:
-   case CHIP_RV770

Mesa (master): r600g: fix occlusion query on evergreen (avoid lockup)

2010-11-19 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: fab804bdfeb0b8080b7ee52d4d79f0ef0e548d1f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fab804bdfeb0b8080b7ee52d4d79f0ef0e548d1f

Author: Jerome Glisse jgli...@redhat.com
Date:   Fri Nov 19 11:51:37 2010 -0500

r600g: fix occlusion query on evergreen (avoid lockup)

Occlusion query on evergreen need the event index field to be
set otherwise we endup locking up the GPU.

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

---

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

diff --git a/src/gallium/winsys/r600/drm/r600_hw_context.c 
b/src/gallium/winsys/r600/drm/r600_hw_context.c
index b2a1125..b70dffa 100644
--- a/src/gallium/winsys/r600/drm/r600_hw_context.c
+++ b/src/gallium/winsys/r600/drm/r600_hw_context.c
@@ -1279,7 +1279,11 @@ void r600_query_begin(struct r600_context *ctx, struct 
r600_query *query)
 
/* emit begin query */
ctx-pm4[ctx-pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE, 2);
-   ctx-pm4[ctx-pm4_cdwords++] = EVENT_TYPE_ZPASS_DONE;
+   if (ctx-radeon-chip_class == EVERGREEN) {
+   ctx-pm4[ctx-pm4_cdwords++] = EVENT_TYPE_ZPASS_DONE | 
EG_EVENT_INDEX(1);
+   } else {
+   ctx-pm4[ctx-pm4_cdwords++] = EVENT_TYPE_ZPASS_DONE;
+   }
ctx-pm4[ctx-pm4_cdwords++] = query-num_results + 
r600_bo_offset(query-buffer);
ctx-pm4[ctx-pm4_cdwords++] = 0;
ctx-pm4[ctx-pm4_cdwords++] = PKT3(PKT3_NOP, 0);
@@ -1295,7 +1299,11 @@ void r600_query_end(struct r600_context *ctx, struct 
r600_query *query)
 {
/* emit begin query */
ctx-pm4[ctx-pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE, 2);
-   ctx-pm4[ctx-pm4_cdwords++] = EVENT_TYPE_ZPASS_DONE;
+   if (ctx-radeon-chip_class == EVERGREEN) {
+   ctx-pm4[ctx-pm4_cdwords++] = EVENT_TYPE_ZPASS_DONE | 
EG_EVENT_INDEX(1);
+   } else {
+   ctx-pm4[ctx-pm4_cdwords++] = EVENT_TYPE_ZPASS_DONE;
+   }
ctx-pm4[ctx-pm4_cdwords++] = query-num_results + 8 + 
r600_bo_offset(query-buffer);
ctx-pm4[ctx-pm4_cdwords++] = 0;
ctx-pm4[ctx-pm4_cdwords++] = PKT3(PKT3_NOP, 0);
diff --git a/src/gallium/winsys/r600/drm/r600d.h 
b/src/gallium/winsys/r600/drm/r600d.h
index 5ca7456..3c39b3f 100644
--- a/src/gallium/winsys/r600/drm/r600d.h
+++ b/src/gallium/winsys/r600/drm/r600d.h
@@ -94,6 +94,7 @@
 #define EVENT_TYPE_CACHE_FLUSH_AND_INV_TS_EVENT 0x14
 #define EVENT_TYPE_ZPASS_DONE  0x15
 #define EVENT_TYPE_CACHE_FLUSH_AND_INV_EVENT   0x16
+#define EG_EVENT_INDEX(x)   ((x)  8)
 
 #define PKT_TYPE_S(x)   (((x)  0x3)  30)
 #define PKT_TYPE_G(x)   (((x)  30)  0x3)

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


Mesa (master): r600g: add fetch shader capabilities

2010-11-19 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: f609b2ab0342d77a8beca9efb5fbc5b66ff98295
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f609b2ab0342d77a8beca9efb5fbc5b66ff98295

Author: Jerome Glisse jgli...@redhat.com
Date:   Thu Nov 18 14:29:16 2010 -0500

r600g: add fetch shader capabilities

Use fetch shader instead of having fetch instruction in the vertex
shader. Allow to restrict shader update to a smaller part when
vertex buffer input layout changes.

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

---

 src/gallium/drivers/r600/eg_asm.c  |2 +
 src/gallium/drivers/r600/evergreen_state.c |4 +-
 src/gallium/drivers/r600/r600.h|3 +
 src/gallium/drivers/r600/r600_asm.c|   42 +++--
 src/gallium/drivers/r600/r600_asm.h|1 +
 src/gallium/drivers/r600/r600_pipe.h   |1 +
 src/gallium/drivers/r600/r600_shader.c |   48 +--
 src/gallium/drivers/r600/r600_shader.h |1 +
 src/gallium/drivers/r600/r600_state.c  |2 +-
 src/gallium/winsys/r600/drm/evergreen_hw_context.c |   20 
 src/gallium/winsys/r600/drm/r600_hw_context.c  |   13 +
 11 files changed, 125 insertions(+), 12 deletions(-)

diff --git a/src/gallium/drivers/r600/eg_asm.c 
b/src/gallium/drivers/r600/eg_asm.c
index c30f09c..21d66fa 100644
--- a/src/gallium/drivers/r600/eg_asm.c
+++ b/src/gallium/drivers/r600/eg_asm.c
@@ -74,6 +74,8 @@ int eg_bc_cf_build(struct r600_bc *bc, struct r600_bc_cf *cf)
case EG_V_SQ_CF_WORD1_SQ_CF_INST_LOOP_END:
case EG_V_SQ_CF_WORD1_SQ_CF_INST_LOOP_CONTINUE:
case EG_V_SQ_CF_WORD1_SQ_CF_INST_LOOP_BREAK:
+   case EG_V_SQ_CF_WORD1_SQ_CF_INST_CALL_FS:
+   case EG_V_SQ_CF_WORD1_SQ_CF_INST_RETURN:
bc-bytecode[id++] = S_SQ_CF_WORD0_ADDR(cf-cf_addr  1);
bc-bytecode[id++] = S_SQ_CF_WORD1_CF_INST(cf-inst) |
S_SQ_CF_WORD1_BARRIER(1) |
diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 7609025..669eef4 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1289,7 +1289,7 @@ void evergreen_draw(struct pipe_context *ctx, const 
struct pipe_draw_info *info)
r600_pipe_state_add_reg(rstate, R_030014_RESOURCE0_WORD5, 
0x, 0x, NULL);
r600_pipe_state_add_reg(rstate, R_030018_RESOURCE0_WORD6, 
0x, 0x, NULL);
r600_pipe_state_add_reg(rstate, R_03001C_RESOURCE0_WORD7, 
0xC000, 0x, NULL);
-   evergreen_vs_resource_set(rctx-ctx, rstate, i);
+   evergreen_fs_resource_set(rctx-ctx, rstate, i);
}
 
mask = 0;
@@ -1554,7 +1554,7 @@ void evergreen_pipe_shader_vs(struct pipe_context *ctx, 
struct r600_pipe_shader
(r600_bo_offset(shader-bo))  8, 0x, 
shader-bo);
r600_pipe_state_add_reg(rstate,
R_0288A4_SQ_PGM_START_FS,
-   (r600_bo_offset(shader-bo))  8, 0x, 
shader-bo);
+   (r600_bo_offset(shader-bo))  8, 0x, 
shader-bo_fetch);
 
r600_pipe_state_add_reg(rstate,
R_03A200_SQ_LOOP_CONST_0 + (32 * 4), 0x01000FFF,
diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h
index 17858b2..a617a5b 100644
--- a/src/gallium/drivers/r600/r600.h
+++ b/src/gallium/drivers/r600/r600.h
@@ -264,6 +264,7 @@ void r600_context_fini(struct r600_context *ctx);
 void r600_context_pipe_state_set(struct r600_context *ctx, struct 
r600_pipe_state *state);
 void r600_context_pipe_state_set_ps_resource(struct r600_context *ctx, struct 
r600_pipe_state *state, unsigned rid);
 void r600_context_pipe_state_set_vs_resource(struct r600_context *ctx, struct 
r600_pipe_state *state, unsigned rid);
+void r600_context_pipe_state_set_fs_resource(struct r600_context *ctx, struct 
r600_pipe_state *state, unsigned rid);
 void r600_context_pipe_state_set_ps_sampler(struct r600_context *ctx, struct 
r600_pipe_state *state, unsigned id);
 void r600_context_pipe_state_set_vs_sampler(struct r600_context *ctx, struct 
r600_pipe_state *state, unsigned id);
 void r600_context_flush(struct r600_context *ctx);
@@ -284,9 +285,11 @@ int evergreen_context_init(struct r600_context *ctx, 
struct radeon *radeon);
 void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw 
*draw);
 void evergreen_ps_resource_set(struct r600_context *ctx, struct 
r600_pipe_state *state, unsigned rid);
 void evergreen_vs_resource_set(struct r600_context *ctx, struct 
r600_pipe_state *state, unsigned rid);
+void evergreen_fs_resource_set(struct r600_context *ctx, struct 
r600_pipe_state *state, unsigned rid);
 
 void evergreen_context_pipe_state_set_ps_resource(struct r600_context *ctx, 
struct

Mesa (master): r600g: code cleanup (indent, trailing space, empty line ...)

2010-11-17 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 7ffd4e976fd11b8c083c2927effd25a2f79ac841
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7ffd4e976fd11b8c083c2927effd25a2f79ac841

Author: Jerome Glisse jgli...@redhat.com
Date:   Wed Nov 17 17:20:59 2010 -0500

r600g: code cleanup (indent, trailing space, empty line ...)

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

---

 src/gallium/drivers/r600/evergreen_state.c   |6 +-
 src/gallium/drivers/r600/r600_asm.c  |   16 +++---
 src/gallium/drivers/r600/r600_asm.h  |   14 +++---
 src/gallium/drivers/r600/r600_blit.c |7 +--
 src/gallium/drivers/r600/r600_buffer.c   |4 +-
 src/gallium/drivers/r600/r600_pipe.c |4 +-
 src/gallium/drivers/r600/r600_shader.c   |   73 +-
 src/gallium/drivers/r600/r600_state.c|8 ++--
 src/gallium/drivers/r600/r600_state_common.c |   11 ++--
 9 files changed, 70 insertions(+), 73 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 1535b9a..7609025 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -660,7 +660,7 @@ static void evergreen_cb(struct r600_pipe_context *rctx, 
struct r600_pipe_state
S_028C70_COMP_SWAP(swap) |
S_028C70_BLEND_CLAMP(1) |
S_028C70_NUMBER_TYPE(ntype);
-   if (desc-colorspace != UTIL_FORMAT_COLORSPACE_ZS) 
+   if (desc-colorspace != UTIL_FORMAT_COLORSPACE_ZS)
color_info |= S_028C70_SOURCE_FORMAT(1);
 
/* FIXME handle enabling of CB beyond BASE8 which has different offset 
*/
@@ -1467,8 +1467,8 @@ void evergreen_pipe_shader_ps(struct pipe_context *ctx, 
struct r600_pipe_shader
  S_0286E0_PERSP_CENTROID_ENA(have_centroid);
if (have_linear)
spi_baryc_cntl |= S_0286E0_LINEAR_CENTER_ENA(1) |
- S_0286E0_LINEAR_CENTROID_ENA(have_centroid);
-   
+ S_0286E0_LINEAR_CENTROID_ENA(have_centroid);
+
r600_pipe_state_add_reg(rstate, R_0286CC_SPI_PS_IN_CONTROL_0,
spi_ps_in_control_0, 0x, NULL);
r600_pipe_state_add_reg(rstate, R_0286D0_SPI_PS_IN_CONTROL_1,
diff --git a/src/gallium/drivers/r600/r600_asm.c 
b/src/gallium/drivers/r600/r600_asm.c
index 8a7f3ce..eed40d2 100644
--- a/src/gallium/drivers/r600/r600_asm.c
+++ b/src/gallium/drivers/r600/r600_asm.c
@@ -55,8 +55,8 @@ static inline unsigned int r600_bc_get_num_operands(struct 
r600_bc_alu *alu)
case V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_DOT4:
case V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_DOT4_IEEE:
case V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_CUBE:
-   return 2;  
-   
+   return 2;
+
case V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOV: 
case V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOVA_FLOOR:
case V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FRACT:
@@ -74,7 +74,7 @@ static inline unsigned int r600_bc_get_num_operands(struct 
r600_bc_alu *alu)
default: R600_ERR(
Need instruction operand number for 0x%x.\n, alu-inst); 
};
-   
+
return 3;
 }
 
@@ -199,9 +199,9 @@ const unsigned bank_swizzle_vec[8] = {SQ_ALU_VEC_210,  //000
  SQ_ALU_VEC_012}; //111
 
 const unsigned bank_swizzle_scl[8] = {SQ_ALU_SCL_210,  //000
- SQ_ALU_SCL_122,  //001 
+ SQ_ALU_SCL_122,  //001
  SQ_ALU_SCL_122,  //010
- 
+
  SQ_ALU_SCL_221,  //011
  SQ_ALU_SCL_212,  //100
  SQ_ALU_SCL_122,  //101
@@ -678,8 +678,8 @@ static int r600_bc_alu_build(struct r600_bc *bc, struct 
r600_bc_alu *alu, unsign

S_SQ_ALU_WORD1_OP2_WRITE_MASK(alu-dst.write) |
S_SQ_ALU_WORD1_OP2_ALU_INST(alu-inst) |

S_SQ_ALU_WORD1_BANK_SWIZZLE(alu-bank_swizzle) |
-   
S_SQ_ALU_WORD1_OP2_UPDATE_EXECUTE_MASK(alu-predicate) |
-   
S_SQ_ALU_WORD1_OP2_UPDATE_PRED(alu-predicate);
+   
S_SQ_ALU_WORD1_OP2_UPDATE_EXECUTE_MASK(alu-predicate) |
+   
S_SQ_ALU_WORD1_OP2_UPDATE_PRED(alu-predicate);
}
if (alu-last) {
if (alu-nliteral  !alu-literal_added) {
@@ -766,7 +766,7 @@ int r600_bc_build(struct r600_bc *bc)
int r;
 
if (bc-callstack[0].max  0)
-   bc-nstack = ((bc-callstack[0].max + 3)  2) + 2;
+   bc-nstack = ((bc-callstack[0].max + 3)  2) + 2;
 
/* first path compute addr

  1   2   3   >