Mesa (master): r600: implement texture border color

Alex Deucher agd5f at kemper.freedesktop.org
Tue Jul 28 22:00:36 UTC 2009


Module: Mesa
Branch: master
Commit: e629c50e2be03144e8aeef3c51624ae8db9957b8
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e629c50e2be03144e8aeef3c51624ae8db9957b8

Author: Alex Deucher <alexdeucher at gmail.com>
Date:   Tue Jul 28 17:59:54 2009 -0400

r600: implement texture border color

---

 src/mesa/drivers/dri/r600/r600_tex.c               |   14 ++++++--------
 src/mesa/drivers/dri/r600/r700_render.c            |    9 +++++++++
 .../drivers/dri/radeon/radeon_common_context.h     |    5 +++++
 3 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/r600_tex.c b/src/mesa/drivers/dri/r600/r600_tex.c
index a1e8945..444024e 100644
--- a/src/mesa/drivers/dri/r600/r600_tex.c
+++ b/src/mesa/drivers/dri/r600/r600_tex.c
@@ -269,14 +269,12 @@ static void r600SetTexFilter(radeonTexObjPtr t, GLenum minf, GLenum magf, GLfloa
 
 static void r600SetTexBorderColor(radeonTexObjPtr t, const GLfloat color[4])
 {
-#if 0
-	GLubyte c[4];
-	CLAMPED_FLOAT_TO_UBYTE(c[0], color[0]);
-	CLAMPED_FLOAT_TO_UBYTE(c[1], color[1]);
-	CLAMPED_FLOAT_TO_UBYTE(c[2], color[2]);
-	CLAMPED_FLOAT_TO_UBYTE(c[3], color[3]);
-	t->pp_border_color = PACK_COLOR_8888(c[3], c[0], c[1], c[2]);
-#endif
+	t->TD_PS_SAMPLER0_BORDER_ALPHA = *((uint32_t*)&(color[3]));
+	t->TD_PS_SAMPLER0_BORDER_RED = *((uint32_t*)&(color[2]));
+	t->TD_PS_SAMPLER0_BORDER_GREEN = *((uint32_t*)&(color[1]));
+	t->TD_PS_SAMPLER0_BORDER_BLUE = *((uint32_t*)&(color[0]));
+        SETfield(t->SQ_TEX_SAMPLER0, SQ_TEX_BORDER_COLOR_REGISTER,
+		 BORDER_COLOR_TYPE_shift, BORDER_COLOR_TYPE_mask);
 }
 
 /**
diff --git a/src/mesa/drivers/dri/r600/r700_render.c b/src/mesa/drivers/dri/r600/r700_render.c
index f2fec27..4e0d539 100644
--- a/src/mesa/drivers/dri/r600/r700_render.c
+++ b/src/mesa/drivers/dri/r600/r700_render.c
@@ -187,6 +187,15 @@ GLboolean r700SendTextureState(context_t *context)
 			    R600_OUT_BATCH(r700->textures[i]->SQ_TEX_SAMPLER1);
 			    R600_OUT_BATCH(r700->textures[i]->SQ_TEX_SAMPLER2);
 			    END_BATCH();
+
+			    BEGIN_BATCH_NO_AUTOSTATE(2 + 4);
+			    R600_OUT_BATCH_REGSEQ((TD_PS_SAMPLER0_BORDER_RED + (i * 16)), 4);
+			    R600_OUT_BATCH(r700->textures[i]->TD_PS_SAMPLER0_BORDER_RED);
+			    R600_OUT_BATCH(r700->textures[i]->TD_PS_SAMPLER0_BORDER_GREEN);
+			    R600_OUT_BATCH(r700->textures[i]->TD_PS_SAMPLER0_BORDER_BLUE);
+			    R600_OUT_BATCH(r700->textures[i]->TD_PS_SAMPLER0_BORDER_ALPHA);
+			    END_BATCH();
+
 			    COMMIT_BATCH();
 		    }
 	    }
diff --git a/src/mesa/drivers/dri/radeon/radeon_common_context.h b/src/mesa/drivers/dri/radeon/radeon_common_context.h
index e4a8da0..0cdacb1 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common_context.h
+++ b/src/mesa/drivers/dri/radeon/radeon_common_context.h
@@ -239,6 +239,11 @@ struct radeon_tex_obj {
 	GLuint SQ_TEX_SAMPLER1;
 	GLuint SQ_TEX_SAMPLER2;
 
+	GLuint TD_PS_SAMPLER0_BORDER_RED;
+	GLuint TD_PS_SAMPLER0_BORDER_GREEN;
+	GLuint TD_PS_SAMPLER0_BORDER_BLUE;
+	GLuint TD_PS_SAMPLER0_BORDER_ALPHA;
+
 	GLboolean border_fallback;
 
 




More information about the mesa-commit mailing list