[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