summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/r300/r300_render.c
diff options
context:
space:
mode:
authorMarek Olšák <maraeo@gmail.com>2011-06-09 00:33:45 +0200
committerMarek Olšák <maraeo@gmail.com>2011-06-09 01:25:52 +0200
commitf48412c39f2ea3e2c25191814f519f84efec7a95 (patch)
treeceb08c36c320dca11caee2ef2975cb736896034e /src/gallium/drivers/r300/r300_render.c
parentd302804debeed13ced27fce222110c629e55d6f9 (diff)
downloadexternal_mesa3d-f48412c39f2ea3e2c25191814f519f84efec7a95.zip
external_mesa3d-f48412c39f2ea3e2c25191814f519f84efec7a95.tar.gz
external_mesa3d-f48412c39f2ea3e2c25191814f519f84efec7a95.tar.bz2
r300g: make translate_primitive table-driven
Diffstat (limited to 'src/gallium/drivers/r300/r300_render.c')
-rw-r--r--src/gallium/drivers/r300/r300_render.c44
1 files changed, 20 insertions, 24 deletions
diff --git a/src/gallium/drivers/r300/r300_render.c b/src/gallium/drivers/r300/r300_render.c
index b24e7fa..479503f 100644
--- a/src/gallium/drivers/r300/r300_render.c
+++ b/src/gallium/drivers/r300/r300_render.c
@@ -46,30 +46,26 @@
static uint32_t r300_translate_primitive(unsigned prim)
{
- switch (prim) {
- case PIPE_PRIM_POINTS:
- return R300_VAP_VF_CNTL__PRIM_POINTS;
- case PIPE_PRIM_LINES:
- return R300_VAP_VF_CNTL__PRIM_LINES;
- case PIPE_PRIM_LINE_LOOP:
- return R300_VAP_VF_CNTL__PRIM_LINE_LOOP;
- case PIPE_PRIM_LINE_STRIP:
- return R300_VAP_VF_CNTL__PRIM_LINE_STRIP;
- case PIPE_PRIM_TRIANGLES:
- return R300_VAP_VF_CNTL__PRIM_TRIANGLES;
- case PIPE_PRIM_TRIANGLE_STRIP:
- return R300_VAP_VF_CNTL__PRIM_TRIANGLE_STRIP;
- case PIPE_PRIM_TRIANGLE_FAN:
- return R300_VAP_VF_CNTL__PRIM_TRIANGLE_FAN;
- case PIPE_PRIM_QUADS:
- return R300_VAP_VF_CNTL__PRIM_QUADS;
- case PIPE_PRIM_QUAD_STRIP:
- return R300_VAP_VF_CNTL__PRIM_QUAD_STRIP;
- case PIPE_PRIM_POLYGON:
- return R300_VAP_VF_CNTL__PRIM_POLYGON;
- default:
- return 0;
- }
+ static const int prim_conv[] = {
+ R300_VAP_VF_CNTL__PRIM_POINTS,
+ R300_VAP_VF_CNTL__PRIM_LINES,
+ R300_VAP_VF_CNTL__PRIM_LINE_LOOP,
+ R300_VAP_VF_CNTL__PRIM_LINE_STRIP,
+ R300_VAP_VF_CNTL__PRIM_TRIANGLES,
+ R300_VAP_VF_CNTL__PRIM_TRIANGLE_STRIP,
+ R300_VAP_VF_CNTL__PRIM_TRIANGLE_FAN,
+ R300_VAP_VF_CNTL__PRIM_QUADS,
+ R300_VAP_VF_CNTL__PRIM_QUAD_STRIP,
+ R300_VAP_VF_CNTL__PRIM_POLYGON,
+ -1,
+ -1,
+ -1,
+ -1
+ };
+ unsigned hwprim = prim_conv[prim];
+
+ assert(hwprim != -1);
+ return hwprim;
}
static uint32_t r300_provoking_vertex_fixes(struct r300_context *r300,