[Mesa-dev] [PATCH 2/2] i965: add missing rollback of a xfb zero_offsets flag

2018-11-19 Thread asimiklit . work
From: Andrii Simiklit 

This patch is needed to avoid incorrect value of StreamOffset flag
in 3DSTATE_SO_BUFFER command after rollback operation.

To be able to test easily this issue
the following workaround is necessary:
-if (!brw_batch_has_aperture_space(brw, 0)) {
by:
+if (true) {
in brw_draw_single_prim function.

This workaround forces a rollback for each batch.
The "gl-3.2-adj-prims pv-first -fbo" piglit test with this workaround failed
(when URB requirements was fixed this test started to fail instead of a hang).
Investigation of this failure helped to find that some batches have a different
Stream Offset in the 3D STATE_SO_BUFFER command in compare to batches which were
generated without this workaround.

Reported-by: Kenneth Graunke 
Signed-off-by: Andrii Simiklit 
---
 src/mesa/drivers/dri/i965/brw_context.h   |  3 +++
 src/mesa/drivers/dri/i965/intel_batchbuffer.c | 10 ++
 2 files changed, 13 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/brw_context.h 
b/src/mesa/drivers/dri/i965/brw_context.h
index 4e1682ba5c..86c9bf0a5c 100644
--- a/src/mesa/drivers/dri/i965/brw_context.h
+++ b/src/mesa/drivers/dri/i965/brw_context.h
@@ -521,6 +521,9 @@ struct intel_batchbuffer {
   int batch_reloc_count;
   int state_reloc_count;
   int exec_count;
+  struct {
+ bool zero_offsets;
+  } xfb;
   struct {
  GLuint vsize;
  GLuint gsize;
diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c 
b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
index bae9f2ffed..85e5f64123 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
@@ -295,10 +295,15 @@ intel_batchbuffer_reset_and_clear_render_cache(struct 
brw_context *brw)
 void
 intel_batchbuffer_save_state(struct brw_context *brw)
 {
+   struct brw_transform_feedback_object *brw_xfb_obj =
+   (struct brw_transform_feedback_object *)
+brw->ctx.TransformFeedback.CurrentObject;
+
brw->batch.saved.map_next = brw->batch.map_next;
brw->batch.saved.batch_reloc_count = brw->batch.batch_relocs.reloc_count;
brw->batch.saved.state_reloc_count = brw->batch.state_relocs.reloc_count;
brw->batch.saved.exec_count = brw->batch.exec_count;
+   brw->batch.saved.xfb.zero_offsets = brw_xfb_obj->zero_offsets;
brw->batch.saved.urb.vsize = brw->urb.vsize;
brw->batch.saved.urb.gs_present = brw->urb.gs_present;
brw->batch.saved.urb.gsize = brw->urb.gsize;
@@ -310,6 +315,10 @@ intel_batchbuffer_save_state(struct brw_context *brw)
 void
 intel_batchbuffer_reset_to_saved(struct brw_context *brw)
 {
+   struct brw_transform_feedback_object *brw_xfb_obj =
+   (struct brw_transform_feedback_object *)
+brw->ctx.TransformFeedback.CurrentObject;
+
for (int i = brw->batch.saved.exec_count;
 i < brw->batch.exec_count; i++) {
   brw_bo_unreference(brw->batch.exec_bos[i]);
@@ -319,6 +328,7 @@ intel_batchbuffer_reset_to_saved(struct brw_context *brw)
brw->batch.exec_count = brw->batch.saved.exec_count;
 
brw->batch.map_next = brw->batch.saved.map_next;
+   brw_xfb_obj->zero_offsets = brw->batch.saved.xfb.zero_offsets;
brw->urb.vsize = brw->batch.saved.urb.vsize;
brw->urb.gs_present = brw->batch.saved.urb.gs_present;
brw->urb.gsize = brw->batch.saved.urb.gsize;
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 1/2] i965: add missing rollback of URB requirements

2018-11-19 Thread asimiklit . work
From: Andrii Simiklit 

This patch is needed to avoid missing 3DSTATE_URB_* commands in a batch after
rollback operation.

To be able to test easily this issue
the following workaround is necessary:
-if (!brw_batch_has_aperture_space(brw, 0)) {
by:
+if (true) {
in brw_draw_single_prim function.

This workaround forces a rollback for each batch.
The "gl-3.2-adj-prims pv-first -auto -fbo" piglit test with this workaround
led to a hung. The hung investigation helped to find that some batches
didn't have the 3DSTATE_URB_* commands in compare to batches which were
generated without this workaround.

Reported-by: Kenneth Graunke 
Signed-off-by: Andrii Simiklit 
---
 src/mesa/drivers/dri/i965/brw_context.h   |  8 
 src/mesa/drivers/dri/i965/intel_batchbuffer.c | 12 
 2 files changed, 20 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/brw_context.h 
b/src/mesa/drivers/dri/i965/brw_context.h
index 7fd15669eb..4e1682ba5c 100644
--- a/src/mesa/drivers/dri/i965/brw_context.h
+++ b/src/mesa/drivers/dri/i965/brw_context.h
@@ -521,6 +521,14 @@ struct intel_batchbuffer {
   int batch_reloc_count;
   int state_reloc_count;
   int exec_count;
+  struct {
+ GLuint vsize;
+ GLuint gsize;
+ GLuint hsize;
+ GLuint dsize;
+ bool gs_present;
+ bool tess_present;
+  } urb;
} saved;
 
/** Map from batch offset to brw_state_batch data (with DEBUG_BATCH) */
diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c 
b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
index 353fcba18f..bae9f2ffed 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
@@ -299,6 +299,12 @@ intel_batchbuffer_save_state(struct brw_context *brw)
brw->batch.saved.batch_reloc_count = brw->batch.batch_relocs.reloc_count;
brw->batch.saved.state_reloc_count = brw->batch.state_relocs.reloc_count;
brw->batch.saved.exec_count = brw->batch.exec_count;
+   brw->batch.saved.urb.vsize = brw->urb.vsize;
+   brw->batch.saved.urb.gs_present = brw->urb.gs_present;
+   brw->batch.saved.urb.gsize = brw->urb.gsize;
+   brw->batch.saved.urb.tess_present = brw->urb.tess_present;
+   brw->batch.saved.urb.hsize = brw->urb.hsize;
+   brw->batch.saved.urb.dsize = brw->urb.dsize;
 }
 
 void
@@ -313,6 +319,12 @@ intel_batchbuffer_reset_to_saved(struct brw_context *brw)
brw->batch.exec_count = brw->batch.saved.exec_count;
 
brw->batch.map_next = brw->batch.saved.map_next;
+   brw->urb.vsize = brw->batch.saved.urb.vsize;
+   brw->urb.gs_present = brw->batch.saved.urb.gs_present;
+   brw->urb.gsize = brw->batch.saved.urb.gsize;
+   brw->urb.tess_present = brw->batch.saved.urb.tess_present;
+   brw->urb.hsize = brw->batch.saved.urb.hsize;
+   brw->urb.dsize = brw->batch.saved.urb.dsize;
if (USED_BATCH(brw->batch) == 0)
   brw_new_batch(brw);
 }
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v4 5/5] intel/tools: make sure the binary file is properly read

2018-11-14 Thread asimiklit . work
From: Andrii Simiklit 

1. tools/i965_disasm.c:58:4: warning:
 ignoring return value of ‘fread’,
 declared with attribute warn_unused_result
 fread(assembly, *end, 1, fp);

v2: Fixed incorrect return value check.
   ( Eric Engestrom  )

v3: Zero size file check placed before fread with exit()
   ( Eric Engestrom  )

v4: - Title is changed.
- The 'size' variable was moved to top of a function scope.
- The assertion was replaced by the proper error handling.
- The error message on a caller side was fixed.
   ( Eric Engestrom  )

Signed-off-by: Andrii Simiklit 
---
 src/intel/tools/i965_disasm.c | 16 +---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/intel/tools/i965_disasm.c b/src/intel/tools/i965_disasm.c
index 73a6760fc1..0efbdab706 100644
--- a/src/intel/tools/i965_disasm.c
+++ b/src/intel/tools/i965_disasm.c
@@ -47,17 +47,23 @@ i965_disasm_get_file_size(FILE *fp)
 static void *
 i965_disasm_read_binary(FILE *fp, size_t *end)
 {
+   size_t size;
void *assembly;
 
*end = i965_disasm_get_file_size(fp);
+   if (!*end)
+  return NULL;
 
assembly = malloc(*end + 1);
if (assembly == NULL)
   return NULL;
 
-   fread(assembly, *end, 1, fp);
+   size = fread(assembly, *end, 1, fp);
fclose(fp);
-
+   if (!size) {
+  free(assembly);
+  return NULL;
+   }
return assembly;
 }
 
@@ -167,7 +173,11 @@ int main(int argc, char *argv[])
 
assembly = i965_disasm_read_binary(fp, );
if (!assembly) {
-  fprintf(stderr, "Unable to allocate buffer to read binary file\n");
+  if(end)
+fprintf(stderr, "Unable to allocate buffer to read binary file\n");
+  else
+fprintf(stderr, "Input file is empty\n");
+
   exit(EXIT_FAILURE);
}
 
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 5/5] intel/tools: avoid 'ignoring return value'

2018-11-14 Thread asimiklit . work
From: Andrii Simiklit 

1. tools/i965_disasm.c:58:4: warning:
 ignoring return value of ‘fread’,
 declared with attribute warn_unused_result
 fread(assembly, *end, 1, fp);

v2: Fixed incorrect return value check.
   ( Eric Engestrom  )

v3: Zero size file check moved before fread with exit()
   ( Eric Engestrom  )

Signed-off-by: Andrii Simiklit 
---
 src/intel/tools/i965_disasm.c | 7 ++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/intel/tools/i965_disasm.c b/src/intel/tools/i965_disasm.c
index 73a6760fc1..d820b10d97 100644
--- a/src/intel/tools/i965_disasm.c
+++ b/src/intel/tools/i965_disasm.c
@@ -50,12 +50,17 @@ i965_disasm_read_binary(FILE *fp, size_t *end)
void *assembly;
 
*end = i965_disasm_get_file_size(fp);
+   if (!*end) {
+  fprintf(stderr, "file is empty\n");
+  exit(0);
+   }
 
assembly = malloc(*end + 1);
if (assembly == NULL)
   return NULL;
 
-   fread(assembly, *end, 1, fp);
+   MAYBE_UNUSED size_t size = fread(assembly, *end, 1, fp);
+   assert(size && "error: unable to read all elements!");
fclose(fp);
 
return assembly;
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2 2/5] compiler: avoid 'unused variable'

2018-11-13 Thread asimiklit . work
From: Andrii Simiklit 

1. nir/nir_lower_vars_to_ssa.c:691:21: warning:
   unused variable ‘var’
   nir_variable *var = path->path[0]->var;

v2: Changes for some part of 'may be used uninitialized'
warnings were removed, seems like it is a compiler issue.
( Eric Engestrom  )
Possible like this one:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=46684
This issue is flagged as duplicate but an
original one is not closed yet.

Signed-off-by: Andrii Simiklit 
---
 src/compiler/nir/nir_lower_vars_to_ssa.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/compiler/nir/nir_lower_vars_to_ssa.c 
b/src/compiler/nir/nir_lower_vars_to_ssa.c
index 8e517a7895..646efd9ad8 100644
--- a/src/compiler/nir/nir_lower_vars_to_ssa.c
+++ b/src/compiler/nir/nir_lower_vars_to_ssa.c
@@ -683,10 +683,9 @@ nir_lower_vars_to_ssa_impl(nir_function_impl *impl)
   nir_deref_path *path = >path;
 
   assert(path->path[0]->deref_type == nir_deref_type_var);
-  nir_variable *var = path->path[0]->var;
 
   /* We don't build deref nodes for non-local variables */
-  assert(var->data.mode == nir_var_local);
+  assert(path->path[0]->var->data.mode == nir_var_local);
 
   if (path_may_be_aliased(path, )) {
  exec_node_remove(>direct_derefs_link);
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2 3/5] i965: avoid 'unused variable'

2018-11-13 Thread asimiklit . work
From: Andrii Simiklit 

1. brw_pipe_control.c:311:34: warning:
unused variable ‘devinfo’
2. brw_program_binary.c:209:19: warning:
unused variable ‘gen_size’
3. brw_program_binary.c:216:19: warning:
unused variable ‘nir_size’

v2: Changes for unreproducible issues were removed

Signed-off-by: Andrii Simiklit 
---
 src/mesa/drivers/dri/i965/brw_pipe_control.c   | 2 +-
 src/mesa/drivers/dri/i965/brw_program_binary.c | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_pipe_control.c 
b/src/mesa/drivers/dri/i965/brw_pipe_control.c
index 122ac26070..a3f521b5ae 100644
--- a/src/mesa/drivers/dri/i965/brw_pipe_control.c
+++ b/src/mesa/drivers/dri/i965/brw_pipe_control.c
@@ -308,7 +308,7 @@ brw_emit_depth_stall_flushes(struct brw_context *brw)
 void
 gen7_emit_vs_workaround_flush(struct brw_context *brw)
 {
-   const struct gen_device_info *devinfo = >screen->devinfo;
+   MAYBE_UNUSED const struct gen_device_info *devinfo = >screen->devinfo;
 
assert(devinfo->gen == 7);
brw_emit_pipe_control_write(brw,
diff --git a/src/mesa/drivers/dri/i965/brw_program_binary.c 
b/src/mesa/drivers/dri/i965/brw_program_binary.c
index db03332241..1298d9e765 100644
--- a/src/mesa/drivers/dri/i965/brw_program_binary.c
+++ b/src/mesa/drivers/dri/i965/brw_program_binary.c
@@ -206,14 +206,14 @@ brw_program_deserialize_driver_blob(struct gl_context 
*ctx,
  break;
   switch ((enum driver_cache_blob_part)part_type) {
   case GEN_PART: {
- uint32_t gen_size = blob_read_uint32();
+ MAYBE_UNUSED uint32_t gen_size = blob_read_uint32();
  assert(!reader.overrun &&
 (uintptr_t)(reader.end - reader.current) > gen_size);
  deserialize_gen_program(, ctx, prog, stage);
  break;
   }
   case NIR_PART: {
- uint32_t nir_size = blob_read_uint32();
+ MAYBE_UNUSED uint32_t nir_size = blob_read_uint32();
  assert(!reader.overrun &&
 (uintptr_t)(reader.end - reader.current) > nir_size);
  const struct nir_shader_compiler_options *options =
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2 5/5] intel/tools: avoid 'ignoring return value'

2018-11-13 Thread asimiklit . work
From: Andrii Simiklit 

1. tools/i965_disasm.c:58:4: warning:
 ignoring return value of ‘fread’,
 declared with attribute warn_unused_result
 fread(assembly, *end, 1, fp);

v2: - Fixed incorrect return value check.
   ( Eric Engestrom  )

Signed-off-by: Andrii Simiklit 
---
 src/intel/tools/i965_disasm.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/intel/tools/i965_disasm.c b/src/intel/tools/i965_disasm.c
index 73a6760fc1..329f6327ed 100644
--- a/src/intel/tools/i965_disasm.c
+++ b/src/intel/tools/i965_disasm.c
@@ -55,7 +55,8 @@ i965_disasm_read_binary(FILE *fp, size_t *end)
if (assembly == NULL)
   return NULL;
 
-   fread(assembly, *end, 1, fp);
+   MAYBE_UNUSED size_t size = fread(assembly, *end, 1, fp);
+   assert((size || (*end == 0)) && "error: unable to read all elements!");
fclose(fp);
 
return assembly;
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2 4/5] main: avoid 'may be used uninitialized' warnings

2018-11-13 Thread asimiklit . work
From: Andrii Simiklit 

1. main/texcompress_etc.c:1314:12:
warning: ‘*((void *)+2)’ may be used uninitialized in this function
2. main/texcompress_etc.c:1354:12:
warning: ‘*((void *)+2)’ may be used uninitialized in this function
3. main/texcompress_etc.c:1293:12:
warning: ‘dst’ may be used uninitialized in this function
4. main/texcompress_etc.c:1335:12:
warning: ‘dst’ may be used uninitialized in this function
5. main/texcompress_etc.c:1460:12:
warning: ‘*((void *)+1)’ may be used uninitialized in this function

v2: Fixed by adding the unreachable case to the etc2_rgb8_fetch_texel
   ( Eric Engestrom  )
Changes for warning 'pixerrorcolorbest' were removed.

Signed-off-by: Andrii Simiklit 
---
 src/mesa/main/texcompress_etc.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/mesa/main/texcompress_etc.c b/src/mesa/main/texcompress_etc.c
index b39ab33d36..f1da4d0f11 100644
--- a/src/mesa/main/texcompress_etc.c
+++ b/src/mesa/main/texcompress_etc.c
@@ -548,6 +548,7 @@ etc2_rgb8_fetch_texel(const struct etc2_block *block,
   if (punchthrough_alpha)
  dst[3] = 255;
}
+   else unreachable("unhandled block mode");
 }
 
 static void
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2 0/5] mesa: fix against several compilation warnings

2018-11-13 Thread asimiklit . work
From: Andrii Simiklit 

Fixes several compilation warnings for a release configuration

v2: the patch '1/4' was separated to '1/5' and '5/5'
   ( Eric Engestrom  )

Andrii Simiklit (5):
  intel/tools: avoid 'unused variable' warnings
  compiler: avoid 'unused variable'
  i965: avoid 'unused variable'
  main: avoid 'may be used uninitialized' warnings
  intel/tools: avoid 'ignoring return value'

 src/compiler/nir/nir_lower_vars_to_ssa.c   |  3 +--
 src/intel/tools/aub_mem.c  | 10 ++
 src/intel/tools/aub_read.c |  3 ++-
 src/intel/tools/i965_disasm.c  |  3 ++-
 src/mesa/drivers/dri/i965/brw_pipe_control.c   |  2 +-
 src/mesa/drivers/dri/i965/brw_program_binary.c |  4 ++--
 src/mesa/main/texcompress_etc.c|  1 +
 7 files changed, 15 insertions(+), 11 deletions(-)

-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2 1/5] intel/tools: avoid 'unused variable' warnings

2018-11-13 Thread asimiklit . work
From: Andrii Simiklit 

1. tools/aub_read.c:271:31: warning: unused variable ‘end’
const uint32_t *p = data, *end = data + data_len, *next;

2. tools/aub_mem.c:292:13: warning: unused variable ‘res’
   void *res = mmap((uint8_t *)bo.map + map_offset, 4096, PROT_READ,
   tools/aub_mem.c:357:13: warning: unused variable ‘res’
   void *res = mmap((uint8_t *)bo.map + (page - bo.addr), 4096, PROT_READ,

v2: The i965_disasm.c changes was moved into a separate patch
The 'end' variable declared separately with MAYBE_UNUSED
to avoid effect of it to other variables.
   ( Eric Engestrom  )

Signed-off-by: Andrii Simiklit 
---
 src/intel/tools/aub_mem.c  | 10 ++
 src/intel/tools/aub_read.c |  3 ++-
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/intel/tools/aub_mem.c b/src/intel/tools/aub_mem.c
index 58b51b78a5..98e14219c5 100644
--- a/src/intel/tools/aub_mem.c
+++ b/src/intel/tools/aub_mem.c
@@ -289,8 +289,9 @@ aub_mem_get_ggtt_bo(void *_mem, uint64_t address)
  continue;
 
   uint32_t map_offset = i->virt_addr - address;
-  void *res = mmap((uint8_t *)bo.map + map_offset, 4096, PROT_READ,
-   MAP_SHARED | MAP_FIXED, mem->mem_fd, 
phys_mem->fd_offset);
+  MAYBE_UNUSED void *res =
+mmap((uint8_t *)bo.map + map_offset, 4096, PROT_READ,
+  MAP_SHARED | MAP_FIXED, mem->mem_fd, phys_mem->fd_offset);
   assert(res != MAP_FAILED);
}
 
@@ -354,8 +355,9 @@ aub_mem_get_ppgtt_bo(void *_mem, uint64_t address)
for (uint64_t page = address; page < end; page += 4096) {
   struct phys_mem *phys_mem = ppgtt_walk(mem, mem->pml4, page);
 
-  void *res = mmap((uint8_t *)bo.map + (page - bo.addr), 4096, PROT_READ,
-   MAP_SHARED | MAP_FIXED, mem->mem_fd, 
phys_mem->fd_offset);
+  MAYBE_UNUSED void *res =
+mmap((uint8_t *)bo.map + (page - bo.addr), 4096, PROT_READ,
+  MAP_SHARED | MAP_FIXED, mem->mem_fd, phys_mem->fd_offset);
   assert(res != MAP_FAILED);
}
 
diff --git a/src/intel/tools/aub_read.c b/src/intel/tools/aub_read.c
index d83e88ddce..552ca2cc62 100644
--- a/src/intel/tools/aub_read.c
+++ b/src/intel/tools/aub_read.c
@@ -294,7 +294,8 @@ handle_memtrace_mem_write(struct aub_read *read, const 
uint32_t *p)
 int
 aub_read_command(struct aub_read *read, const void *data, uint32_t data_len)
 {
-   const uint32_t *p = data, *end = data + data_len, *next;
+   const uint32_t *p = data, *next;
+   MAYBE_UNUSED const uint32_t *end = data + data_len;
uint32_t h, header_length, bias;
 
assert(data_len >= 4);
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v4 1/2] i965/batch: avoid reverting batch buffer if saved state is an empty

2018-11-04 Thread asimiklit . work
From: Andrii Simiklit 

There's no point reverting to the last saved point if that save point is
the empty batch, we will just repeat ourselves.

v2: Merge with new commits, changes was minimized, added the 'fixes' tag
v3: Added in to patch series
v4: Fixed the regression which was introduced by this patch
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108630
Reported-by:  Mark Janes 
The solution provided by: Jordan Justen 

CC: Chris Wilson 
Fixes: 3faf56ffbdeb "intel: Add an interface for saving/restoring
 the batchbuffer state."
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107626
Signed-off-by: Andrii Simiklit 
---
 src/mesa/drivers/dri/i965/brw_compute.c   | 3 ++-
 src/mesa/drivers/dri/i965/brw_draw.c  | 3 ++-
 src/mesa/drivers/dri/i965/genX_blorp_exec.c   | 1 +
 src/mesa/drivers/dri/i965/intel_batchbuffer.c | 7 +++
 src/mesa/drivers/dri/i965/intel_batchbuffer.h | 1 +
 5 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_compute.c 
b/src/mesa/drivers/dri/i965/brw_compute.c
index de08fc3ac1..5c8e3a5d4d 100644
--- a/src/mesa/drivers/dri/i965/brw_compute.c
+++ b/src/mesa/drivers/dri/i965/brw_compute.c
@@ -167,7 +167,7 @@ static void
 brw_dispatch_compute_common(struct gl_context *ctx)
 {
struct brw_context *brw = brw_context(ctx);
-   bool fail_next = false;
+   bool fail_next;
 
if (!_mesa_check_conditional_render(ctx))
   return;
@@ -185,6 +185,7 @@ brw_dispatch_compute_common(struct gl_context *ctx)
intel_batchbuffer_require_space(brw, 600);
brw_require_statebuffer_space(brw, 2500);
intel_batchbuffer_save_state(brw);
+   fail_next = intel_batchbuffer_saved_state_is_empty(brw);
 
  retry:
brw->batch.no_wrap = true;
diff --git a/src/mesa/drivers/dri/i965/brw_draw.c 
b/src/mesa/drivers/dri/i965/brw_draw.c
index 8536c04010..19ee3962d7 100644
--- a/src/mesa/drivers/dri/i965/brw_draw.c
+++ b/src/mesa/drivers/dri/i965/brw_draw.c
@@ -885,7 +885,7 @@ brw_draw_single_prim(struct gl_context *ctx,
 {
struct brw_context *brw = brw_context(ctx);
const struct gen_device_info *devinfo = >screen->devinfo;
-   bool fail_next = false;
+   bool fail_next;
 
/* Flag BRW_NEW_DRAW_CALL on every draw.  This allows us to have
 * atoms that happen on every draw call.
@@ -898,6 +898,7 @@ brw_draw_single_prim(struct gl_context *ctx,
intel_batchbuffer_require_space(brw, 1500);
brw_require_statebuffer_space(brw, 2400);
intel_batchbuffer_save_state(brw);
+   fail_next = intel_batchbuffer_saved_state_is_empty(brw);
 
if (brw->num_instances != prim->num_instances ||
brw->basevertex != prim->basevertex ||
diff --git a/src/mesa/drivers/dri/i965/genX_blorp_exec.c 
b/src/mesa/drivers/dri/i965/genX_blorp_exec.c
index 34bfcad03e..a62b88e166 100644
--- a/src/mesa/drivers/dri/i965/genX_blorp_exec.c
+++ b/src/mesa/drivers/dri/i965/genX_blorp_exec.c
@@ -309,6 +309,7 @@ retry:
intel_batchbuffer_require_space(brw, 1400);
brw_require_statebuffer_space(brw, 600);
intel_batchbuffer_save_state(brw);
+   check_aperture_failed_once |= intel_batchbuffer_saved_state_is_empty(brw);
brw->batch.no_wrap = true;
 
 #if GEN_GEN == 6
diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c 
b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
index 8b769eaf53..6207de5a06 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
@@ -301,6 +301,13 @@ intel_batchbuffer_save_state(struct brw_context *brw)
brw->batch.saved.exec_count = brw->batch.exec_count;
 }
 
+bool
+intel_batchbuffer_saved_state_is_empty(struct brw_context *brw)
+{
+   struct intel_batchbuffer *batch = >batch;
+   return (batch->saved.map_next == batch->batch.map);
+}
+
 void
 intel_batchbuffer_reset_to_saved(struct brw_context *brw)
 {
diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.h 
b/src/mesa/drivers/dri/i965/intel_batchbuffer.h
index 0632142cd3..91720dad5b 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.h
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.h
@@ -24,6 +24,7 @@ struct intel_batchbuffer;
 void intel_batchbuffer_init(struct brw_context *brw);
 void intel_batchbuffer_free(struct intel_batchbuffer *batch);
 void intel_batchbuffer_save_state(struct brw_context *brw);
+bool intel_batchbuffer_saved_state_is_empty(struct brw_context *brw);
 void intel_batchbuffer_reset_to_saved(struct brw_context *brw);
 void intel_batchbuffer_require_space(struct brw_context *brw, GLuint sz);
 int _intel_batchbuffer_flush_fence(struct brw_context *brw,
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2] intel/tools: fix resource leak

2018-10-26 Thread asimiklit . work
From: Andrii Simiklit 

Some memory and file descriptors are not freed/closed.

v2: fixed case where we skipped the 'aub' variable initialization

Signed-off-by: Andrii Simiklit 
---
 src/intel/tools/error2aub.c | 10 ++
 1 file changed, 10 insertions(+)

diff --git a/src/intel/tools/error2aub.c b/src/intel/tools/error2aub.c
index 8a23d5ef1e..2b850ce885 100644
--- a/src/intel/tools/error2aub.c
+++ b/src/intel/tools/error2aub.c
@@ -326,6 +326,16 @@ main(int argc, char *argv[])
 
aub_write_exec(, batch_addr, aub_gtt_size(), I915_EXEC_RENDER);
 
+   free(out_filename);
+   free(line);
+   if(err_file) {
+  fclose(err_file);
+   }
+   if(aub.file) {
+  aub_file_finish();
+   } else if(aub_file) {
+  fclose(aub_file);
+   }
return EXIT_SUCCESS;
 }
 
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] intel/tools: fix resource leak

2018-10-26 Thread asimiklit . work
From: Andrii Simiklit 

Some memory and file descriptors are not freed/closed.

Signed-off-by: Andrii Simiklit 
---
 src/intel/tools/error2aub.c | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/src/intel/tools/error2aub.c b/src/intel/tools/error2aub.c
index 8a23d5ef1e..451fd8c74a 100644
--- a/src/intel/tools/error2aub.c
+++ b/src/intel/tools/error2aub.c
@@ -326,6 +326,12 @@ main(int argc, char *argv[])
 
aub_write_exec(, batch_addr, aub_gtt_size(), I915_EXEC_RENDER);
 
+   free(out_filename);
+   free(line);
+   if(err_file) {
+  fclose(err_file);
+   }
+   aub_file_finish();
return EXIT_SUCCESS;
 }
 
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] egl: return correct error code for a case req ver < 3 with forward-compatible

2018-10-11 Thread asimiklit . work
From: Andrii Simiklit 

The EGL_KHR_create_context spec says:
   "If an OpenGL context is requested and the values for attributes
EGL_CONTEXT_MAJOR_VERSION_KHR and EGL_CONTEXT_MINOR_VERSION_KHR,
when considered together with the value for attribute
EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR, specify an OpenGL
version and feature set that are not defined, than an
EGL_BAD_MATCH error is generated."

This case will be correctly handled
a bit below after a 'for' loop when we
remove this handling.

Fixes: 11cabc45b712 "egl: rework handling EGL_CONTEXT_FLAGS"
Bugzilla: https://bugzilla.freedesktop.org/show_bug.cgi?id=92552
Signed-off-by: Andrii Simiklit 
---
 src/egl/main/eglcontext.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/egl/main/eglcontext.c b/src/egl/main/eglcontext.c
index ecc546e113..44a4469a97 100644
--- a/src/egl/main/eglcontext.c
+++ b/src/egl/main/eglcontext.c
@@ -179,7 +179,7 @@ _eglParseContextAttribList(_EGLContext *ctx, _EGLDisplay 
*dpy,
   * will generate an error."
   */
  if ((val & EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR) &&
- (api != EGL_OPENGL_API || ctx->ClientMajorVersion < 3)) {
+  api != EGL_OPENGL_API) {
 err = EGL_BAD_ATTRIBUTE;
 break;
  }
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] glsl: prevent qualifiers modification of predeclared variables

2018-10-04 Thread asimiklit . work
From: Andrii Simiklit 

GLSL 3.7 (Identifiers):
"However, as noted in the specification, there are some cases where
previously declared variables can be redeclared to change or add some
property, and predeclared "gl_" names are allowed to be redeclared in a
shader only for these specific purposes.  More generally, it is an error to
redeclare a variable, including those starting "gl_"."

This patch should fix piglit tests:
'clip-distance-redeclare-without-inout.frag'
'clip-distance-redeclare-without-inout.vert'
and leads to regression in clip-distance-out-values.shader_test
but probably a fix should be made in the test.

As far as I understood following mailing thread:
https://lists.freedesktop.org/archives/piglit/2013-October/007935.html
looks like we have accepted to remove an ability to change qualifiers
but have not done it yet. Unless I missed something)

Fixes: 8e6cb9fe51a2 "glsl: Refactor AST-to-HIR code handling variable
 redeclarations"
Signed-off-by: Andrii Simiklit 
---
 src/compiler/glsl/ast_to_hir.cpp | 13 +
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp
index 93e7c8ec33..e26ae6b92a 100644
--- a/src/compiler/glsl/ast_to_hir.cpp
+++ b/src/compiler/glsl/ast_to_hir.cpp
@@ -4240,10 +4240,15 @@ get_variable_being_redeclared(ir_variable **var_ptr, 
YYLTYPE loc,
 */
if (earlier->type->is_unsized_array() && var->type->is_array()
&& (var->type->fields.array == earlier->type->fields.array)) {
-  /* FINISHME: This doesn't match the qualifiers on the two
-   * FINISHME: declarations.  It's not 100% clear whether this is
-   * FINISHME: required or not.
-   */
+
+  if ((strcmp("gl_ClipDistance", var->name) == 0) &&
+  earlier->data.mode != var->data.mode) {
+ _mesa_glsl_error(, state,
+  "redeclaration of '%s %s' with incorrect qualifiers 
'%s'.",
+  mode_string(earlier),
+  var->name,
+  mode_string(var));
+  }
 
   const int size = var->type->array_size();
   check_builtin_array_max_size(var->name, size, loc, state);
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] i965: consider a 'base level' when calculating width0, height0, depth0

2018-10-02 Thread asimiklit . work
From: Andrii Simiklit 

I guess that when we calculating the width0, height0, depth0
to use for function 'intel_miptree_create' we need to consider
the 'base level' like it is done in the 'intel_miptree_create_for_teximage'
function.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107987
Signed-off-by: Andrii Simiklit 
---
 .../drivers/dri/i965/intel_tex_validate.c | 26 ++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/src/mesa/drivers/dri/i965/intel_tex_validate.c 
b/src/mesa/drivers/dri/i965/intel_tex_validate.c
index 72ce83c7ce..37aa8f43ec 100644
--- a/src/mesa/drivers/dri/i965/intel_tex_validate.c
+++ b/src/mesa/drivers/dri/i965/intel_tex_validate.c
@@ -119,8 +119,32 @@ intel_finalize_mipmap_tree(struct brw_context *brw,
/* May need to create a new tree:
 */
if (!intelObj->mt) {
+  const unsigned level = firstImage->base.Base.Level;
   intel_get_image_dims(>base.Base, , , );
-
+  /* Figure out image dimensions at start level. */
+  switch(intelObj->base.Target) {
+  case GL_TEXTURE_2D_MULTISAMPLE:
+  case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
+  case GL_TEXTURE_RECTANGLE:
+  case GL_TEXTURE_EXTERNAL_OES:
+  assert(level == 0);
+  break;
+  case GL_TEXTURE_3D:
+  depth = depth << level;
+  /* Fall through */
+  case GL_TEXTURE_2D:
+  case GL_TEXTURE_2D_ARRAY:
+  case GL_TEXTURE_CUBE_MAP:
+  case GL_TEXTURE_CUBE_MAP_ARRAY:
+  height = height << level;
+  /* Fall through */
+  case GL_TEXTURE_1D:
+  case GL_TEXTURE_1D_ARRAY:
+  width = width << level;
+  break;
+  default:
+  unreachable("Unexpected target");
+  }
   perf_debug("Creating new %s %dx%dx%d %d-level miptree to handle "
  "finalized texture miptree.\n",
  _mesa_get_format_name(firstImage->base.Base.TexFormat),
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2] i965/glsl: don't add unused aoa element to the program resource list

2018-09-20 Thread asimiklit . work
From: Andrii Simiklit 

It fixes a bit incorrectly implemented ARB_program_interface_query.
If input aoa element is unused in shader program
the 'glGetProgramResourceIndex' function shouldn't
return a valid resource index for it according to:
ARB_program_interface_query spec:
" For an active variable declared as an array of an aggregate data type
(structures or arrays), a separate entry will be generated for each
active array element"

v2: - Fixed case where the non-AoA elements were removed form
the program resource list.
The KHR-GL46.enhanced_layouts.varying_structure_locations
test is passed now
- Fixed case where a dereference index is not constant:
The proper array length stored in 'deref->array->type->length'
not in 'deref->type->length'
- Fixed the output AoA elements handling:
The list of active input AoA elements should not be used for
output AoA elements
- Fixed the function name from 'enumiramte_active_elements' to
'enumerate_active_elements'
- Fixed errors handling during active AoA elements enumeration

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92822
Signed-off-by: Andrii Simiklit 
---
 src/compiler/Makefile.sources |   4 +-
 .../glsl/ir_collect_active_aoa_elements.cpp   | 155 ++
 .../glsl/ir_collect_active_aoa_elements.h |  52 ++
 src/compiler/glsl/linker.cpp  |  91 --
 src/compiler/glsl/meson.build |   2 +
 5 files changed, 289 insertions(+), 15 deletions(-)
 create mode 100644 src/compiler/glsl/ir_collect_active_aoa_elements.cpp
 create mode 100644 src/compiler/glsl/ir_collect_active_aoa_elements.h

diff --git a/src/compiler/Makefile.sources b/src/compiler/Makefile.sources
index d3b0656483..a2ba3e37f1 100644
--- a/src/compiler/Makefile.sources
+++ b/src/compiler/Makefile.sources
@@ -154,7 +154,9 @@ LIBGLSL_FILES = \
glsl/serialize.cpp \
glsl/serialize.h \
glsl/string_to_uint_map.cpp \
-   glsl/string_to_uint_map.h
+   glsl/string_to_uint_map.h \
+   glsl/ir_collect_active_aoa_elements.cpp \
+   glsl/ir_collect_active_aoa_elements.h
 
 LIBGLSL_SHADER_CACHE_FILES = \
glsl/shader_cache.cpp \
diff --git a/src/compiler/glsl/ir_collect_active_aoa_elements.cpp 
b/src/compiler/glsl/ir_collect_active_aoa_elements.cpp
new file mode 100644
index 00..df0a41ad3e
--- /dev/null
+++ b/src/compiler/glsl/ir_collect_active_aoa_elements.cpp
@@ -0,0 +1,155 @@
+/*
+ * Copyright © 2018 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 "ir_collect_active_aoa_elements.h"
+#include "program.h"
+#include "linker_util.h"
+#include "util/set.h"
+#include "util/u_dynarray.h"
+
+namespace
+{
+/***
+ * Helps to collect the names of used aoa elements
+ * to the accessed_elements set
+ ***/
+struct elem_inserter
+{
+elem_inserter(struct set *accessed_elements_)
+: accessed_elements(accessed_elements_)
+{}
+bool operator ()(const char *name)
+{
+bool oval = true;
+if (NULL == _mesa_set_search(accessed_elements, name)) {
+oval = (_mesa_set_add(accessed_elements, name) != NULL);
+}
+return oval;
+}
+struct set *accessed_elements;
+};
+
+bool
+ir_is_array_deref(ir_rvalue *const ir)
+{
+return (ir_type_dereference_array == ir->ir_type);
+}
+
+ir_variable *
+base_ir_dereference_var(ir_dereference_array *const ir)
+{
+ir_dereference_array const *base_ir = ir;
+while (ir_type_dereference_array == base_ir->array->ir_type) {
+base_ir = base_ir->array->as_dereference_array();
+assert(NULL != base_ir);
+}
+
+ir_dereference_variable *const d =
+

[Mesa-dev] [PATCH v3 1/2] i965/batch: avoid reverting batch buffer if saved state is an empty

2018-09-12 Thread asimiklit . work
From: Andrii Simiklit 

There's no point reverting to the last saved point if that save point is
the empty batch, we will just repeat ourselves.

CC: Chris Wilson 
Fixes: 3faf56ffbdeb "intel: Add an interface for saving/restoring
 the batchbuffer state."
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107626
---
 src/mesa/drivers/dri/i965/brw_compute.c   | 3 ++-
 src/mesa/drivers/dri/i965/brw_draw.c  | 3 ++-
 src/mesa/drivers/dri/i965/genX_blorp_exec.c   | 3 ++-
 src/mesa/drivers/dri/i965/intel_batchbuffer.c | 7 +++
 src/mesa/drivers/dri/i965/intel_batchbuffer.h | 1 +
 5 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_compute.c 
b/src/mesa/drivers/dri/i965/brw_compute.c
index de08fc3..5c8e3a5 100644
--- a/src/mesa/drivers/dri/i965/brw_compute.c
+++ b/src/mesa/drivers/dri/i965/brw_compute.c
@@ -167,7 +167,7 @@ static void
 brw_dispatch_compute_common(struct gl_context *ctx)
 {
struct brw_context *brw = brw_context(ctx);
-   bool fail_next = false;
+   bool fail_next;
 
if (!_mesa_check_conditional_render(ctx))
   return;
@@ -185,6 +185,7 @@ brw_dispatch_compute_common(struct gl_context *ctx)
intel_batchbuffer_require_space(brw, 600);
brw_require_statebuffer_space(brw, 2500);
intel_batchbuffer_save_state(brw);
+   fail_next = intel_batchbuffer_saved_state_is_empty(brw);
 
  retry:
brw->batch.no_wrap = true;
diff --git a/src/mesa/drivers/dri/i965/brw_draw.c 
b/src/mesa/drivers/dri/i965/brw_draw.c
index 8536c04..19ee396 100644
--- a/src/mesa/drivers/dri/i965/brw_draw.c
+++ b/src/mesa/drivers/dri/i965/brw_draw.c
@@ -885,7 +885,7 @@ brw_draw_single_prim(struct gl_context *ctx,
 {
struct brw_context *brw = brw_context(ctx);
const struct gen_device_info *devinfo = >screen->devinfo;
-   bool fail_next = false;
+   bool fail_next;
 
/* Flag BRW_NEW_DRAW_CALL on every draw.  This allows us to have
 * atoms that happen on every draw call.
@@ -898,6 +898,7 @@ brw_draw_single_prim(struct gl_context *ctx,
intel_batchbuffer_require_space(brw, 1500);
brw_require_statebuffer_space(brw, 2400);
intel_batchbuffer_save_state(brw);
+   fail_next = intel_batchbuffer_saved_state_is_empty(brw);
 
if (brw->num_instances != prim->num_instances ||
brw->basevertex != prim->basevertex ||
diff --git a/src/mesa/drivers/dri/i965/genX_blorp_exec.c 
b/src/mesa/drivers/dri/i965/genX_blorp_exec.c
index 34bfcad..fd9ce93 100644
--- a/src/mesa/drivers/dri/i965/genX_blorp_exec.c
+++ b/src/mesa/drivers/dri/i965/genX_blorp_exec.c
@@ -268,7 +268,7 @@ genX(blorp_exec)(struct blorp_batch *batch,
assert(batch->blorp->driver_ctx == batch->driver_batch);
struct brw_context *brw = batch->driver_batch;
struct gl_context *ctx = >ctx;
-   bool check_aperture_failed_once = false;
+   bool check_aperture_failed_once;
 
 #if GEN_GEN >= 11
/* The PIPE_CONTROL command description says:
@@ -309,6 +309,7 @@ retry:
intel_batchbuffer_require_space(brw, 1400);
brw_require_statebuffer_space(brw, 600);
intel_batchbuffer_save_state(brw);
+   check_aperture_failed_once = intel_batchbuffer_saved_state_is_empty(brw);
brw->batch.no_wrap = true;
 
 #if GEN_GEN == 6
diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c 
b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
index 4363b14..2dc6eb8 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
@@ -299,6 +299,13 @@ intel_batchbuffer_save_state(struct brw_context *brw)
brw->batch.saved.exec_count = brw->batch.exec_count;
 }
 
+bool
+intel_batchbuffer_saved_state_is_empty(struct brw_context *brw)
+{
+   struct intel_batchbuffer *batch = >batch;
+   return (batch->saved.map_next == batch->batch.map);
+}
+
 void
 intel_batchbuffer_reset_to_saved(struct brw_context *brw)
 {
diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.h 
b/src/mesa/drivers/dri/i965/intel_batchbuffer.h
index 0632142..91720da 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.h
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.h
@@ -24,6 +24,7 @@ struct intel_batchbuffer;
 void intel_batchbuffer_init(struct brw_context *brw);
 void intel_batchbuffer_free(struct intel_batchbuffer *batch);
 void intel_batchbuffer_save_state(struct brw_context *brw);
+bool intel_batchbuffer_saved_state_is_empty(struct brw_context *brw);
 void intel_batchbuffer_reset_to_saved(struct brw_context *brw);
 void intel_batchbuffer_require_space(struct brw_context *brw, GLuint sz);
 int _intel_batchbuffer_flush_fence(struct brw_context *brw,
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 0/2] fix batchbuffer restoring/saving api

2018-09-12 Thread asimiklit . work
From: Andrii Simiklit 

If due to some reasons the last saved batch is empty and we 
restoring batch using this empty batch we have to call 'brw_new_batch' 
to properly reset all fields of it or we can just avoid this restoring 
to prevent incorrect state of the batch.

Andrii Simiklit (2):
  i965/batch: avoid reverting batch buffer if saved state is an empty
  i965/batch: don't ignore the 'brw_new_batch' call for a 'new batch'

 src/mesa/drivers/dri/i965/brw_compute.c   |  3 ++-
 src/mesa/drivers/dri/i965/brw_draw.c  |  3 ++-
 src/mesa/drivers/dri/i965/genX_blorp_exec.c   |  3 ++-
 src/mesa/drivers/dri/i965/intel_batchbuffer.c | 11 +++
 src/mesa/drivers/dri/i965/intel_batchbuffer.h |  1 +
 5 files changed, 18 insertions(+), 3 deletions(-)

-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 2/2] i965/batch: don't ignore the 'brw_new_batch' call for a 'new batch'

2018-09-12 Thread asimiklit . work
From: Andrii Simiklit 

If we restore the 'new batch' using 'intel_batchbuffer_reset_to_saved'
function we must restore the default state of the batch using
'brw_new_batch' function because the 'intel_batchbuffer_flush'
function will not do it for the 'new batch' again.
At least the following fields of the batch
'state_base_address_emitted','aperture_space', 'state_used'
should be restored to default values to avoid:
1. the aperture_space overflow
2. the missed STATE_BASE_ADDRESS commad in the batch
3. the memory overconsumption of the 'statebuffer'
   due to uncleared 'state_used' field.
etc.

v2: merge with new commits, changes was minimized, added the 'fixes' tag
v3: added in to patch series

Fixes: 3faf56ffbdeb "intel: Add an interface for saving/restoring
 the batchbuffer state."
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107626
---
 src/mesa/drivers/dri/i965/intel_batchbuffer.c | 4 
 1 file changed, 4 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c 
b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
index 2dc6eb8..6207de5 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
@@ -55,6 +55,8 @@
 
 static void
 intel_batchbuffer_reset(struct brw_context *brw);
+static void
+brw_new_batch(struct brw_context *brw);
 
 static void
 dump_validation_list(struct intel_batchbuffer *batch)
@@ -318,6 +320,8 @@ intel_batchbuffer_reset_to_saved(struct brw_context *brw)
brw->batch.exec_count = brw->batch.saved.exec_count;
 
brw->batch.map_next = brw->batch.saved.map_next;
+   if (USED_BATCH(brw->batch) == 0)
+  brw_new_batch(brw);
 }
 
 void
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 4/4] main: avoid 'may be used uninitialized' warnings

2018-09-11 Thread asimiklit . work
From: Andrii Simiklit 

1. main/texcompress_etc.c:1314:12:
warning: ‘*((void *)+2)’ may be used uninitialized in this function
2. main/texcompress_etc.c:1354:12:
warning: ‘*((void *)+2)’ may be used uninitialized in this function
3. main/texcompress_etc.c:1293:12:
warning: ‘dst’ may be used uninitialized in this function
4. main/texcompress_etc.c:1335:12:
warning: ‘dst’ may be used uninitialized in this function
5. main/texcompress_etc.c:1460:12:
warning: ‘*((void *)+1)’ may be used uninitialized in this function
6. main/texcompress_s3tc_tmp.h:262:39:
warning: ‘pixerrorcolorbest[2]’ may be used uninitialized in this function

Signed-off-by: Andrii Simiklit 
---
 src/mesa/main/texcompress_etc.c  | 12 ++--
 src/mesa/main/texcompress_s3tc_tmp.h |  2 +-
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/mesa/main/texcompress_etc.c b/src/mesa/main/texcompress_etc.c
index b39ab33..b192708 100644
--- a/src/mesa/main/texcompress_etc.c
+++ b/src/mesa/main/texcompress_etc.c
@@ -1290,7 +1290,7 @@ fetch_etc2_rgb8(const GLubyte *map,
 GLint rowStride, GLint i, GLint j, GLfloat *texel)
 {
struct etc2_block block;
-   uint8_t dst[3];
+   uint8_t dst[3] = { 0 };
const uint8_t *src;
 
src = map + (((rowStride + 3) / 4) * (j / 4) + (i / 4)) * 8;
@@ -1311,7 +1311,7 @@ fetch_etc2_srgb8(const GLubyte *map,
  GLint rowStride, GLint i, GLint j, GLfloat *texel)
 {
struct etc2_block block;
-   uint8_t dst[3];
+   uint8_t dst[3] = { 0 };
const uint8_t *src;
 
src = map + (((rowStride + 3) / 4) * (j / 4) + (i / 4)) * 8;
@@ -1332,7 +1332,7 @@ fetch_etc2_rgba8_eac(const GLubyte *map,
  GLint rowStride, GLint i, GLint j, GLfloat *texel)
 {
struct etc2_block block;
-   uint8_t dst[4];
+   uint8_t dst[4] = { 0 };
const uint8_t *src;
 
src = map + (((rowStride + 3) / 4) * (j / 4) + (i / 4)) * 16;
@@ -1351,7 +1351,7 @@ fetch_etc2_srgb8_alpha8_eac(const GLubyte *map,
 GLint rowStride, GLint i, GLint j, GLfloat *texel)
 {
struct etc2_block block;
-   uint8_t dst[4];
+   uint8_t dst[4] = { 0 };
const uint8_t *src;
 
src = map + (((rowStride + 3) / 4) * (j / 4) + (i / 4)) * 16;
@@ -1457,7 +1457,7 @@ fetch_etc2_rgb8_punchthrough_alpha1(const GLubyte *map,
 GLfloat *texel)
 {
struct etc2_block block;
-   uint8_t dst[4];
+   uint8_t dst[4] = { 0 };
const uint8_t *src;
 
src = map + (((rowStride + 3) / 4) * (j / 4) + (i / 4)) * 8;
@@ -1478,7 +1478,7 @@ fetch_etc2_srgb8_punchthrough_alpha1(const GLubyte *map,
  GLint i, GLint j, GLfloat *texel)
 {
struct etc2_block block;
-   uint8_t dst[4];
+   uint8_t dst[4] = { 0 };
const uint8_t *src;
 
src = map + (((rowStride + 3) / 4) * (j / 4) + (i / 4)) * 8;
diff --git a/src/mesa/main/texcompress_s3tc_tmp.h 
b/src/mesa/main/texcompress_s3tc_tmp.h
index 92316a7..bb1e37c 100644
--- a/src/mesa/main/texcompress_s3tc_tmp.h
+++ b/src/mesa/main/texcompress_s3tc_tmp.h
@@ -194,7 +194,7 @@ static void fancybasecolorsearch( UNUSED GLubyte *blkaddr, 
GLubyte srccolors[4][
GLuint pixerror, pixerrorred, pixerrorgreen, pixerrorblue, pixerrorbest;
GLint colordist, blockerrlin[2][3];
GLubyte nrcolor[2];
-   GLint pixerrorcolorbest[3];
+   GLint pixerrorcolorbest[3] = { 0 };
GLubyte enc = 0;
GLubyte cv[4][4];
GLubyte testcolor[2][3];
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 3/4] i965: avoid 'unused variable' and 'may be used uninitialized' warnings

2018-09-11 Thread asimiklit . work
From: Andrii Simiklit 

1. brw_blorp.c:1502:4: warning:
‘num_layers’ may be used uninitialized in this function
2. brw_blorp.c:1502:4: warning:
‘start_layer’ may be used uninitialized in this function
3. brw_blorp.c:1502:4: warning:
‘level’ may be used uninitialized in this function
4. brw_pipe_control.c:311:34: warning:
unused variable ‘devinfo’
5. brw_program_binary.c:209:19: warning:
unused variable ‘gen_size’
6. brw_program_binary.c:216:19: warning:
unused variable ‘nir_size’
7. intel_mipmap_tree.c:1698:10: warning:
‘initial_state’ may be used uninitialized in this function

Signed-off-by: Andrii Simiklit 
---
 src/mesa/drivers/dri/i965/brw_blorp.c  | 2 +-
 src/mesa/drivers/dri/i965/brw_pipe_control.c   | 2 +-
 src/mesa/drivers/dri/i965/brw_program_binary.c | 4 ++--
 src/mesa/drivers/dri/i965/intel_mipmap_tree.c  | 4 ++--
 4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c 
b/src/mesa/drivers/dri/i965/brw_blorp.c
index ad747e0..a6e0f02 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp.c
+++ b/src/mesa/drivers/dri/i965/brw_blorp.c
@@ -1443,7 +1443,7 @@ brw_blorp_clear_depth_stencil(struct brw_context *brw,
if (x0 == x1 || y0 == y1)
   return;
 
-   uint32_t level, start_layer, num_layers;
+   uint32_t level = 0, start_layer = 0, num_layers = 0;
struct isl_surf isl_tmp[4];
struct blorp_surf depth_surf, stencil_surf;
 
diff --git a/src/mesa/drivers/dri/i965/brw_pipe_control.c 
b/src/mesa/drivers/dri/i965/brw_pipe_control.c
index 122ac26..a3f521b 100644
--- a/src/mesa/drivers/dri/i965/brw_pipe_control.c
+++ b/src/mesa/drivers/dri/i965/brw_pipe_control.c
@@ -308,7 +308,7 @@ brw_emit_depth_stall_flushes(struct brw_context *brw)
 void
 gen7_emit_vs_workaround_flush(struct brw_context *brw)
 {
-   const struct gen_device_info *devinfo = >screen->devinfo;
+   MAYBE_UNUSED const struct gen_device_info *devinfo = >screen->devinfo;
 
assert(devinfo->gen == 7);
brw_emit_pipe_control_write(brw,
diff --git a/src/mesa/drivers/dri/i965/brw_program_binary.c 
b/src/mesa/drivers/dri/i965/brw_program_binary.c
index db03332..1298d9e 100644
--- a/src/mesa/drivers/dri/i965/brw_program_binary.c
+++ b/src/mesa/drivers/dri/i965/brw_program_binary.c
@@ -206,14 +206,14 @@ brw_program_deserialize_driver_blob(struct gl_context 
*ctx,
  break;
   switch ((enum driver_cache_blob_part)part_type) {
   case GEN_PART: {
- uint32_t gen_size = blob_read_uint32();
+ MAYBE_UNUSED uint32_t gen_size = blob_read_uint32();
  assert(!reader.overrun &&
 (uintptr_t)(reader.end - reader.current) > gen_size);
  deserialize_gen_program(, ctx, prog, stage);
  break;
   }
   case NIR_PART: {
- uint32_t nir_size = blob_read_uint32();
+ MAYBE_UNUSED uint32_t nir_size = blob_read_uint32();
  assert(!reader.overrun &&
 (uintptr_t)(reader.end - reader.current) > nir_size);
  const struct nir_shader_compiler_options *options =
diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c 
b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
index 3668135..31e8122 100644
--- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
+++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
@@ -1769,8 +1769,8 @@ intel_miptree_alloc_aux(struct brw_context *brw,
assert(mt->aux_buf == NULL);
 
/* Get the aux buf allocation parameters for this miptree. */
-   enum isl_aux_state initial_state;
-   uint8_t memset_value;
+   enum isl_aux_state initial_state = ISL_AUX_STATE_AUX_INVALID;
+   uint8_t memset_value = 0;
struct isl_surf aux_surf;
MAYBE_UNUSED bool aux_surf_ok = false;
 
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 1/4] intel/tools: avoid 'ignoring return value' and 'unused variable' warnings

2018-09-11 Thread asimiklit . work
From: Andrii Simiklit 

1. tools/i965_disasm.c:58:4: warning:
ignoring return value of ‘fread’,
declared with attribute warn_unused_result
fread(assembly, *end, 1, fp);

2. tools/aub_read.c:271:31: warning: unused variable ‘end’
const uint32_t *p = data, *end = data + data_len, *next;

3. tools/aub_mem.c:292:13: warning: unused variable ‘res’
   void *res = mmap((uint8_t *)bo.map + map_offset, 4096, PROT_READ,
   tools/aub_mem.c:357:13: warning: unused variable ‘res’
   void *res = mmap((uint8_t *)bo.map + (page - bo.addr), 4096, PROT_READ,

Signed-off-by: Andrii Simiklit 
---
 src/intel/tools/aub_mem.c | 10 ++
 src/intel/tools/aub_read.c|  2 +-
 src/intel/tools/i965_disasm.c |  3 ++-
 3 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/intel/tools/aub_mem.c b/src/intel/tools/aub_mem.c
index 58b51b7..98e1421 100644
--- a/src/intel/tools/aub_mem.c
+++ b/src/intel/tools/aub_mem.c
@@ -289,8 +289,9 @@ aub_mem_get_ggtt_bo(void *_mem, uint64_t address)
  continue;
 
   uint32_t map_offset = i->virt_addr - address;
-  void *res = mmap((uint8_t *)bo.map + map_offset, 4096, PROT_READ,
-   MAP_SHARED | MAP_FIXED, mem->mem_fd, 
phys_mem->fd_offset);
+  MAYBE_UNUSED void *res =
+mmap((uint8_t *)bo.map + map_offset, 4096, PROT_READ,
+  MAP_SHARED | MAP_FIXED, mem->mem_fd, phys_mem->fd_offset);
   assert(res != MAP_FAILED);
}
 
@@ -354,8 +355,9 @@ aub_mem_get_ppgtt_bo(void *_mem, uint64_t address)
for (uint64_t page = address; page < end; page += 4096) {
   struct phys_mem *phys_mem = ppgtt_walk(mem, mem->pml4, page);
 
-  void *res = mmap((uint8_t *)bo.map + (page - bo.addr), 4096, PROT_READ,
-   MAP_SHARED | MAP_FIXED, mem->mem_fd, 
phys_mem->fd_offset);
+  MAYBE_UNUSED void *res =
+mmap((uint8_t *)bo.map + (page - bo.addr), 4096, PROT_READ,
+  MAP_SHARED | MAP_FIXED, mem->mem_fd, phys_mem->fd_offset);
   assert(res != MAP_FAILED);
}
 
diff --git a/src/intel/tools/aub_read.c b/src/intel/tools/aub_read.c
index 5b704e8..0a1f84a 100644
--- a/src/intel/tools/aub_read.c
+++ b/src/intel/tools/aub_read.c
@@ -268,7 +268,7 @@ handle_memtrace_mem_write(struct aub_read *read, const 
uint32_t *p)
 int
 aub_read_command(struct aub_read *read, const void *data, uint32_t data_len)
 {
-   const uint32_t *p = data, *end = data + data_len, *next;
+   MAYBE_UNUSED const uint32_t *p = data, *end = data + data_len, *next;
uint32_t h, header_length, bias;
 
assert(data_len >= 4);
diff --git a/src/intel/tools/i965_disasm.c b/src/intel/tools/i965_disasm.c
index 73a6760..e207def 100644
--- a/src/intel/tools/i965_disasm.c
+++ b/src/intel/tools/i965_disasm.c
@@ -55,7 +55,8 @@ i965_disasm_read_binary(FILE *fp, size_t *end)
if (assembly == NULL)
   return NULL;
 
-   fread(assembly, *end, 1, fp);
+   MAYBE_UNUSED size_t size = fread(assembly, *end, 1, fp);
+   assert((size == *end) && "error: unable to read all elements!");
fclose(fp);
 
return assembly;
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 2/4] compiler: avoid 'unused variable' and 'may be used uninitialized' warnings

2018-09-11 Thread asimiklit . work
From: Andrii Simiklit 

1. nir/nir_lower_vars_to_ssa.c:691:21: warning:
   unused variable ‘var’
   nir_variable *var = path->path[0]->var;

2. nir_types.cpp:558:31: warning:
‘elem_align’ may be used uninitialized in this function
   unsigned elem_size, elem_align;
   nir_types.cpp:558:20: warning:
   ‘elem_size’ may be used uninitialized in this function
   unsigned elem_size, elem_align;

Signed-off-by: Andrii Simiklit 
---
 src/compiler/nir/nir_lower_vars_to_ssa.c | 2 +-
 src/compiler/nir_types.cpp   | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/compiler/nir/nir_lower_vars_to_ssa.c 
b/src/compiler/nir/nir_lower_vars_to_ssa.c
index cd679be..96de261 100644
--- a/src/compiler/nir/nir_lower_vars_to_ssa.c
+++ b/src/compiler/nir/nir_lower_vars_to_ssa.c
@@ -688,7 +688,7 @@ nir_lower_vars_to_ssa_impl(nir_function_impl *impl)
   nir_deref_path *path = >path;
 
   assert(path->path[0]->deref_type == nir_deref_type_var);
-  nir_variable *var = path->path[0]->var;
+  MAYBE_UNUSED nir_variable *var = path->path[0]->var;
 
   /* We don't build deref nodes for non-local variables */
   assert(var->data.mode == nir_var_local);
diff --git a/src/compiler/nir_types.cpp b/src/compiler/nir_types.cpp
index d24f094..d39d87b 100644
--- a/src/compiler/nir_types.cpp
+++ b/src/compiler/nir_types.cpp
@@ -542,7 +542,7 @@ glsl_get_natural_size_align_bytes(const struct glsl_type 
*type,
}
 
case GLSL_TYPE_ARRAY: {
-  unsigned elem_size, elem_align;
+  unsigned elem_size = 0, elem_align = 0;
   glsl_get_natural_size_align_bytes(type->fields.array,
 _size, _align);
   *align = elem_align;
@@ -554,7 +554,7 @@ glsl_get_natural_size_align_bytes(const struct glsl_type 
*type,
   *size = 0;
   *align = 0;
   for (unsigned i = 0; i < type->length; i++) {
- unsigned elem_size, elem_align;
+ unsigned elem_size = 0, elem_align = 0;
  glsl_get_natural_size_align_bytes(type->fields.structure[i].type,
_size, _align);
  *align = MAX2(*align, elem_align);
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 0/4] mesa: fix against several compilation warnings

2018-09-11 Thread asimiklit . work
From: Andrii Simiklit 

Fixes several compilation warnings for a not debug configuration

Andrii Simiklit (4):
  intel/tools: avoid 'ignoring return value' and 'unused variable'
warnings
  compiler: avoid 'unused variable' and 'may be used uninitialized'
warnings
  i965: avoid 'unused variable' and 'may be used uninitialized' warnings
  main: avoid 'may be used uninitialized' warnings

 src/compiler/nir/nir_lower_vars_to_ssa.c   |  2 +-
 src/compiler/nir_types.cpp |  4 ++--
 src/intel/tools/aub_mem.c  | 10 ++
 src/intel/tools/aub_read.c |  2 +-
 src/intel/tools/i965_disasm.c  |  3 ++-
 src/mesa/drivers/dri/i965/brw_blorp.c  |  2 +-
 src/mesa/drivers/dri/i965/brw_pipe_control.c   |  2 +-
 src/mesa/drivers/dri/i965/brw_program_binary.c |  4 ++--
 src/mesa/drivers/dri/i965/intel_mipmap_tree.c  |  4 ++--
 src/mesa/main/texcompress_etc.c| 12 ++--
 src/mesa/main/texcompress_s3tc_tmp.h   |  2 +-
 11 files changed, 25 insertions(+), 22 deletions(-)

-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2] i965/batch: don't ignore the 'brw_new_batch' call for a 'new batch'

2018-09-10 Thread asimiklit . work
From: Andrii Simiklit 

If we restore the 'new batch' using 'intel_batchbuffer_reset_to_saved'
function we must restore the default state of the batch using
'brw_new_batch' function because the 'intel_batchbuffer_flush'
function will not do it for the 'new batch' again.
At least the following fields of the batch
'state_base_address_emitted','aperture_space', 'state_used'
should be restored to default values to avoid:
1. the aperture_space overflow
2. the missed STATE_BASE_ADDRESS commad in the batch
3. the memory overconsumption of the 'statebuffer'
   due to uncleared 'state_used' field.
etc.

v2: merge with new commits, changes was minimized, added the 'fixes' tag

Fixes: 3faf56ffbdeb "intel: Add an interface for saving/restoring
 the batchbuffer state."

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107626
Signed-off-by: Andrii Simiklit 

---
 src/mesa/drivers/dri/i965/intel_batchbuffer.c | 5 +
 1 file changed, 5 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c 
b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
index 4363b14..45eedab 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
@@ -57,6 +57,9 @@ static void
 intel_batchbuffer_reset(struct brw_context *brw);
 
 static void
+brw_new_batch(struct brw_context *brw);
+
+static void
 dump_validation_list(struct intel_batchbuffer *batch)
 {
fprintf(stderr, "Validation list (length %d):\n", batch->exec_count);
@@ -311,6 +314,8 @@ intel_batchbuffer_reset_to_saved(struct brw_context *brw)
brw->batch.exec_count = brw->batch.saved.exec_count;
 
brw->batch.map_next = brw->batch.saved.map_next;
+   if (USED_BATCH(brw->batch) == 0)
+brw_new_batch(brw);
 }
 
 void
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v5 6/8] util: use cross platform implementation 'util_vsnprintf'

2018-09-07 Thread asimiklit . work
From: Andrii Simiklit 

The win '_vsnprintf' function incompatibility with C99 vsnprintf.
At least for case when the input buffer size less than the required size:
'_vsnprintf' returns -1 for this case.
'vsnprintf' returns the required size.

So use cross platform implementation 'util_vsnprintf'.

v5: subject was updated from 'mesa/util: ...' to 'util: ...'

Reviewed-by: Emil Velikov 
Signed-off-by: Andrii Simiklit 

---
 src/util/ralloc.c   | 25 ++---
 src/util/u_string.h |  5 +
 2 files changed, 11 insertions(+), 19 deletions(-)

diff --git a/src/util/ralloc.c b/src/util/ralloc.c
index 5d77f75..798560f 100644
--- a/src/util/ralloc.c
+++ b/src/util/ralloc.c
@@ -28,13 +28,8 @@
 #include 
 #include 
 
-/* Some versions of MinGW are missing _vscprintf's declaration, although they
- * still provide the symbol in the import library. */
-#ifdef __MINGW32__
-_CRTIMP int _vscprintf(const char *format, va_list argptr);
-#endif
-
 #include "ralloc.h"
+#include "u_string.h"
 
 #ifndef va_copy
 #ifdef __va_copy
@@ -448,15 +443,7 @@ printf_length(const char *fmt, va_list untouched_args)
va_list args;
va_copy(args, untouched_args);
 
-#ifdef _WIN32
-   /* We need to use _vcsprintf to calculate the size as vsnprintf returns -1
-* if the number of characters to write is greater than count.
-*/
-   size = _vscprintf(fmt, args);
-   (void)junk;
-#else
-   size = vsnprintf(, 1, fmt, args);
-#endif
+   size = util_vsnprintf(, 1, fmt, args);
assert(size >= 0);
 
va_end(args);
@@ -471,7 +458,7 @@ ralloc_vasprintf(const void *ctx, const char *fmt, va_list 
args)
 
char *ptr = ralloc_size(ctx, size);
if (ptr != NULL)
-  vsnprintf(ptr, size, fmt, args);
+  util_vsnprintf(ptr, size, fmt, args);
 
return ptr;
 }
@@ -529,7 +516,7 @@ ralloc_vasprintf_rewrite_tail(char **str, size_t *start, 
const char *fmt,
if (unlikely(ptr == NULL))
   return false;
 
-   vsnprintf(ptr + *start, new_length + 1, fmt, args);
+   util_vsnprintf(ptr + *start, new_length + 1, fmt, args);
*str = ptr;
*start += new_length;
return true;
@@ -804,7 +791,7 @@ linear_vasprintf(void *parent, const char *fmt, va_list 
args)
 
char *ptr = linear_alloc_child(parent, size);
if (ptr != NULL)
-  vsnprintf(ptr, size, fmt, args);
+  util_vsnprintf(ptr, size, fmt, args);
 
return ptr;
 }
@@ -862,7 +849,7 @@ linear_vasprintf_rewrite_tail(void *parent, char **str, 
size_t *start,
if (unlikely(ptr == NULL))
   return false;
 
-   vsnprintf(ptr + *start, new_length + 1, fmt, args);
+   util_vsnprintf(ptr + *start, new_length + 1, fmt, args);
*str = ptr;
*start += new_length;
return true;
diff --git a/src/util/u_string.h b/src/util/u_string.h
index ca65623..81a7b0f 100644
--- a/src/util/u_string.h
+++ b/src/util/u_string.h
@@ -67,6 +67,11 @@ util_strchrnul(const char *s, char c)
 #endif
 
 #ifdef _WIN32
+/* Some versions of MinGW are missing _vscprintf's declaration, although they
+ * still provide the symbol in the import library. */
+#ifdef __MINGW32__
+_CRTIMP int _vscprintf(const char *format, va_list argptr);
+#endif
 
 static inline int
 util_vsnprintf(char *str, size_t size, const char *format, va_list ap)
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v5 5/8] mesa/main: don't use win _vsnprintf. there is 'util_vsnprintf' function

2018-09-07 Thread asimiklit . work
From: Andrii Simiklit 

The win '_vsnprintf' function incompatibility with C99 vsnprintf.
At least for case when the input buffer size less than the required size:
'_vsnprintf' returns -1 for this case.
'vsnprintf' returns the required size.

v5: remove _mesa_*snprintf functions and replace it by util_*snprintf

So use cross platform implementation 'util_vsnprintf'.

Reviewed-by: Emil Velikov 
Fixes: 2353e96c320d "Coerce vsnprintf to _vsnprintf for windows"
Signed-off-by: Andrii Simiklit 

---
 src/mapi/glapi/gen/gl_enums.py  |  3 ++-
 src/mesa/drivers/common/meta.c  |  5 +++--
 src/mesa/main/debug.c   |  7 ---
 src/mesa/main/dlist.c   |  3 ++-
 src/mesa/main/errors.c  | 19 ++-
 src/mesa/main/imports.c | 26 --
 src/mesa/main/imports.h |  5 -
 src/mesa/main/teximage.c|  7 ---
 src/mesa/main/uniform_query.cpp |  7 ---
 src/mesa/main/version.c | 17 +
 src/mesa/program/prog_instruction.c |  3 ++-
 src/mesa/program/prog_print.c   |  7 ---
 src/mesa/program/program_parse.y| 17 +
 src/util/u_string.h |  4 
 14 files changed, 57 insertions(+), 73 deletions(-)

diff --git a/src/mapi/glapi/gen/gl_enums.py b/src/mapi/glapi/gen/gl_enums.py
index 00f8134..da0e9f3 100644
--- a/src/mapi/glapi/gen/gl_enums.py
+++ b/src/mapi/glapi/gen/gl_enums.py
@@ -53,6 +53,7 @@ class PrintGlEnums(gl_XML.gl_print_base):
 print('#include "main/glheader.h"')
 print('#include "main/enums.h"')
 print('#include "main/imports.h"')
+print('#include "util/u_string.h"')
 print('#include "main/mtypes.h"')
 print('')
 print('typedef struct PACKED {')
@@ -103,7 +104,7 @@ _mesa_enum_to_string(int nr)
}
else {
   /* this is not re-entrant safe, no big deal here */
-  _mesa_snprintf(token_tmp, sizeof(token_tmp) - 1, "0x%x", nr);
+  util_snprintf(token_tmp, sizeof(token_tmp) - 1, "0x%x", nr);
   token_tmp[sizeof(token_tmp) - 1] = '\\0';
   return token_tmp;
}
diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
index 04752e0..de2442b 100644
--- a/src/mesa/drivers/common/meta.c
+++ b/src/mesa/drivers/common/meta.c
@@ -87,6 +87,7 @@
 #include "main/glformats.h"
 #include "util/bitscan.h"
 #include "util/ralloc.h"
+#include "util/u_string.h"
 #include "compiler/nir/nir.h"
 
 /** Return offset in bytes of the field within a vertex struct */
@@ -2045,7 +2046,7 @@ init_draw_stencil_pixels(struct gl_context *ctx)
   texTarget = "RECT";
else
   texTarget = "2D";
-   _mesa_snprintf(program2, sizeof(program2), program, texTarget);
+   util_snprintf(program2, sizeof(program2), program, texTarget);
 
_mesa_GenProgramsARB(1, >StencilFP);
_mesa_BindProgramARB(GL_FRAGMENT_PROGRAM_ARB, drawpix->StencilFP);
@@ -2079,7 +2080,7 @@ init_draw_depth_pixels(struct gl_context *ctx)
   texTarget = "RECT";
else
   texTarget = "2D";
-   _mesa_snprintf(program2, sizeof(program2), program, texTarget);
+   util_snprintf(program2, sizeof(program2), program, texTarget);
 
_mesa_GenProgramsARB(1, >DepthFP);
_mesa_BindProgramARB(GL_FRAGMENT_PROGRAM_ARB, drawpix->DepthFP);
diff --git a/src/mesa/main/debug.c b/src/mesa/main/debug.c
index b1fa1f0..1e193ec 100644
--- a/src/mesa/main/debug.c
+++ b/src/mesa/main/debug.c
@@ -37,6 +37,7 @@
 #include "pixelstore.h"
 #include "readpix.h"
 #include "texobj.h"
+#include "util/u_string.h"
 
 
 static const char *
@@ -285,7 +286,7 @@ write_texture_image(struct gl_texture_object *texObj,
  GL_RGBA, GL_UNSIGNED_BYTE, buffer, img);
 
   /* make filename */
-  _mesa_snprintf(s, sizeof(s), "/tmp/tex%u.l%u.f%u.ppm", texObj->Name, 
level, face);
+  util_snprintf(s, sizeof(s), "/tmp/tex%u.l%u.f%u.ppm", texObj->Name, 
level, face);
 
   printf("  Writing image level %u to %s\n", level, s);
   write_ppm(s, buffer, img->Width, img->Height, 4, 0, 1, 2, GL_FALSE);
@@ -331,8 +332,8 @@ _mesa_write_renderbuffer_image(const struct gl_renderbuffer 
*rb)
   format, type, >DefaultPacking, buffer);
 
/* make filename */
-   _mesa_snprintf(s, sizeof(s), "/tmp/renderbuffer%u.ppm", rb->Name);
-   _mesa_snprintf(s, sizeof(s), "C:\\renderbuffer%u.ppm", rb->Name);
+   util_snprintf(s, sizeof(s), "/tmp/renderbuffer%u.ppm", rb->Name);
+   util_snprintf(s, sizeof(s), "C:\\renderbuffer%u.ppm", rb->Name);
 
printf("  Writing renderbuffer image to %s\n", s);
 
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index ae23d29..50e6f5c 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -71,6 +71,7 @@
 
 #include "vbo/vbo.h"
 
+#include "util/u_string.h"
 
 #define USE_BITMAP_ATLAS 1
 
@@ -10736,7 +10737,7 @@ execute_list(struct gl_context *ctx, GLuint list)
  default:
 {
char 

[Mesa-dev] [PATCH v4 7/8] radv: use cross platform implementation 'util_vsnprintf'

2018-09-06 Thread asimiklit . work
From: Andrii Simiklit 

I guess it makes this implementation more portable.

Signed-off-by: Andrii Simiklit 
---
 src/amd/vulkan/radv_util.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/amd/vulkan/radv_util.c b/src/amd/vulkan/radv_util.c
index 72bedc6..90d3824 100644
--- a/src/amd/vulkan/radv_util.c
+++ b/src/amd/vulkan/radv_util.c
@@ -33,6 +33,7 @@
 #include "vk_enum_to_str.h"
 
 #include "util/u_math.h"
+#include "util/u_string.h"
 
 /** Log an error message.  */
 void radv_printflike(1, 2)
@@ -81,7 +82,7 @@ void radv_printflike(3, 4)
char buffer[256];
 
va_start(ap, format);
-   vsnprintf(buffer, sizeof(buffer), format, ap);
+   util_vsnprintf(buffer, sizeof(buffer), format, ap);
va_end(ap);
 
fprintf(stderr, "%s:%d: FINISHME: %s\n", file, line, buffer);
@@ -103,7 +104,7 @@ __vk_errorf(struct radv_instance *instance, VkResult error, 
const char *file,
 
if (format) {
va_start(ap, format);
-   vsnprintf(buffer, sizeof(buffer), format, ap);
+   util_vsnprintf(buffer, sizeof(buffer), format, ap);
va_end(ap);
 
fprintf(stderr, "%s:%d: %s (%s)\n", file, line, buffer, 
error_str);
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v4 7/7] egl/main: use cross platform implementation 'util_vsnprintf'

2018-09-06 Thread asimiklit . work
From: Andrii Simiklit 

I guess it makes this implementation more portable.

Signed-off-by: Andrii Simiklit 
---
 src/amd/vulkan/radv_util.c | 5 +++--
 src/egl/main/egllog.c  | 3 ++-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/amd/vulkan/radv_util.c b/src/amd/vulkan/radv_util.c
index 72bedc6..90d3824 100644
--- a/src/amd/vulkan/radv_util.c
+++ b/src/amd/vulkan/radv_util.c
@@ -33,6 +33,7 @@
 #include "vk_enum_to_str.h"
 
 #include "util/u_math.h"
+#include "util/u_string.h"
 
 /** Log an error message.  */
 void radv_printflike(1, 2)
@@ -81,7 +82,7 @@ void radv_printflike(3, 4)
char buffer[256];
 
va_start(ap, format);
-   vsnprintf(buffer, sizeof(buffer), format, ap);
+   util_vsnprintf(buffer, sizeof(buffer), format, ap);
va_end(ap);
 
fprintf(stderr, "%s:%d: FINISHME: %s\n", file, line, buffer);
@@ -103,7 +104,7 @@ __vk_errorf(struct radv_instance *instance, VkResult error, 
const char *file,
 
if (format) {
va_start(ap, format);
-   vsnprintf(buffer, sizeof(buffer), format, ap);
+   util_vsnprintf(buffer, sizeof(buffer), format, ap);
va_end(ap);
 
fprintf(stderr, "%s:%d: %s (%s)\n", file, line, buffer, 
error_str);
diff --git a/src/egl/main/egllog.c b/src/egl/main/egllog.c
index c223f49..d21b070 100644
--- a/src/egl/main/egllog.c
+++ b/src/egl/main/egllog.c
@@ -42,6 +42,7 @@
 #include 
 #include "c11/threads.h"
 #include "util/macros.h"
+#include "util/u_string.h"
 
 #include "egllog.h"
 
@@ -154,7 +155,7 @@ _eglLog(EGLint level, const char *fmtStr, ...)
mtx_lock();
 
va_start(args, fmtStr);
-   ret = vsnprintf(msg, MAXSTRING, fmtStr, args);
+   ret = util_vsnprintf(msg, MAXSTRING, fmtStr, args);
if (ret < 0 || ret >= MAXSTRING)
   strcpy(msg, "");
va_end(args);
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v4 8/8] egl/main: use cross platform implementation 'util_vsnprintf'

2018-09-06 Thread asimiklit . work
From: Andrii Simiklit 

I guess it makes this implementation more portable.

Signed-off-by: Andrii Simiklit 
---
 src/egl/main/egllog.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/egl/main/egllog.c b/src/egl/main/egllog.c
index c223f49..d21b070 100644
--- a/src/egl/main/egllog.c
+++ b/src/egl/main/egllog.c
@@ -42,6 +42,7 @@
 #include 
 #include "c11/threads.h"
 #include "util/macros.h"
+#include "util/u_string.h"
 
 #include "egllog.h"
 
@@ -154,7 +155,7 @@ _eglLog(EGLint level, const char *fmtStr, ...)
mtx_lock();
 
va_start(args, fmtStr);
-   ret = vsnprintf(msg, MAXSTRING, fmtStr, args);
+   ret = util_vsnprintf(msg, MAXSTRING, fmtStr, args);
if (ret < 0 || ret >= MAXSTRING)
   strcpy(msg, "");
va_end(args);
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v4 5/8] mesa/main: don't use win _vsnprintf. there is 'util_vsnprintf' function

2018-09-06 Thread asimiklit . work
From: Andrii Simiklit 

The win '_vsnprintf' function incompatibility with C99 vsnprintf.
At least for case when the input buffer size less than the required size:
'_vsnprintf' returns -1 for this case.
'vsnprintf' returns the required size.

So use cross platform implementation 'util_vsnprintf'.

Fixes: 2353e96c320d "Coerce vsnprintf to _vsnprintf for windows"
Signed-off-by: Andrii Simiklit 
---
 src/mesa/main/imports.c | 11 +--
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/src/mesa/main/imports.c b/src/mesa/main/imports.c
index b4685b6..d42825e 100644
--- a/src/mesa/main/imports.c
+++ b/src/mesa/main/imports.c
@@ -46,6 +46,7 @@
 #include 
 #include "c99_math.h"
 #include "util/rounding.h" /* for _mesa_roundeven */
+#include "util/u_string.h"
 #include "imports.h"
 #include "context.h"
 #include "version.h"
@@ -58,9 +59,7 @@
 #endif
 
 
-#ifdef _WIN32
-#define vsnprintf _vsnprintf
-#elif defined(__IBMC__) || defined(__IBMCPP__)
+#if defined(__IBMC__) || defined(__IBMCPP__)
 extern int vsnprintf(char *str, size_t count, const char *fmt, va_list arg);
 #endif
 
@@ -255,7 +254,7 @@ _mesa_bitcount_64(uint64_t n)
 int
 _mesa_vsnprintf(char *str, size_t size, const char *fmt, va_list args)
 {
-   return vsnprintf( str, size, fmt, args);
+   return util_vsnprintf( str, size, fmt, args);
 }
 
 /** Wrapper around vsnprintf() */
@@ -264,8 +263,8 @@ _mesa_snprintf( char *str, size_t size, const char *fmt, 
... )
 {
int r;
va_list args;
-   va_start( args, fmt );  
-   r = vsnprintf( str, size, fmt, args );
+   va_start( args, fmt );
+   r = util_vsnprintf( str, size, fmt, args );
va_end( args );
return r;
 }
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v4 6/8] mesa/util: use cross platform implementation 'util_vsnprintf'

2018-09-06 Thread asimiklit . work
From: Andrii Simiklit 

The win '_vsnprintf' function incompatibility with C99 vsnprintf.
At least for case when the input buffer size less than the required size:
'_vsnprintf' returns -1 for this case.
'vsnprintf' returns the required size.

So use cross platform implementation 'util_vsnprintf'.

Signed-off-by: Andrii Simiklit 
---
 src/util/ralloc.c   | 25 ++---
 src/util/u_string.h |  5 +
 2 files changed, 11 insertions(+), 19 deletions(-)

diff --git a/src/util/ralloc.c b/src/util/ralloc.c
index 5d77f75..798560f 100644
--- a/src/util/ralloc.c
+++ b/src/util/ralloc.c
@@ -28,13 +28,8 @@
 #include 
 #include 
 
-/* Some versions of MinGW are missing _vscprintf's declaration, although they
- * still provide the symbol in the import library. */
-#ifdef __MINGW32__
-_CRTIMP int _vscprintf(const char *format, va_list argptr);
-#endif
-
 #include "ralloc.h"
+#include "u_string.h"
 
 #ifndef va_copy
 #ifdef __va_copy
@@ -448,15 +443,7 @@ printf_length(const char *fmt, va_list untouched_args)
va_list args;
va_copy(args, untouched_args);
 
-#ifdef _WIN32
-   /* We need to use _vcsprintf to calculate the size as vsnprintf returns -1
-* if the number of characters to write is greater than count.
-*/
-   size = _vscprintf(fmt, args);
-   (void)junk;
-#else
-   size = vsnprintf(, 1, fmt, args);
-#endif
+   size = util_vsnprintf(, 1, fmt, args);
assert(size >= 0);
 
va_end(args);
@@ -471,7 +458,7 @@ ralloc_vasprintf(const void *ctx, const char *fmt, va_list 
args)
 
char *ptr = ralloc_size(ctx, size);
if (ptr != NULL)
-  vsnprintf(ptr, size, fmt, args);
+  util_vsnprintf(ptr, size, fmt, args);
 
return ptr;
 }
@@ -529,7 +516,7 @@ ralloc_vasprintf_rewrite_tail(char **str, size_t *start, 
const char *fmt,
if (unlikely(ptr == NULL))
   return false;
 
-   vsnprintf(ptr + *start, new_length + 1, fmt, args);
+   util_vsnprintf(ptr + *start, new_length + 1, fmt, args);
*str = ptr;
*start += new_length;
return true;
@@ -804,7 +791,7 @@ linear_vasprintf(void *parent, const char *fmt, va_list 
args)
 
char *ptr = linear_alloc_child(parent, size);
if (ptr != NULL)
-  vsnprintf(ptr, size, fmt, args);
+  util_vsnprintf(ptr, size, fmt, args);
 
return ptr;
 }
@@ -862,7 +849,7 @@ linear_vasprintf_rewrite_tail(void *parent, char **str, 
size_t *start,
if (unlikely(ptr == NULL))
   return false;
 
-   vsnprintf(ptr + *start, new_length + 1, fmt, args);
+   util_vsnprintf(ptr + *start, new_length + 1, fmt, args);
*str = ptr;
*start += new_length;
return true;
diff --git a/src/util/u_string.h b/src/util/u_string.h
index e408146..29522b2 100644
--- a/src/util/u_string.h
+++ b/src/util/u_string.h
@@ -67,6 +67,11 @@ util_strchrnul(const char *s, char c)
 #endif
 
 #ifdef _WIN32
+/* Some versions of MinGW are missing _vscprintf's declaration, although they
+ * still provide the symbol in the import library. */
+#ifdef __MINGW32__
+_CRTIMP int _vscprintf(const char *format, va_list argptr);
+#endif
 
 static inline int
 util_vsnprintf(char *str, size_t size, const char *format, va_list ap)
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v4 1/8] apple/glx/log: added missing va_end() after va_copy()

2018-09-06 Thread asimiklit . work
From: Andrii Simiklit 

Each invocation of va_copy() must be matched by a
corresponding invocation of va_end()

Fixes: 51691f0767f6 "darwin: Use ASL for logging"
Signed-off-by: Andrii Simiklit 
---
 src/glx/apple/apple_glx_log.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/glx/apple/apple_glx_log.c b/src/glx/apple/apple_glx_log.c
index a3f446c..ea39d30 100644
--- a/src/glx/apple/apple_glx_log.c
+++ b/src/glx/apple/apple_glx_log.c
@@ -97,6 +97,7 @@ void _apple_glx_vlog(int level, const char *file, const char 
*function,
 fprintf(stderr, "%-9s %24s:%-4d %s(%"PRIu64"): ",
 _asl_level_string(level), file, line, function, thread);
 vfprintf(stderr, fmt, args2);
+va_end(args2);
 }
 
 msg = asl_new(ASL_TYPE_MSG);
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v4 4/8] mesa/util: add missing va_end() after va_copy()

2018-09-06 Thread asimiklit . work
From: Andrii Simiklit 

MSDN:
"va_end must be called on each argument list that's initialized
 with va_start or va_copy before the function returns."

Reviewed-by: Eric Engestrom 
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107810
Fixes: c6267ebd6c8a "gallium/util: Stop bundling our snprintf implementation."
Signed-off-by: Andrii Simiklit 

---
 src/util/u_string.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/util/u_string.h b/src/util/u_string.h
index fb43ed0..e408146 100644
--- a/src/util/u_string.h
+++ b/src/util/u_string.h
@@ -81,6 +81,7 @@ util_vsnprintf(char *str, size_t size, const char *format, 
va_list ap)
if (ret < 0) {
   ret = _vscprintf(format, ap_copy);
}
+   va_end(ap_copy);
return ret;
 }
 
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v4 2/8] mesa/util: don't use the same 'va_list' instance twice

2018-09-06 Thread asimiklit . work
From: Andrii Simiklit 

The first usage of the 'va_list' instance could change it.

Reviewed-by: Eric Engestrom 
Fixes: 864148d69e1e "util: add util_vasprintf() for Windows (v2)"
Signed-off-by: Andrii Simiklit 

---
 src/util/u_string.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/util/u_string.h b/src/util/u_string.h
index ce45430..374c00e 100644
--- a/src/util/u_string.h
+++ b/src/util/u_string.h
@@ -119,7 +119,7 @@ util_vasprintf(char **ret, const char *format, va_list ap)
 
/* Compute length of output string first */
va_copy(ap_copy, ap);
-   int r = util_vsnprintf(NULL, 0, format, ap);
+   int r = util_vsnprintf(NULL, 0, format, ap_copy);
va_end(ap_copy);
 
if (r < 0)
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v4 3/8] mesa/util: don't ignore NULL returned from 'malloc'

2018-09-06 Thread asimiklit . work
From: Andrii Simiklit 

We should exit from the function 'util_vasprintf'
with error code -1 for case where 'malloc'
returns NULL

Reviewed-by: Eric Engestrom 
Fixes: 864148d69e1e "util: add util_vasprintf() for Windows (v2)"
Signed-off-by: Andrii Simiklit 

---
 src/util/u_string.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/util/u_string.h b/src/util/u_string.h
index 374c00e..fb43ed0 100644
--- a/src/util/u_string.h
+++ b/src/util/u_string.h
@@ -126,7 +126,7 @@ util_vasprintf(char **ret, const char *format, va_list ap)
   return -1;
 
*ret = (char *) malloc(r + 1);
-   if (!ret)
+   if (!*ret)
   return -1;
 
/* Print to buffer */
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v4 0/8] mesa: fix usage of [v][s][n]printf functions

2018-09-06 Thread asimiklit . work
From: Andrii Simiklit 

This patch improve usage of [v][s][n]printf functions.
Fixes cross platform implementation of vsnprintf

v2: Linux man about vXXXprintf functions:
"These functions do not call the va_end macro. Because they
 invoke the va_arg  macro, the value of ap is undefined after the call"
 So we should have instance copy of va_list for each 'vXXXprintf' call.

v3: Fixed case when malloc returns 0 in util_vasprintf

v4: The single patch was separated to the patch series

Andrii Simiklit (8):
  apple/glx/log: added missing va_end() after va_copy()
  mesa/util: don't use the same 'va_list' instance twice
  mesa/util: don't ignore NULL returned from 'malloc'
  mesa/util: add missing va_end() after va_copy()
  mesa/main: don't use win _vsnprintf. there is 'util_vsnprintf'
function
  mesa/util: use cross platform implementation 'util_vsnprintf'
  radv: use cross platform implementation 'util_vsnprintf'
  egl/main: use cross platform implementation 'util_vsnprintf'

 src/amd/vulkan/radv_util.c|  5 +++--
 src/egl/main/egllog.c |  3 ++-
 src/glx/apple/apple_glx_log.c |  1 +
 src/mesa/main/imports.c   | 11 +--
 src/util/ralloc.c | 25 ++---
 src/util/u_string.h   | 10 --
 6 files changed, 25 insertions(+), 30 deletions(-)

-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3] mesa/util: add missing va_end() after va_copy()

2018-09-04 Thread asimiklit . work
From: Andrii Simiklit 

MSDN:
"va_end must be called on each argument list that's initialized
 with va_start or va_copy before the function returns."

v2: Linux man about vXXXprintf functions:
"These functions do not call the va_end macro. Because they
 invoke the va_arg  macro, the value of ap is undefined after the call"
So we should have instance copy of va_list for each 'vXXXprintf' call.

v3: Fixed case when malloc returns 0 in util_vasprintf

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107810
Signed-off-by: Andrii Simiklit 
---
 src/util/u_string.h | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/util/u_string.h b/src/util/u_string.h
index ce45430..e408146 100644
--- a/src/util/u_string.h
+++ b/src/util/u_string.h
@@ -81,6 +81,7 @@ util_vsnprintf(char *str, size_t size, const char *format, 
va_list ap)
if (ret < 0) {
   ret = _vscprintf(format, ap_copy);
}
+   va_end(ap_copy);
return ret;
 }
 
@@ -119,14 +120,14 @@ util_vasprintf(char **ret, const char *format, va_list ap)
 
/* Compute length of output string first */
va_copy(ap_copy, ap);
-   int r = util_vsnprintf(NULL, 0, format, ap);
+   int r = util_vsnprintf(NULL, 0, format, ap_copy);
va_end(ap_copy);
 
if (r < 0)
   return -1;
 
*ret = (char *) malloc(r + 1);
-   if (!ret)
+   if (!*ret)
   return -1;
 
/* Print to buffer */
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2] mesa/util: add missing va_end() after va_copy()

2018-09-04 Thread asimiklit . work
From: Andrii Simiklit 

MSDN:
"va_end must be called on each argument list that's initialized
 with va_start or va_copy before the function returns."

v2: Linux man about vXXXprintf functions:
"These functions do not call the va_end macro. Because they
 invoke the va_arg  macro, the value of ap is undefined after the call"
So we should have instance copy of va_list for each 'vXXXprintf' call.

Signed-off-by: Andrii Simiklit 
---
 src/util/u_string.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/util/u_string.h b/src/util/u_string.h
index ce45430..2bccb10 100644
--- a/src/util/u_string.h
+++ b/src/util/u_string.h
@@ -81,6 +81,7 @@ util_vsnprintf(char *str, size_t size, const char *format, 
va_list ap)
if (ret < 0) {
   ret = _vscprintf(format, ap_copy);
}
+   va_end(ap_copy);
return ret;
 }
 
