summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/nv50/nv50_state_validate.c
diff options
context:
space:
mode:
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>2010-07-24 14:46:44 +0200
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>2010-07-24 14:48:19 +0200
commitd7aac107e64e1c4c1af30806817a2888e7a4a96c (patch)
tree304bf672761c828b7ca4959e05d4bc53eaf108a8 /src/gallium/drivers/nv50/nv50_state_validate.c
parentf3af1201c578443dd0f72e73470dd1763888a41d (diff)
nv50: introduce the big formats table
Diffstat (limited to 'src/gallium/drivers/nv50/nv50_state_validate.c')
-rw-r--r--src/gallium/drivers/nv50/nv50_state_validate.c75
1 files changed, 11 insertions, 64 deletions
diff --git a/src/gallium/drivers/nv50/nv50_state_validate.c b/src/gallium/drivers/nv50/nv50_state_validate.c
index 8d662d8f60..f1d8202dff 100644
--- a/src/gallium/drivers/nv50/nv50_state_validate.c
+++ b/src/gallium/drivers/nv50/nv50_state_validate.c
@@ -56,6 +56,8 @@ validate_fb(struct nv50_context *nv50)
assert(h == fb->cbufs[i]->height);
}
+ assert(nv50_format_table[fb->cbufs[i]->format].rt);
+
so_method(so, tesla, NV50TCL_RT_HORIZ(i), 2);
so_data (so, fb->cbufs[i]->width);
so_data (so, fb->cbufs[i]->height);
@@ -65,42 +67,9 @@ validate_fb(struct nv50_context *nv50)
NOUVEAU_BO_HIGH | NOUVEAU_BO_RDWR, 0, 0);
so_reloc (so, bo, fb->cbufs[i]->offset, NOUVEAU_BO_VRAM |
NOUVEAU_BO_LOW | NOUVEAU_BO_RDWR, 0, 0);
- switch (fb->cbufs[i]->format) {
- case PIPE_FORMAT_B8G8R8A8_UNORM:
- so_data(so, NV50TCL_RT_FORMAT_A8R8G8B8_UNORM);
- break;
- case PIPE_FORMAT_B8G8R8X8_UNORM:
- so_data(so, NV50TCL_RT_FORMAT_X8R8G8B8_UNORM);
- break;
- case PIPE_FORMAT_B5G6R5_UNORM:
- so_data(so, NV50TCL_RT_FORMAT_R5G6B5_UNORM);
- break;
- case PIPE_FORMAT_R16G16B16A16_SNORM:
- so_data(so, NV50TCL_RT_FORMAT_R16G16B16A16_SNORM);
- break;
- case PIPE_FORMAT_R16G16B16A16_UNORM:
- so_data(so, NV50TCL_RT_FORMAT_R16G16B16A16_UNORM);
- break;
- case PIPE_FORMAT_R16G16B16A16_FLOAT:
- so_data(so, NV50TCL_RT_FORMAT_R16G16B16A16_FLOAT);
- break;
- case PIPE_FORMAT_R32G32B32A32_FLOAT:
- so_data(so, NV50TCL_RT_FORMAT_R32G32B32A32_FLOAT);
- break;
- case PIPE_FORMAT_R16G16_SNORM:
- so_data(so, NV50TCL_RT_FORMAT_R16G16_SNORM);
- break;
- case PIPE_FORMAT_R16G16_UNORM:
- so_data(so, NV50TCL_RT_FORMAT_R16G16_UNORM);
- break;
- default:
- NOUVEAU_ERR("AIIII unknown format %s\n",
- util_format_name(fb->cbufs[i]->format));
- so_data(so, NV50TCL_RT_FORMAT_X8R8G8B8_UNORM);
- break;
- }
- so_data(so, nv50_miptree(pt)->
- level[fb->cbufs[i]->level].tile_mode << 4);
+ so_data (so, nv50_format_table[fb->cbufs[i]->format].rt);
+ so_data (so, nv50_miptree(pt)->
+ level[fb->cbufs[i]->level].tile_mode << 4);
so_data(so, 0x00000000);
so_method(so, tesla, NV50TCL_RT_ARRAY_MODE, 1);
@@ -120,39 +89,17 @@ validate_fb(struct nv50_context *nv50)
assert(h == fb->zsbuf->height);
}
+ assert(nv50_format_table[fb->zsbuf->format].rt);
+
so_method(so, tesla, NV50TCL_ZETA_ADDRESS_HIGH, 5);
so_reloc (so, bo, fb->zsbuf->offset, NOUVEAU_BO_VRAM |
NOUVEAU_BO_HIGH | NOUVEAU_BO_RDWR, 0, 0);
so_reloc (so, bo, fb->zsbuf->offset, NOUVEAU_BO_VRAM |
NOUVEAU_BO_LOW | NOUVEAU_BO_RDWR, 0, 0);
- switch (fb->zsbuf->format) {
- case PIPE_FORMAT_Z24_UNORM_S8_USCALED:
- so_data(so, NV50TCL_ZETA_FORMAT_S8Z24_UNORM);
- break;
- case PIPE_FORMAT_Z24X8_UNORM:
- so_data(so, NV50TCL_ZETA_FORMAT_X8Z24_UNORM);
- break;
- case PIPE_FORMAT_S8_USCALED_Z24_UNORM:
- so_data(so, NV50TCL_ZETA_FORMAT_Z24S8_UNORM);
- break;
- case PIPE_FORMAT_Z32_FLOAT:
- so_data(so, NV50TCL_ZETA_FORMAT_Z32_FLOAT);
- break;
- case PIPE_FORMAT_Z32_FLOAT_S8X24_USCALED:
- so_data(so, NV50TCL_ZETA_FORMAT_Z32_FLOAT_X24S8_UNORM);
- break;
- case PIPE_FORMAT_Z16_UNORM:
- so_data(so, NV50TCL_ZETA_FORMAT_Z16_UNORM);
- break;
- default:
- NOUVEAU_ERR("AIIII unknown format %s\n",
- util_format_name(fb->zsbuf->format));
- so_data(so, NV50TCL_ZETA_FORMAT_S8Z24_UNORM);
- break;
- }
- so_data(so, nv50_miptree(pt)->
- level[fb->zsbuf->level].tile_mode << 4);
- so_data(so, 0x00000000);
+ so_data (so, nv50_format_table[fb->zsbuf->format].rt);
+ so_data (so, nv50_miptree(pt)->
+ level[fb->zsbuf->level].tile_mode << 4);
+ so_data (so, 0x00000000);
so_method(so, tesla, NV50TCL_ZETA_ENABLE, 1);
so_data (so, 1);