[Mesa-dev] [PATCH 2/5] i965: Initialize compaction tables once per process.

Jason Ekstrand jason at jlekstrand.net
Wed Nov 26 10:59:35 PST 2014


On Wed, Nov 26, 2014 at 10:39 AM, Matt Turner <mattst88 at gmail.com> wrote:

> ---
>  src/mesa/drivers/dri/i965/brw_eu_compact.c | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_eu_compact.c
> b/src/mesa/drivers/dri/i965/brw_eu_compact.c
> index 7117890..8e33bcb 100644
> --- a/src/mesa/drivers/dri/i965/brw_eu_compact.c
> +++ b/src/mesa/drivers/dri/i965/brw_eu_compact.c
> @@ -75,6 +75,7 @@
>  #include "brw_context.h"
>  #include "brw_eu.h"
>  #include "intel_asm_annotation.h"
> +#include "util/u_atomic.h" /* for p_atomic_cmpxchg */
>
>  static const uint32_t g45_control_index_table[32] = {
>     0b00000000000000000,
> @@ -1247,6 +1248,10 @@ update_gen4_jump_count(struct brw_context *brw,
> brw_inst *insn,
>  void
>  brw_init_compaction_tables(struct brw_context *brw)
>  {
> +   static bool initialized;
> +   if (initialized || p_atomic_cmpxchg(&initialized, false, true) !=
> false)
> +      return;
> +
>

Sure, this protects the initialized flag, but what happens if a thread
tries to use compaction after someone else starts initializing but before
they've finished?  Same comment for the other two patches that do
more-or-less the same thing.
--Jason


>     assert(g45_control_index_table[ARRAY_SIZE(g45_control_index_table) -
> 1] != 0);
>     assert(g45_datatype_table[ARRAY_SIZE(g45_datatype_table) - 1] != 0);
>     assert(g45_subreg_table[ARRAY_SIZE(g45_subreg_table) - 1] != 0);
> --
> 2.0.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20141126/6798845c/attachment.html>


More information about the mesa-dev mailing list