@@ -119,7 +120,7 @@ util_vasprintf(char **ret, const char *format, va_list ap)
 
/* Compute length of output string first */
va_copy(ap_copy, ap);
-   int r = util_vsnprintf(NULL, 0, format, ap);
+   int r = util_vsnprintf(NULL, 0, format, ap_copy);
va_end(ap_copy);
 
if (r < 0)
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] mesa/util: add missing va_end() after va_copy()

2018-09-03 Thread asimiklit . work
From: Andrii Simiklit 

MSDN:
"va_end must be called on each argument list that's initialized
 with va_start or va_copy before the function returns."

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107810
Signed-off-by: Andrii Simiklit 

---
 src/util/u_string.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/util/u_string.h b/src/util/u_string.h
index ce45430..883fa64 100644
--- a/src/util/u_string.h
+++ b/src/util/u_string.h
@@ -81,6 +81,7 @@ util_vsnprintf(char *str, size_t size, const char *format, 
va_list ap)
if (ret < 0) {
   ret = _vscprintf(format, ap_copy);
}
+   va_end(ap_copy);
return ret;
 }
 
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] i965/glsl: don't add unused aoa elements to the program resource list

2018-08-31 Thread asimiklit . work
From: Andrii Simiklit 

It fixes a bit incorrectly implemented ARB_program_interface_query.
If input aoa element is unused in shader program
the 'glGetProgramResourceIndex' function shouldn't
return a valid resource index for it according to:
ARB_program_interface_query spec:
" For an active variable declared as an array of an aggregate data type
(structures or arrays), a separate entry will be generated for each
active array element"

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92822
Signed-off-by: Andrii Simiklit 
---
 src/compiler/Makefile.sources  |   4 +-
 .../glsl/ir_collect_active_aoa_elements.cpp| 148 +
 src/compiler/glsl/ir_collect_active_aoa_elements.h |  49 +++
 src/compiler/glsl/linker.cpp   |  75 +--
 src/compiler/glsl/meson.build  |   2 +
 5 files changed, 265 insertions(+), 13 deletions(-)
 create mode 100644 src/compiler/glsl/ir_collect_active_aoa_elements.cpp
 create mode 100644 src/compiler/glsl/ir_collect_active_aoa_elements.h

