nouveau: nv30: refuse binding a colour buffer with a zeta buffer with different bits...
authorPatrice Mandin <patmandin@gmail.com>
Thu, 15 Oct 2009 19:58:44 +0000 (21:58 +0200)
committerPatrice Mandin <patmandin@gmail.com>
Thu, 15 Oct 2009 19:58:44 +0000 (21:58 +0200)
src/gallium/drivers/nv30/nv30_state_fb.c

index 2729dcec7cc1338c5fd6236a437131a0408f5008..9b0266fba5d4054885ae5dab6cbdd3c8b7f77640 100644 (file)
@@ -15,6 +15,7 @@ nv30_state_framebuffer_validate(struct nv30_context *nv30)
        unsigned w = fb->width;
        unsigned h = fb->height;
        struct nv30_miptree *nv30mt;
+       int colour_bits = 32, zeta_bits = 32;
 
        rt_enable = 0;
        for (i = 0; i < fb->nr_cbufs; i++) {
@@ -54,6 +55,7 @@ nv30_state_framebuffer_validate(struct nv30_context *nv30)
                break;
        case PIPE_FORMAT_R5G6B5_UNORM:
                rt_format |= NV34TCL_RT_FORMAT_COLOR_R5G6B5;
+               colour_bits = 16;
                break;
        default:
                assert(0);
@@ -62,6 +64,7 @@ nv30_state_framebuffer_validate(struct nv30_context *nv30)
        switch (zeta_format) {
        case PIPE_FORMAT_Z16_UNORM:
                rt_format |= NV34TCL_RT_FORMAT_ZETA_Z16;
+               zeta_bits = 16;
                break;
        case PIPE_FORMAT_Z24S8_UNORM:
        case PIPE_FORMAT_Z24X8_UNORM:
@@ -72,6 +75,10 @@ nv30_state_framebuffer_validate(struct nv30_context *nv30)
                assert(0);
        }
 
+       if (colour_bits != zeta_bits) {
+               return FALSE;
+       }
+
        if (rt_enable & NV34TCL_RT_ENABLE_COLOR0) {
                uint32_t pitch = rt[0]->pitch;
                if (zeta) {