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

2017-05-03 Thread Pohjolainen, Topi
On Mon, May 01, 2017 at 06:43:03PM -0700, Rafael Antognolli wrote:
> From: Kenneth Graunke 
> 
> v3:
>- Drop aub parameter (Ken)
> 
> Signed-off-by: Kenneth Graunke 

Reviewed-by: Topi Pohjolainen 

> ---
>  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 000..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 
> +
> +#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(>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, ),   \
> +_dst = NULL)
> +
> +#define brw_batch_emitn(brw, cmd, n) ({  

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

2017-05-01 Thread Rafael Antognolli
From: Kenneth Graunke 

v3:
   - Drop aub parameter (Ken)

Signed-off-by: Kenneth Graunke 
---
 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 000..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 
+
+#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(>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, ),   \
+_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, ); \
+  _dw + 1; /* Array starts at dw[1] */