diff --git a/src/compiler/Makefile.sources b/src/compiler/Makefile.sources
index d3b0656..a2ba3e3 100644
--- a/src/compiler/Makefile.sources
+++ b/src/compiler/Makefile.sources
@@ -154,7 +154,9 @@ LIBGLSL_FILES = \
glsl/serialize.cpp \
glsl/serialize.h \
glsl/string_to_uint_map.cpp \
-   glsl/string_to_uint_map.h
+   glsl/string_to_uint_map.h \
+   glsl/ir_collect_active_aoa_elements.cpp \
+   glsl/ir_collect_active_aoa_elements.h
 
 LIBGLSL_SHADER_CACHE_FILES = \
glsl/shader_cache.cpp \
diff --git a/src/compiler/glsl/ir_collect_active_aoa_elements.cpp 
b/src/compiler/glsl/ir_collect_active_aoa_elements.cpp
new file mode 100644
index 000..50042c7
--- /dev/null
+++ b/src/compiler/glsl/ir_collect_active_aoa_elements.cpp
@@ -0,0 +1,148 @@
+/*
+ * Copyright © 2018 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 "ir_collect_active_aoa_elements.h"
+#include "program.h"
+#include "linker_util.h"
+#include "util/set.h"
+#include "util/u_dynarray.h"
+
+namespace
+{
+/***
+ * Helps to collect the names of used aoa elements
+ * to the accessed_elements set
+ ***/
+struct elem_inserter
+{
+elem_inserter(struct set *accessed_elements_)
+: accessed_elements(accessed_elements_)
+{}
+void operator ()(const char *name)
+{
+if (NULL == _mesa_set_search(accessed_elements, name)) {
+_mesa_set_add(accessed_elements, name);
+}
+}
+struct set *accessed_elements;
+};
+
+bool
+ir_is_array_deref(ir_rvalue *const ir)
+{
+return (ir_type_dereference_array == ir->ir_type);
+}
+
+ir_variable *
+base_ir_dereference_var(ir_dereference_array *const ir)
+{
+ir_dereference_array const *base_ir = ir;
+while (ir_type_dereference_array == base_ir->array->ir_type) {
+base_ir = base_ir->array->as_dereference_array();
+assert(NULL != base_ir);
+}
+
+ir_dereference_variable *const d =
+base_ir->array->as_dereference_variable();
+return (NULL == d) ? NULL : d->var;
+}
+}
+/**
+ * Helps to produce all combinations of used aoa elements 
+ * for cases with constant and variable index.
+ **/
+template 
+inline void enumiramte_active_elements(void *memctx,
+ir_dereference_array **first,
+ir_dereference_array **item,
+const char *accessed_elem_name,
+FunctorType functor)
+{
+if(item == (first - 1)) {
+functor(accessed_elem_name);
+return;
+}
+
+ir_dereference_array *const deref = (*item);
+ir_constant const *const 

[Mesa-dev] [PATCH v3] intel/decoder: fix the possible out of bounds group_iter

2018-08-20 Thread asimiklit . work
From: Andrii Simiklit 

The "gen_group_get_length" function can return a negative value
and it can lead to the out of bounds group_iter.

v2: printing of "unknown command type" was added
v3: just the asserts are added

Signed-off-by: Andrii Simiklit 
---
 src/intel/common/gen_decoder.c | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/intel/common/gen_decoder.c b/src/intel/common/gen_decoder.c
index ec0a486..2d9609a 100644
--- a/src/intel/common/gen_decoder.c
+++ b/src/intel/common/gen_decoder.c
@@ -803,8 +803,10 @@ static bool
 iter_more_groups(const struct gen_field_iterator *iter)
 {
if (iter->group->variable) {
+  int length = gen_group_get_length(iter->group, iter->p);
+  assert(length >= 0 && "error the length is unknown!");
   return iter_group_offset_bits(iter, iter->group_iter + 1) <
-  (gen_group_get_length(iter->group, iter->p) * 32);
+  (length * 32);
} else {
   return (iter->group_iter + 1) < iter->group->group_count ||
  iter->group->next != NULL;
@@ -991,6 +993,7 @@ gen_field_iterator_init(struct gen_field_iterator *iter,
iter->p_bit = p_bit;
 
int length = gen_group_get_length(iter->group, iter->p);
+   assert(length >= 0 && "error the length is unknown!");
iter->p_end = length > 0 ? [length] : NULL;
iter->print_colors = print_colors;
 }
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] i965/batch: don't ignore the 'brw_new_batch' call for a 'new batch'

2018-08-20 Thread asimiklit . work
From: Andrii Simiklit 

If we restore the 'new batch' using 'intel_batchbuffer_reset_to_saved'
function we must restore the default state of the batch using
'brw_new_batch' function because the 'intel_batchbuffer_flush'
function will not do it for the 'new batch' again.
At least the following fields of the batch
'state_base_address_emitted','aperture_space', 'state_used'
should be restored to default values to avoid:
1. the aperture_space overflow
2. the missed STATE_BASE_ADDRESS commad in the batch
3. the memory overconsumption of the 'statebuffer'
   due to uncleared 'state_used' field.
etc.

Signed-off-by: Andrii Simiklit 
---
 src/mesa/drivers/dri/i965/intel_batchbuffer.c | 104 +++---
 1 file changed, 59 insertions(+), 45 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c 
b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
index 65d2c64..b8c5fb4 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
@@ -219,7 +219,7 @@ add_exec_bo(struct intel_batchbuffer *batch, struct brw_bo 
*bo)
bo->index = batch->exec_count;
batch->exec_bos[batch->exec_count] = bo;
batch->aperture_space += bo->size;
-
+   assert((batch->aperture_space >= 0) && "error 'batch->aperture_space' field 
is overflown!");
return batch->exec_count++;
 }
 
@@ -290,6 +290,51 @@ intel_batchbuffer_reset_and_clear_render_cache(struct 
brw_context *brw)
brw_cache_sets_clear(brw);
 }
 
+/**
+ * Called when starting a new batch buffer.
+ */
+static void
+brw_new_batch(struct brw_context *brw)
+{
+   /* Unreference any BOs held by the previous batch, and reset counts. */
+   for (int i = 0; i < brw->batch.exec_count; i++) {
+  brw_bo_unreference(brw->batch.exec_bos[i]);
+  brw->batch.exec_bos[i] = NULL;
+   }
+   brw->batch.batch_relocs.reloc_count = 0;
+   brw->batch.state_relocs.reloc_count = 0;
+   brw->batch.exec_count = 0;
+   brw->batch.aperture_space = 0;
+
+   brw_bo_unreference(brw->batch.state.bo);
+
+   /* Create a new batchbuffer and reset the associated state: */
+   intel_batchbuffer_reset_and_clear_render_cache(brw);
+
+   /* If the kernel supports hardware contexts, then most hardware state is
+* preserved between batches; we only need to re-emit state that is required
+* to be in every batch.  Otherwise we need to re-emit all the state that
+* would otherwise be stored in the context (which for all intents and
+* purposes means everything).
+*/
+   if (brw->hw_ctx == 0) {
+  brw->ctx.NewDriverState |= BRW_NEW_CONTEXT;
+  brw_upload_invariant_state(brw);
+   }
+
+   brw->ctx.NewDriverState |= BRW_NEW_BATCH;
+
+   brw->ib.index_size = -1;
+
+   /* We need to periodically reap the shader time results, because rollover
+* happens every few seconds.  We also want to see results every once in a
+* while, because many programs won't cleanly destroy our context, so the
+* end-of-run printout may not happen.
+*/
+   if (INTEL_DEBUG & DEBUG_SHADER_TIME)
+  brw_collect_and_report_shader_time(brw);
+}
+
 void
 intel_batchbuffer_save_state(struct brw_context *brw)
 {
@@ -311,6 +356,19 @@ intel_batchbuffer_reset_to_saved(struct brw_context *brw)
brw->batch.exec_count = brw->batch.saved.exec_count;
 
brw->batch.map_next = brw->batch.saved.map_next;
+   if (USED_BATCH(brw->batch) == 0)
+   {
+  /**
+   * The 'intel_batchbuffer_flush' function will not call
+   * the 'brw_new_batch' function when the USED_BATCH returns 0.
+   * It may leads to the few following issue:
+   * The 'aperture_space' field can be overflown
+   * The 'statebuffer' buffer contains the big unused space
+   * The STATE_BASE_ADDRESS message is missed
+   * etc
+   **/
+  brw_new_batch(brw);
+   }
 }
 
 void
@@ -529,50 +587,6 @@ intel_batchbuffer_require_space(struct brw_context *brw, 
GLuint sz)
}
 }
 
