From fffbc34e4621898eee9b80bf8b6b3699bcade52a Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sat, 14 Jul 2012 14:54:27 +0100 Subject: [PATCH] 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 --- 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(-) diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c index 2edfbd00..9cd02500 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 c4b1ecf5..06123ccd 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 ccf27be4..ab3e4d66 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 e76acd87..5d1d93fe 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