Re: [Mesa-dev] [PATCH v2 10/12] radeonsi: Replace list_dirty with a mask.

2016-04-17 Thread Marek Olšák
Reviewed-by: Marek Olšák 

Marek

On Sun, Apr 17, 2016 at 1:43 AM, Bas Nieuwenhuizen
 wrote:
> We can then upload only the dirty ones with the constant engine.
>
> Signed-off-by: Bas Nieuwenhuizen 
> ---
>  src/gallium/drivers/radeonsi/si_descriptors.c | 37 
> ---
>  src/gallium/drivers/radeonsi/si_state.h   |  9 +--
>  2 files changed, 29 insertions(+), 17 deletions(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c 
> b/src/gallium/drivers/radeonsi/si_descriptors.c
> index 0b44ecf..8ca0253 100644
> --- a/src/gallium/drivers/radeonsi/si_descriptors.c
> +++ b/src/gallium/drivers/radeonsi/si_descriptors.c
> @@ -109,7 +109,7 @@ static void si_init_descriptors(struct si_descriptors 
> *desc,
> desc->list = CALLOC(num_elements, element_dw_size * 4);
> desc->element_dw_size = element_dw_size;
> desc->num_elements = num_elements;
> -   desc->list_dirty = true; /* upload the list before the next draw */
> +   desc->dirty_mask = num_elements == 64 ? ~0llu : (1llu << 
> num_elements) - 1;
> desc->shader_userdata_offset = shader_userdata_index * 4;
> desc->ce_offset = *ce_offset;
>
> @@ -159,7 +159,7 @@ static bool si_upload_descriptors(struct si_context *sctx,
> unsigned list_size = desc->num_elements * desc->element_dw_size * 4;
> void *ptr;
>
> -   if (!desc->list_dirty)
> +   if (!desc->dirty_mask)
> return true;
>
> u_upload_alloc(sctx->b.uploader, 0, list_size, 256,
> @@ -173,7 +173,7 @@ static bool si_upload_descriptors(struct si_context *sctx,
> radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx, desc->buffer,
>   RADEON_USAGE_READ, RADEON_PRIO_DESCRIPTORS);
>
> -   desc->list_dirty = false;
> +   desc->dirty_mask = 0;
> desc->pointer_dirty = true;
> si_mark_atom_dirty(sctx, &sctx->shader_userdata.atom);
> return true;
> @@ -216,6 +216,8 @@ static void si_sampler_views_begin_new_cs(struct 
> si_context *sctx,
> si_sampler_view_add_buffer(sctx, views->views[i]->texture);
> }
>
> +   views->desc.ce_ram_dirty = true;
> +
> if (!views->desc.buffer)
> return;
> radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx, views->desc.buffer,
> @@ -267,7 +269,7 @@ static void si_set_sampler_view(struct si_context *sctx,
> views->desc.enabled_mask &= ~(1llu << slot);
> }
>
> -   views->desc.list_dirty = true;
> +   views->desc.dirty_mask |= 1llu << slot;
>  }
>
>  static bool is_compressed_colortex(struct r600_texture *rtex)
> @@ -373,6 +375,8 @@ si_image_views_begin_new_cs(struct si_context *sctx, 
> struct si_images_info *imag
> si_sampler_view_add_buffer(sctx, view->resource);
> }
>
> +   images->desc.ce_ram_dirty = true;
> +
> if (images->desc.buffer) {
> radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
>   images->desc.buffer,
> @@ -390,7 +394,7 @@ si_disable_shader_image(struct si_images_info *images, 
> unsigned slot)
>
> memcpy(images->desc.list + slot*8, null_image_descriptor, 
> 8*4);
> images->desc.enabled_mask &= ~(1llu << slot);
> -   images->desc.list_dirty = true;
> +   images->desc.dirty_mask |= 1llu << slot;
> }
>  }
>
> @@ -471,7 +475,7 @@ si_set_shader_images(struct pipe_context *pipe, unsigned 
> shader,
> }
>
> images->desc.enabled_mask |= 1llu << slot;
> -   images->desc.list_dirty = true;
> +   images->desc.dirty_mask |= 1llu << slot;
> }
>  }
>
> @@ -529,7 +533,7 @@ static void si_bind_sampler_states(struct pipe_context 
> *ctx, unsigned shader,
> continue;
>
> memcpy(desc->list + slot * 16 + 12, sstates[i]->val, 4*4);
> -   desc->list_dirty = true;
> +   desc->dirty_mask |= 1llu << slot;
> }
>  }
>
> @@ -576,6 +580,8 @@ static void si_buffer_resources_begin_new_cs(struct 
> si_context *sctx,
>   buffers->shader_usage, 
> buffers->priority);
> }
>
> +   buffers->desc.ce_ram_dirty = true;
> +
> if (!buffers->desc.buffer)
> return;
> radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
> @@ -772,7 +778,7 @@ static void si_set_constant_buffer(struct pipe_context 
> *ctx, uint shader, uint s
> buffers->desc.enabled_mask &= ~(1llu << slot);
> }
>
> -   buffers->desc.list_dirty = true;
> +   buffers->desc.dirty_mask |= 1llu << slot;
>  }
>
>  /* SHADER BUFFERS */
> @@ -819,9 +825,9 @@ static void si_set_shader_buffers(struct pipe_context 
> *ctx, unsigned shader,
> radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx, buf,
>   buffers->shader_usage, 
> buffers->priority);