-/**
- * Called when starting a new batch buffer.
- */
-static void
-brw_new_batch(struct brw_context *brw)
-{
-   /* Unreference any BOs held by the previous batch, and reset counts. */
-   for (int i = 0; i < brw->batch.exec_count; i++) {
-  brw_bo_unreference(brw->batch.exec_bos[i]);
-  brw->batch.exec_bos[i] = NULL;
-   }
-   brw->batch.batch_relocs.reloc_count = 0;
-   brw->batch.state_relocs.reloc_count = 0;
-   brw->batch.exec_count = 0;
-   brw->batch.aperture_space = 0;
-
-   brw_bo_unreference(brw->batch.state.bo);
-
-   /* Create a new batchbuffer and reset the associated state: */
-   intel_batchbuffer_reset_and_clear_render_cache(brw);
-
-   /* If the kernel supports hardware contexts, then most hardware state is
-* preserved between batches; we only need to re-emit state that is required
-* to be in every batch.  Otherwise we need to re-emit all the state that
-* would otherwise be stored in the context (which for all intents and
-* purposes means everything).
-*/
-   if (brw->hw_ctx == 0) {
-  

[Mesa-dev] [PATCH] i965/batch: don't ignore the 'brw_new_batch' call for a 'new batch'

2018-08-20 Thread asimiklit . work
From: Andrii Simiklit 

If we restore the 'new batch' using 'intel_batchbuffer_reset_to_saved'
function we must restore the default state of the batch using
'brw_new_batch' function because the 'intel_batchbuffer_flush'
function will not do it for the 'new batch' again.
At least the following fields of the batch
'state_base_address_emitted','aperture_space', 'state_used'
should be restored to default values to avoid:
1. the aperture_space overflow
2. the missed STATE_BASE_ADDRESS commad in the batch
3. the memory overconsumption of the 'statebuffer'
   due to uncleared 'state_used' field.
etc.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107626
Signed-off-by: Andrii Simiklit 
---
 src/mesa/drivers/dri/i965/intel_batchbuffer.c | 104 +++---
 1 file changed, 59 insertions(+), 45 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c 
b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
index 65d2c64..b8c5fb4 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
@@ -219,7 +219,7 @@ add_exec_bo(struct intel_batchbuffer *batch, struct brw_bo 
*bo)
bo->index = batch->exec_count;
batch->exec_bos[batch->exec_count] = bo;
batch->aperture_space += bo->size;
-
+   assert((batch->aperture_space >= 0) && "error 'batch->aperture_space' field 
is overflown!");
return batch->exec_count++;
 }
 
@@ -290,6 +290,51 @@ intel_batchbuffer_reset_and_clear_render_cache(struct 
brw_context *brw)
brw_cache_sets_clear(brw);
 }
 
+/**
+ * Called when starting a new batch buffer.
+ */
+static void
+brw_new_batch(struct brw_context *brw)
+{
+   /* Unreference any BOs held by the previous batch, and reset counts. */
+   for (int i = 0; i < brw->batch.exec_count; i++) {
+  brw_bo_unreference(brw->batch.exec_bos[i]);
+  brw->batch.exec_bos[i] = NULL;
+   }
+   brw->batch.batch_relocs.reloc_count = 0;
+   brw->batch.state_relocs.reloc_count = 0;
+   brw->batch.exec_count = 0;
+   brw->batch.aperture_space = 0;
+
+   brw_bo_unreference(brw->batch.state.bo);
+
+   /* Create a new batchbuffer and reset the associated state: */
+   intel_batchbuffer_reset_and_clear_render_cache(brw);
+
+   /* If the kernel supports hardware contexts, then most hardware state is
+* preserved between batches; we only need to re-emit state that is required
+* to be in every batch.  Otherwise we need to re-emit all the state that
+* would otherwise be stored in the context (which for all intents and
+* purposes means everything).
+*/
+   if (brw->hw_ctx == 0) {
+  brw->ctx.NewDriverState |= BRW_NEW_CONTEXT;
+  brw_upload_invariant_state(brw);
+   }
+
+   brw->ctx.NewDriverState |= BRW_NEW_BATCH;
+
+   brw->ib.index_size = -1;
+
+   /* We need to periodically reap the shader time results, because rollover
+* happens every few seconds.  We also want to see results every once in a
+* while, because many programs won't cleanly destroy our context, so the
+* end-of-run printout may not happen.
+*/
+   if (INTEL_DEBUG & DEBUG_SHADER_TIME)
+  brw_collect_and_report_shader_time(brw);
+}
+
 void
 intel_batchbuffer_save_state(struct brw_context *brw)
 {
@@ -311,6 +356,19 @@ intel_batchbuffer_reset_to_saved(struct brw_context *brw)
brw->batch.exec_count = brw->batch.saved.exec_count;
 
brw->batch.map_next = brw->batch.saved.map_next;
+   if (USED_BATCH(brw->batch) == 0)
+   {
+  /**
+   * The 'intel_batchbuffer_flush' function will not call
+   * the 'brw_new_batch' function when the USED_BATCH returns 0.
+   * It may leads to the few following issue:
+   * The 'aperture_space' field can be overflown
+   * The 'statebuffer' buffer contains the big unused space
+   * The STATE_BASE_ADDRESS message is missed
+   * etc
+   **/
+  brw_new_batch(brw);
+   }
 }
 
 void
@@ -529,50 +587,6 @@ intel_batchbuffer_require_space(struct brw_context *brw, 
GLuint sz)
}
 }
 
