iris: Fix framebuffer layer count
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 24 Dec 2018 02:22:44 +0000 (18:22 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:11 +0000 (10:26 -0800)
cso_fb->layers is only valid for no-attachment framebuffers.  Use the
helper function to get the real value, then stash it so we don't have
to call the helper function on the old value for comparison, or at draw
time for Force Zero RTA Index setting.

This fixes Force Zero RTA Index being set even when attempting layered
rendering.

src/gallium/drivers/iris/iris_state.c

index d26894264cd0994576fc21dff6c5326c21950aef..0a2a5997ab80065668e9b33148bcbd58ff75bcd9 100644 (file)
@@ -2088,6 +2088,7 @@ iris_set_framebuffer_state(struct pipe_context *ctx,
    struct iris_resource *stencil_res;
 
    unsigned samples = util_framebuffer_get_num_samples(state);
+   unsigned layers = util_framebuffer_get_num_layers(state);
 
    if (cso->samples != samples) {
       ice->state.dirty |= IRIS_DIRTY_MULTISAMPLE;
@@ -2097,7 +2098,7 @@ iris_set_framebuffer_state(struct pipe_context *ctx,
       ice->state.dirty |= IRIS_DIRTY_BLEND_STATE;
    }
 
-   if ((cso->layers == 0) != (state->layers == 0)) {
+   if ((cso->layers == 0) != (layers == 0)) {
       ice->state.dirty |= IRIS_DIRTY_CLIP;
    }
 
@@ -2107,6 +2108,7 @@ iris_set_framebuffer_state(struct pipe_context *ctx,
 
    util_copy_framebuffer_state(cso, state);
    cso->samples = samples;
+   cso->layers = layers;
 
    struct iris_depth_buffer_state *cso_z = &ice->state.genx->depth_buffer;