[Mesa-dev] [PATCH v2 10/12] radeonsi: Replace list_dirty with a mask.

2016-04-16 Thread Bas Nieuwenhuizen
We can then upload only the dirty ones with the constant engine.

Signed-off-by: Bas Nieuwenhuizen 
---
 src/gallium/drivers/radeonsi/si_descriptors.c | 37 ---
 src/gallium/drivers/radeonsi/si_state.h   |  9 +--
 2 files changed, 29 insertions(+), 17 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c 
b/src/gallium/drivers/radeonsi/si_descriptors.c
index 0b44ecf..8ca0253 100644
--- a/src/gallium/drivers/radeonsi/si_descriptors.c
+++ b/src/gallium/drivers/radeonsi/si_descriptors.c
@@ -109,7 +109,7 @@ static void si_init_descriptors(struct si_descriptors *desc,
desc->list = CALLOC(num_elements, element_dw_size * 4);
desc->element_dw_size = element_dw_size;
desc->num_elements = num_elements;
-   desc->list_dirty = true; /* upload the list before the next draw */
+   desc->dirty_mask = num_elements == 64 ? ~0llu : (1llu << num_elements) 
- 1;
desc->shader_userdata_offset = shader_userdata_index * 4;
desc->ce_offset = *ce_offset;
 
@@ -159,7 +159,7 @@ static bool si_upload_descriptors(struct si_context *sctx,
unsigned list_size = desc->num_elements * desc->element_dw_size * 4;
void *ptr;
 
-   if (!desc->list_dirty)
+   if (!desc->dirty_mask)
return true;
 
u_upload_alloc(sctx->b.uploader, 0, list_size, 256,
@@ -173,7 +173,7 @@ static bool si_upload_descriptors(struct si_context *sctx,
radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx, desc->buffer,
  RADEON_USAGE_READ, RADEON_PRIO_DESCRIPTORS);
 
-   desc->list_dirty = false;
+   desc->dirty_mask = 0;
desc->pointer_dirty = true;
si_mark_atom_dirty(sctx, &sctx->shader_userdata.atom);
return true;
@@ -216,6 +216,8 @@ static void si_sampler_views_begin_new_cs(struct si_context 
*sctx,
si_sampler_view_add_buffer(sctx, views->views[i]->texture);
}
 
+   views->desc.ce_ram_dirty = true;
+
if (!views->desc.buffer)
return;
radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx, views->desc.buffer,
@@ -267,7 +269,7 @@ static void si_set_sampler_view(struct si_context *sctx,
views->desc.enabled_mask &= ~(1llu << slot);
}
 
-   views->desc.list_dirty = true;
+   views->desc.dirty_mask |= 1llu << slot;
 }
 
 static bool is_compressed_colortex(struct r600_texture *rtex)
@@ -373,6 +375,8 @@ si_image_views_begin_new_cs(struct si_context *sctx, struct 
si_images_info *imag
si_sampler_view_add_buffer(sctx, view->resource);
}
 
+   images->desc.ce_ram_dirty = true;
+
if (images->desc.buffer) {
radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
  images->desc.buffer,
@@ -390,7 +394,7 @@ si_disable_shader_image(struct si_images_info *images, 
unsigned slot)
 
memcpy(images->desc.list + slot*8, null_image_descriptor, 8*4);
images->desc.enabled_mask &= ~(1llu << slot);
-   images->desc.list_dirty = true;
+   images->desc.dirty_mask |= 1llu << slot;
}
 }
 
@@ -471,7 +475,7 @@ si_set_shader_images(struct pipe_context *pipe, unsigned 
shader,
}
 
images->desc.enabled_mask |= 1llu << slot;
-   images->desc.list_dirty = true;
+   images->desc.dirty_mask |= 1llu << slot;
}
 }
 
@@ -529,7 +533,7 @@ static void si_bind_sampler_states(struct pipe_context 
*ctx, unsigned shader,
continue;
 
memcpy(desc->list + slot * 16 + 12, sstates[i]->val, 4*4);
-   desc->list_dirty = true;
+   desc->dirty_mask |= 1llu << slot;
}
 }
 
@@ -576,6 +580,8 @@ static void si_buffer_resources_begin_new_cs(struct 
si_context *sctx,
  buffers->shader_usage, buffers->priority);
}
 
+   buffers->desc.ce_ram_dirty = true;
+
if (!buffers->desc.buffer)
return;
radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
@@ -772,7 +778,7 @@ static void si_set_constant_buffer(struct pipe_context 
*ctx, uint shader, uint s
buffers->desc.enabled_mask &= ~(1llu << slot);
}
 
-   buffers->desc.list_dirty = true;
+   buffers->desc.dirty_mask |= 1llu << slot;
 }
 
 /* SHADER BUFFERS */
@@ -819,9 +825,9 @@ static void si_set_shader_buffers(struct pipe_context *ctx, 
unsigned shader,
radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx, buf,
  buffers->shader_usage, buffers->priority);
buffers->desc.enabled_mask |= 1llu << slot;
+   buffers->desc.dirty_mask |= 1llu << slot;
}
 
-   buffers->desc.list_dirty = true;
 }
 
 /* RING BUFFERS */
@@ -916,7 +922,7 @@ void si_set_ring_buffer(struct pipe_context *ctx, uint 
shader, uint slot,
buffers->desc