-/**
- * Called when starting a new batch buffer.
- */
-static void
-brw_new_batch(struct brw_context *brw)
-{
-   /* Unreference any BOs held by the previous batch, and reset counts. */
-   for (int i = 0; i < brw->batch.exec_count; i++) {
-  brw_bo_unreference(brw->batch.exec_bos[i]);
-  brw->batch.exec_bos[i] = NULL;
-   }
-   brw->batch.batch_relocs.reloc_count = 0;
-   brw->batch.state_relocs.reloc_count = 0;
-   brw->batch.exec_count = 0;
-   brw->batch.aperture_space = 0;
-
-   brw_bo_unreference(brw->batch.state.bo);
-
-   /* Create a new batchbuffer and reset the associated state: */
-   intel_batchbuffer_reset_and_clear_render_cache(brw);
-
-   /* If the kernel supports hardware contexts, then most hardware state is
-* preserved between batches; we only need to re-emit state that is required
-* to be in every batch.  Otherwise we need to re-emit all the state that
-* would otherwise be stored in the context (which for all intents and
-* purposes means everything).

[Mesa-dev] [PATCH] i965/gen6/xfb: handle case where transform feedback is not active

2018-08-15 Thread asimiklit . work
From: Andrii Simiklit 

When the SVBI Payload Enable is false I guess the register R1.4
which contains the Maximum Streamed Vertex Buffer Index is filled by zero
and GS stops to write transform feedback when the transform feedback 
is not active.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107579
Signed-off-by: Andrii Simiklit 
---
 src/mesa/drivers/dri/i965/genX_state_upload.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c 
b/src/mesa/drivers/dri/i965/genX_state_upload.c
index ea5ad55..0f82500 100644
--- a/src/mesa/drivers/dri/i965/genX_state_upload.c
+++ b/src/mesa/drivers/dri/i965/genX_state_upload.c
@@ -2806,7 +2806,7 @@ genX(upload_gs_state)(struct brw_context *brw)
 #if GEN_GEN < 7
  gs.SOStatisticsEnable = true;
  if (gs_prog->info.has_transform_feedback_varyings)
-gs.SVBIPayloadEnable = true;
+gs.SVBIPayloadEnable = _mesa_is_xfb_active_and_unpaused(ctx);
 
  /* GEN6_GS_SPF_MODE and GEN6_GS_VECTOR_MASK_ENABLE are enabled as it
   * was previously done for gen6.
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2] intel/decoder: fix the possible out of bounds group_iter

2018-08-14 Thread asimiklit . work
From: Andrii Simiklit 

The "gen_group_get_length" function can return a negative value
and it can lead to the out of bounds group_iter.

v2: printing of "unknown command type" was added
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107544
Signed-off-by: Andrii Simiklit 
---
 src/intel/common/gen_decoder.c | 13 +++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/intel/common/gen_decoder.c b/src/intel/common/gen_decoder.c
index ec0a486..b36facf 100644
--- a/src/intel/common/gen_decoder.c
+++ b/src/intel/common/gen_decoder.c
@@ -770,6 +770,13 @@ gen_group_get_length(struct gen_group *group, const 
uint32_t *p)
 return -1;
   }
}
+   default: {
+  fprintf(stderr, "Unknown command type %u in '%s::%s'\n",
+type,
+(group->parent && group->parent->name) ? group->parent->name : 
"UNKNOWN",
+group->name ? group->name : "UNKNOWN");
+  break;
+   }
}
 
return -1;
@@ -803,8 +810,10 @@ static bool
 iter_more_groups(const struct gen_field_iterator *iter)
 {
if (iter->group->variable) {
-  return iter_group_offset_bits(iter, iter->group_iter + 1) <
-  (gen_group_get_length(iter->group, iter->p) * 32);
+  const int length = gen_group_get_length(iter->group, iter->p);
+  return length > 0 &&
+iter_group_offset_bits(iter, iter->group_iter + 1) <
+  (length * 32);
} else {
   return (iter->group_iter + 1) < iter->group->group_count ||
  iter->group->next != NULL;
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev