Reviewed-by: Jason Ekstrand <[email protected]> On Wed, Mar 29, 2017 at 12:11 PM, <[email protected]> wrote:
> From: Craig Stout <[email protected]> > > 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 > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
