Mesa (master): r600c: use BASE_VTX_LOC AUTO_INDEX for drawing nonindexed with offset

2011-06-22 Thread Andre Maasikas
Module: Mesa
Branch: master
Commit: 63e8cda9f180acd0f4fc38ca9569b16fbd3640d7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=63e8cda9f180acd0f4fc38ca9569b16fbd3640d7

Author: Andre Maasikas amaasi...@gmail.com
Date:   Wed Jun 22 12:40:12 2011 +0300

r600c: use BASE_VTX_LOC  AUTO_INDEX for drawing nonindexed with offset

Saves cmd buffer space as we were generating indexes into cs  in this case.
This was laying around in https://bugs.freedesktop.org/show_bug.cgi?id=32768
for a long time.

---

 src/mesa/drivers/dri/r600/r700_render.c |   68 ---
 1 files changed, 8 insertions(+), 60 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/r700_render.c 
b/src/mesa/drivers/dri/r600/r700_render.c
index 2bd3b62..0f7a7a4 100644
--- a/src/mesa/drivers/dri/r600/r700_render.c
+++ b/src/mesa/drivers/dri/r600/r700_render.c
@@ -329,7 +329,7 @@ static void r700RunRenderPrimitiveImmediate(struct 
gl_context * ctx, int start,
 {
 context_t *context = R700_CONTEXT(ctx);
 BATCH_LOCALS(context-radeon);
-int type, i;
+int type;
 uint32_t num_indices, total_emit = 0;
 uint32_t vgt_draw_initiator = 0;
 uint32_t vgt_index_type = 0;
@@ -370,22 +370,7 @@ static void r700RunRenderPrimitiveImmediate(struct 
gl_context * ctx, int start,
 vgt_num_indices = num_indices;
 SETfield(vgt_draw_initiator, DI_MAJOR_MODE_0, MAJOR_MODE_shift, 
MAJOR_MODE_mask);
 
-if (start == 0)
-{
-   SETfield(vgt_draw_initiator, DI_SRC_SEL_AUTO_INDEX, 
SOURCE_SELECT_shift, SOURCE_SELECT_mask);
-}
-else
-{
-   if (num_indices  0x)
-   {
-   total_emit += num_indices;
-   }
-   else
-   {
-   total_emit += (num_indices + 1) / 2;
-   }
-   SETfield(vgt_draw_initiator, DI_SRC_SEL_IMMEDIATE, SOURCE_SELECT_shift, 
SOURCE_SELECT_mask);
-}
+SETfield(vgt_draw_initiator, DI_SRC_SEL_AUTO_INDEX, SOURCE_SELECT_shift, 
SOURCE_SELECT_mask);
 
 total_emit +=   3 /* VGT_PRIMITIVE_TYPE */
  + 2 /* VGT_INDEX_TYPE */
@@ -406,45 +391,13 @@ static void r700RunRenderPrimitiveImmediate(struct 
gl_context * ctx, int start,
 /* offset */
 R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST, 2));
 R600_OUT_BATCH(mmSQ_VTX_BASE_VTX_LOC - ASIC_CTL_CONST_BASE_INDEX);
-R600_OUT_BATCH(0); //VTX_BASE_VTX_LOC
+R600_OUT_BATCH(start); //VTX_BASE_VTX_LOC
 R600_OUT_BATCH(0); //VTX_START_INST_LOC
 // draw packet
-if(start == 0)
-{
-R600_OUT_BATCH(CP_PACKET3(R600_IT_DRAW_INDEX_AUTO, 1));
-R600_OUT_BATCH(vgt_num_indices);
-R600_OUT_BATCH(vgt_draw_initiator);
-}
-else
-{
-   if (num_indices  0x)
-{
-   R600_OUT_BATCH(CP_PACKET3(R600_IT_DRAW_INDEX_IMMD, (num_indices + 
1)));
-   R600_OUT_BATCH(vgt_num_indices);
-   R600_OUT_BATCH(vgt_draw_initiator);
-   for (i = start; i  (start + num_indices); i++)
-   {
-   R600_OUT_BATCH(i);
-   }
-   }
-   else
-{
-   R600_OUT_BATCH(CP_PACKET3(R600_IT_DRAW_INDEX_IMMD, (((num_indices + 
1) / 2) + 1)));
-   R600_OUT_BATCH(vgt_num_indices);
-   R600_OUT_BATCH(vgt_draw_initiator);
-   for (i = start; i  (start + num_indices); i += 2)
-   {
-   if ((i + 1) == (start + num_indices))
-   {
-   R600_OUT_BATCH(i);
-   }
-   else
-   {
-   R600_OUT_BATCH(((i + 1)  16) | (i));
-   }
-   }
-   }
-}
+
+R600_OUT_BATCH(CP_PACKET3(R600_IT_DRAW_INDEX_AUTO, 1));
+R600_OUT_BATCH(vgt_num_indices);
+R600_OUT_BATCH(vgt_draw_initiator);
 
 END_BATCH();
 COMMIT_BATCH();
@@ -469,12 +422,7 @@ static GLuint r700PredictRenderSize(struct gl_context* ctx,
 else {
for (i = 0; i  nr_prims; ++i)
{
-   if (prim[i].start == 0)
-   dwords += 14;
-   else if (prim[i].count  0x)
-   dwords += prim[i].count + 14;
-   else
-   dwords += ((prim[i].count + 1) / 2) + 14;
+   dwords += 14;
}
 }
 

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


Mesa (master): xorg/nouveau: blacklist all pre NV30 cards

2011-06-22 Thread Marcin Ślusarz
Module: Mesa
Branch: master
Commit: 50d7d03a7923ababa22af0ad185941c3e7f8b9cb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=50d7d03a7923ababa22af0ad185941c3e7f8b9cb

Author: Marcin Slusarz marcin.slus...@gmail.com
Date:   Sun Jun  5 22:25:26 2011 +0200

xorg/nouveau: blacklist all pre NV30 cards

Bail out early in probe, so other driver can take control of the card.
Doing it in screen_create would be too late.

---

 src/gallium/targets/xorg-nouveau/Makefile   |3 +
 src/gallium/targets/xorg-nouveau/nouveau_xorg.c |   63 +++---
 2 files changed, 57 insertions(+), 9 deletions(-)

diff --git a/src/gallium/targets/xorg-nouveau/Makefile 
b/src/gallium/targets/xorg-nouveau/Makefile
index 16ac954..755969c 100644
--- a/src/gallium/targets/xorg-nouveau/Makefile
+++ b/src/gallium/targets/xorg-nouveau/Makefile
@@ -23,4 +23,7 @@ DRIVER_PIPES = \
 DRIVER_LINKS = \
$(shell pkg-config --libs libdrm libdrm_nouveau)
 
+DRIVER_INCLUDES = \
+   $(shell pkg-config --cflags-only-I libdrm libdrm_nouveau xf86driproto)
+
 include ../Makefile.xorg
diff --git a/src/gallium/targets/xorg-nouveau/nouveau_xorg.c 
b/src/gallium/targets/xorg-nouveau/nouveau_xorg.c
index a25254a..43470a1 100644
--- a/src/gallium/targets/xorg-nouveau/nouveau_xorg.c
+++ b/src/gallium/targets/xorg-nouveau/nouveau_xorg.c
@@ -29,6 +29,9 @@
  */
 
 #include ../../state_trackers/xorg/xorg_winsys.h
+#include nouveau_drmif.h
+#include xorg/dri.h
+#include xf86drmMode.h
 
 static void nouveau_xorg_identify(int flags);
 static Bool nouveau_xorg_pci_probe(DriverPtr driver, int entity_num,
@@ -38,16 +41,9 @@ static Bool nouveau_xorg_pci_probe(DriverPtr driver, int 
entity_num,
 static const struct pci_id_match nouveau_xorg_device_match[] = {
 { 0x10de, PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY,
   0x0003, 0x00ff, 0 },
-{ 0x12d2, PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY,
-  0x0003, 0x00ff, 0 },
 {0, 0, 0},
 };
 
-static SymTabRec nouveau_xorg_chipsets[] = {
-{PCI_MATCH_ANY, NVIDIA Graphics Device},
-{-1, NULL}
-};
-
 static PciChipsets nouveau_xorg_pci_devices[] = {
 {PCI_MATCH_ANY, PCI_MATCH_ANY, NULL},
 {-1, -1, NULL}
@@ -121,8 +117,7 @@ nouveau_xorg_setup(pointer module, pointer opts, int 
*errmaj, int *errmin)
 static void
 nouveau_xorg_identify(int flags)
 {
-xf86PrintChipsets(nouveau2, Driver for Modesetting Kernel Drivers,
- nouveau_xorg_chipsets);
+xf86DrvMsg(0, X_INFO, nouveau2: Gallium3D based 2D driver for NV30+ 
NVIDIA chipsets\n);
 }
 
 static Bool
@@ -131,6 +126,56 @@ nouveau_xorg_pci_probe(DriverPtr driver,
 {
 ScrnInfoPtr scrn = NULL;
 EntityInfoPtr entity;
+struct nouveau_device *dev = NULL;
+char *busid;
+int chipset, ret;
+
+if (device-vendor_id != 0x10DE)
+   return FALSE;
+
+if (!xf86LoaderCheckSymbol(DRICreatePCIBusID)) {
+   xf86DrvMsg(-1, X_ERROR, [drm] No DRICreatePCIBusID symbol\n);
+   return FALSE;
+}
+busid = DRICreatePCIBusID(device);
+
+ret = nouveau_device_open(dev, busid);
+if (ret) {
+   xf86DrvMsg(-1, X_ERROR, [drm] failed to open device\n);
+   free(busid);
+   return FALSE;
+}
+
+chipset = dev-chipset;
+nouveau_device_close(dev);
+
+ret = drmCheckModesettingSupported(busid);
+free(busid);
+if (ret) {
+   xf86DrvMsg(-1, X_ERROR, [drm] KMS not enabled\n);
+   return FALSE;
+}
+
+switch (chipset  0xf0) {
+case 0x00:
+case 0x10:
+case 0x20:
+   xf86DrvMsg(-1, X_NOTICE, Too old chipset: NV%02x\n, chipset);
+   return FALSE;
+case 0x30:
+case 0x40:
+case 0x60:
+case 0x50:
+case 0x80:
+case 0x90:
+case 0xa0:
+case 0xc0:
+   xf86DrvMsg(-1, X_INFO, Detected chipset: NV%02x\n, chipset);
+   break;
+default:
+   xf86DrvMsg(-1, X_ERROR, Unknown chipset: NV%02x\n, chipset);
+   return FALSE;
+}
 
 scrn = xf86ConfigPciEntity(scrn, 0, entity_num, nouveau_xorg_pci_devices,
   NULL, NULL, NULL, NULL, NULL);

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


Mesa (master): mesa: update comment for gl_texture_unit

2011-06-22 Thread Brian Paul
Module: Mesa
Branch: master
Commit: f3f080e526017f9643fd25543b4e0039f1905f4b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f3f080e526017f9643fd25543b4e0039f1905f4b

Author: Brian Paul bri...@vmware.com
Date:   Wed Jun 22 08:12:10 2011 -0600

mesa: update comment for gl_texture_unit

---

 src/mesa/main/mtypes.h |3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index eb2efc8..f018c75 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -1435,8 +1435,7 @@ struct gl_texgen
 
 /**
  * Texture unit state.  Contains enable flags, texture environment/function/
- * combiners, texgen state, pointers to current texture objects and
- * post-filter color tables.
+ * combiners, texgen state, and pointers to current texture objects.
  */
 struct gl_texture_unit
 {

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


Mesa (master): mesa: update/fix comments in update_program()

2011-06-22 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 79dddedfd197d089ccb1c6d8b5b7d38583493ac5
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=79dddedfd197d089ccb1c6d8b5b7d38583493ac5

Author: Brian Paul bri...@vmware.com
Date:   Wed Jun 22 08:12:10 2011 -0600

mesa: update/fix comments in update_program()

---

 src/mesa/main/state.c |   33 -
 1 files changed, 16 insertions(+), 17 deletions(-)

diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c
index 4696dbb..59a4e16 100644
--- a/src/mesa/main/state.c
+++ b/src/mesa/main/state.c
@@ -203,11 +203,12 @@ update_program_enables(struct gl_context *ctx)
 
 
 /**
- * Update vertex/fragment program state.  In particular, update these fields:
- *   ctx-VertexProgram._Current
- *   ctx-VertexProgram._TnlProgram,
- * These point to the highest priority enabled vertex/fragment program or are
- * NULL if fixed-function processing is to be done.
+ * Update the ctx-Vertex/Geometry/FragmentProgram._Current pointers to point
+ * to the current/active programs.  Then call ctx-Driver.BindProgram() to
+ * tell the driver which programs to use.
+ *
+ * Programs may come from 3 sources: GLSL shaders, ARB/NV_vertex/fragment
+ * programs or programs derived from fixed-function state.
  *
  * This function needs to be called after texture state validation in case
  * we're generating a fragment program from fixed-function texture state.
@@ -243,34 +244,33 @@ update_program(struct gl_context *ctx)
 */
 
if (fsProg  fsProg-LinkStatus  fsProg-FragmentProgram) {
-  /* Use shader programs */
+  /* Use GLSL fragment shader */
   _mesa_reference_fragprog(ctx, ctx-FragmentProgram._Current,
fsProg-FragmentProgram);
}
else if (ctx-FragmentProgram._Enabled) {
-  /* use user-defined vertex program */
+  /* Use user-defined fragment program */
   _mesa_reference_fragprog(ctx, ctx-FragmentProgram._Current,
ctx-FragmentProgram.Current);
}
else if (ctx-FragmentProgram._MaintainTexEnvProgram) {
-  /* Use fragment program generated from fixed-function state.
-   */
+  /* Use fragment program generated from fixed-function state */
   _mesa_reference_fragprog(ctx, ctx-FragmentProgram._Current,
_mesa_get_fixed_func_fragment_program(ctx));
   _mesa_reference_fragprog(ctx, ctx-FragmentProgram._TexEnvProgram,
ctx-FragmentProgram._Current);
}
else {
-  /* no fragment program */
+  /* No fragment program */
   _mesa_reference_fragprog(ctx, ctx-FragmentProgram._Current, NULL);
}
 
if (gsProg  gsProg-LinkStatus  gsProg-GeometryProgram) {
-  /* Use shader programs */
+  /* Use GLSL geometry shader */
   _mesa_reference_geomprog(ctx, ctx-GeometryProgram._Current,
gsProg-GeometryProgram);
} else {
-  /* no fragment program */
+  /* No geometry program */
   _mesa_reference_geomprog(ctx, ctx-GeometryProgram._Current, NULL);
}
 
@@ -279,18 +279,17 @@ update_program(struct gl_context *ctx)
 * fragprog inputs.
 */
if (vsProg  vsProg-LinkStatus  vsProg-VertexProgram) {
-  /* Use shader programs */
+  /* Use GLSL vertex shader */
   _mesa_reference_vertprog(ctx, ctx-VertexProgram._Current,
-vsProg-VertexProgram);
+   vsProg-VertexProgram);
}
else if (ctx-VertexProgram._Enabled) {
-  /* use user-defined vertex program */
+  /* Use user-defined vertex program */
   _mesa_reference_vertprog(ctx, ctx-VertexProgram._Current,
ctx-VertexProgram.Current);
}
else if (ctx-VertexProgram._MaintainTnlProgram) {
-  /* Use vertex program generated from fixed-function state.
-   */
+  /* Use vertex program generated from fixed-function state */
   _mesa_reference_vertprog(ctx, ctx-VertexProgram._Current,
_mesa_get_fixed_func_vertex_program(ctx));
   _mesa_reference_vertprog(ctx, ctx-VertexProgram._TnlProgram,

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


Mesa (master): mesa: update comments in update_program_enables()

2011-06-22 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 3c95ff209f72bacd1b5807c97e1dee079e9206b3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3c95ff209f72bacd1b5807c97e1dee079e9206b3

Author: Brian Paul bri...@vmware.com
Date:   Wed Jun 22 08:12:10 2011 -0600

mesa: update comments in update_program_enables()

---

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

diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c
index 59a4e16..4389415 100644
--- a/src/mesa/main/state.c
+++ b/src/mesa/main/state.c
@@ -192,7 +192,10 @@ update_arrays( struct gl_context *ctx )
 static void
 update_program_enables(struct gl_context *ctx)
 {
-   /* These _Enabled flags indicate if the program is enabled AND valid. */
+   /* These _Enabled flags indicate if the user-defined ARB/NV vertex/fragment
+* program is enabled AND valid.  Similarly for ATI fragment shaders.
+* GLSL shaders not relevant here.
+*/
ctx-VertexProgram._Enabled = ctx-VertexProgram.Enabled
ctx-VertexProgram.Current-Base.Instructions;
ctx-FragmentProgram._Enabled = ctx-FragmentProgram.Enabled

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


Mesa (master): mesa: comments and 80-column wrapping

2011-06-22 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 9786688672db9e8916b6b64ec78417197db77e84
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9786688672db9e8916b6b64ec78417197db77e84

Author: Brian Paul bri...@vmware.com
Date:   Wed Jun 22 08:12:10 2011 -0600

mesa: comments and 80-column wrapping

---

 src/mesa/main/state.c |   27 +--
 1 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c
index 4389415..7ad50bc 100644
--- a/src/mesa/main/state.c
+++ b/src/mesa/main/state.c
@@ -418,29 +418,44 @@ update_color(struct gl_context *ctx)
ctx-Color._LogicOpEnabled = _mesa_rgba_logicop_enabled(ctx);
 }
 
+
+/**
+ * Update the ctx-Color._ClampFragmentColor field
+ */
 static void
 update_clamp_fragment_color(struct gl_context *ctx)
 {
-   if(ctx-Color.ClampFragmentColor == GL_FIXED_ONLY_ARB)
-  ctx-Color._ClampFragmentColor = !ctx-DrawBuffer || 
!ctx-DrawBuffer-Visual.floatMode;
+   if (ctx-Color.ClampFragmentColor == GL_FIXED_ONLY_ARB)
+  ctx-Color._ClampFragmentColor =
+ !ctx-DrawBuffer || !ctx-DrawBuffer-Visual.floatMode;
else
   ctx-Color._ClampFragmentColor = ctx-Color.ClampFragmentColor;
 }
 
+
+/**
+ * Update the ctx-Color._ClampVertexColor field
+ */
 static void
 update_clamp_vertex_color(struct gl_context *ctx)
 {
-   if(ctx-Light.ClampVertexColor == GL_FIXED_ONLY_ARB)
-  ctx-Light._ClampVertexColor = !ctx-DrawBuffer || 
!ctx-DrawBuffer-Visual.floatMode;
+   if (ctx-Light.ClampVertexColor == GL_FIXED_ONLY_ARB)
+  ctx-Light._ClampVertexColor =
+ !ctx-DrawBuffer || !ctx-DrawBuffer-Visual.floatMode;
else
   ctx-Light._ClampVertexColor = ctx-Light.ClampVertexColor;
 }
 
+
+/**
+ * Update the ctx-Color._ClampReadColor field
+ */
 static void
 update_clamp_read_color(struct gl_context *ctx)
 {
-   if(ctx-Color.ClampReadColor == GL_FIXED_ONLY_ARB)
-  ctx-Color._ClampReadColor = !ctx-ReadBuffer || 
!ctx-ReadBuffer-Visual.floatMode;
+   if (ctx-Color.ClampReadColor == GL_FIXED_ONLY_ARB)
+  ctx-Color._ClampReadColor =
+ !ctx-ReadBuffer || !ctx-ReadBuffer-Visual.floatMode;
else
   ctx-Color._ClampReadColor = ctx-Color.ClampReadColor;
 }

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


Mesa (master): mesa: add missing DRI Makefiles to tarball

2011-06-22 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 76bd1c1818e58d78537cf46ad6cc78425e6ae8f2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=76bd1c1818e58d78537cf46ad6cc78425e6ae8f2

Author: Thierry Vignaud thierry.vign...@gmail.com
Date:   Wed Jun 22 08:22:02 2011 -0600

mesa: add missing DRI Makefiles to tarball

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

---

 Makefile |3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index 07ec686..281af35 100644
--- a/Makefile
+++ b/Makefile
@@ -376,8 +376,7 @@ DRI_FILES = \
$(DIRECTORY)/src/glx/Makefile   \
$(DIRECTORY)/src/glx/*.[ch] \
$(APPLE_DRI_FILES)  \
-   $(DIRECTORY)/src/mesa/drivers/dri/Makefile  \
-   $(DIRECTORY)/src/mesa/drivers/dri/Makefile.template \
+   $(DIRECTORY)/src/mesa/drivers/dri/Makefile* \
$(DIRECTORY)/src/mesa/drivers/dri/dri.pc.in \
$(DIRECTORY)/src/mesa/drivers/dri/common/xmlpool/*.po   \
$(DIRECTORY)/src/mesa/drivers/dri/*/*.[chS] \

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


Mesa (master): r600g: Fix use of uninitialized local variable extra_size.

2011-06-22 Thread Michel Dänzer
Module: Mesa
Branch: master
Commit: eb2c9b5814f7c6a5b37bc9063b1593095ea4f620
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=eb2c9b5814f7c6a5b37bc9063b1593095ea4f620

Author: Michel Dänzer daen...@vmware.com
Date:   Wed Jun 22 16:23:36 2011 +0200

r600g: Fix use of uninitialized local variable extra_size.

Should fix http://bugs.freedesktop.org/show_bug.cgi?id=38566 .

---

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

diff --git a/src/gallium/drivers/r600/r600_texture.c 
b/src/gallium/drivers/r600/r600_texture.c
index 8c98a5a..8e75d84 100644
--- a/src/gallium/drivers/r600/r600_texture.c
+++ b/src/gallium/drivers/r600/r600_texture.c
@@ -243,7 +243,7 @@ static void r600_setup_miptree(struct pipe_screen *screen,
struct radeon *radeon = (struct radeon *)screen-winsys;
enum chip_class chipc = r600_get_family_class(radeon);
unsigned size, layer_size, i, offset;
-   unsigned nblocksx, nblocksy, extra_size;
+   unsigned nblocksx, nblocksy, extra_size = 0;
 
for (i = 0, offset = 0; i = ptex-last_level; i++) {
unsigned blocksize = util_format_get_blocksize(ptex-format);

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


Mesa (master): r600g: fix num_banks interpretation on eg+

2011-06-22 Thread Alex Deucher
Module: Mesa
Branch: master
Commit: c4930cb417defe9f58c27e909adb18d3c7784883
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c4930cb417defe9f58c27e909adb18d3c7784883

Author: Alex Deucher alexdeuc...@gmail.com
Date:   Wed Jun 22 12:33:01 2011 -0400

r600g: fix num_banks interpretation on eg+

Field is encoded:
0 = 4 banks
1 = 8 banks
2 = 16 banks

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

---

 src/gallium/winsys/r600/drm/r600_drm.c |   15 ++-
 1 files changed, 14 insertions(+), 1 deletions(-)

diff --git a/src/gallium/winsys/r600/drm/r600_drm.c 
b/src/gallium/winsys/r600/drm/r600_drm.c
index 03fe385..4602f7f 100644
--- a/src/gallium/winsys/r600/drm/r600_drm.c
+++ b/src/gallium/winsys/r600/drm/r600_drm.c
@@ -156,7 +156,20 @@ static int eg_interpret_tiling(struct radeon *radeon, 
uint32_t tiling_config)
return -EINVAL;
}
 
-   radeon-tiling_info.num_banks = (tiling_config  0xf0)  4;
+   switch ((tiling_config  0xf0)  4) {
+   case 0:
+   radeon-tiling_info.num_banks = 4;
+   break;
+   case 1:
+   radeon-tiling_info.num_banks = 8;
+   break;
+   case 2:
+   radeon-tiling_info.num_banks = 16;
+   break;
+   default:
+   return -EINVAL;
+
+   }
 
switch ((tiling_config  0xf00)  8) {
case 0:

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


Mesa (master): r600c: add missing bank tiling case for evergreen

2011-06-22 Thread Alex Deucher
Module: Mesa
Branch: master
Commit: 5ff22ab229d40a5ffc6f5e67f58359cdef33e8dc
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5ff22ab229d40a5ffc6f5e67f58359cdef33e8dc

Author: Alex Deucher alexdeuc...@gmail.com
Date:   Wed Jun 22 12:38:29 2011 -0400

r600c: add missing bank tiling case for evergreen

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

---

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

diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.c 
b/src/mesa/drivers/dri/radeon/radeon_screen.c
index c5ddb6d..676fafd 100644
--- a/src/mesa/drivers/dri/radeon/radeon_screen.c
+++ b/src/mesa/drivers/dri/radeon/radeon_screen.c
@@ -1739,6 +1739,9 @@ radeonCreateScreen2(__DRIscreen *sPriv)
   case 1:
   screen-num_banks = 8;
   break;
+  case 2:
+  screen-num_banks = 16;
+  break;
   default:
   fprintf(stderr, bad banks\n);
   break;

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


Mesa (glsl-to-tgsi): st/mesa: implement simplify_cmp pass needed by r300g

2011-06-22 Thread Bryan Cain
Module: Mesa
Branch: glsl-to-tgsi
Commit: 95b86e40fbac83918139d1cdcadb8f6471233d82
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=95b86e40fbac83918139d1cdcadb8f6471233d82

Author: Bryan Cain bryanca...@gmail.com
Date:   Thu Jun 16 18:36:16 2011 -0500

st/mesa: implement simplify_cmp pass needed by r300g

---

 src/mesa/state_tracker/st_glsl_to_tgsi.cpp |   95 
 1 files changed, 95 insertions(+), 0 deletions(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp 
b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 6c92441..322bfbb 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -374,6 +374,7 @@ public:
bool process_move_condition(ir_rvalue *ir);
 
void remove_output_reads(gl_register_file type);
+   void simplify_cmp(void);
 
void rename_temp_register(int index, int new_index);
int get_first_temp_read(int index);
@@ -2788,6 +2789,97 @@ 
glsl_to_tgsi_visitor::remove_output_reads(gl_register_file type)
}
 }
 
+/**
+ * Returns the mask of channels (bitmask of WRITEMASK_X,Y,Z,W) which
+ * are read from the given src in this instruction
+ */
+static int
+get_src_arg_mask(st_dst_reg dst, st_src_reg src)
+{
+   int read_mask = 0, comp;
+
+   /* Now, given the src swizzle and the written channels, find which
+* components are actually read
+*/
+   for (comp = 0; comp  4; ++comp) {
+  const unsigned coord = GET_SWZ(src.swizzle, comp);
+  ASSERT(coord  4);
+  if (dst.writemask  (1  comp)  coord = SWIZZLE_W)
+ read_mask |= 1  coord;
+   }
+
+   return read_mask;
+}
+
+/**
+ * This pass replaces CMP T0, T1 T2 T0 with MOV T0, T2 when the CMP
+ * instruction is the first instruction to write to register T0.  There are
+ * several lowering passes done in GLSL IR (e.g. branches and
+ * relative addressing) that create a large number of conditional assignments
+ * that ir_to_mesa converts to CMP instructions like the one mentioned above.
+ *
+ * Here is why this conversion is safe:
+ * CMP T0, T1 T2 T0 can be expanded to:
+ * if (T1  0.0)
+ * MOV T0, T2;
+ * else
+ * MOV T0, T0;
+ *
+ * If (T1  0.0) evaluates to true then our replacement MOV T0, T2 is the same
+ * as the original program.  If (T1  0.0) evaluates to false, executing
+ * MOV T0, T0 will store a garbage value in T0 since T0 is uninitialized.
+ * Therefore, it doesn't matter that we are replacing MOV T0, T0 with MOV T0, 
T2
+ * because any instruction that was going to read from T0 after this was going
+ * to read a garbage value anyway.
+ */
+void
+glsl_to_tgsi_visitor::simplify_cmp(void)
+{
+   unsigned tempWrites[MAX_PROGRAM_TEMPS];
+   unsigned outputWrites[MAX_PROGRAM_OUTPUTS];
+
+   memset(tempWrites, 0, sizeof(tempWrites));
+   memset(outputWrites, 0, sizeof(outputWrites));
+
+   foreach_iter(exec_list_iterator, iter, this-instructions) {
+  glsl_to_tgsi_instruction *inst = (glsl_to_tgsi_instruction *)iter.get();
+  unsigned prevWriteMask = 0;
+
+  /* Give up if we encounter relative addressing or flow control. */
+  if (inst-dst.reladdr ||
+  tgsi_get_opcode_info(inst-op)-is_branch ||
+  inst-op == TGSI_OPCODE_BGNSUB ||
+  inst-op == TGSI_OPCODE_CONT ||
+  inst-op == TGSI_OPCODE_END ||
+  inst-op == TGSI_OPCODE_ENDSUB ||
+  inst-op == TGSI_OPCODE_RET) {
+ return;
+  }
+
+  if (inst-dst.file == PROGRAM_OUTPUT) {
+ assert(inst-dst.index  MAX_PROGRAM_OUTPUTS);
+ prevWriteMask = outputWrites[inst-dst.index];
+ outputWrites[inst-dst.index] |= inst-dst.writemask;
+  } else if (inst-dst.file == PROGRAM_TEMPORARY) {
+ assert(inst-dst.index  MAX_PROGRAM_TEMPS);
+ prevWriteMask = tempWrites[inst-dst.index];
+ tempWrites[inst-dst.index] |= inst-dst.writemask;
+  }
+
+  /* For a CMP to be considered a conditional write, the destination
+   * register and source register two must be the same. */
+  if (inst-op == TGSI_OPCODE_CMP
+   !(inst-dst.writemask  prevWriteMask)
+   inst-src[2].file == inst-dst.file
+   inst-src[2].index == inst-dst.index
+   inst-dst.writemask == get_src_arg_mask(inst-dst, inst-src[2])) 
{
+
+ inst-op = TGSI_OPCODE_MOV;
+ inst-src[0] = inst-src[1];
+  }
+   }
+}
+
 /* Replaces all references to a temporary register index with another index. */
 void
 glsl_to_tgsi_visitor::rename_temp_register(int index, int new_index)
@@ -4170,6 +4262,9 @@ get_mesa_program(struct gl_context *ctx,
v-remove_output_reads(PROGRAM_OUTPUT);
if (target == GL_VERTEX_PROGRAM_ARB)
   v-remove_output_reads(PROGRAM_VARYING);
+   
+   /* Perform the simplify_cmp optimization, which is required by r300g. */
+   v-simplify_cmp();
 
/* Perform optimizations on the instructions in the glsl_to_tgsi_visitor.
 * FIXME: These passes to optimize temporary registers don't work when there


Mesa (glsl-to-tgsi): glsl_to_tgsi: execute merge_registers() after eliminate_dead_code()

2011-06-22 Thread Bryan Cain
Module: Mesa
Branch: glsl-to-tgsi
Commit: fd29c7207fff1965225657eaed4f5f0ee1f1f4f5
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fd29c7207fff1965225657eaed4f5f0ee1f1f4f5

Author: Emil Velikov emil.l.veli...@gmail.com
Date:   Tue Jun 21 21:52:19 2011 +0100

glsl_to_tgsi: execute merge_registers() after eliminate_dead_code()

Fixes a regression unintentionally introduced by commit 343e75d9 (st/mesa: fix 
shaders with indirect addressing of temps) that caused missing leaves in 
3dmark01 test 4 (Nature) and missing/displaced textures on human models in 
Counter-Strike: Source.

[Bryan: This regression also caused a performance regression in many shaders 
since it made the dead code elimination pass ineffective.]

Signed-off-by: Emil Velikov emil.l.veli...@gmail.com
Signed-off-by: Bryan Cain bryanca...@gmail.com

---

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

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp 
b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 322bfbb..abeb44a 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -4274,8 +4274,8 @@ get_mesa_program(struct gl_context *ctx,
 */
if (!v-indirect_addr_temps) {
   v-copy_propagate();
-  v-merge_registers();
   v-eliminate_dead_code();
+  v-merge_registers();
   v-renumber_registers();
}


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


Mesa (7.10): r600c: add missing bank tiling case for evergreen

2011-06-22 Thread Alex Deucher
Module: Mesa
Branch: 7.10
Commit: bc46f0c9698edcab7c2abf9bd91279facf3a5217
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bc46f0c9698edcab7c2abf9bd91279facf3a5217

Author: Alex Deucher alexdeuc...@gmail.com
Date:   Wed Jun 22 16:51:58 2011 -0400

r600c: add missing bank tiling case for evergreen

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

---

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

diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.c 
b/src/mesa/drivers/dri/radeon/radeon_screen.c
index d829cdd..7977707 100644
--- a/src/mesa/drivers/dri/radeon/radeon_screen.c
+++ b/src/mesa/drivers/dri/radeon/radeon_screen.c
@@ -1721,6 +1721,9 @@ radeonCreateScreen2(__DRIscreen *sPriv)
   case 1:
   screen-num_banks = 8;
   break;
+  case 2:
+  screen-num_banks = 16;
+  break;
   default:
   fprintf(stderr, bad banks\n);
   break;

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


Mesa (master): i915g: Support more texture and render target formats.

2011-06-22 Thread Stephane Marchesin
Module: Mesa
Branch: master
Commit: 465183c6ae594ad399f72ade027e49adcb1f763b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=465183c6ae594ad399f72ade027e49adcb1f763b

Author: Stéphane Marchesin marc...@chromium.org
Date:   Wed Jun 22 16:23:02 2011 -0700

i915g: Support more texture and render target formats.

---

 src/gallium/drivers/i915/i915_clear.c |2 +-
 src/gallium/drivers/i915/i915_screen.c|6 ++
 src/gallium/drivers/i915/i915_state_emit.c|   67 ++---
 src/gallium/drivers/i915/i915_state_sampler.c |2 -
 src/gallium/drivers/i915/i915_state_static.c  |9 +++-
 5 files changed, 75 insertions(+), 11 deletions(-)

diff --git a/src/gallium/drivers/i915/i915_clear.c 
b/src/gallium/drivers/i915/i915_clear.c
index 4a97746..fcb208d 100644
--- a/src/gallium/drivers/i915/i915_clear.c
+++ b/src/gallium/drivers/i915/i915_clear.c
@@ -66,7 +66,7 @@ i915_clear_emit(struct pipe_context *pipe, unsigned buffers, 
const float *rgba,
   else
  clear_color = (u_color.ui  0x) | (u_color.ui  16);
 
-  util_pack_color(rgba, PIPE_FORMAT_B8G8R8A8_UNORM, u_color);
+  util_pack_color(rgba, cbuf-format, u_color);
   clear_color = u_color.ui;
} else
   clear_color = clear_color = 0;
diff --git a/src/gallium/drivers/i915/i915_screen.c 
b/src/gallium/drivers/i915/i915_screen.c
index c86baa5..ec07056 100644
--- a/src/gallium/drivers/i915/i915_screen.c
+++ b/src/gallium/drivers/i915/i915_screen.c
@@ -264,6 +264,8 @@ i915_is_format_supported(struct pipe_screen *screen,
static const enum pipe_format tex_supported[] = {
   PIPE_FORMAT_B8G8R8A8_UNORM,
   PIPE_FORMAT_B8G8R8X8_UNORM,
+  PIPE_FORMAT_R8G8B8A8_UNORM,
+  PIPE_FORMAT_R8G8B8X8_UNORM,
   PIPE_FORMAT_B5G6R5_UNORM,
   PIPE_FORMAT_L8_UNORM,
   PIPE_FORMAT_A8_UNORM,
@@ -283,7 +285,11 @@ i915_is_format_supported(struct pipe_screen *screen,
};
static const enum pipe_format render_supported[] = {
   PIPE_FORMAT_B8G8R8A8_UNORM,
+  PIPE_FORMAT_R8G8B8A8_UNORM,
   PIPE_FORMAT_B5G6R5_UNORM,
+  PIPE_FORMAT_L8_UNORM,
+  PIPE_FORMAT_A8_UNORM,
+  PIPE_FORMAT_I8_UNORM,
   PIPE_FORMAT_NONE  /* list terminator */
};
static const enum pipe_format depth_supported[] = {
diff --git a/src/gallium/drivers/i915/i915_state_emit.c 
b/src/gallium/drivers/i915/i915_state_emit.c
index 0155cd8..b7ccba8 100644
--- a/src/gallium/drivers/i915/i915_state_emit.c
+++ b/src/gallium/drivers/i915/i915_state_emit.c
@@ -34,7 +34,9 @@
 
 #include pipe/p_context.h
 #include pipe/p_defines.h
+#include pipe/p_format.h
 
+#include util/u_format.h
 #include util/u_math.h
 #include util/u_memory.h
 
@@ -341,21 +343,72 @@ emit_constants(struct i915_context *i915)
}
 }
 
+static const struct
+{
+   enum pipe_format format;
+   uint hw_swizzle;
+} fixup_formats[] = {
+   { PIPE_FORMAT_R8G8B8A8_UNORM, 0x2103 /* BGRA */},
+   { PIPE_FORMAT_L8_UNORM,   0x /*  */},
+   { PIPE_FORMAT_I8_UNORM,   0x /*  */},
+   { PIPE_FORMAT_A8_UNORM,   0x /*  */},
+   { PIPE_FORMAT_NONE,   0x},
+};
+
+static boolean need_fixup(enum pipe_format f)
+{
+   for(int i=0; fixup_formats[i].format != PIPE_FORMAT_NONE; i++)
+  if (fixup_formats[i].format == f)
+ return TRUE;
+
+   return FALSE;
+}
+
+static uint fixup_swizzle(enum pipe_format f)
+{
+   for(int i=0; fixup_formats[i].format != PIPE_FORMAT_NONE; i++)
+  if (fixup_formats[i].format == f)
+ return fixup_formats[i].hw_swizzle;
+
+   return 0;
+}
+
 static void
 validate_program(struct i915_context *i915, unsigned *batch_space)
 {
-   *batch_space = i915-fs-program_len;
+   struct pipe_surface *cbuf_surface = i915-framebuffer.cbufs[0];
+
+   /* we need more batch space if we want to emulate rgba framebuffers */
+   *batch_space = i915-fs-program_len + (need_fixup(cbuf_surface-format) ? 
3 : 0);
 }
 
 static void
 emit_program(struct i915_context *i915)
 {
-  uint i;
-  /* we should always have, at least, a pass-through program */
-  assert(i915-fs-program_len  0);
-  for (i = 0; i  i915-fs-program_len; i++) {
- OUT_BATCH(i915-fs-program[i]);
-  }
+   struct pipe_surface *cbuf_surface = i915-framebuffer.cbufs[0];
+   boolean need_format_fixup = need_fixup(cbuf_surface-format);
+   uint i;
+
+   /* we should always have, at least, a pass-through program */
+   assert(i915-fs-program_len  0);
+   for (i = 0; i  i915-fs-program_len; i++) {
+ if ((i == 0)  need_format_fixup)
+OUT_BATCH(i915-fs-program[i] + 3);
+ else
+OUT_BATCH(i915-fs-program[i]);
+   }
+
+   /* we emit an additional mov with swizzle to fake RGBA framebuffers */
+   if (need_format_fixup) {
+  /* mov out_color, out_color.zyxw */
+  OUT_BATCH(A0_MOV |
+(REG_TYPE_OC  A0_DEST_TYPE_SHIFT) |
+A0_DEST_CHANNEL_ALL |
+(REG_TYPE_OC  

Mesa (master): i915g: Fix comment.

2011-06-22 Thread Stephane Marchesin
Module: Mesa
Branch: master
Commit: 468c2c08414f0ad07e2c2c2a98506f6390124963
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=468c2c08414f0ad07e2c2c2a98506f6390124963

Author: Stéphane Marchesin marc...@chromium.org
Date:   Wed Jun 22 16:47:36 2011 -0700

i915g: Fix comment.

Reported-by: Marcin Baczynski marb...@gmail.com

---

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

diff --git a/src/gallium/drivers/i915/i915_fpc_translate.c 
b/src/gallium/drivers/i915/i915_fpc_translate.c
index 27f1008..738d331 100644
--- a/src/gallium/drivers/i915/i915_fpc_translate.c
+++ b/src/gallium/drivers/i915/i915_fpc_translate.c
@@ -907,7 +907,7 @@ i915_translate_instruction(struct i915_fp_compile *p,
   break;
 
case TGSI_OPCODE_SNE:
-  /* if we're neither  nor  then we're != */
+  /* if we're  or  then we're != */
   src0 = src_vector(p, inst-Src[0], fs);
   src1 = src_vector(p, inst-Src[1], fs);
   tmp = i915_get_utemp(p);

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


Mesa (master): i915g: Add draw point sprites.

2011-06-22 Thread Stephane Marchesin
Module: Mesa
Branch: master
Commit: 98ce1373e47d05d7150933c391fdeddbc897a3cd
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=98ce1373e47d05d7150933c391fdeddbc897a3cd

Author: Stéphane Marchesin marc...@chromium.org
Date:   Wed Jun 22 16:51:02 2011 -0700

i915g: Add draw point sprites.

It's not that much work; hopefully blend func separate also works and we get GL 
2.0 for real.

---

 src/gallium/drivers/i915/i915_context.c |1 +
 src/gallium/drivers/i915/i915_screen.c  |3 +--
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/i915/i915_context.c 
b/src/gallium/drivers/i915/i915_context.c
index 7a98ef7..0217db9 100644
--- a/src/gallium/drivers/i915/i915_context.c
+++ b/src/gallium/drivers/i915/i915_context.c
@@ -173,6 +173,7 @@ i915_create_context(struct pipe_screen *screen, void *priv)
 
draw_install_aaline_stage(i915-draw, i915-base);
draw_install_aapoint_stage(i915-draw, i915-base);
+   draw_enable_point_sprites(i915-draw, TRUE);
 
/* augmented draw pipeline clobbers state functions */
i915_init_fixup_state_functions(i915);
diff --git a/src/gallium/drivers/i915/i915_screen.c 
b/src/gallium/drivers/i915/i915_screen.c
index ec07056..874579d 100644
--- a/src/gallium/drivers/i915/i915_screen.c
+++ b/src/gallium/drivers/i915/i915_screen.c
@@ -109,6 +109,7 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap 
cap)
case PIPE_CAP_ANISOTROPIC_FILTER:
case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE:
case PIPE_CAP_NPOT_TEXTURES:
+   case PIPE_CAP_POINT_SPRITE:
case PIPE_CAP_PRIMITIVE_RESTART: /* draw module */
case PIPE_CAP_TEXTURE_MIRROR_REPEAT:
case PIPE_CAP_TEXTURE_SHADOW_MAP:
@@ -118,8 +119,6 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap 
cap)
/* Features that should be supported (boolean caps). */
/* XXX: Just test the code */
case PIPE_CAP_BLEND_EQUATION_SEPARATE:
-   /* XXX: No code but hw supports it */
-   case PIPE_CAP_POINT_SPRITE:
   /* Also lie about these when asked to (needed for GLSL / GL 2.0) */
   return is-debug.lie ? 1 : 0;
 

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


Mesa (master): st/mesa: prefer native texture formats when possible.

2011-06-22 Thread Stephane Marchesin
Module: Mesa
Branch: master
Commit: 1a339b6c71ebab6e1a64f05b2e133022d3bbcd15
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1a339b6c71ebab6e1a64f05b2e133022d3bbcd15

Author: Stéphane Marchesin marc...@chromium.org
Date:   Wed Jun 22 17:02:21 2011 -0700

st/mesa: prefer native texture formats when possible.

If possible, we want to match the hardware format to what the app uses. By
doing so, we avoid the need for pixel conversions and therefore greatly speed
up texture uploads.

---

 src/mesa/state_tracker/st_atom_pixeltransfer.c |2 +-
 src/mesa/state_tracker/st_cb_drawpixels.c  |   10 ++-
 src/mesa/state_tracker/st_format.c |   96 +++-
 src/mesa/state_tracker/st_format.h |1 +
 4 files changed, 101 insertions(+), 8 deletions(-)

diff --git a/src/mesa/state_tracker/st_atom_pixeltransfer.c 
b/src/mesa/state_tracker/st_atom_pixeltransfer.c
index 95b706c..1f833d2 100644
--- a/src/mesa/state_tracker/st_atom_pixeltransfer.c
+++ b/src/mesa/state_tracker/st_atom_pixeltransfer.c
@@ -94,7 +94,7 @@ create_color_map_texture(struct gl_context *ctx)
const uint texSize = 256; /* simple, and usually perfect */
 
/* find an RGBA texture format */
-   format = st_choose_format(pipe-screen, GL_RGBA,
+   format = st_choose_format(pipe-screen, GL_RGBA, GL_NONE, GL_NONE,
  PIPE_TEXTURE_2D, 0, PIPE_BIND_SAMPLER_VIEW);
 
/* create texture for color map/table */
diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c 
b/src/mesa/state_tracker/st_cb_drawpixels.c
index 965fbcd..c730975 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -989,8 +989,9 @@ st_DrawPixels(struct gl_context *ctx, GLint x, GLint y,
   /* can we write to stencil if not fallback */
   if (!pipe-screen-get_param(pipe-screen, 
PIPE_CAP_SHADER_STENCIL_EXPORT))
 goto stencil_fallback;
-  
+
   tex_format = st_choose_format(st-pipe-screen, base_format(format),
+GL_NONE, GL_NONE,
 PIPE_TEXTURE_2D,
0, PIPE_BIND_SAMPLER_VIEW);
   if (tex_format == PIPE_FORMAT_Z24_UNORM_S8_USCALED)
@@ -1399,13 +1400,14 @@ st_CopyPixels(struct gl_context *ctx, GLint srcx, GLint 
srcy,
   /* srcFormat can't be used as a texture format */
   if (type == GL_DEPTH) {
  texFormat = st_choose_format(screen, GL_DEPTH_COMPONENT,
-  st-internal_target, sample_count,
-  PIPE_BIND_DEPTH_STENCIL);
+  st-internal_target, GL_NONE, GL_NONE,
+ sample_count, PIPE_BIND_DEPTH_STENCIL);
  assert(texFormat != PIPE_FORMAT_NONE);
   }
   else {
  /* default color format */
- texFormat = st_choose_format(screen, GL_RGBA, st-internal_target,
+ texFormat = st_choose_format(screen, GL_RGBA,
+  st-internal_target, GL_NONE, GL_NONE,
   sample_count, PIPE_BIND_SAMPLER_VIEW);
  assert(texFormat != PIPE_FORMAT_NONE);
   }
diff --git a/src/mesa/state_tracker/st_format.c 
b/src/mesa/state_tracker/st_format.c
index 263613b..8118df3 100644
--- a/src/mesa/state_tracker/st_format.c
+++ b/src/mesa/state_tracker/st_format.c
@@ -1124,6 +1124,87 @@ find_supported_format(struct pipe_screen *screen,
return PIPE_FORMAT_NONE;
 }
 
+struct exact_format_mapping
+{
+   GLenum format;
+   GLenum type;
+   enum pipe_format pformat;
+};
+
+static const struct exact_format_mapping rgba_tbl[] =
+{
+   { GL_RGBA, GL_UNSIGNED_INT_8_8_8_8,PIPE_FORMAT_A8B8G8R8_UNORM },
+   { GL_ABGR_EXT, GL_UNSIGNED_INT_8_8_8_8_REV,PIPE_FORMAT_A8B8G8R8_UNORM },
+   { GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV,PIPE_FORMAT_R8G8B8A8_UNORM },
+   { GL_ABGR_EXT, GL_UNSIGNED_INT_8_8_8_8,PIPE_FORMAT_R8G8B8A8_UNORM },
+   { GL_BGRA, GL_UNSIGNED_INT_8_8_8_8,PIPE_FORMAT_A8R8G8B8_UNORM },
+   { GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV,PIPE_FORMAT_B8G8R8A8_UNORM },
+   { GL_RGBA, GL_UNSIGNED_BYTE,   PIPE_FORMAT_R8G8B8A8_UNORM },
+   { GL_ABGR_EXT, GL_UNSIGNED_BYTE,   PIPE_FORMAT_A8B8G8R8_UNORM },
+   { GL_BGRA, GL_UNSIGNED_BYTE,   PIPE_FORMAT_B8G8R8A8_UNORM },
+   { 0,   0,  0  }
+};
+
+static const struct exact_format_mapping rgbx_tbl[] =
+{
+   { GL_RGBA, GL_UNSIGNED_INT_8_8_8_8,PIPE_FORMAT_X8B8G8R8_UNORM },
+   { GL_ABGR_EXT, GL_UNSIGNED_INT_8_8_8_8_REV,PIPE_FORMAT_X8B8G8R8_UNORM },
+   { GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV,PIPE_FORMAT_R8G8B8X8_UNORM },
+   { GL_ABGR_EXT, GL_UNSIGNED_INT_8_8_8_8,PIPE_FORMAT_R8G8B8X8_UNORM },
+   { GL_BGRA, GL_UNSIGNED_INT_8_8_8_8,PIPE_FORMAT_X8R8G8B8_UNORM },
+   { 

Mesa (master): st/mesa: use a helper for st_framebuffer creation

2011-06-22 Thread Chia-I Wu
Module: Mesa
Branch: master
Commit: 7587c140cd0c28f6c500846a7311b435443f46fd
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7587c140cd0c28f6c500846a7311b435443f46fd

Author: Chia-I Wu o...@lunarg.com
Date:   Wed Jun 22 11:02:27 2011 +0900

st/mesa: use a helper for st_framebuffer creation

In st_api_make_current, we would like to reuse the exising
st_framebuffer if possible.  Use a helper function to make the code
clearer.

---

 src/mesa/state_tracker/st_manager.c |   47 +-
 1 files changed, 29 insertions(+), 18 deletions(-)

diff --git a/src/mesa/state_tracker/st_manager.c 
b/src/mesa/state_tracker/st_manager.c
index 46be553..c95514c 100644
--- a/src/mesa/state_tracker/st_manager.c
+++ b/src/mesa/state_tracker/st_manager.c
@@ -716,38 +716,49 @@ st_api_get_current(struct st_api *stapi)
return (st) ? st-iface : NULL;
 }
 
+static struct st_framebuffer *
+st_framebuffer_reuse_or_create(struct gl_framebuffer *fb,
+   struct st_framebuffer_iface *stfbi)
+{
+   struct st_framebuffer *cur = st_ws_framebuffer(fb), *stfb = NULL;
+
+   if (cur  cur-iface == stfbi) {
+  /* reuse the current stfb */
+  st_framebuffer_reference(stfb, cur);
+   }
+   else {
+  /* create a new one */
+  stfb = st_framebuffer_create(stfbi);
+   }
+
+   return stfb;
+}
+
 static boolean
 st_api_make_current(struct st_api *stapi, struct st_context_iface *stctxi,
 struct st_framebuffer_iface *stdrawi,
 struct st_framebuffer_iface *streadi)
 {
struct st_context *st = (struct st_context *) stctxi;
-   struct st_framebuffer *stdraw, *stread, *stfb;
+   struct st_framebuffer *stdraw, *stread;
boolean ret;
 
_glapi_check_multithread();
 
if (st) {
-  /* reuse/create the draw fb */
-  stfb = st_ws_framebuffer(st-ctx-WinSysDrawBuffer);
-  if (stfb  stfb-iface == stdrawi) {
- stdraw = NULL;
- st_framebuffer_reference(stdraw, stfb);
+  /* reuse or create the draw fb */
+  stdraw = st_framebuffer_reuse_or_create(st-ctx-WinSysDrawBuffer,
+  stdrawi);
+  if (streadi != stdrawi) {
+ /* do the same for the read fb */
+ stread = st_framebuffer_reuse_or_create(st-ctx-WinSysReadBuffer,
+ streadi);
   }
   else {
- stdraw = st_framebuffer_create(stdrawi);
-  }
-
-  /* reuse/create the read fb */
-  stfb = st_ws_framebuffer(st-ctx-WinSysReadBuffer);
-  if (!stfb || stfb-iface != streadi)
- stfb = stdraw;
-  if (stfb  stfb-iface == streadi) {
  stread = NULL;
- st_framebuffer_reference(stread, stfb);
-  }
-  else {
- stread = st_framebuffer_create(streadi);
+ /* reuse the draw fb for the read fb */
+ if (stdraw)
+st_framebuffer_reference(stread, stdraw);
   }
 
   if (stdraw  stread) {

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