diff options
author | Zbigniew Kempczyński <zbigniew.kempczynski@intel.com> | 2020-09-11 10:07:22 +0200 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2020-09-16 14:15:15 +0100 |
commit | 92c0e2375c6b1e17598da29aac61af09e880af07 (patch) | |
tree | 32932c474433264824a180e2bbb35cf60b4a8da7 /lib/intel_batchbuffer.h | |
parent | d2fed122bddd0db84cd7761e901f7a70bb689cbb (diff) |
lib/intel_batchbuffer: add new functions to support rendercopy
To cover rendercopy in dependent tests we need to add the following:
1. relocation in any handle
Previously batchbuffer was the main target of relocations. As AUX
table require relocations too add support for that in intel_bb
2. set/get default alignment
Add default alignment for objects added to intel_bb (AUX tables use
different alignment for different objects)
3. add intel_buf to intel_bb
Save proposed address to intel_buf, clear flags on reset
4. add set/clear flag functions
5. unification of intel_bb_flush.*() functions
6. fixing indentation
7. change alignment constraints on gen3
Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
Cc: Dominik Grzegorzek <dominik.grzegorzek@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'lib/intel_batchbuffer.h')
-rw-r--r-- | lib/intel_batchbuffer.h | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/lib/intel_batchbuffer.h b/lib/intel_batchbuffer.h index a69fffd8..c80eb97d 100644 --- a/lib/intel_batchbuffer.h +++ b/lib/intel_batchbuffer.h @@ -439,6 +439,7 @@ struct intel_bb { uint32_t size; uint32_t *batch; uint32_t *ptr; + uint64_t alignment; int fence; uint32_t prng; @@ -486,6 +487,22 @@ void intel_bb_print(struct intel_bb *ibb); void intel_bb_dump(struct intel_bb *ibb, const char *filename); void intel_bb_set_debug(struct intel_bb *ibb, bool debug); +static inline uint64_t +intel_bb_set_default_object_alignment(struct intel_bb *ibb, uint64_t alignment) +{ + uint64_t old = ibb->alignment; + + ibb->alignment = alignment; + + return old; +} + +static inline uint64_t +intel_bb_get_default_object_alignment(struct intel_bb *ibb) +{ + return ibb->alignment; +} + static inline uint32_t intel_bb_offset(struct intel_bb *ibb) { return (uint32_t) ((uint8_t *) ibb->ptr - (uint8_t *) ibb->batch); @@ -513,8 +530,7 @@ static inline uint32_t intel_bb_ptr_add_return_prev_offset(struct intel_bb *ibb, return previous_offset; } -static inline void *intel_bb_ptr_align(struct intel_bb *ibb, - uint32_t alignment) +static inline void *intel_bb_ptr_align(struct intel_bb *ibb, uint32_t alignment) { intel_bb_ptr_set(ibb, ALIGN(intel_bb_offset(ibb), alignment)); @@ -538,6 +554,16 @@ static inline void intel_bb_out(struct intel_bb *ibb, uint32_t dword) struct drm_i915_gem_exec_object2 * intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t offset, bool write); +struct drm_i915_gem_exec_object2 * +intel_bb_add_intel_buf(struct intel_bb *ibb, struct intel_buf *buf, bool write); + +struct drm_i915_gem_exec_object2 * +intel_bb_find_object(struct intel_bb *ibb, uint32_t handle); + +bool +intel_bb_object_set_flag(struct intel_bb *ibb, uint32_t handle, uint64_t flag); +bool +intel_bb_object_clear_flag(struct intel_bb *ibb, uint32_t handle, uint64_t flag); uint64_t intel_bb_emit_reloc(struct intel_bb *ibb, uint32_t handle, @@ -568,6 +594,15 @@ uint64_t intel_bb_offset_reloc_with_delta(struct intel_bb *ibb, uint32_t offset, uint64_t presumed_offset); +uint64_t intel_bb_offset_reloc_to_object(struct intel_bb *ibb, + uint32_t handle, + uint32_t to_handle, + uint32_t read_domains, + uint32_t write_domain, + uint32_t delta, + uint32_t offset, + uint64_t presumed_offset); + int __intel_bb_exec(struct intel_bb *ibb, uint32_t end_offset, uint32_t ctx, uint64_t flags, bool sync); @@ -581,8 +616,12 @@ uint64_t intel_bb_get_object_offset(struct intel_bb *ibb, uint32_t handle); bool intel_bb_object_offset_to_buf(struct intel_bb *ibb, struct intel_buf *buf); uint32_t intel_bb_emit_bbe(struct intel_bb *ibb); +uint32_t intel_bb_emit_flush_common(struct intel_bb *ibb); +void intel_bb_flush(struct intel_bb *ibb, uint32_t ctx, uint32_t ring); void intel_bb_flush_render(struct intel_bb *ibb); +void intel_bb_flush_render_with_context(struct intel_bb *ibb, uint32_t ctx); void intel_bb_flush_blit(struct intel_bb *ibb); +void intel_bb_flush_blit_with_context(struct intel_bb *ibb, uint32_t ctx); uint32_t intel_bb_copy_data(struct intel_bb *ibb, const void *data, unsigned int bytes, |