[Mesa-dev] [PATCH v03 15/38] i965: Add genxml related plumbing in a new genX_state_upload.c file.

Pohjolainen, Topi topi.pohjolainen at gmail.com
Thu May 4 05:12:07 UTC 2017


On Mon, May 01, 2017 at 06:43:03PM -0700, Rafael Antognolli wrote:
> From: Kenneth Graunke <kenneth at whitecape.org>
> 
> v3:
>    - Drop aub parameter (Ken)
> 
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>

Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>

> ---
>  src/mesa/drivers/dri/i965/Makefile.sources    |  15 ++-
>  src/mesa/drivers/dri/i965/genX_state_upload.c | 109 +++++++++++++++++++-
>  2 files changed, 119 insertions(+), 5 deletions(-)
>  create mode 100644 src/mesa/drivers/dri/i965/genX_state_upload.c
> 
> diff --git a/src/mesa/drivers/dri/i965/Makefile.sources b/src/mesa/drivers/dri/i965/Makefile.sources
> index aef1a7a..db55a3f 100644
> --- a/src/mesa/drivers/dri/i965/Makefile.sources
> +++ b/src/mesa/drivers/dri/i965/Makefile.sources
> @@ -161,19 +161,24 @@ i965_FILES = \
>  	libdrm_macros.h
>  
>  i965_gen6_FILES = \
> -	genX_blorp_exec.c
> +	genX_blorp_exec.c \
> +	genX_state_upload.c
>  
>  i965_gen7_FILES = \
> -	genX_blorp_exec.c
> +	genX_blorp_exec.c \
> +	genX_state_upload.c
>  
>  i965_gen75_FILES = \
> -	genX_blorp_exec.c
> +	genX_blorp_exec.c \
> +	genX_state_upload.c
>  
>  i965_gen8_FILES = \
> -	genX_blorp_exec.c
> +	genX_blorp_exec.c \
> +	genX_state_upload.c
>  
>  i965_gen9_FILES = \
> -	genX_blorp_exec.c
> +	genX_blorp_exec.c \
> +	genX_state_upload.c
>  
>  i965_oa_GENERATED_FILES = \
>  	brw_oa_hsw.h \
> diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c b/src/mesa/drivers/dri/i965/genX_state_upload.c
> new file mode 100644
> index 0000000..ec571d5
> --- /dev/null
> +++ b/src/mesa/drivers/dri/i965/genX_state_upload.c
> @@ -0,0 +1,109 @@
> +/*
> + * Copyright © 2017 Intel Corporation
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> + * IN THE SOFTWARE.
> + */
> +
> +#include <assert.h>
> +
> +#include "common/gen_device_info.h"
> +#include "genxml/gen_macros.h"
> +
> +#include "brw_context.h"
> +#include "brw_state.h"
> +
> +#include "intel_batchbuffer.h"
> +
> +UNUSED static void *
> +emit_dwords(struct brw_context *brw, unsigned n)
> +{
> +   intel_batchbuffer_begin(brw, n, RENDER_RING);
> +   uint32_t *map = brw->batch.map_next;
> +   brw->batch.map_next += n;
> +   intel_batchbuffer_advance(brw);
> +   return map;
> +}
> +
> +struct brw_address {
> +   struct brw_bo *bo;
> +   uint32_t read_domains;
> +   uint32_t write_domain;
> +   uint32_t offset;
> +};
> +
> +static uint64_t
> +emit_reloc(struct brw_context *brw,
> +           void *location, struct brw_address address, uint32_t delta)
> +{
> +   uint32_t offset = (char *) location - (char *) brw->batch.map;
> +
> +   return brw_emit_reloc(&brw->batch, offset, address.bo,
> +                         address.offset + delta,
> +                         address.read_domains,
> +                         address.write_domain);
> +}
> +
> +#define __gen_address_type struct brw_address
> +#define __gen_user_data struct brw_context
> +
> +static uint64_t
> +__gen_combine_address(struct brw_context *brw, void *location,
> +                      struct brw_address address, uint32_t delta)
> +{
> +   if (address.bo == NULL) {
> +      return address.offset + delta;
> +   } else {
> +      return emit_reloc(brw, location, address, delta);
> +   }
> +}
> +
> +#include "genxml/genX_pack.h"
> +
> +#define _brw_cmd_length(cmd) cmd ## _length
> +#define _brw_cmd_length_bias(cmd) cmd ## _length_bias
> +#define _brw_cmd_header(cmd) cmd ## _header
> +#define _brw_cmd_pack(cmd) cmd ## _pack
> +
> +#define brw_batch_emit(brw, cmd, name)                  \
> +   for (struct cmd name = { _brw_cmd_header(cmd) },     \
> +        *_dst = emit_dwords(brw, _brw_cmd_length(cmd)); \
> +        __builtin_expect(_dst != NULL, 1);              \
> +        _brw_cmd_pack(cmd)(brw, (void *)_dst, &name),   \
> +        _dst = NULL)
> +
> +#define brw_batch_emitn(brw, cmd, n) ({                \
> +      uint32_t *_dw = emit_dwords(brw, n);             \
> +      struct cmd template = {                          \
> +         _brw_cmd_header(cmd),                         \
> +         .DWordLength = n - _brw_cmd_length_bias(cmd), \
> +      };                                               \
> +      _brw_cmd_pack(cmd)(brw, _dw, &template);         \
> +      _dw + 1; /* Array starts at dw[1] */             \
> +   })
> +
> +#define brw_state_emit(brw, cmd, align, offset, name)              \
> +   for (struct cmd name = { 0, },                                  \
> +        *_dst = brw_state_batch(brw, _brw_cmd_length(cmd) * 4,     \
> +                                align, offset);                    \
> +        __builtin_expect(_dst != NULL, 1);                         \
> +        _brw_cmd_pack(cmd)(brw, (void *)_dst, &name),              \
> +        _dst = NULL)
> +
> +/* ---------------------------------------------------------------------- */
> -- 
> git-series 0.9.1
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list