[Mesa-dev] [PATCH 02/18] anv: Add a new block-based batch emit macro
Ian Romanick
idr at freedesktop.org
Tue Apr 19 00:19:50 UTC 2016
On 04/18/2016 05:10 PM, Jason Ekstrand wrote:
> This new macro uses a for loop to create an actual code block in which to
> place the macro setup code. One advantage of this is that you syntatically
syntactically
> use braces instead of parentheses. Another is that the code in the block
> doesn't even get executed if anv_batch_emit_dwords fails.
Is the old anv_batch_emit eventually removed?
> ---
> src/intel/vulkan/anv_private.h | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
> index ae2e08d..d59b7ed 100644
> --- a/src/intel/vulkan/anv_private.h
> +++ b/src/intel/vulkan/anv_private.h
> @@ -861,6 +861,15 @@ __gen_combine_address(struct anv_batch *batch, void *location,
> VG(VALGRIND_CHECK_MEM_IS_DEFINED(dw, ARRAY_SIZE(dwords0) * 4));\
> } while (0)
>
> +#define anv_batch_emit_blk(batch, cmd, name) \
> + for (struct cmd name = { __anv_cmd_header(cmd) }, \
> + *_dst = anv_batch_emit_dwords(batch, __anv_cmd_length(cmd)); \
> + __builtin_expect(_dst != NULL, 1); \
> + ({ __anv_cmd_pack(cmd)(batch, _dst, &name); \
> + VG(VALGRIND_CHECK_MEM_IS_DEFINED(_dst, __anv_cmd_length(cmd) * 4)); \
> + _dst = NULL; \
> + }))
> +
> #define anv_state_pool_emit(pool, cmd, align, ...) ({ \
> const uint32_t __size = __anv_cmd_length(cmd) * 4; \
> struct anv_state __state = \
>
More information about the mesa-dev
mailing list