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

2017-03-29 Thread Jason Ekstrand
Reviewed-by: Jason Ekstrand 

On Wed, Mar 29, 2017 at 12:11 PM,  wrote:

> From: Craig Stout 
>
> 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(>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(_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(_buffer->batch,
> --
> 2.7.4
>
> ___
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


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

2017-03-29 Thread cstout
From: Craig Stout 

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(>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(_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(_buffer->batch,
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev