[Mesa-dev] [PATCH] anv/cmd_buffer: fix dynamic state leak

Jason Ekstrand jason at jlekstrand.net
Wed Mar 29 20:49:28 UTC 2017


Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

On Wed, Mar 29, 2017 at 12:11 PM, <cstout at chromium.org> wrote:

> From: Craig Stout <cstout at google.com>
>
> anv_state_pool_alloc requires a matching free, whereas
> anv_state_stream_alloc will be cleaned up on finish.
>
> Applies only to 13.0 branch.
> x
> https://bugs.freedesktop.org/show_bug.cgi?id=100365
> ---
>  src/intel/vulkan/anv_private.h     | 12 ++++++++++++
>  src/intel/vulkan/genX_cmd_buffer.c | 32 ++++++++++++++++----------------
>  2 files changed, 28 insertions(+), 16 deletions(-)
>
> diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_
> private.h
> index dd67508..12a6aa1 100644
> --- a/src/intel/vulkan/anv_private.h
> +++ b/src/intel/vulkan/anv_private.h
> @@ -765,6 +765,18 @@ _anv_combine_address(struct anv_batch *batch, void
> *location,
>        __state;                                                          \
>     })
>
> +#define anv_state_stream_emit(stream, cmd, align, ...)
>                          \
> +   ({
>                           \
> +      const uint32_t __size = __anv_cmd_length(cmd) * 4;
>                          \
> +      struct anv_state __state = anv_state_stream_alloc((stream),
> __size, align);                  \
> +      struct cmd __template = {__VA_ARGS__};
>                          \
> +      __anv_cmd_pack(cmd)(NULL, __state.map, &__template);
>                          \
> +      VG(VALGRIND_CHECK_MEM_IS_DEFINED(__state.map,
> __anv_cmd_length(cmd) * 4));                   \
> +      if (!(stream)->block_pool->device->info.has_llc)
>                            \
> +         anv_state_clflush(__state);
>                          \
> +      __state;
>                          \
> +   })
> +
>  #define GEN7_MOCS (struct GEN7_MEMORY_OBJECT_CONTROL_STATE) {  \
>     .GraphicsDataTypeGFDT                        = 0,           \
>     .LLCCacheabilityControlLLCCC                 = 0,           \
> diff --git a/src/intel/vulkan/genX_cmd_buffer.c
> b/src/intel/vulkan/genX_cmd_buffer.c
> index 45fefc9..33db7ce 100644
> --- a/src/intel/vulkan/genX_cmd_buffer.c
> +++ b/src/intel/vulkan/genX_cmd_buffer.c
> @@ -1367,26 +1367,26 @@ flush_compute_descriptor_set(struct
> anv_cmd_buffer *cmd_buffer)
>     const uint32_t slm_size = encode_slm_size(GEN_GEN,
> prog_data->total_shared);
>
>     struct anv_state state =
> -      anv_state_pool_emit(&device->dynamic_state_pool,
> -                          GENX(INTERFACE_DESCRIPTOR_DATA), 64,
> -                          .KernelStartPointer = pipeline->cs_simd,
> -                          .BindingTablePointer = surfaces.offset,
> -                          .BindingTableEntryCount = 0,
> -                          .SamplerStatePointer = samplers.offset,
> -                          .SamplerCount = 0,
> +      anv_state_stream_emit(&cmd_buffer->dynamic_state_stream,
> +                            GENX(INTERFACE_DESCRIPTOR_DATA), 64,
> +                            .KernelStartPointer = pipeline->cs_simd,
> +                            .BindingTablePointer = surfaces.offset,
> +                            .BindingTableEntryCount = 0,
> +                            .SamplerStatePointer = samplers.offset,
> +                            .SamplerCount = 0,
>  #if !GEN_IS_HASWELL
> -                          .ConstantURBEntryReadOffset = 0,
> +                            .ConstantURBEntryReadOffset = 0,
>  #endif
> -                          .ConstantURBEntryReadLength =
> -                             cs_prog_data->push.per_thread.regs,
> +                            .ConstantURBEntryReadLength =
> +                              cs_prog_data->push.per_thread.regs,
>  #if GEN_GEN >= 8 || GEN_IS_HASWELL
> -                          .CrossThreadConstantDataReadLength =
> -                             cs_prog_data->push.cross_thread.regs,
> +                            .CrossThreadConstantDataReadLength =
> +                              cs_prog_data->push.cross_thread.regs,
>  #endif
> -                          .BarrierEnable = cs_prog_data->uses_barrier,
> -                          .SharedLocalMemorySize = slm_size,
> -                          .NumberofThreadsinGPGPUThreadGroup =
> -                             cs_prog_data->threads);
> +                            .BarrierEnable = cs_prog_data->uses_barrier,
> +                            .SharedLocalMemorySize = slm_size,
> +                            .NumberofThreadsinGPGPUThreadGroup =
> +                              cs_prog_data->threads);
>
>     uint32_t size = GENX(INTERFACE_DESCRIPTOR_DATA_length) *
> sizeof(uint32_t);
>     anv_batch_emit(&cmd_buffer->batch,
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170329/16058bb5/attachment-0001.html>


More information about the mesa-dev mailing list