Mesa (master): r300: remove unnecessary code

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: bbab68ae2db468cc72bf11b901d8e28ab86bd769
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bbab68ae2db468cc72bf11b901d8e28ab86bd769

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Sat Mar  6 13:09:47 2010 +0100

r300: remove unnecessary code

_tnl_UpdateFixedFunctionProgram is already called in r300_draw.c

---

 src/mesa/drivers/dri/r300/r300_state.c |   17 -
 1 files changed, 0 insertions(+), 17 deletions(-)

diff --git a/src/mesa/drivers/dri/r300/r300_state.c 
b/src/mesa/drivers/dri/r300/r300_state.c
index 9d1ff6e..ba4a963 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -1985,23 +1985,6 @@ void r300UpdateShaders(r300ContextPtr rmesa)
if (rmesa-options.hw_tcl_enabled) {
struct r300_vertex_program *vp;
 
-   if (rmesa-radeon.NewGLState) {
-   int i;
-   for (i = _TNL_FIRST_MAT; i = _TNL_LAST_MAT; i++) {
-   rmesa-temp_attrib[i] =
-   TNL_CONTEXT(ctx)-vb.AttribPtr[i];
-   TNL_CONTEXT(ctx)-vb.AttribPtr[i] =
-   rmesa-dummy_attrib[i];
-   }
-
-   _tnl_UpdateFixedFunctionProgram(ctx);
-
-   for (i = _TNL_FIRST_MAT; i = _TNL_LAST_MAT; i++) {
-   TNL_CONTEXT(ctx)-vb.AttribPtr[i] =
-   rmesa-temp_attrib[i];
-   }
-   }
-
vp = r300SelectAndTranslateVertexShader(ctx);
 
r300SwitchFallback(ctx, R300_FALLBACK_VERTEX_PROGRAM, 
vp-error);

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


Mesa (master): r300: no need to flush on context init

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: e2d96b2bf805fef0bfb016be1895a49551e2faa7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e2d96b2bf805fef0bfb016be1895a49551e2faa7

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Sat Mar  6 13:18:11 2010 +0100

r300: no need to flush on context init

---

 src/mesa/drivers/dri/r300/r300_state.c |2 --
 1 files changed, 0 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/r300/r300_state.c 
b/src/mesa/drivers/dri/r300/r300_state.c
index ba4a963..6c2c367 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -1762,8 +1762,6 @@ static void r300ResetHwState(r300ContextPtr r300)
if (RADEON_DEBUG  RADEON_STATE)
fprintf(stderr, %s\n, __FUNCTION__);
 
-   radeon_firevertices(r300-radeon);
-
r300ColorMask(ctx,
  ctx-Color.ColorMask[0][RCOMP],
  ctx-Color.ColorMask[0][GCOMP],

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


Mesa (master): r300: recalculate point size, if point min/max size changes

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: 89ea4022371998467faf26c5e27ab987469b91ef
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=89ea4022371998467faf26c5e27ab987469b91ef

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Sat Mar  6 13:39:13 2010 +0100

r300: recalculate point size, if point min/max size changes

Fixes two wine d3d9 unit tests

---

 src/mesa/drivers/dri/r300/r300_state.c |2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/r300/r300_state.c 
b/src/mesa/drivers/dri/r300/r300_state.c
index 6c2c367..5a056f0 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -794,12 +794,14 @@ static void r300PointParameter(GLcontext * ctx, GLenum 
pname, const GLfloat * pa
R300_STATECHANGE(r300, ga_point_minmax);
r300-hw.ga_point_minmax.cmd[1] = 
~R300_GA_POINT_MINMAX_MIN_MASK;
r300-hw.ga_point_minmax.cmd[1] |= (GLuint)(ctx-Point.MinSize 
* 6.0);
+   r300PointSize(ctx, ctx-Point.Size);
break;
case GL_POINT_SIZE_MAX:
R300_STATECHANGE(r300, ga_point_minmax);
r300-hw.ga_point_minmax.cmd[1] = 
~R300_GA_POINT_MINMAX_MAX_MASK;
r300-hw.ga_point_minmax.cmd[1] |= (GLuint)(ctx-Point.MaxSize 
* 6.0)
 R300_GA_POINT_MINMAX_MAX_SHIFT;
+   r300PointSize(ctx, ctx-Point.Size);
break;
case GL_POINT_DISTANCE_ATTENUATION:
break;

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


Mesa (master): r300: VAP flush is needed only when vertex program or constants are changed

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: 042779dc85191e51db79090613b5cc4498474e23
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=042779dc85191e51db79090613b5cc4498474e23

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Sun Mar  7 12:02:28 2010 +0100

r300: VAP flush is needed only when vertex program or constants are changed

---

 src/mesa/drivers/dri/r300/r300_cmdbuf.c   |   21 +
 src/mesa/drivers/dri/r300/r300_context.h  |1 -
 src/mesa/drivers/dri/r300/r300_state.c|1 -
 src/mesa/drivers/dri/r300/r300_vertprog.c |4 +---
 4 files changed, 2 insertions(+), 25 deletions(-)

diff --git a/src/mesa/drivers/dri/r300/r300_cmdbuf.c 
b/src/mesa/drivers/dri/r300/r300_cmdbuf.c
index 4787baf..6cfa568 100644
--- a/src/mesa/drivers/dri/r300/r300_cmdbuf.c
+++ b/src/mesa/drivers/dri/r300/r300_cmdbuf.c
@@ -90,8 +90,7 @@ void r300_emit_vpu(struct r300_context *r300,
 {
 BATCH_LOCALS(r300-radeon);
 
-BEGIN_BATCH_NO_AUTOSTATE(5 + len);
-OUT_BATCH_REGVAL(R300_VAP_PVS_STATE_FLUSH_REG, 0);
+BEGIN_BATCH_NO_AUTOSTATE(3 + len);
 OUT_BATCH_REGVAL(R300_VAP_PVS_VECTOR_INDX_REG, addr);
 OUT_BATCH(CP_PACKET0(R300_VAP_PVS_UPLOAD_DATA, len-1) | RADEON_ONE_REG_WR);
 OUT_BATCH_TABLE(data, len);
@@ -778,24 +777,6 @@ void r300InitCmdBuf(r300ContextPtr r300)
/* VPU only on TCL */
if (has_tcl) {
int i;
-   if (r300-radeon.radeonScreen-kernel_mm) {
-   ALLOC_STATE(vap_flush, always, 10, 0);
-   /* flush processing vertices */
-   r300-hw.vap_flush.cmd[0] = 
cmdpacket0(r300-radeon.radeonScreen, R300_SC_SCREENDOOR, 1);
-   r300-hw.vap_flush.cmd[1] = 0;
-   r300-hw.vap_flush.cmd[2] = 
cmdpacket0(r300-radeon.radeonScreen, R300_RB3D_DSTCACHE_CTLSTAT, 1);
-   r300-hw.vap_flush.cmd[3] = 
R300_RB3D_DSTCACHE_CTLSTAT_DC_FLUSH_FLUSH_DIRTY_3D;
-   r300-hw.vap_flush.cmd[4] = 
cmdpacket0(r300-radeon.radeonScreen, RADEON_WAIT_UNTIL, 1);
-   r300-hw.vap_flush.cmd[5] = RADEON_WAIT_3D_IDLECLEAN;
-   r300-hw.vap_flush.cmd[6] = 
cmdpacket0(r300-radeon.radeonScreen, R300_SC_SCREENDOOR, 1);
-   r300-hw.vap_flush.cmd[7] = 0xff;
-   r300-hw.vap_flush.cmd[8] = 
cmdpacket0(r300-radeon.radeonScreen, R300_VAP_PVS_STATE_FLUSH_REG, 1);
-   r300-hw.vap_flush.cmd[9] = 0;
-   } else {
-   ALLOC_STATE(vap_flush, never, 10, 0);
-   }
-
-
ALLOC_STATE(vpi, vpu, R300_VPI_CMDSIZE, 0);
r300-hw.vpi.cmd[0] =
cmdvpu(r300-radeon.radeonScreen, R300_PVS_CODE_START, 
0);
diff --git a/src/mesa/drivers/dri/r300/r300_context.h 
b/src/mesa/drivers/dri/r300/r300_context.h
index 78ab43a..df7115e 100644
--- a/src/mesa/drivers/dri/r300/r300_context.h
+++ b/src/mesa/drivers/dri/r300/r300_context.h
@@ -355,7 +355,6 @@ struct r300_hw_state {
struct radeon_state_atom zb_hiz_offset; /* (4F44) */
struct radeon_state_atom zb_hiz_pitch;  /* (4F54) */
 
-   struct radeon_state_atom vap_flush;
struct radeon_state_atom vpi;   /* vp instructions */
struct radeon_state_atom vpp;   /* vp parameters */
struct radeon_state_atom vps;   /* vertex point size (?) */
diff --git a/src/mesa/drivers/dri/r300/r300_state.c 
b/src/mesa/drivers/dri/r300/r300_state.c
index 5a056f0..5979ded 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -366,7 +366,6 @@ static void r300ClipPlane( GLcontext *ctx, GLenum plane, 
const GLfloat *eq )
p = (GLint) plane - (GLint) GL_CLIP_PLANE0;
ip = (GLint *)ctx-Transform._ClipUserPlane[p];
 
-   R300_STATECHANGE( rmesa, vap_flush );
R300_STATECHANGE( rmesa, vpucp[p] );
rmesa-hw.vpucp[p].cmd[R300_VPUCP_X] = ip[0];
rmesa-hw.vpucp[p].cmd[R300_VPUCP_Y] = ip[1];
diff --git a/src/mesa/drivers/dri/r300/r300_vertprog.c 
b/src/mesa/drivers/dri/r300/r300_vertprog.c
index cbe4cb8..129004f 100644
--- a/src/mesa/drivers/dri/r300/r300_vertprog.c
+++ b/src/mesa/drivers/dri/r300/r300_vertprog.c
@@ -342,8 +342,6 @@ static void r300EmitVertexProgram(r300ContextPtr r300, int 
dest, struct r300_ver
 
assert((code-length  0)  (code-length % 4 == 0));
 
-   R300_STATECHANGE( r300, vap_flush );
-
switch ((dest  8)  0xf) {
case 0:
R300_STATECHANGE(r300, vpi);
@@ -381,7 +379,7 @@ void r300SetupVertexProgram(r300ContextPtr rmesa)
((drm_r300_cmd_header_t *) rmesa-hw.vpi.cmd)-vpu.count = 0;
((drm_r300_cmd_header_t *) rmesa-hw.vps.cmd)-vpu.count = 0;
 
-   R300_STATECHANGE(rmesa, vap_flush);
+   R300_STATECHANGE(rmesa, vap_cntl);
R300_STATECHANGE(rmesa, vpp);
param_count = r300VertexProgUpdateParams(ctx, prog, (float 

Mesa (master): radeon: fallback to software in glCopyTexImage if blit isn' t available

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: 9543f7f05f416ef6c1ac160e12e2d7ceed3b32ae
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9543f7f05f416ef6c1ac160e12e2d7ceed3b32ae

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Sat Feb  6 19:37:23 2010 +0100

radeon: fallback to software in glCopyTexImage if blit isn't available

---

 src/mesa/drivers/dri/radeon/radeon_tex_copy.c |4 
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c 
b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
index 89fe991..a4bb03d 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c
@@ -53,6 +53,10 @@ do_copy_texsubimage(GLcontext *ctx,
 unsigned src_width;
 unsigned dst_width;
 
+if (!radeon-vtbl.blit) {
+return GL_FALSE;
+}
+
 if (_mesa_get_format_bits(timg-base.TexFormat, GL_DEPTH_BITS)  0) {
 rrb = radeon_get_depthbuffer(radeon);
 } else {

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


Mesa (master): r300: reset bos when validating buffers during blit

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: c0a0a1933d4c2a7d32284b5e7170e79ac6157043
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c0a0a1933d4c2a7d32284b5e7170e79ac6157043

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Sat Feb  6 18:25:36 2010 +0100

r300: reset bos when validating buffers during blit

---

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

diff --git a/src/mesa/drivers/dri/r300/r300_blit.c 
b/src/mesa/drivers/dri/r300/r300_blit.c
index 2bc761b..f9c085e 100644
--- a/src/mesa/drivers/dri/r300/r300_blit.c
+++ b/src/mesa/drivers/dri/r300/r300_blit.c
@@ -381,6 +381,9 @@ static GLboolean validate_buffers(struct r300_context *r300,
   struct radeon_bo *dst_bo)
 {
 int ret;
+
+radeon_cs_space_reset_bos(r300-radeon.cmdbuf.cs);
+
 ret = radeon_cs_space_check_with_bo(r300-radeon.cmdbuf.cs,
 src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
 if (ret)

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


Mesa (master): r300: allow src and dst BOs to be placed in GTT during blit

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: ea3494b98cc764ead7e96746c0247ebc3a68e629
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ea3494b98cc764ead7e96746c0247ebc3a68e629

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Thu Mar  4 18:35:55 2010 +0100

r300: allow src and dst BOs to be placed in GTT during blit

Fixes some relocation failures

---

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

diff --git a/src/mesa/drivers/dri/r300/r300_blit.c 
b/src/mesa/drivers/dri/r300/r300_blit.c
index f9c085e..d870c7f 100644
--- a/src/mesa/drivers/dri/r300/r300_blit.c
+++ b/src/mesa/drivers/dri/r300/r300_blit.c
@@ -385,18 +385,12 @@ static GLboolean validate_buffers(struct r300_context 
*r300,
 radeon_cs_space_reset_bos(r300-radeon.cmdbuf.cs);
 
 ret = radeon_cs_space_check_with_bo(r300-radeon.cmdbuf.cs,
-src_bo, RADEON_GEM_DOMAIN_VRAM, 0);
+src_bo, RADEON_GEM_DOMAIN_VRAM | 
RADEON_GEM_DOMAIN_GTT, 0);
 if (ret)
 return GL_FALSE;
 
 ret = radeon_cs_space_check_with_bo(r300-radeon.cmdbuf.cs,
-dst_bo, 0, RADEON_GEM_DOMAIN_VRAM);
-if (ret)
-return GL_FALSE;
-
-ret = radeon_cs_space_check_with_bo(r300-radeon.cmdbuf.cs,
-
first_elem(r300-radeon.dma.reserved)-bo,
-RADEON_GEM_DOMAIN_GTT, 0);
+dst_bo, 0, RADEON_GEM_DOMAIN_VRAM | 
RADEON_GEM_DOMAIN_GTT);
 if (ret)
 return GL_FALSE;
 

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


Mesa (master): radeon: no need to emit full state twice after flush

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: 78eb4a2ea569a7bd624bbf83ece5c9acef82a8de
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=78eb4a2ea569a7bd624bbf83ece5c9acef82a8de

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Sat Jan 16 15:11:37 2010 +0100

radeon: no need to emit full state twice after flush

---

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

diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c 
b/src/mesa/drivers/dri/radeon/radeon_common.c
index 79f3ff7..13f1f06 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common.c
+++ b/src/mesa/drivers/dri/radeon/radeon_common.c
@@ -1325,11 +1325,6 @@ void rcommonBeginBatch(radeonContextPtr rmesa, int n,
   const char *function,
   int line)
 {
-   if (!rmesa-cmdbuf.cs-cdw  dostate) {
-   radeon_print(RADEON_STATE, RADEON_NORMAL,
-   Reemit state after flush (from %s)\n, 
function);
-   radeonEmitState(rmesa);
-   }
radeon_cs_begin(rmesa-cmdbuf.cs, n, file, function, line);
 
 radeon_print(RADEON_CS, RADEON_VERBOSE, BEGIN_BATCH(%d) at %d, from 
%s:%i\n,

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


Mesa (master): r300: don't enable EXT_packed_depth_stencil

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: 9c0c6c26decfa533ad3fe39f83e7530d4cfc8c2f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9c0c6c26decfa533ad3fe39f83e7530d4cfc8c2f

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Sun Feb 14 00:02:05 2010 +0100

r300: don't enable EXT_packed_depth_stencil

R300 hw doesn't support sampling from Z24_S8 or S8_Z24 formats.

---

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

diff --git a/src/mesa/drivers/dri/r300/r300_context.c 
b/src/mesa/drivers/dri/r300/r300_context.c
index df4cc11..ff35cd5 100644
--- a/src/mesa/drivers/dri/r300/r300_context.c
+++ b/src/mesa/drivers/dri/r300/r300_context.c
@@ -109,7 +109,6 @@ static const struct dri_extension card_extensions[] = {
   {GL_EXT_blend_func_separate,   GL_EXT_blend_func_separate_functions},
   {GL_EXT_blend_minmax,  GL_EXT_blend_minmax_functions},
   {GL_EXT_blend_subtract,NULL},
-  {GL_EXT_packed_depth_stencil,  NULL},
   {GL_EXT_fog_coord, GL_EXT_fog_coord_functions },
   {GL_EXT_gpu_program_parameters, 
GL_EXT_gpu_program_parameters_functions},
   {GL_EXT_provoking_vertex,   GL_EXT_provoking_vertex_functions },
@@ -456,6 +455,9 @@ static void r300InitGLExtensions(GLcontext *ctx)
}
if (r300-radeon.radeonScreen-chip_family = CHIP_FAMILY_RV350)
_mesa_enable_extension(ctx, GL_ARB_half_float_vertex);
+
+   if (r300-radeon.radeonScreen-chip_family = CHIP_FAMILY_RV515)
+   _mesa_enable_extension(ctx, GL_EXT_packed_depth_stencil);
 }
 
 static void r300InitIoctlFuncs(struct dd_function_table *functions)

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


Mesa (master): radeon: add tile size getter

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: 65faa27aa639e7352708a30105db3318f22f5f93
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=65faa27aa639e7352708a30105db3318f22f5f93

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Sat Jan 16 23:11:10 2010 +0100

radeon: add tile size getter

---

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

diff --git a/src/mesa/drivers/dri/radeon/radeon_tile.c 
b/src/mesa/drivers/dri/radeon/radeon_tile.c
index 56f2fc4..b998baf 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tile.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tile.c
@@ -243,4 +243,42 @@ void tile_image(const void * src, unsigned src_pitch,
 assert(0);
 break;
 }
-}
\ No newline at end of file
+}
+
+void get_tile_size(gl_format format, unsigned *block_width, unsigned 
*block_height)
+{
+switch (_mesa_get_format_bytes(format))
+{
+case 16:
+*block_width = 1;
+*block_height = 1;
+break;
+case 8:
+*block_width = 2;
+*block_height = 2;
+break;
+case 4:
+*block_width = 4;
+*block_height = 2;
+break;
+case 2:
+if (_mesa_get_format_bits(format, GL_DEPTH_BITS))
+{
+*block_width = 4;
+*block_height = 4;
+}
+else
+{
+*block_width = 8;
+*block_height = 2;
+}
+break;
+case 1:
+*block_width = 8;
+*block_height = 4;
+break;
+default:
+assert(0);
+break;
+}
+}
diff --git a/src/mesa/drivers/dri/radeon/radeon_tile.h 
b/src/mesa/drivers/dri/radeon/radeon_tile.h
index 4985e55..06850b3 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tile.h
+++ b/src/mesa/drivers/dri/radeon/radeon_tile.h
@@ -30,3 +30,5 @@
 void tile_image(const void * src, unsigned src_pitch,
 void *dst, unsigned dst_pitch,
 gl_format format, unsigned width, unsigned height);
+
+void get_tile_size(gl_format format, unsigned *block_width, unsigned 
*block_height);

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


Mesa (master): radeon: add software untiling functions

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: 5fefca5dbae9a5b00a3d624da0b5e582c00ad280
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5fefca5dbae9a5b00a3d624da0b5e582c00ad280

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Sat Feb  6 13:46:17 2010 +0100

radeon: add software untiling functions

---

 src/mesa/drivers/dri/radeon/radeon_tile.c |  221 +
 src/mesa/drivers/dri/radeon/radeon_tile.h |4 +
 2 files changed, 225 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_tile.c 
b/src/mesa/drivers/dri/radeon/radeon_tile.c
index b998baf..1e4729a 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tile.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tile.c
@@ -245,6 +245,227 @@ void tile_image(const void * src, unsigned src_pitch,
 }
 }
 
+static void micro_untile_8_x_4_8bit(const void * const src, unsigned src_pitch,
+void * const dst, unsigned dst_pitch,
+unsigned width, unsigned height)
+{
+unsigned row; /* current destination row */
+unsigned col; /* current destination column */
+unsigned k; /* current tile number */
+const unsigned tile_width = 8, tile_height = 4;
+const unsigned tiles_in_row = (width + (tile_width - 1)) / tile_width;
+
+assert(src_pitch % tile_width == 0);
+
+k = 0;
+for (row = 0; row  height; row += tile_height)
+{
+for (col = 0; col  width; col += tile_width, ++k)
+{
+uint8_t *src2 = (uint8_t *)src + row * src_pitch +
+ (k % tiles_in_row) * MICRO_TILE_SIZE / 
sizeof(uint8_t);
+uint8_t *dst2 = (uint8_t *)dst + dst_pitch * row + col;
+unsigned j;
+
+for (j = 0; j  MIN2(tile_height, height - row); ++j)
+{
+unsigned columns = MIN2(tile_width, width - col);
+memcpy(dst2, src2, columns * sizeof(uint8_t));
+dst2 += dst_pitch;
+src2 += tile_width;
+}
+}
+}
+}
+
+static void micro_untile_8_x_2_16bit(const void * const src, unsigned 
src_pitch,
+ void * const dst, unsigned dst_pitch,
+ unsigned width, unsigned height)
+{
+unsigned row; /* current destination row */
+unsigned col; /* current destination column */
+unsigned k; /* current tile number */
+const unsigned tile_width = 8, tile_height = 2;
+const unsigned tiles_in_row = (width + (tile_width - 1)) / tile_width;
+
+assert(src_pitch % tile_width == 0);
+
+k = 0;
+for (row = 0; row  height; row += tile_height)
+{
+for (col = 0; col  width; col += tile_width, ++k)
+{
+uint16_t *src2 = (uint16_t *)src + row * src_pitch +
+ (k % tiles_in_row) * MICRO_TILE_SIZE / 
sizeof(uint16_t);
+uint16_t *dst2 = (uint16_t *)dst + dst_pitch * row + col;
+unsigned j;
+
+for (j = 0; j  MIN2(tile_height, height - row); ++j)
+{
+unsigned columns = MIN2(tile_width, width - col);
+memcpy(dst2, src2, columns * sizeof(uint16_t));
+dst2 += dst_pitch;
+src2 += tile_width;
+}
+}
+}
+}
+
+static void micro_untile_4_x_4_16bit(const void * const src, unsigned 
src_pitch,
+ void * const dst, unsigned dst_pitch,
+ unsigned width, unsigned height)
+{
+unsigned row; /* current destination row */
+unsigned col; /* current destination column */
+unsigned k; /* current tile number */
+const unsigned tile_width = 4, tile_height = 4;
+const unsigned tiles_in_row = (width + (tile_width - 1)) / tile_width;
+
+assert(src_pitch % tile_width == 0);
+
+k = 0;
+for (row = 0; row  height; row += tile_height)
+{
+for (col = 0; col  width; col += tile_width, ++k)
+{
+uint16_t *src2 = (uint16_t *)src + row * src_pitch +
+ (k % tiles_in_row) * MICRO_TILE_SIZE / 
sizeof(uint16_t);
+uint16_t *dst2 = (uint16_t *)dst + dst_pitch * row + col;
+unsigned j;
+
+for (j = 0; j  MIN2(tile_height, height - row); ++j)
+{
+unsigned columns = MIN2(tile_width, width - col);
+memcpy(dst2, src2, columns * sizeof(uint16_t));
+dst2 += dst_pitch;
+src2 += tile_width;
+}
+}
+}
+}
+
+static void micro_untile_4_x_2_32bit(const void * const src, unsigned 
src_pitch,
+ void * const dst, unsigned dst_pitch,
+ unsigned width, unsigned height)
+{
+unsigned row; /* current destination row */
+unsigned col; /* current destination column */
+unsigned k; /* current tile number */
+const unsigned 

Mesa (master): radeon: add some debugging info to sw tiling/ untiling functions

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: 8014b5f06853a5926ee772af232abdc9cd4e90c4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8014b5f06853a5926ee772af232abdc9cd4e90c4

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Sat Feb  6 18:38:01 2010 +0100

radeon: add some debugging info to sw tiling/untiling functions

---

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

diff --git a/src/mesa/drivers/dri/radeon/radeon_tile.c 
b/src/mesa/drivers/dri/radeon/radeon_tile.c
index 1e4729a..935fa45 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tile.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tile.c
@@ -30,7 +30,8 @@
 #include stdint.h
 #include string.h
 
-#include main/macros.h
+#include main/macros.h
+#include radeon_debug.h
 
 #define MICRO_TILE_SIZE 32
 
@@ -215,6 +216,10 @@ void tile_image(const void * src, unsigned src_pitch,
 assert(dst_pitch = width);
 assert(dst_pitch * _mesa_get_format_bytes(format) % MICRO_TILE_SIZE == 0);
 
+radeon_print(RADEON_TEXTURE, RADEON_TRACE,
+ Software tiling: src_pitch %d, dst_pitch %d, width %d, 
height %d, bpp %d\n,
+ src_pitch, dst_pitch, width, height, 
_mesa_get_format_bytes(format));
+
 switch (_mesa_get_format_bytes(format))
 {
 case 16:
@@ -436,6 +441,10 @@ void untile_image(const void * src, unsigned src_pitch,
 assert(dst_pitch = width);
 assert(src_pitch * _mesa_get_format_bytes(format) % MICRO_TILE_SIZE == 0);
 
+radeon_print(RADEON_TEXTURE, RADEON_TRACE,
+ Software untiling: src_pitch %d, dst_pitch %d, width %d, 
height %d, bpp %d\n,
+ src_pitch, dst_pitch, width, height, 
_mesa_get_format_bytes(format));
+
 switch (_mesa_get_format_bytes(format))
 {
 case 16:

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


Mesa (master): radeon: add texture helper function

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: b078a613bedb76242af177bee12520203bd63d50
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b078a613bedb76242af177bee12520203bd63d50

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Sat Jan  9 20:36:47 2010 +0100

radeon: add texture helper function

---

 src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c |   26 ++
 src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h |3 ++
 2 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c 
b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
index cd843d9..117d695 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
@@ -81,6 +81,32 @@ static unsigned get_compressed_image_size(
return rowStride * ((height + blockHeight - 1) / blockHeight);
 }
 
+static unsigned is_pot(unsigned value)
+{
+   unsigned m;
+
+   for (m = 1; m  value; m *= 2) {}
+
+   return value == m;
+}
+
+unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format 
format, unsigned width)
+{
+   if (_mesa_is_format_compressed(format)) {
+   return get_aligned_compressed_row_stride(format, width, 
rmesa-texture_compressed_row_align);
+   } else {
+   unsigned row_align;
+
+   if (is_pot(width)) {
+   row_align = rmesa-texture_row_align - 1;
+   } else {
+   row_align = rmesa-texture_rect_row_align - 1;
+   }
+
+   return (_mesa_format_row_stride(format, width) + row_align)  
~row_align;
+   }
+}
+
 /**
  * Compute sizes and fill in offset and blit information for the given
  * image (determined by \p face and \p level).
diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h 
b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h
index c911688..424bf51 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h
@@ -89,4 +89,7 @@ void radeon_try_alloc_miptree(radeonContextPtr rmesa, 
radeonTexObj *t);
 GLuint radeon_miptree_image_offset(radeon_mipmap_tree *mt,
   GLuint face, GLuint level);
 uint32_t get_base_teximage_offset(radeonTexObj *texObj);
+
+unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format 
format, unsigned width);
+
 #endif /* __RADEON_MIPMAP_TREE_H_ */

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


Mesa (master): radeon: added tiling functions

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: 88a99bb305186fd0eaaae9bd0dbfa4c45f14cac7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=88a99bb305186fd0eaaae9bd0dbfa4c45f14cac7

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Sat Jan 16 18:38:17 2010 +0100

radeon: added tiling functions

---

 src/mesa/drivers/dri/r200/Makefile|3 +-
 src/mesa/drivers/dri/r200/radeon_tile.c   |1 +
 src/mesa/drivers/dri/r200/radeon_tile.h   |1 +
 src/mesa/drivers/dri/r300/Makefile|3 +-
 src/mesa/drivers/dri/r300/radeon_tile.c   |1 +
 src/mesa/drivers/dri/r300/radeon_tile.h   |1 +
 src/mesa/drivers/dri/r600/Makefile|3 +-
 src/mesa/drivers/dri/r600/radeon_tile.c   |1 +
 src/mesa/drivers/dri/r600/radeon_tile.h   |1 +
 src/mesa/drivers/dri/radeon/Makefile  |3 +-
 src/mesa/drivers/dri/radeon/radeon_tile.c |  246 +
 src/mesa/drivers/dri/radeon/radeon_tile.h |   32 
 12 files changed, 292 insertions(+), 4 deletions(-)

diff --git a/src/mesa/drivers/dri/r200/Makefile 
b/src/mesa/drivers/dri/r200/Makefile
index 2e86e8b..d91e548 100644
--- a/src/mesa/drivers/dri/r200/Makefile
+++ b/src/mesa/drivers/dri/r200/Makefile
@@ -24,7 +24,8 @@ RADEON_COMMON_SOURCES = \
radeon_queryobj.c \
radeon_span.c \
radeon_texture.c \
-   radeon_tex_copy.c
+   radeon_tex_copy.c \
+   radeon_tile.c
 
 DRIVER_SOURCES = r200_context.c \
 r200_ioctl.c \
diff --git a/src/mesa/drivers/dri/r200/radeon_tile.c 
b/src/mesa/drivers/dri/r200/radeon_tile.c
new file mode 12
index 000..d4bfe27
--- /dev/null
+++ b/src/mesa/drivers/dri/r200/radeon_tile.c
@@ -0,0 +1 @@
+../radeon/radeon_tile.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/r200/radeon_tile.h 
b/src/mesa/drivers/dri/r200/radeon_tile.h
new file mode 12
index 000..31074c5
--- /dev/null
+++ b/src/mesa/drivers/dri/r200/radeon_tile.h
@@ -0,0 +1 @@
+../radeon/radeon_tile.h
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/r300/Makefile 
b/src/mesa/drivers/dri/r300/Makefile
index 08934fc..730d801 100644
--- a/src/mesa/drivers/dri/r300/Makefile
+++ b/src/mesa/drivers/dri/r300/Makefile
@@ -34,7 +34,8 @@ RADEON_COMMON_SOURCES = \
radeon_span.c \
radeon_queryobj.c \
radeon_texture.c \
-   radeon_tex_copy.c
+   radeon_tex_copy.c \
+   radeon_tile.c
 
 DRIVER_SOURCES = \
 radeon_screen.c \
diff --git a/src/mesa/drivers/dri/r300/radeon_tile.c 
b/src/mesa/drivers/dri/r300/radeon_tile.c
new file mode 12
index 000..d4bfe27
--- /dev/null
+++ b/src/mesa/drivers/dri/r300/radeon_tile.c
@@ -0,0 +1 @@
+../radeon/radeon_tile.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/r300/radeon_tile.h 
b/src/mesa/drivers/dri/r300/radeon_tile.h
new file mode 12
index 000..31074c5
--- /dev/null
+++ b/src/mesa/drivers/dri/r300/radeon_tile.h
@@ -0,0 +1 @@
+../radeon/radeon_tile.h
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/r600/Makefile 
b/src/mesa/drivers/dri/r600/Makefile
index 2478b12..b6d1c5f 100644
--- a/src/mesa/drivers/dri/r600/Makefile
+++ b/src/mesa/drivers/dri/r600/Makefile
@@ -34,7 +34,8 @@ RADEON_COMMON_SOURCES = \
radeon_span.c \
radeon_texture.c \
radeon_queryobj.c \
-   radeon_tex_copy.c
+   radeon_tex_copy.c \
+   radeon_tile.c
 
 DRIVER_SOURCES = \
 radeon_screen.c \
diff --git a/src/mesa/drivers/dri/r600/radeon_tile.c 
b/src/mesa/drivers/dri/r600/radeon_tile.c
new file mode 12
index 000..d4bfe27
--- /dev/null
+++ b/src/mesa/drivers/dri/r600/radeon_tile.c
@@ -0,0 +1 @@
+../radeon/radeon_tile.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/r600/radeon_tile.h 
b/src/mesa/drivers/dri/r600/radeon_tile.h
new file mode 12
index 000..31074c5
--- /dev/null
+++ b/src/mesa/drivers/dri/r600/radeon_tile.h
@@ -0,0 +1 @@
+../radeon/radeon_tile.h
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/radeon/Makefile 
b/src/mesa/drivers/dri/radeon/Makefile
index fc6d1c8..f7e8059 100644
--- a/src/mesa/drivers/dri/radeon/Makefile
+++ b/src/mesa/drivers/dri/radeon/Makefile
@@ -25,7 +25,8 @@ RADEON_COMMON_SOURCES = \
radeon_queryobj.c \
radeon_span.c \
radeon_texture.c \
-   radeon_tex_copy.c
+   radeon_tex_copy.c \
+   radeon_tile.c
 
 DRIVER_SOURCES = \
radeon_context.c \
diff --git a/src/mesa/drivers/dri/radeon/radeon_tile.c 
b/src/mesa/drivers/dri/radeon/radeon_tile.c
new file mode 100644
index 000..56f2fc4
--- /dev/null
+++ b/src/mesa/drivers/dri/radeon/radeon_tile.c
@@ -0,0 +1,246 @@
+/*
+ * Copyright (C) 2010 Maciej Cencora m.cenc...@gmail.com
+ *
+ * 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 

Mesa (master): radeon: minor refactoring of mipmap code

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: 0d3835475fcb803a295dc738d90b83788bdc9472
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0d3835475fcb803a295dc738d90b83788bdc9472

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Sat Jan 16 23:11:36 2010 +0100

radeon: minor refactoring of mipmap code

---

 src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c |   50 ++
 src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h |6 +++
 2 files changed, 29 insertions(+), 27 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c 
b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
index 117d695..8c1f96e 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
@@ -36,6 +36,7 @@
 #include main/texobj.h
 #include main/enums.h
 #include radeon_texture.h
+#include radeon_tile.h
 
 static unsigned get_aligned_compressed_row_stride(
gl_format format,
@@ -69,16 +70,30 @@ static unsigned get_aligned_compressed_row_stride(
return stride;
 }
 
-static unsigned get_compressed_image_size(
+unsigned get_texture_image_size(
gl_format format,
unsigned rowStride,
-   unsigned height)
+   unsigned height,
+   unsigned depth,
+   unsigned tiling)
 {
-   unsigned blockWidth, blockHeight;
+   if (_mesa_is_format_compressed(format)) {
+   unsigned blockWidth, blockHeight;
 
-   _mesa_get_format_block_size(format, blockWidth, blockHeight);
+   _mesa_get_format_block_size(format, blockWidth, blockHeight);
+
+   return rowStride * ((height + blockHeight - 1) / blockHeight) * 
depth;
+   } else if (tiling) {
+   /* Need to align height to tile height */
+   unsigned tileWidth, tileHeight;
+
+   get_tile_size(format, tileWidth, tileHeight);
+   tileHeight--;
 
-   return rowStride * ((height + blockHeight - 1) / blockHeight);
+   height = (height + tileHeight)  ~tileHeight;
+   }
+
+   return rowStride * height * depth;
 }
 
 static unsigned is_pot(unsigned value)
@@ -118,34 +133,15 @@ static void compute_tex_image_offset(radeonContextPtr 
rmesa, radeon_mipmap_tree
GLuint face, GLuint level, GLuint* curOffset)
 {
radeon_mipmap_level *lvl = mt-levels[level];
-   uint32_t row_align;
GLuint height;
 
height = _mesa_next_pow_two_32(lvl-height);
 
-   /* Find image size in bytes */
-   if (_mesa_is_format_compressed(mt-mesaFormat)) {
-   lvl-rowstride = 
get_aligned_compressed_row_stride(mt-mesaFormat, lvl-width, 
rmesa-texture_compressed_row_align);
-   lvl-size = get_compressed_image_size(mt-mesaFormat, 
lvl-rowstride, height);
-   } else if (mt-target == GL_TEXTURE_RECTANGLE_NV) {
-   row_align = rmesa-texture_rect_row_align - 1;
-   lvl-rowstride = (_mesa_format_row_stride(mt-mesaFormat, 
lvl-width) + row_align)  ~row_align;
-   lvl-size = lvl-rowstride * height;
-   } else if (mt-tilebits  RADEON_TXO_MICRO_TILE) {
-   /* tile pattern is 16 bytes x2. mipmaps stay 32 byte aligned,
-* though the actual offset may be different (if texture is 
less than
-* 32 bytes width) to the untiled case */
-   lvl-rowstride = (_mesa_format_row_stride(mt-mesaFormat, 
lvl-width) * 2 + 31)  ~31;
-   lvl-size = lvl-rowstride * ((height + 1) / 2) * lvl-depth;
-   } else {
-   row_align = rmesa-texture_row_align - 1;
-   lvl-rowstride = (_mesa_format_row_stride(mt-mesaFormat, 
lvl-width) + row_align)  ~row_align;
-   lvl-size = lvl-rowstride * height * lvl-depth;
-   }
+   lvl-rowstride = get_texture_image_row_stride(rmesa, mt-mesaFormat, 
lvl-width);
+   lvl-size = get_texture_image_size(mt-mesaFormat, lvl-rowstride, 
lvl-height, lvl-depth, mt-tilebits);
+
assert(lvl-size  0);
 
-   /* All images are aligned to a 32-byte offset */
-   *curOffset = (*curOffset + 0x1f)  ~0x1f;
lvl-faces[face].offset = *curOffset;
*curOffset += lvl-size;
 
diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h 
b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h
index 424bf51..69103e6 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h
@@ -92,4 +92,10 @@ uint32_t get_base_teximage_offset(radeonTexObj *texObj);
 
 unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format 
format, unsigned width);
 
+unsigned get_texture_image_size(
+   gl_format format,
+   unsigned rowStride,
+   unsigned height,
+   unsigned depth,
+   unsigned tiling);
 #endif /* __RADEON_MIPMAP_TREE_H_ */

___
mesa-commit mailing list

Mesa (master): radeon: properly calculate rowstride for tiled images

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: d0ca5c3100dfe7ee634e3b455002e11e88822ea7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d0ca5c3100dfe7ee634e3b455002e11e88822ea7

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Sun Mar  7 12:09:43 2010 +0100

radeon: properly calculate rowstride for tiled images

---

 src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c |   14 +-
 src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h |2 +-
 src/mesa/drivers/dri/radeon/radeon_texture.c |4 ++--
 src/mesa/drivers/dri/radeon/radeon_tile.c|2 --
 4 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c 
b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
index 8c1f96e..ee91f30 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
@@ -105,17 +105,21 @@ static unsigned is_pot(unsigned value)
return value == m;
 }
 
-unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format 
format, unsigned width)
+unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format 
format, unsigned width, unsigned tiling)
 {
if (_mesa_is_format_compressed(format)) {
return get_aligned_compressed_row_stride(format, width, 
rmesa-texture_compressed_row_align);
} else {
unsigned row_align;
 
-   if (is_pot(width)) {
-   row_align = rmesa-texture_row_align - 1;
-   } else {
+   if (!is_pot(width)) {
row_align = rmesa-texture_rect_row_align - 1;
+   } else if (tiling) {
+   unsigned tileWidth, tileHeight;
+   get_tile_size(format, tileWidth, tileHeight);
+   row_align = tileWidth * _mesa_get_format_bytes(format) 
- 1;
+   } else {
+   row_align = rmesa-texture_row_align - 1;
}
 
return (_mesa_format_row_stride(format, width) + row_align)  
~row_align;
@@ -137,7 +141,7 @@ static void compute_tex_image_offset(radeonContextPtr 
rmesa, radeon_mipmap_tree
 
height = _mesa_next_pow_two_32(lvl-height);
 
-   lvl-rowstride = get_texture_image_row_stride(rmesa, mt-mesaFormat, 
lvl-width);
+   lvl-rowstride = get_texture_image_row_stride(rmesa, mt-mesaFormat, 
lvl-width, mt-tilebits);
lvl-size = get_texture_image_size(mt-mesaFormat, lvl-rowstride, 
lvl-height, lvl-depth, mt-tilebits);
 
assert(lvl-size  0);
diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h 
b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h
index 69103e6..088f970 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h
@@ -90,7 +90,7 @@ GLuint radeon_miptree_image_offset(radeon_mipmap_tree *mt,
   GLuint face, GLuint level);
 uint32_t get_base_teximage_offset(radeonTexObj *texObj);
 
-unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format 
format, unsigned width);
+unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format 
format, unsigned width, unsigned tiling);
 
 unsigned get_texture_image_size(
gl_format format,
diff --git a/src/mesa/drivers/dri/radeon/radeon_texture.c 
b/src/mesa/drivers/dri/radeon/radeon_texture.c
index ff37fd3..62dec2d 100644
--- a/src/mesa/drivers/dri/radeon/radeon_texture.c
+++ b/src/mesa/drivers/dri/radeon/radeon_texture.c
@@ -664,6 +664,7 @@ static void radeon_store_teximage(GLcontext* ctx, int dims,
struct gl_texture_image *texImage,
int compressed)
 {
+   radeonContextPtr rmesa = RADEON_CONTEXT(ctx);
radeonTexObj *t = radeon_tex_obj(texObj);
radeon_texture_image* image = get_radeon_texture_image(texImage);
 
@@ -678,8 +679,7 @@ static void radeon_store_teximage(GLcontext* ctx, int dims,
dstRowStride = image-mt-levels[image-mtlevel].rowstride;
} else if (t-bo) {
/* TFP case */
-   /* TODO */
-   assert(0);
+   dstRowStride = get_texture_image_row_stride(rmesa, 
texImage-TexFormat, width, 0);
} else {
dstRowStride = _mesa_format_row_stride(texImage-TexFormat, 
texImage-Width);
}
diff --git a/src/mesa/drivers/dri/radeon/radeon_tile.c 
b/src/mesa/drivers/dri/radeon/radeon_tile.c
index 935fa45..403da11 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tile.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tile.c
@@ -214,7 +214,6 @@ void tile_image(const void * src, unsigned src_pitch,
 {
 assert(src_pitch = width);
 assert(dst_pitch = width);
-assert(dst_pitch * _mesa_get_format_bytes(format) % MICRO_TILE_SIZE == 0);
 
 radeon_print(RADEON_TEXTURE, RADEON_TRACE,
  Software tiling: src_pitch %d, dst_pitch %d, width %d, 
height %d, bpp %d\n,
@@ -439,7 +438,6 @@ void 

Mesa (master): radeon: move glGetTexImage handlers to seperate file

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: ccbe3f0314c8278c55e1046a619969ae539564de
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ccbe3f0314c8278c55e1046a619969ae539564de

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Sun Jan 17 12:47:46 2010 +0100

radeon: move glGetTexImage handlers to seperate file

---

 src/mesa/drivers/dri/r200/Makefile|1 +
 src/mesa/drivers/dri/r200/radeon_tex_getimage.c   |1 +
 src/mesa/drivers/dri/r300/Makefile|1 +
 src/mesa/drivers/dri/r300/radeon_tex_getimage.c   |1 +
 src/mesa/drivers/dri/r600/Makefile|1 +
 src/mesa/drivers/dri/r600/radeon_tex_getimage.c   |1 +
 src/mesa/drivers/dri/radeon/Makefile  |1 +
 src/mesa/drivers/dri/radeon/radeon_tex_getimage.c |   95 +
 src/mesa/drivers/dri/radeon/radeon_texture.c  |   60 -
 9 files changed, 102 insertions(+), 60 deletions(-)

diff --git a/src/mesa/drivers/dri/r200/Makefile 
b/src/mesa/drivers/dri/r200/Makefile
index d91e548..3f87100 100644
--- a/src/mesa/drivers/dri/r200/Makefile
+++ b/src/mesa/drivers/dri/r200/Makefile
@@ -25,6 +25,7 @@ RADEON_COMMON_SOURCES = \
radeon_span.c \
radeon_texture.c \
radeon_tex_copy.c \
+   radeon_tex_getimage.c \
radeon_tile.c
 
 DRIVER_SOURCES = r200_context.c \
diff --git a/src/mesa/drivers/dri/r200/radeon_tex_getimage.c 
b/src/mesa/drivers/dri/r200/radeon_tex_getimage.c
new file mode 12
index 000..d9836d7
--- /dev/null
+++ b/src/mesa/drivers/dri/r200/radeon_tex_getimage.c
@@ -0,0 +1 @@
+../radeon/radeon_tex_getimage.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/r300/Makefile 
b/src/mesa/drivers/dri/r300/Makefile
index 730d801..4257a32 100644
--- a/src/mesa/drivers/dri/r300/Makefile
+++ b/src/mesa/drivers/dri/r300/Makefile
@@ -35,6 +35,7 @@ RADEON_COMMON_SOURCES = \
radeon_queryobj.c \
radeon_texture.c \
radeon_tex_copy.c \
+   radeon_tex_getimage.c \
radeon_tile.c
 
 DRIVER_SOURCES = \
diff --git a/src/mesa/drivers/dri/r300/radeon_tex_getimage.c 
b/src/mesa/drivers/dri/r300/radeon_tex_getimage.c
new file mode 12
index 000..d9836d7
--- /dev/null
+++ b/src/mesa/drivers/dri/r300/radeon_tex_getimage.c
@@ -0,0 +1 @@
+../radeon/radeon_tex_getimage.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/r600/Makefile 
b/src/mesa/drivers/dri/r600/Makefile
index b6d1c5f..f76859d 100644
--- a/src/mesa/drivers/dri/r600/Makefile
+++ b/src/mesa/drivers/dri/r600/Makefile
@@ -35,6 +35,7 @@ RADEON_COMMON_SOURCES = \
radeon_texture.c \
radeon_queryobj.c \
radeon_tex_copy.c \
+   radeon_tex_getimage.c \
radeon_tile.c
 
 DRIVER_SOURCES = \
diff --git a/src/mesa/drivers/dri/r600/radeon_tex_getimage.c 
b/src/mesa/drivers/dri/r600/radeon_tex_getimage.c
new file mode 12
index 000..d9836d7
--- /dev/null
+++ b/src/mesa/drivers/dri/r600/radeon_tex_getimage.c
@@ -0,0 +1 @@
+../radeon/radeon_tex_getimage.c
\ No newline at end of file
diff --git a/src/mesa/drivers/dri/radeon/Makefile 
b/src/mesa/drivers/dri/radeon/Makefile
index f7e8059..6904ebb 100644
--- a/src/mesa/drivers/dri/radeon/Makefile
+++ b/src/mesa/drivers/dri/radeon/Makefile
@@ -26,6 +26,7 @@ RADEON_COMMON_SOURCES = \
radeon_span.c \
radeon_texture.c \
radeon_tex_copy.c \
+   radeon_tex_getimage.c \
radeon_tile.c
 
 DRIVER_SOURCES = \
diff --git a/src/mesa/drivers/dri/radeon/radeon_tex_getimage.c 
b/src/mesa/drivers/dri/radeon/radeon_tex_getimage.c
new file mode 100644
index 000..7bf6dcc
--- /dev/null
+++ b/src/mesa/drivers/dri/radeon/radeon_tex_getimage.c
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2009 Maciej Cencora.
+ * Copyright (C) 2008 Nicolai Haehnle.
+ * Copyright (C) The Weather Channel, Inc.  2002.  All Rights Reserved.
+ *
+ * The Weather Channel (TM) funded Tungsten Graphics to develop the
+ * initial release of the Radeon 8500 driver under the XFree86 license.
+ * This notice must be preserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * Software), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+ * LIABLE FOR ANY CLAIM, 

Mesa (master): radeon: Some possible improvements that I spoted in radeon_tiled_texture branch.

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: 2b801066a1fcd8a83a367f70736d6adf2043f979
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2b801066a1fcd8a83a367f70736d6adf2043f979

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Sun Mar  7 12:15:25 2010 +0100

radeon: Some possible improvements that I spoted in radeon_tiled_texture branch.

---

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

diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c 
b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
index ee91f30..c6cc417 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
@@ -96,15 +96,6 @@ unsigned get_texture_image_size(
return rowStride * height * depth;
 }
 
-static unsigned is_pot(unsigned value)
-{
-   unsigned m;
-
-   for (m = 1; m  value; m *= 2) {}
-
-   return value == m;
-}
-
 unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format 
format, unsigned width, unsigned tiling)
 {
if (_mesa_is_format_compressed(format)) {
@@ -112,7 +103,7 @@ unsigned get_texture_image_row_stride(radeonContextPtr 
rmesa, gl_format format,
} else {
unsigned row_align;
 
-   if (!is_pot(width)) {
+   if (!_mesa_is_pow_two(width)) {
row_align = rmesa-texture_rect_row_align - 1;
} else if (tiling) {
unsigned tileWidth, tileHeight;

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


Mesa (master): r300g: move r300_transfer to separate files

2010-03-07 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 4012219f1f215cec9406be644b6b9d421bb5d8e4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4012219f1f215cec9406be644b6b9d421bb5d8e4

Author: Marek Olšák mar...@gmail.com
Date:   Sat Feb  6 03:11:50 2010 +0100

r300g: move r300_transfer to separate files

---

 src/gallium/drivers/r300/Makefile|3 +-
 src/gallium/drivers/r300/SConscript  |1 +
 src/gallium/drivers/r300/r300_screen.c   |   74 +-
 src/gallium/drivers/r300/r300_screen.h   |   16 +
 src/gallium/drivers/r300/r300_transfer.c |  101 ++
 src/gallium/drivers/r300/r300_transfer.h |   60 ++
 6 files changed, 171 insertions(+), 84 deletions(-)

diff --git a/src/gallium/drivers/r300/Makefile 
b/src/gallium/drivers/r300/Makefile
index 1f69dae..61b54af 100644
--- a/src/gallium/drivers/r300/Makefile
+++ b/src/gallium/drivers/r300/Makefile
@@ -19,7 +19,8 @@ C_SOURCES = \
r300_state_invariant.c \
r300_vs.c \
r300_texture.c \
-   r300_tgsi_to_rc.c
+   r300_tgsi_to_rc.c \
+   r300_transfer.c
 
 LIBRARY_INCLUDES = \
-I$(TOP)/src/mesa/drivers/dri/r300/compiler \
diff --git a/src/gallium/drivers/r300/SConscript 
b/src/gallium/drivers/r300/SConscript
index 183aa17..27b2e30 100644
--- a/src/gallium/drivers/r300/SConscript
+++ b/src/gallium/drivers/r300/SConscript
@@ -30,6 +30,7 @@ r300 = env.ConvenienceLibrary(
 'r300_vs.c',
 'r300_texture.c',
 'r300_tgsi_to_rc.c',
+'r300_transfer.c',
 ] + r300compiler) + r300compiler
 
 Export('r300')
diff --git a/src/gallium/drivers/r300/r300_screen.c 
b/src/gallium/drivers/r300/r300_screen.c
index d397a8e..a35be05 100644
--- a/src/gallium/drivers/r300/r300_screen.c
+++ b/src/gallium/drivers/r300/r300_screen.c
@@ -1,5 +1,6 @@
 /*
  * Copyright 2008 Corbin Simpson mostawesomed...@gmail.com
+ * Copyright 2010 Marek Olšák mar...@gmail.com
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the Software),
@@ -20,14 +21,13 @@
  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  * USE OR OTHER DEALINGS IN THE SOFTWARE. */
 
-#include util/u_inlines.h
 #include util/u_format.h
 #include util/u_memory.h
 #include util/u_simple_screen.h
 
 #include r300_context.h
-#include r300_screen.h
 #include r300_texture.h
+#include r300_transfer.h
 
 #include radeon_winsys.h
 #include r300_winsys.h
@@ -250,70 +250,6 @@ static boolean r300_is_format_supported(struct 
pipe_screen* screen,
 return retval == usage;
 }
 
-static struct pipe_transfer*
-r300_get_tex_transfer(struct pipe_screen *screen,
-  struct pipe_texture *texture,
-  unsigned face, unsigned level, unsigned zslice,
-  enum pipe_transfer_usage usage, unsigned x, unsigned y,
-  unsigned w, unsigned h)
-{
-struct r300_texture *tex = (struct r300_texture *)texture;
-struct r300_transfer *trans;
-struct r300_screen *rscreen = r300_screen(screen);
-unsigned offset;
-
-offset = r300_texture_get_offset(tex, level, zslice, face);  /* in bytes */
-
-trans = CALLOC_STRUCT(r300_transfer);
-if (trans) {
-pipe_texture_reference(trans-transfer.texture, texture);
-trans-transfer.x = x;
-trans-transfer.y = y;
-trans-transfer.width = w;
-trans-transfer.height = h;
-trans-transfer.stride = r300_texture_get_stride(rscreen, tex, level);
-trans-transfer.usage = usage;
-trans-transfer.zslice = zslice;
-trans-transfer.face = face;
-
-trans-offset = offset;
-}
-return trans-transfer;
-}
-
-static void
-r300_tex_transfer_destroy(struct pipe_transfer *trans)
-{
-   pipe_texture_reference(trans-texture, NULL);
-   FREE(trans);
-}
-
-static void* r300_transfer_map(struct pipe_screen* screen,
-  struct pipe_transfer* transfer)
-{
-struct r300_texture* tex = (struct r300_texture*)transfer-texture;
-char* map;
-enum pipe_format format = tex-tex.format;
-
-map = pipe_buffer_map(screen, tex-buffer,
-  pipe_transfer_buffer_flags(transfer));
-
-if (!map) {
-return NULL;
-}
-
-return map + r300_transfer(transfer)-offset +
-transfer-y / util_format_get_blockheight(format) * transfer-stride +
-transfer-x / util_format_get_blockwidth(format) * 
util_format_get_blocksize(format);
-}
-
-static void r300_transfer_unmap(struct pipe_screen* screen,
-struct pipe_transfer* transfer)
-{
-struct r300_texture* tex = (struct r300_texture*)transfer-texture;
-pipe_buffer_unmap(screen, tex-buffer);
-}
-
 static void r300_destroy_screen(struct pipe_screen* pscreen)
 {
 struct r300_screen* r300screen = r300_screen(pscreen);
@@ -350,13 +286,11 @@ struct pipe_screen* 

Mesa (master): r300g: add ability to tile/ detile textures using blit during transfers

2010-03-07 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 6c7fac846ef99cde5305cf1011b4570bd1901625
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6c7fac846ef99cde5305cf1011b4570bd1901625

Author: Marek Olšák mar...@gmail.com
Date:   Sun Feb 14 03:19:01 2010 +0100

r300g: add ability to tile/detile textures using blit during transfers

---

 src/gallium/drivers/r300/r300_context.c  |2 +
 src/gallium/drivers/r300/r300_screen.h   |6 +
 src/gallium/drivers/r300/r300_texture.c  |5 +-
 src/gallium/drivers/r300/r300_transfer.c |  210 ++
 src/gallium/drivers/r300/r300_transfer.h |   29 
 5 files changed, 197 insertions(+), 55 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_context.c 
b/src/gallium/drivers/r300/r300_context.c
index ec1c586..e43e088 100644
--- a/src/gallium/drivers/r300/r300_context.c
+++ b/src/gallium/drivers/r300/r300_context.c
@@ -159,6 +159,8 @@ struct pipe_context* r300_create_context(struct 
pipe_screen* screen,
 if (!r300)
 return NULL;
 
+r300screen-ctx = (struct pipe_context*)r300;
+
 r300-winsys = radeon_winsys;
 
 r300-context.winsys = (struct pipe_winsys*)radeon_winsys;
diff --git a/src/gallium/drivers/r300/r300_screen.h 
b/src/gallium/drivers/r300/r300_screen.h
index 6d72fec..484bde6 100644
--- a/src/gallium/drivers/r300/r300_screen.h
+++ b/src/gallium/drivers/r300/r300_screen.h
@@ -28,6 +28,8 @@
 
 #include r300_chipset.h
 
+#define R300_TEXTURE_USAGE_TRANSFER PIPE_TEXTURE_USAGE_CUSTOM
+
 struct radeon_winsys;
 
 struct r300_screen {
@@ -36,6 +38,10 @@ struct r300_screen {
 
 struct radeon_winsys* radeon_winsys;
 
+/* XXX This hack will be removed once texture transfers become part of
+ * pipe_context. */
+struct pipe_context* ctx;
+
 /* Chipset capabilities */
 struct r300_capabilities* caps;
 
diff --git a/src/gallium/drivers/r300/r300_texture.c 
b/src/gallium/drivers/r300/r300_texture.c
index c0144f6..04e326e 100644
--- a/src/gallium/drivers/r300/r300_texture.c
+++ b/src/gallium/drivers/r300/r300_texture.c
@@ -725,9 +725,8 @@ static void r300_setup_flags(struct r300_texture* tex)
 }
 
 /* Create a new texture. */
-static struct pipe_texture*
-r300_texture_create(struct pipe_screen* screen,
-const struct pipe_texture* template)
+static struct pipe_texture* r300_texture_create(struct pipe_screen* screen,
+ const struct pipe_texture* template)
 {
 struct r300_texture* tex = CALLOC_STRUCT(r300_texture);
 struct r300_screen* rscreen = r300_screen(screen);
diff --git a/src/gallium/drivers/r300/r300_transfer.c 
b/src/gallium/drivers/r300/r300_transfer.c
index fa48688..56a6976 100644
--- a/src/gallium/drivers/r300/r300_transfer.c
+++ b/src/gallium/drivers/r300/r300_transfer.c
@@ -29,6 +29,89 @@
 #include util/u_memory.h
 #include util/u_format.h
 
+struct r300_transfer {
+/* Parent class */
+struct pipe_transfer transfer;
+
+/* Pipe context. */
+struct pipe_context *ctx;
+
+/* Parameters of get_tex_transfer. */
+unsigned x, y, level, zslice, face;
+
+/* Offset from start of buffer. */
+unsigned offset;
+
+/* Detiled texture. */
+struct r300_texture *detiled_texture;
+
+/* Transfer and format flags. */
+unsigned buffer_usage, render_target_usage;
+};
+
+/* Convenience cast wrapper. */
+static INLINE struct r300_transfer*
+r300_transfer(struct pipe_transfer* transfer)
+{
+return (struct r300_transfer*)transfer;
+}
+
+/* Copy from a tiled texture to a detiled one. */
+static void r300_copy_from_tiled_texture(struct pipe_context *ctx,
+ struct r300_transfer *r300transfer)
+{
+struct pipe_screen *screen = ctx-screen;
+struct pipe_transfer *transfer = (struct pipe_transfer*)r300transfer;
+struct pipe_texture *tex = transfer-texture;
+struct pipe_surface *src, *dst;
+
+src = screen-get_tex_surface(screen, tex, r300transfer-face,
+  r300transfer-level, r300transfer-zslice,
+  PIPE_BUFFER_USAGE_GPU_READ |
+  PIPE_BUFFER_USAGE_PIXEL);
+
+dst = screen-get_tex_surface(screen, r300transfer-detiled_texture-tex,
+  0, 0, 0,
+  PIPE_BUFFER_USAGE_GPU_WRITE |
+  PIPE_BUFFER_USAGE_PIXEL |
+  r300transfer-buffer_usage);
+
+ctx-surface_copy(ctx, dst, 0, 0, src, r300transfer-x, r300transfer-y,
+  transfer-width, transfer-height);
+
+pipe_surface_reference(src, NULL);
+pipe_surface_reference(dst, NULL);
+}
+
+/* Copy a detiled texture to a tiled one. */
+static void r300_copy_into_tiled_texture(struct pipe_context *ctx,
+ struct r300_transfer *r300transfer)
+{
+struct pipe_screen *screen = ctx-screen;
+struct pipe_transfer *transfer = 

Mesa (master): r300g: enable micro- and macrotiling for all textures and renderbuffers

2010-03-07 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: b37d63337596aabc543ea7ecfa82f0f9fdbade69
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b37d63337596aabc543ea7ecfa82f0f9fdbade69

Author: Marek Olšák mar...@gmail.com
Date:   Sun Feb 14 04:57:09 2010 +0100

r300g: enable micro- and macrotiling for all textures and renderbuffers

---

 src/gallium/drivers/r300/r300_texture.c |   39 +++
 1 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_texture.c 
b/src/gallium/drivers/r300/r300_texture.c
index 04e326e..0736155 100644
--- a/src/gallium/drivers/r300/r300_texture.c
+++ b/src/gallium/drivers/r300/r300_texture.c
@@ -724,6 +724,42 @@ static void r300_setup_flags(struct r300_texture* tex)
!util_is_power_of_two(tex-tex.height0);
 }
 
+static void r300_setup_tiling(struct pipe_screen *screen,
+  struct r300_texture *tex)
+{
+enum pipe_format format = tex-tex.format;
+boolean rv350_mode = r300_screen(screen)-caps-family = 
CHIP_FAMILY_RV350;
+
+if (util_format_is_compressed(format)) {
+return;
+}
+
+if (tex-tex.width0 == 1 ||
+tex-tex.height0 == 1) {
+return;
+}
+
+/* Set microtiling. */
+switch (util_format_get_blocksize(format)) {
+case 1:
+case 4:
+tex-microtile = R300_BUFFER_TILED;
+break;
+
+/* XXX Square-tiling doesn't work with kernel older than 2.6.34,
+ * XXX need to check the DRM version */
+/*case 2:
+case 8:
+tex-microtile = R300_BUFFER_SQUARETILED;
+break;*/
+}
+
+/* Set macrotiling. */
+if (r300_texture_macro_switch(tex, 0, rv350_mode)) {
+tex-macrotile = R300_BUFFER_TILED;
+}
+}
+
 /* Create a new texture. */
 static struct pipe_texture* r300_texture_create(struct pipe_screen* screen,
  const struct pipe_texture* template)
@@ -741,6 +777,9 @@ static struct pipe_texture* r300_texture_create(struct 
pipe_screen* screen,
 tex-tex.screen = screen;
 
 r300_setup_flags(tex);
+if (!(template-tex_usage  R300_TEXTURE_USAGE_TRANSFER)) {
+r300_setup_tiling(screen, tex);
+}
 r300_setup_miptree(rscreen, tex);
 r300_setup_texture_state(rscreen, tex);
 

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


Mesa (master): r300g: disable macrotiling when the texture height is smaller than a macrotile

2010-03-07 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 57a1395ec3f8eb01af6cfea3fd6b5903dcc61720
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=57a1395ec3f8eb01af6cfea3fd6b5903dcc61720

Author: Marek Olšák mar...@gmail.com
Date:   Fri Feb 19 03:02:34 2010 +0100

r300g: disable macrotiling when the texture height is smaller than a macrotile

Otherwise incorrect rendering occurs (no idea why).

---

 src/gallium/drivers/r300/r300_texture.c |   27 +--
 1 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_texture.c 
b/src/gallium/drivers/r300/r300_texture.c
index 0736155..c0da339 100644
--- a/src/gallium/drivers/r300/r300_texture.c
+++ b/src/gallium/drivers/r300/r300_texture.c
@@ -617,18 +617,23 @@ static unsigned r300_texture_get_tile_size(struct 
r300_texture* tex,
 /* Return true if macrotiling should be enabled on the miplevel. */
 static boolean r300_texture_macro_switch(struct r300_texture *tex,
  unsigned level,
- boolean rv350_mode)
+ boolean rv350_mode,
+ int dim)
 {
-unsigned tile_width, width;
+unsigned tile, texdim;
 
-tile_width = r300_texture_get_tile_size(tex, TILE_WIDTH, TRUE);
-width = u_minify(tex-tex.width0, level);
+tile = r300_texture_get_tile_size(tex, dim, TRUE);
+if (dim == TILE_WIDTH) {
+texdim = u_minify(tex-tex.width0, level);
+} else {
+texdim = u_minify(tex-tex.height0, level);
+}
 
 /* See TX_FILTER1_n.MACRO_SWITCH. */
 if (rv350_mode) {
-return width = tile_width;
+return texdim = tile;
 } else {
-return width  tile_width;
+return texdim  tile;
 }
 }
 
@@ -692,9 +697,10 @@ static void r300_setup_miptree(struct r300_screen* screen,
 
 for (i = 0; i = base-last_level; i++) {
 /* Let's see if this miplevel can be macrotiled. */
-tex-mip_macrotile[i] = (tex-macrotile == R300_BUFFER_TILED 
- r300_texture_macro_switch(tex, i, 
rv350_mode)) ?
- R300_BUFFER_TILED : R300_BUFFER_LINEAR;
+tex-mip_macrotile[i] =
+(tex-macrotile == R300_BUFFER_TILED 
+ r300_texture_macro_switch(tex, i, rv350_mode, TILE_WIDTH)) ?
+ R300_BUFFER_TILED : R300_BUFFER_LINEAR;
 
 stride = r300_texture_get_stride(screen, tex, i);
 nblocksy = r300_texture_get_nblocksy(tex, i);
@@ -755,7 +761,8 @@ static void r300_setup_tiling(struct pipe_screen *screen,
 }
 
 /* Set macrotiling. */
-if (r300_texture_macro_switch(tex, 0, rv350_mode)) {
+if (r300_texture_macro_switch(tex, 0, rv350_mode, TILE_WIDTH) 
+r300_texture_macro_switch(tex, 0, rv350_mode, TILE_HEIGHT)) {
 tex-macrotile = R300_BUFFER_TILED;
 }
 }

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


Mesa (master): r300g: fix DRM errors

2010-03-07 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 6b39abb63acba34f0f4f017f06b0c90da79e6e70
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6b39abb63acba34f0f4f017f06b0c90da79e6e70

Author: Marek Olšák mar...@gmail.com
Date:   Tue Feb 23 01:14:44 2010 +0100

r300g: fix DRM errors

---

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

diff --git a/src/gallium/drivers/r300/r300_transfer.c 
b/src/gallium/drivers/r300/r300_transfer.c
index 56a6976..ec89681 100644
--- a/src/gallium/drivers/r300/r300_transfer.c
+++ b/src/gallium/drivers/r300/r300_transfer.c
@@ -102,10 +102,15 @@ static void r300_copy_into_tiled_texture(struct 
pipe_context *ctx,
   PIPE_BUFFER_USAGE_GPU_WRITE |
   PIPE_BUFFER_USAGE_PIXEL);
 
+/* XXX this flush prevents the following DRM error from occuring:
+ * [drm:radeon_cs_ioctl] *ERROR* Failed to parse relocation !
+ * Reproducible with perf/copytex. */
+ctx-flush(ctx, 0, NULL);
+
 ctx-surface_copy(ctx, dst, r300transfer-x, r300transfer-y, src, 0, 0,
   transfer-width, transfer-height);
 
-/* XXX this flush fixes lots of regressions, not sure why */
+/* XXX this flush fixes a few piglit tests (e.g. glean/pixelFormats). */
 ctx-flush(ctx, 0, NULL);
 
 pipe_surface_reference(src, NULL);

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


Mesa (master): radeon: handle compressed sRGB texture formats

2010-03-07 Thread Maciej Cencora
Module: Mesa
Branch: master
Commit: ba196a8318af6217fece3777ea038539fea4b415
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ba196a8318af6217fece3777ea038539fea4b415

Author: Maciej Cencora m.cenc...@gmail.com
Date:   Sun Mar  7 15:00:29 2010 +0100

radeon: handle compressed sRGB texture formats

---

 src/mesa/drivers/dri/radeon/radeon_texture.c |9 +
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_texture.c 
b/src/mesa/drivers/dri/radeon/radeon_texture.c
index 6a8e70d..3ccc711 100644
--- a/src/mesa/drivers/dri/radeon/radeon_texture.c
+++ b/src/mesa/drivers/dri/radeon/radeon_texture.c
@@ -558,6 +558,15 @@ gl_format radeonChooseTextureFormat(GLcontext * ctx,
case GL_COMPRESSED_SLUMINANCE_ALPHA:
return MESA_FORMAT_SLA8;
 
+   case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
+   return MESA_FORMAT_SRGB_DXT1;
+   case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
+   return MESA_FORMAT_SRGBA_DXT1;
+   case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
+   return MESA_FORMAT_SRGBA_DXT3;
+   case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
+   return MESA_FORMAT_SRGBA_DXT5;
+
default:
_mesa_problem(ctx,
  unexpected internalFormat 0x%x in %s,

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


Mesa (master): dri/nouveau: Check _ColorDrawBuffers[0] before emitting fb state.

2010-03-07 Thread Francisco Jerez
Module: Mesa
Branch: master
Commit: 5befb6f810fb88ed1e51ec26b79b647cd15b1433
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5befb6f810fb88ed1e51ec26b79b647cd15b1433

Author: Francisco Jerez curroje...@riseup.net
Date:   Sun Mar  7 14:20:31 2010 +0100

dri/nouveau: Check _ColorDrawBuffers[0] before emitting fb state.

---

 src/mesa/drivers/dri/nouveau/nv04_state_fb.c |2 +-
 src/mesa/drivers/dri/nouveau/nv10_state_fb.c |2 +-
 src/mesa/drivers/dri/nouveau/nv20_state_fb.c |2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/nouveau/nv04_state_fb.c 
b/src/mesa/drivers/dri/nouveau/nv04_state_fb.c
index aad1e49..5e5e0c5 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_state_fb.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_state_fb.c
@@ -63,7 +63,7 @@ nv04_emit_framebuffer(GLcontext *ctx, int emit)
return;
 
/* Render target */
-   if (fb-_NumColorDrawBuffers) {
+   if (fb-_ColorDrawBuffers[0]) {
s = to_nouveau_renderbuffer(
fb-_ColorDrawBuffers[0])-surface;
 
diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_fb.c 
b/src/mesa/drivers/dri/nouveau/nv10_state_fb.c
index 05c36b4..6bd383e 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state_fb.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state_fb.c
@@ -111,7 +111,7 @@ nv10_emit_framebuffer(GLcontext *ctx, int emit)
}
 
/* Render target */
-   if (fb-_NumColorDrawBuffers) {
+   if (fb-_ColorDrawBuffers[0]) {
s = to_nouveau_renderbuffer(
fb-_ColorDrawBuffers[0])-surface;
 
diff --git a/src/mesa/drivers/dri/nouveau/nv20_state_fb.c 
b/src/mesa/drivers/dri/nouveau/nv20_state_fb.c
index 869acd6..d638541 100644
--- a/src/mesa/drivers/dri/nouveau/nv20_state_fb.c
+++ b/src/mesa/drivers/dri/nouveau/nv20_state_fb.c
@@ -67,7 +67,7 @@ nv20_emit_framebuffer(GLcontext *ctx, int emit)
return;
 
/* Render target */
-   if (fb-_NumColorDrawBuffers) {
+   if (fb-_ColorDrawBuffers[0]) {
s = to_nouveau_renderbuffer(
fb-_ColorDrawBuffers[0])-surface;
 

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


Mesa (master): dri/nv04: GL_EXT_secondary_color

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

Author: Andrew Randrianasulu rand...@mail.ru
Date:   Sun Mar  7 01:09:21 2010 +

dri/nv04: GL_EXT_secondary_color

Signed-off-by: Francisco Jerez curroje...@riseup.net

---

 src/mesa/drivers/dri/nouveau/nouveau_context.c   |   10 ++
 src/mesa/drivers/dri/nouveau/nv04_state_raster.c |8 
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.c 
b/src/mesa/drivers/dri/nouveau/nouveau_context.c
index e26ed36..502e012 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_context.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_context.c
@@ -43,19 +43,21 @@
 
 #define need_GL_EXT_framebuffer_object
 #define need_GL_EXT_fog_coord
+#define need_GL_EXT_secondary_color
 
 #include main/remap_helper.h
 
 static const struct dri_extension nouveau_extensions[] = {
{ GL_ARB_multitexture,NULL },
+   { GL_ARB_texture_env_add, NULL },
{ GL_ARB_texture_env_combine, NULL },
{ GL_ARB_texture_env_dot3,NULL },
-   { GL_ARB_texture_env_add, NULL },
-   { GL_EXT_texture_lod_bias,NULL },
-   { GL_EXT_framebuffer_object,  GL_EXT_framebuffer_object_functions },
{ GL_ARB_texture_mirrored_repeat, NULL },
-   { GL_EXT_stencil_wrap,NULL },
{ GL_EXT_fog_coord,   GL_EXT_fog_coord_functions },
+   { GL_EXT_framebuffer_object,  GL_EXT_framebuffer_object_functions },
+   { GL_EXT_secondary_color, GL_EXT_secondary_color_functions },
+   { GL_EXT_stencil_wrap,NULL },
+   { GL_EXT_texture_lod_bias,NULL },
{ GL_NV_blend_square, NULL },
{ GL_SGIS_generate_mipmap,NULL },
{ NULL, NULL }
diff --git a/src/mesa/drivers/dri/nouveau/nv04_state_raster.c 
b/src/mesa/drivers/dri/nouveau/nv04_state_raster.c
index 4314fc3..c191571 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_state_raster.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_state_raster.c
@@ -275,6 +275,10 @@ nv04_emit_blend(GLcontext *ctx, int emit)
else
blend |= NV04_MULTITEX_TRIANGLE_BLEND_SHADE_MODE_FLAT;
 
+   /* Secondary color */
+   if (NEED_SECONDARY_COLOR(ctx))
+   blend |= NV04_MULTITEX_TRIANGLE_BLEND_SPECULAR_ENABLE;
+
/* Fog. */
if (ctx-Fog.Enabled)
blend |= NV04_MULTITEX_TRIANGLE_BLEND_FOG_ENABLE;
@@ -309,6 +313,10 @@ nv04_emit_blend(GLcontext *ctx, int emit)
else
blend |= get_texenv_mode(GL_MODULATE);
 
+   /* Secondary color */
+   if (NEED_SECONDARY_COLOR(ctx))
+   blend |= NV04_TEXTURED_TRIANGLE_BLEND_SPECULAR_ENABLE;
+
/* Fog. */
if (ctx-Fog.Enabled)
blend |= NV04_TEXTURED_TRIANGLE_BLEND_FOG_ENABLE;

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


Mesa (master): dri/nouveau: Trivially add GL_NV_blend_square

2010-03-07 Thread Francisco Jerez
Module: Mesa
Branch: master
Commit: e64680bc1e36699096af5ade876b6cb0f5791ad0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e64680bc1e36699096af5ade876b6cb0f5791ad0

Author: Andrew Randrianasulu rand...@mail.ru
Date:   Tue Mar  2 01:29:14 2010 +

dri/nouveau: Trivially add GL_NV_blend_square

Signed-off-by: Francisco Jerez curroje...@riseup.net

---

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

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.c 
b/src/mesa/drivers/dri/nouveau/nouveau_context.c
index 52185a2..e26ed36 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_context.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_context.c
@@ -56,6 +56,7 @@ static const struct dri_extension nouveau_extensions[] = {
{ GL_ARB_texture_mirrored_repeat, NULL },
{ GL_EXT_stencil_wrap,NULL },
{ GL_EXT_fog_coord,   GL_EXT_fog_coord_functions },
+   { GL_NV_blend_square, NULL },
{ GL_SGIS_generate_mipmap,NULL },
{ NULL, NULL }
 };

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


Mesa (master): dri/nouveau: Fix nv[12]x color sum.

2010-03-07 Thread Francisco Jerez
Module: Mesa
Branch: master
Commit: 75f52d1e5210944d7e92787c637285fd83533053
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=75f52d1e5210944d7e92787c637285fd83533053

Author: Francisco Jerez curroje...@riseup.net
Date:   Sun Mar  7 18:40:21 2010 +0100

dri/nouveau: Fix nv[12]x color sum.

---

 src/mesa/drivers/dri/nouveau/nouveau_state.c  |1 +
 src/mesa/drivers/dri/nouveau/nv10_state_tnl.c |6 --
 src/mesa/drivers/dri/nouveau/nv20_state_tnl.c |2 +-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_state.c 
b/src/mesa/drivers/dri/nouveau/nouveau_state.c
index e1871db..bc61045 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_state.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_state.c
@@ -150,6 +150,7 @@ nouveau_enable(GLcontext *ctx, GLenum cap, GLboolean state)
break;
case GL_COLOR_SUM_EXT:
context_dirty(ctx, FRAG);
+   context_dirty(ctx, LIGHT_MODEL);
break;
case GL_CULL_FACE:
context_dirty(ctx, CULL_FACE);
diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_tnl.c 
b/src/mesa/drivers/dri/nouveau/nv10_state_tnl.c
index 6db14d8..406e24c 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state_tnl.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state_tnl.c
@@ -201,8 +201,10 @@ nv10_emit_light_model(GLcontext *ctx, int emit)
BEGIN_RING(chan, celsius, NV10TCL_LIGHT_MODEL, 1);
OUT_RING(chan, ((m-LocalViewer ?
 NV10TCL_LIGHT_MODEL_LOCAL_VIEWER : 0) |
-   (m-ColorControl == GL_SEPARATE_SPECULAR_COLOR ?
-NV10TCL_LIGHT_MODEL_SEPARATE_SPECULAR : 0)));
+   (NEED_SECONDARY_COLOR(ctx) ?
+NV10TCL_LIGHT_MODEL_SEPARATE_SPECULAR : 0) |
+   (!ctx-Light.Enabled  ctx-Fog.ColorSumEnabled ?
+NV10TCL_LIGHT_MODEL_VERTEX_SPECULAR : 0)));
 }
 
 static float
diff --git a/src/mesa/drivers/dri/nouveau/nv20_state_tnl.c 
b/src/mesa/drivers/dri/nouveau/nv20_state_tnl.c
index 0d56606..43f8c72 100644
--- a/src/mesa/drivers/dri/nouveau/nv20_state_tnl.c
+++ b/src/mesa/drivers/dri/nouveau/nv20_state_tnl.c
@@ -158,7 +158,7 @@ nv20_emit_light_model(GLcontext *ctx, int emit)
OUT_RING(chan, ((m-LocalViewer ?
 NV20TCL_LIGHT_MODEL_VIEWER_LOCAL :
 NV20TCL_LIGHT_MODEL_VIEWER_NONLOCAL) |
-   (m-ColorControl == GL_SEPARATE_SPECULAR_COLOR ?
+   (NEED_SECONDARY_COLOR(ctx) ?
 NV20TCL_LIGHT_MODEL_SEPARATE_SPECULAR :
 0)));
 

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


Mesa (master): dri/nouveau: Split big client buffers in the indexed case too.

2010-03-07 Thread Francisco Jerez
Module: Mesa
Branch: master
Commit: ea027bda8e4a7cdd8f131e01ab4ff80d6c6a3ab7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ea027bda8e4a7cdd8f131e01ab4ff80d6c6a3ab7

Author: Francisco Jerez curroje...@riseup.net
Date:   Sun Mar  7 19:12:27 2010 +0100

dri/nouveau: Split big client buffers in the indexed case too.

---

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

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c 
b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
index 69a9b96..a365b97 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
@@ -281,14 +281,13 @@ vbo_maybe_split(GLcontext *ctx, const struct 
gl_client_array **arrays,
int stride;
 
/* Try to keep client buffers smaller than the scratch BOs. */
-   if (!ib  render-mode == VBO 
+   if (render-mode == VBO 
(stride = get_max_client_stride(ctx)))
vert_avail = MIN2(vert_avail,
  RENDER_SCRATCH_SIZE / stride);
 
-
-   if ((ib  ib-count  idx_avail) ||
-   (!ib  max_index - min_index  vert_avail)) {
+   if (max_index - min_index  vert_avail ||
+   (ib  ib-count  idx_avail)) {
struct split_limits limits = {
.max_verts = vert_avail,
.max_indices = idx_avail,

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


Mesa (master): r300g: remove unnecessary state emissions and clean up

2010-03-07 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 6abe6145fb3b642fc2ae1d6ad2cc9de045efe0cb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6abe6145fb3b642fc2ae1d6ad2cc9de045efe0cb

Author: Marek Olšák mar...@gmail.com
Date:   Mon Mar  8 04:31:03 2010 +0100

r300g: remove unnecessary state emissions and clean up

---

 src/gallium/drivers/r300/r300_context.h |2 +
 src/gallium/drivers/r300/r300_emit.c|2 +-
 src/gallium/drivers/r300/r300_state.c   |   37 +++---
 3 files changed, 26 insertions(+), 15 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_context.h 
b/src/gallium/drivers/r300/r300_context.h
index 0d1518a..8c52d88 100644
--- a/src/gallium/drivers/r300/r300_context.h
+++ b/src/gallium/drivers/r300/r300_context.h
@@ -368,6 +368,8 @@ struct r300_context {
 boolean polygon_offset_enabled;
 /* Z buffer bit depth. */
 uint32_t zbuffer_bpp;
+/* Whether scissor is enabled. */
+boolean scissor_enabled;
 };
 
 /* Convenience cast wrapper. */
diff --git a/src/gallium/drivers/r300/r300_emit.c 
b/src/gallium/drivers/r300/r300_emit.c
index a1d31d5..51fc590 100644
--- a/src/gallium/drivers/r300/r300_emit.c
+++ b/src/gallium/drivers/r300/r300_emit.c
@@ -675,7 +675,7 @@ void r300_emit_scissor_state(struct r300_context* r300,
 maxx = fb-width;
 maxy = fb-height;
 
-if (((struct r300_rs_state*)r300-rs_state.state)-rs.scissor) {
+if (r300-scissor_enabled) {
 minx = MAX2(minx, scissor-minx);
 miny = MAX2(miny, scissor-miny);
 maxx = MIN2(maxx, scissor-maxx);
diff --git a/src/gallium/drivers/r300/r300_state.c 
b/src/gallium/drivers/r300/r300_state.c
index de3ee0e..31259b5 100644
--- a/src/gallium/drivers/r300/r300_state.c
+++ b/src/gallium/drivers/r300/r300_state.c
@@ -571,6 +571,7 @@ static void
 {
 struct r300_context* r300 = r300_context(pipe);
 struct r300_screen* r300screen = r300_screen(pipe-screen);
+struct pipe_framebuffer_state *old_state = r300-fb_state.state;
 unsigned max_width, max_height;
 uint32_t zbuffer_bpp = 0;
 
@@ -595,11 +596,24 @@ static void
 return;
 }
 
-
 if (r300-draw) {
 draw_flush(r300-draw);
 }
 
+r300-fb_state.dirty = TRUE;
+
+/* If nr_cbufs is changed from zero to non-zero or vice versa... */
+if (!!old_state-nr_cbufs != !!state-nr_cbufs) {
+r300-blend_state.dirty = TRUE;
+}
+/* If zsbuf is set from NULL to non-NULL or vice versa.. */
+if (!!old_state-zsbuf != !!state-zsbuf) {
+r300-dsa_state.dirty = TRUE;
+}
+if (!r300-scissor_enabled) {
+r300-scissor_state.dirty = TRUE;
+}
+
 memcpy(r300-fb_state.state, state, sizeof(struct pipe_framebuffer_state));
 
 r300-fb_state.size = (10 * state-nr_cbufs) + (2 * (4 - state-nr_cbufs)) 
+
@@ -607,11 +621,6 @@ static void
 
 r300_fb_update_tiling_flags(r300, r300-fb_state.state, state);
 
-/* XXX wait what */
-r300-blend_state.dirty = TRUE;
-r300-dsa_state.dirty = TRUE;
-r300-fb_state.dirty = TRUE;
-r300-scissor_state.dirty = TRUE;
 
 /* Polygon offset depends on the zbuffer bit depth. */
 if (state-zsbuf  r300-polygon_offset_enabled) {
@@ -806,6 +815,7 @@ static void r300_bind_rs_state(struct pipe_context* pipe, 
void* state)
 {
 struct r300_context* r300 = r300_context(pipe);
 struct r300_rs_state* rs = (struct r300_rs_state*)state;
+boolean scissor_was_enabled = r300-scissor_enabled;
 
 if (r300-draw) {
 draw_flush(r300-draw);
@@ -814,20 +824,17 @@ static void r300_bind_rs_state(struct pipe_context* pipe, 
void* state)
 
 if (rs) {
 r300-polygon_offset_enabled = rs-rs.offset_cw || rs-rs.offset_ccw;
+r300-scissor_enabled = rs-rs.scissor;
 } else {
 r300-polygon_offset_enabled = FALSE;
+r300-scissor_enabled = FALSE;
 }
 
 UPDATE_STATE(state, r300-rs_state);
 r300-rs_state.size = 17 + (r300-polygon_offset_enabled ? 5 : 0);
 
-/* XXX Why is this still needed, dammit!? */
-r300-scissor_state.dirty = TRUE;
-r300-viewport_state.dirty = TRUE;
-
-/* XXX Clean these up when we move to atom emits */
-if (r300-fs  r300-fs-inputs.wpos != ATTR_UNUSED) {
-r300-dirty_state |= R300_NEW_FRAGMENT_SHADER_CONSTANTS;
+if (scissor_was_enabled != r300-scissor_enabled) {
+r300-scissor_state.dirty = TRUE;
 }
 }
 
@@ -972,7 +979,9 @@ static void r300_set_scissor_state(struct pipe_context* 
pipe,
 memcpy(r300-scissor_state.state, state,
 sizeof(struct pipe_scissor_state));
 
-r300-scissor_state.dirty = TRUE;
+if (r300-scissor_enabled) {
+r300-scissor_state.dirty = TRUE;
+}
 }
 
 static void r300_set_viewport_state(struct pipe_context* pipe,

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


Mesa (7.8): st/vega: Fix OpenVG demo segfaults.

2010-03-07 Thread Chia-I Wu
Module: Mesa
Branch: 7.8
Commit: ee6fbf8d2f4718452c36366a08aa798cdda45ace
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ee6fbf8d2f4718452c36366a08aa798cdda45ace

Author: Chia-I Wu o...@lunarg.com
Date:   Wed Mar  3 23:51:13 2010 +0800

st/vega: Fix OpenVG demo segfaults.

When the paint is color, paint_bind_samplers binds a dummy sampler
without a texture.  It causes demos requiring a sampler (those use a
mask or an image) to crash.

---

 src/gallium/state_trackers/vega/paint.c |3 ---
 1 files changed, 0 insertions(+), 3 deletions(-)

diff --git a/src/gallium/state_trackers/vega/paint.c 
b/src/gallium/state_trackers/vega/paint.c
index caf0c14..cdb87d3 100644
--- a/src/gallium/state_trackers/vega/paint.c
+++ b/src/gallium/state_trackers/vega/paint.c
@@ -639,9 +639,6 @@ VGint paint_bind_samplers(struct vg_paint *paint, struct 
pipe_sampler_state **sa
}
   break;
default:
-  samplers[0] = paint-pattern.sampler; /* dummy */
-  textures[0] = 0;
-  return 0;
   break;
}
return 0;

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


Mesa (master): r300g: fix updating the tiling flags for the framebuffer state

2010-03-07 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 9860f652e271d03672ec3e5f0e379170953a1e56
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9860f652e271d03672ec3e5f0e379170953a1e56

Author: Marek Olšák mar...@gmail.com
Date:   Mon Mar  8 04:38:16 2010 +0100

r300g: fix updating the tiling flags for the framebuffer state

---

 src/gallium/drivers/r300/r300_state.c |5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_state.c 
b/src/gallium/drivers/r300/r300_state.c
index 31259b5..8c9f604 100644
--- a/src/gallium/drivers/r300/r300_state.c
+++ b/src/gallium/drivers/r300/r300_state.c
@@ -614,14 +614,13 @@ static void
 r300-scissor_state.dirty = TRUE;
 }
 
+r300_fb_update_tiling_flags(r300, r300-fb_state.state, state);
+
 memcpy(r300-fb_state.state, state, sizeof(struct pipe_framebuffer_state));
 
 r300-fb_state.size = (10 * state-nr_cbufs) + (2 * (4 - state-nr_cbufs)) 
+
   (state-zsbuf ? 10 : 0) + 8;
 
-r300_fb_update_tiling_flags(r300, r300-fb_state.state, state);
-
-
 /* Polygon offset depends on the zbuffer bit depth. */
 if (state-zsbuf  r300-polygon_offset_enabled) {
 switch (util_format_get_blocksize(state-zsbuf-texture-format)) {

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