freedreno: remove per-stateobj dirty_mask's
authorRob Clark <robdclark@gmail.com>
Mon, 11 Jun 2018 18:05:19 +0000 (14:05 -0400)
committerRob Clark <robdclark@gmail.com>
Tue, 19 Jun 2018 17:02:28 +0000 (13:02 -0400)
These never got updated in fd_context_all_dirty() so actually trying to
rely on them (in the case of fd5_emit_images()) ends up in some cases
where state is not emitted but should be.  Best to just rip this out.

Signed-off-by: Rob Clark <robdclark@gmail.com>
src/gallium/drivers/freedreno/a2xx/fd2_emit.c
src/gallium/drivers/freedreno/a5xx/fd5_image.c
src/gallium/drivers/freedreno/freedreno_context.h
src/gallium/drivers/freedreno/freedreno_state.c
src/gallium/drivers/freedreno/ir3/ir3_shader.c

index a787b71e379ae8af99faf663918efaaa650a32fb..d749eb0324a9c2fc178dc9680d7c7080dd4385c9 100644 (file)
@@ -58,10 +58,6 @@ emit_constants(struct fd_ringbuffer *ring, uint32_t base,
        uint32_t start_base = base;
        unsigned i;
 
-       // XXX TODO only emit dirty consts.. but we need to keep track if
-       // they are clobbered by a clear, gmem2mem, or mem2gmem..
-       constbuf->dirty_mask = enabled_mask;
-
        /* emit user constants: */
        while (enabled_mask) {
                unsigned index = ffs(enabled_mask) - 1;
@@ -79,25 +75,21 @@ emit_constants(struct fd_ringbuffer *ring, uint32_t base,
                if (shader && ((base - start_base) >= (shader->first_immediate * 4)))
                        break;
 
-               if (constbuf->dirty_mask & (1 << index)) {
-                       const uint32_t *dwords;
-
-                       if (cb->user_buffer) {
-                               dwords = cb->user_buffer;
-                       } else {
-                               struct fd_resource *rsc = fd_resource(cb->buffer);
-                               dwords = fd_bo_map(rsc->bo);
-                       }
+               const uint32_t *dwords;
 
-                       dwords = (uint32_t *)(((uint8_t *)dwords) + cb->buffer_offset);
+               if (cb->user_buffer) {
+                       dwords = cb->user_buffer;
+               } else {
+                       struct fd_resource *rsc = fd_resource(cb->buffer);
+                       dwords = fd_bo_map(rsc->bo);
+               }
 
-                       OUT_PKT3(ring, CP_SET_CONSTANT, size + 1);
-                       OUT_RING(ring, base);
-                       for (i = 0; i < size; i++)
-                               OUT_RING(ring, *(dwords++));
+               dwords = (uint32_t *)(((uint8_t *)dwords) + cb->buffer_offset);
 
-                       constbuf->dirty_mask &= ~(1 << index);
-               }
+               OUT_PKT3(ring, CP_SET_CONSTANT, size + 1);
+               OUT_RING(ring, base);
+               for (i = 0; i < size; i++)
+                       OUT_RING(ring, *(dwords++));
 
                base += size;
                enabled_mask &= ~(1 << index);
index f5d25ff8a696862cc0658a7fe6bf05569714e17e..028497f3a108d738894ce70d6bee850df4cc2645 100644 (file)
@@ -219,11 +219,10 @@ fd5_emit_images(struct fd_context *ctx, struct fd_ringbuffer *ring,
                enum pipe_shader_type shader)
 {
        struct fd_shaderimg_stateobj *so = &ctx->shaderimg[shader];
+       unsigned enabled_mask = so->enabled_mask;
 
-       so->dirty_mask &= so->enabled_mask;
-
-       while (so->dirty_mask) {
-               unsigned index = u_bit_scan(&so->dirty_mask);
+       while (enabled_mask) {
+               unsigned index = u_bit_scan(&enabled_mask);
                unsigned slot = get_image_slot(index);
                struct fd5_image img;
 
@@ -233,4 +232,3 @@ fd5_emit_images(struct fd_context *ctx, struct fd_ringbuffer *ring,
                emit_image_ssbo(ring, slot, &img, shader);
        }
 }
-
index af564bd87609fab46eab96051cbfc88458cd65bd..b81cbd052f5245c2f5738f81a7172a738cd6605d 100644 (file)
@@ -69,26 +69,22 @@ struct fd_program_stateobj {
 struct fd_constbuf_stateobj {
        struct pipe_constant_buffer cb[PIPE_MAX_CONSTANT_BUFFERS];
        uint32_t enabled_mask;
-       uint32_t dirty_mask;
 };
 
 struct fd_shaderbuf_stateobj {
        struct pipe_shader_buffer sb[PIPE_MAX_SHADER_BUFFERS];
        uint32_t enabled_mask;
-       uint32_t dirty_mask;
 };
 
 struct fd_shaderimg_stateobj {
        struct pipe_image_view si[PIPE_MAX_SHADER_IMAGES];
        uint32_t enabled_mask;
-       uint32_t dirty_mask;
 };
 
 struct fd_vertexbuf_stateobj {
        struct pipe_vertex_buffer vb[PIPE_MAX_ATTRIBS];
        unsigned count;
        uint32_t enabled_mask;
-       uint32_t dirty_mask;
 };
 
 struct fd_vertex_stateobj {
index 05717da95995e5cec6a50a2194e440c45d8ca234..7f9d19aa5263159bac40ba2b312d72602a1b1dce 100644 (file)
@@ -103,12 +103,10 @@ fd_set_constant_buffer(struct pipe_context *pctx,
         */
        if (unlikely(!cb)) {
                so->enabled_mask &= ~(1 << index);
-               so->dirty_mask &= ~(1 << index);
                return;
        }
 
        so->enabled_mask |= 1 << index;
-       so->dirty_mask |= 1 << index;
        ctx->dirty_shader[shader] |= FD_DIRTY_SHADER_CONST;
        ctx->dirty |= FD_DIRTY_CONST;
 }
@@ -157,7 +155,6 @@ fd_set_shader_buffers(struct pipe_context *pctx,
                so->enabled_mask &= ~mask;
        }
 
-       so->dirty_mask |= mask;
        ctx->dirty_shader[shader] |= FD_DIRTY_SHADER_SSBO;
 }
 
@@ -204,7 +201,6 @@ fd_set_shader_images(struct pipe_context *pctx,
                so->enabled_mask &= ~mask;
        }
 
-       so->dirty_mask |= mask;
        ctx->dirty_shader[shader] |= FD_DIRTY_SHADER_IMAGE;
 }
 
index ff1ce4d053583404debbf80d6b07dd09857c2cd7..7205fb0d2745a99cd82feaec1f7e0be60e1fa1ed 100644 (file)
@@ -559,10 +559,8 @@ emit_user_consts(struct fd_context *ctx, const struct ir3_shader_variant *v,
                struct fd_ringbuffer *ring, struct fd_constbuf_stateobj *constbuf)
 {
        const unsigned index = 0;     /* user consts are index 0 */
-       /* TODO save/restore dirty_mask for binning pass instead: */
-       uint32_t dirty_mask = constbuf->enabled_mask;
 
-       if (dirty_mask & (1 << index)) {
+       if (constbuf->enabled_mask & (1 << index)) {
                struct pipe_constant_buffer *cb = &constbuf->cb[index];
                unsigned size = align(cb->buffer_size, 4) / 4; /* size in dwords */
 
@@ -587,7 +585,6 @@ emit_user_consts(struct fd_context *ctx, const struct ir3_shader_variant *v,
                        ctx->emit_const(ring, v->type, 0,
                                        cb->buffer_offset, size,
                                        cb->user_buffer, cb->buffer);
-                       constbuf->dirty_mask &= ~(1 << index);
                }
        }
 }