xf86-video-intel: src/sna/gen4_render.c src/sna/gen5_render.c src/sna/gen6_render.c src/sna/gen7_render.c

Chris Wilson ickle at kemper.freedesktop.org
Sat Jul 14 06:57:09 PDT 2012


 src/sna/gen4_render.c |   47 ++++++++++++++++-------------------
 src/sna/gen5_render.c |   50 ++++++++++++++++---------------------
 src/sna/gen6_render.c |   50 ++++++++++++++++---------------------
 src/sna/gen7_render.c |   67 +++++++++++++++++++++++++-------------------------
 4 files changed, 100 insertions(+), 114 deletions(-)

New commits:
commit fffbc34e4621898eee9b80bf8b6b3699bcade52a
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sat Jul 14 14:54:27 2012 +0100

    sna/gen4+: Translate to card format using a switch
    
    GCC produces faster code than a walk over the format tables.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index 2edfbd0..9cd0250 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -249,25 +249,6 @@ static const struct blendinfo {
  */
 #define GEN4_BLENDFACTOR_COUNT (GEN4_BLENDFACTOR_INV_DST_ALPHA + 1)
 
-static const struct formatinfo {
-	CARD32 pict_fmt;
-	uint32_t card_fmt;
-} gen4_tex_formats[] = {
-	{PICT_a8, GEN4_SURFACEFORMAT_A8_UNORM},
-	{PICT_a8r8g8b8, GEN4_SURFACEFORMAT_B8G8R8A8_UNORM},
-	{PICT_x8r8g8b8, GEN4_SURFACEFORMAT_B8G8R8X8_UNORM},
-	{PICT_a8b8g8r8, GEN4_SURFACEFORMAT_R8G8B8A8_UNORM},
-	{PICT_x8b8g8r8, GEN4_SURFACEFORMAT_R8G8B8X8_UNORM},
-	{PICT_r8g8b8, GEN4_SURFACEFORMAT_R8G8B8_UNORM},
-	{PICT_r5g6b5, GEN4_SURFACEFORMAT_B5G6R5_UNORM},
-	{PICT_a1r5g5b5, GEN4_SURFACEFORMAT_B5G5R5A1_UNORM},
-	{PICT_a2r10g10b10, GEN4_SURFACEFORMAT_B10G10R10A2_UNORM},
-	{PICT_x2r10g10b10, GEN4_SURFACEFORMAT_B10G10R10X2_UNORM},
-	{PICT_a2b10g10r10, GEN4_SURFACEFORMAT_R10G10B10A2_UNORM},
-	{PICT_x2r10g10b10, GEN4_SURFACEFORMAT_B10G10R10X2_UNORM},
-	{PICT_a4r4g4b4, GEN4_SURFACEFORMAT_B4G4R4A4_UNORM},
-};
-
 #define BLEND_OFFSET(s, d) \
 	(((s) * GEN4_BLENDFACTOR_COUNT + (d)) * 64)
 
@@ -661,13 +642,29 @@ sampler_state_init(struct gen4_sampler_state *sampler_state,
 
 static uint32_t gen4_get_card_format(PictFormat format)
 {
-	unsigned int i;
-
-	for (i = 0; i < ARRAY_SIZE(gen4_tex_formats); i++) {
-		if (gen4_tex_formats[i].pict_fmt == format)
-			return gen4_tex_formats[i].card_fmt;
+	switch (format) {
+	default:
+		return -1;
+	case PICT_a8r8g8b8:
+	case PICT_x8r8g8b8:
+		return GEN4_SURFACEFORMAT_B8G8R8A8_UNORM;
+	case PICT_a8b8g8r8:
+	case PICT_x8b8g8r8:
+		return GEN4_SURFACEFORMAT_R8G8B8A8_UNORM;
+	case PICT_a2r10g10b10:
+	case PICT_x2r10g10b10:
+		return GEN4_SURFACEFORMAT_B10G10R10A2_UNORM;
+	case PICT_r5g6b5:
+		return GEN4_SURFACEFORMAT_B5G6R5_UNORM;
+	case PICT_x1r5g5b5:
+	case PICT_a1r5g5b5:
+		return GEN4_SURFACEFORMAT_B5G5R5A1_UNORM;
+	case PICT_a8:
+		return GEN4_SURFACEFORMAT_A8_UNORM;
+	case PICT_a4r4g4b4:
+	case PICT_x4r4g4b4:
+		return GEN4_SURFACEFORMAT_B4G4R4A4_UNORM;
 	}
-	return -1;
 }
 
 static uint32_t gen4_filter(uint32_t filter)
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index c4b1ecf..06123cc 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -235,28 +235,6 @@ static const struct blendinfo {
  */
 #define GEN5_BLENDFACTOR_COUNT (GEN5_BLENDFACTOR_INV_DST_ALPHA + 1)
 
-/* FIXME: surface format defined in gen5_defines.h, shared Sampling engine
- * 1.7.2
- */
-static const struct formatinfo {
-	CARD32 pict_fmt;
-	uint32_t card_fmt;
-} gen5_tex_formats[] = {
-	{PICT_a8, GEN5_SURFACEFORMAT_A8_UNORM},
-	{PICT_a8r8g8b8, GEN5_SURFACEFORMAT_B8G8R8A8_UNORM},
-	{PICT_x8r8g8b8, GEN5_SURFACEFORMAT_B8G8R8X8_UNORM},
-	{PICT_a8b8g8r8, GEN5_SURFACEFORMAT_R8G8B8A8_UNORM},
-	{PICT_x8b8g8r8, GEN5_SURFACEFORMAT_R8G8B8X8_UNORM},
-	{PICT_r8g8b8, GEN5_SURFACEFORMAT_R8G8B8_UNORM},
-	{PICT_r5g6b5, GEN5_SURFACEFORMAT_B5G6R5_UNORM},
-	{PICT_a1r5g5b5, GEN5_SURFACEFORMAT_B5G5R5A1_UNORM},
-	{PICT_a2r10g10b10, GEN5_SURFACEFORMAT_B10G10R10A2_UNORM},
-	{PICT_x2r10g10b10, GEN5_SURFACEFORMAT_B10G10R10X2_UNORM},
-	{PICT_a2b10g10r10, GEN5_SURFACEFORMAT_R10G10B10A2_UNORM},
-	{PICT_x2r10g10b10, GEN5_SURFACEFORMAT_B10G10R10X2_UNORM},
-	{PICT_a4r4g4b4, GEN5_SURFACEFORMAT_B4G4R4A4_UNORM},
-};
-
 #define BLEND_OFFSET(s, d) \
 	(((s) * GEN5_BLENDFACTOR_COUNT + (d)) * 64)
 
@@ -657,13 +635,29 @@ sampler_state_init(struct gen5_sampler_state *sampler_state,
 
 static uint32_t gen5_get_card_format(PictFormat format)
 {
-	unsigned int i;
-
-	for (i = 0; i < ARRAY_SIZE(gen5_tex_formats); i++) {
-		if (gen5_tex_formats[i].pict_fmt == format)
-			return gen5_tex_formats[i].card_fmt;
+	switch (format) {
+	default:
+		return -1;
+	case PICT_a8r8g8b8:
+	case PICT_x8r8g8b8:
+		return GEN5_SURFACEFORMAT_B8G8R8A8_UNORM;
+	case PICT_a8b8g8r8:
+	case PICT_x8b8g8r8:
+		return GEN5_SURFACEFORMAT_R8G8B8A8_UNORM;
+	case PICT_a2r10g10b10:
+	case PICT_x2r10g10b10:
+		return GEN5_SURFACEFORMAT_B10G10R10A2_UNORM;
+	case PICT_r5g6b5:
+		return GEN5_SURFACEFORMAT_B5G6R5_UNORM;
+	case PICT_x1r5g5b5:
+	case PICT_a1r5g5b5:
+		return GEN5_SURFACEFORMAT_B5G5R5A1_UNORM;
+	case PICT_a8:
+		return GEN5_SURFACEFORMAT_A8_UNORM;
+	case PICT_a4r4g4b4:
+	case PICT_x4r4g4b4:
+		return GEN5_SURFACEFORMAT_B4G4R4A4_UNORM;
 	}
-	return -1;
 }
 
 static uint32_t gen5_filter(uint32_t filter)
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index ccf27be..ab3e4d6 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -188,28 +188,6 @@ static const struct blendinfo {
  */
 #define GEN6_BLENDFACTOR_COUNT (GEN6_BLENDFACTOR_INV_DST_ALPHA + 1)
 
-/* FIXME: surface format defined in gen6_defines.h, shared Sampling engine
- * 1.7.2
- */
-static const struct formatinfo {
-	CARD32 pict_fmt;
-	uint32_t card_fmt;
-} gen6_tex_formats[] = {
-	{PICT_a8, GEN6_SURFACEFORMAT_A8_UNORM},
-	{PICT_a8r8g8b8, GEN6_SURFACEFORMAT_B8G8R8A8_UNORM},
-	{PICT_x8r8g8b8, GEN6_SURFACEFORMAT_B8G8R8X8_UNORM},
-	{PICT_a8b8g8r8, GEN6_SURFACEFORMAT_R8G8B8A8_UNORM},
-	{PICT_x8b8g8r8, GEN6_SURFACEFORMAT_R8G8B8X8_UNORM},
-	{PICT_r8g8b8, GEN6_SURFACEFORMAT_R8G8B8_UNORM},
-	{PICT_r5g6b5, GEN6_SURFACEFORMAT_B5G6R5_UNORM},
-	{PICT_a1r5g5b5, GEN6_SURFACEFORMAT_B5G5R5A1_UNORM},
-	{PICT_a2r10g10b10, GEN6_SURFACEFORMAT_B10G10R10A2_UNORM},
-	{PICT_x2r10g10b10, GEN6_SURFACEFORMAT_B10G10R10X2_UNORM},
-	{PICT_a2b10g10r10, GEN6_SURFACEFORMAT_R10G10B10A2_UNORM},
-	{PICT_x2r10g10b10, GEN6_SURFACEFORMAT_B10G10R10X2_UNORM},
-	{PICT_a4r4g4b4, GEN6_SURFACEFORMAT_B4G4R4A4_UNORM},
-};
-
 #define GEN6_BLEND_STATE_PADDED_SIZE	ALIGN(sizeof(struct gen6_blend_state), 64)
 
 #define BLEND_OFFSET(s, d) \
@@ -1140,13 +1118,29 @@ static uint32_t gen6_create_cc_viewport(struct sna_static_stream *stream)
 
 static uint32_t gen6_get_card_format(PictFormat format)
 {
-	unsigned int i;
-
-	for (i = 0; i < ARRAY_SIZE(gen6_tex_formats); i++) {
-		if (gen6_tex_formats[i].pict_fmt == format)
-			return gen6_tex_formats[i].card_fmt;
+	switch (format) {
+	default:
+		return -1;
+	case PICT_a8r8g8b8:
+	case PICT_x8r8g8b8:
+		return GEN6_SURFACEFORMAT_B8G8R8A8_UNORM;
+	case PICT_a8b8g8r8:
+	case PICT_x8b8g8r8:
+		return GEN6_SURFACEFORMAT_R8G8B8A8_UNORM;
+	case PICT_a2r10g10b10:
+	case PICT_x2r10g10b10:
+		return GEN6_SURFACEFORMAT_B10G10R10A2_UNORM;
+	case PICT_r5g6b5:
+		return GEN6_SURFACEFORMAT_B5G6R5_UNORM;
+	case PICT_x1r5g5b5:
+	case PICT_a1r5g5b5:
+		return GEN6_SURFACEFORMAT_B5G5R5A1_UNORM;
+	case PICT_a8:
+		return GEN6_SURFACEFORMAT_A8_UNORM;
+	case PICT_a4r4g4b4:
+	case PICT_x4r4g4b4:
+		return GEN6_SURFACEFORMAT_B4G4R4A4_UNORM;
 	}
-	return -1;
 }
 
 static uint32_t
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index e76acd8..5d1d93f 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -221,28 +221,6 @@ static const struct blendinfo {
  */
 #define GEN7_BLENDFACTOR_COUNT (GEN7_BLENDFACTOR_INV_DST_ALPHA + 1)
 
-/* FIXME: surface format defined in gen7_defines.h, shared Sampling engine
- * 1.7.2
- */
-static const struct formatinfo {
-	CARD32 pict_fmt;
-	uint32_t card_fmt;
-} gen7_tex_formats[] = {
-	{PICT_a8, GEN7_SURFACEFORMAT_A8_UNORM},
-	{PICT_a8r8g8b8, GEN7_SURFACEFORMAT_B8G8R8A8_UNORM},
-	{PICT_x8r8g8b8, GEN7_SURFACEFORMAT_B8G8R8X8_UNORM},
-	{PICT_a8b8g8r8, GEN7_SURFACEFORMAT_R8G8B8A8_UNORM},
-	{PICT_x8b8g8r8, GEN7_SURFACEFORMAT_R8G8B8X8_UNORM},
-	{PICT_r8g8b8, GEN7_SURFACEFORMAT_R8G8B8_UNORM},
-	{PICT_r5g6b5, GEN7_SURFACEFORMAT_B5G6R5_UNORM},
-	{PICT_a1r5g5b5, GEN7_SURFACEFORMAT_B5G5R5A1_UNORM},
-	{PICT_a2r10g10b10, GEN7_SURFACEFORMAT_B10G10R10A2_UNORM},
-	{PICT_x2r10g10b10, GEN7_SURFACEFORMAT_B10G10R10X2_UNORM},
-	{PICT_a2b10g10r10, GEN7_SURFACEFORMAT_R10G10B10A2_UNORM},
-	{PICT_x2r10g10b10, GEN7_SURFACEFORMAT_B10G10R10X2_UNORM},
-	{PICT_a4r4g4b4, GEN7_SURFACEFORMAT_B4G4R4A4_UNORM},
-};
-
 #define GEN7_BLEND_STATE_PADDED_SIZE	ALIGN(sizeof(struct gen7_blend_state), 64)
 
 #define BLEND_OFFSET(s, d) \
@@ -300,25 +278,32 @@ static uint32_t gen7_get_dest_format(PictFormat format)
 {
 	switch (format) {
 	default:
-		assert(0);
+		return -1;
 	case PICT_a8r8g8b8:
-	case PICT_x8r8g8b8:
 		return GEN7_SURFACEFORMAT_B8G8R8A8_UNORM;
+	case PICT_x8r8g8b8:
+		return GEN7_SURFACEFORMAT_B8G8R8X8_UNORM;
 	case PICT_a8b8g8r8:
-	case PICT_x8b8g8r8:
 		return GEN7_SURFACEFORMAT_R8G8B8A8_UNORM;
+	case PICT_x8b8g8r8:
+		return GEN7_SURFACEFORMAT_R8G8B8X8_UNORM;
 	case PICT_a2r10g10b10:
-	case PICT_x2r10g10b10:
 		return GEN7_SURFACEFORMAT_B10G10R10A2_UNORM;
+	case PICT_x2r10g10b10:
+		return GEN7_SURFACEFORMAT_B10G10R10X2_UNORM;
+	case PICT_a2b10g10r10:
+		return GEN7_SURFACEFORMAT_R10G10B10A2_UNORM;
+	case PICT_r8g8b8:
+		return GEN7_SURFACEFORMAT_R8G8B8_UNORM;
 	case PICT_r5g6b5:
 		return GEN7_SURFACEFORMAT_B5G6R5_UNORM;
 	case PICT_x1r5g5b5:
+		return GEN7_SURFACEFORMAT_B5G5R5X1_UNORM;
 	case PICT_a1r5g5b5:
 		return GEN7_SURFACEFORMAT_B5G5R5A1_UNORM;
 	case PICT_a8:
 		return GEN7_SURFACEFORMAT_A8_UNORM;
 	case PICT_a4r4g4b4:
-	case PICT_x4r4g4b4:
 		return GEN7_SURFACEFORMAT_B4G4R4A4_UNORM;
 	}
 }
@@ -1281,13 +1266,29 @@ static uint32_t gen7_create_cc_viewport(struct sna_static_stream *stream)
 
 static uint32_t gen7_get_card_format(PictFormat format)
 {
-	unsigned int i;
-
-	for (i = 0; i < ARRAY_SIZE(gen7_tex_formats); i++) {
-		if (gen7_tex_formats[i].pict_fmt == format)
-			return gen7_tex_formats[i].card_fmt;
+	switch (format) {
+	default:
+		return -1;
+	case PICT_a8r8g8b8:
+	case PICT_x8r8g8b8:
+		return GEN7_SURFACEFORMAT_B8G8R8A8_UNORM;
+	case PICT_a8b8g8r8:
+	case PICT_x8b8g8r8:
+		return GEN7_SURFACEFORMAT_R8G8B8A8_UNORM;
+	case PICT_a2r10g10b10:
+	case PICT_x2r10g10b10:
+		return GEN7_SURFACEFORMAT_B10G10R10A2_UNORM;
+	case PICT_r5g6b5:
+		return GEN7_SURFACEFORMAT_B5G6R5_UNORM;
+	case PICT_x1r5g5b5:
+	case PICT_a1r5g5b5:
+		return GEN7_SURFACEFORMAT_B5G5R5A1_UNORM;
+	case PICT_a8:
+		return GEN7_SURFACEFORMAT_A8_UNORM;
+	case PICT_a4r4g4b4:
+	case PICT_x4r4g4b4:
+		return GEN7_SURFACEFORMAT_B4G4R4A4_UNORM;
 	}
-	return -1;
 }
 
 static uint32_t


More information about the xorg-commit mailing list