Re: [Mesa-dev] [PATCH 4/4] mesa: enable GL_EXT_disjoint_timer_query extension

2017-12-13 Thread Tapani Pälli



On 12/12/2017 07:00 PM, Ian Romanick wrote:

On 11/19/2017 11:18 PM, Tapani Pälli wrote:

Add GL_GPU_DISJOINT_EXT and enable extension when ARB_timer_query
is supported by the driver.

Following dEQP cases pass:
dEQP-EGL.functional.get_proc_address.extension.gl_ext_disjoint_timer_query
dEQP-EGL.functional.client_extensions.disjoint

Piglit test 'ext_disjoint_timer_query-simple' passes with these changes.

No changes/regression observed in Intel CI.

Signed-off-by: Tapani Pälli 
---
  src/mesa/main/extensions_table.h |  1 +
  src/mesa/main/get.c  | 17 +
  src/mesa/main/get_hash_params.py |  5 +
  src/mesa/main/glheader.h |  4 
  src/mesa/main/mtypes.h   |  1 +
  src/mesa/main/queryobj.c |  3 ++-
  6 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
index 5b66e7d30d..78f0d35feb 100644
--- a/src/mesa/main/extensions_table.h
+++ b/src/mesa/main/extensions_table.h
@@ -209,6 +209,7 @@ EXT(EXT_copy_image  , OES_copy_image
  EXT(EXT_copy_texture, dummy_true  
   , GLL,  x ,  x ,  x , 1995)
  EXT(EXT_depth_bounds_test   , EXT_depth_bounds_test   
   , GLL, GLC,  x ,  x , 2002)
  EXT(EXT_discard_framebuffer , dummy_true  
   ,  x ,  x , ES1, ES2, 2009)
+EXT(EXT_disjoint_timer_query, ARB_timer_query  
  ,  x ,  x ,  x , ES2, 2016)

  ^^^

This should be EXT_disjoint_timer_query, right?  All of the things below
seem to use that flag.


Right, seems like I did not think this through. Earlier I thought we 
could simply turn it on for all drivers that support ARB_timer_query 
(and robustness) but seems not all the drivers do so we need to toggle 
it on separately. I will need to update this one and add a separate 
patch to toggle it on in the i965 driver.




  EXT(EXT_draw_buffers, dummy_true  
   ,  x ,  x ,  x , ES2, 2012)
  EXT(EXT_draw_buffers2   , EXT_draw_buffers2   
   , GLL, GLC,  x ,  x , 2006)
  EXT(EXT_draw_buffers_indexed, ARB_draw_buffers_blend  
   ,  x ,  x ,  x ,  30, 2014)
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index ea8d932b18..6c0d1f7e9a 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -578,6 +578,13 @@ static const int extra_EXT_provoking_vertex_32[] = {
 EXTRA_END
  };
  
+static const int extra_EXT_disjoint_timer_query[] = {

+   EXTRA_API_ES2,
+   EXTRA_API_ES3,
+   EXT(EXT_disjoint_timer_query),
+   EXTRA_END
+};
+
  
  /* This is the big table describing all the enums we accept in

   * glGet*v().  The table is partitioned into six parts: enums
@@ -1151,6 +1158,16 @@ find_custom_value(struct gl_context *ctx, const struct 
value_desc *d, union valu
   }
}
break;
+   /* GL_EXT_disjoint_timer_query */
+   case GL_GPU_DISJOINT_EXT:
+  {
+ simple_mtx_lock(>Shared->Mutex);
+ v->value_int = ctx->Shared->DisjointOperation;
+ /* Reset state as expected by the spec. */
+ ctx->Shared->DisjointOperation = false;
+ simple_mtx_unlock(>Shared->Mutex);
+  }
+  break;
 }
  }
  
diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py

index 20ef6e4977..55a956da84 100644
--- a/src/mesa/main/get_hash_params.py
+++ b/src/mesa/main/get_hash_params.py
@@ -254,6 +254,11 @@ descriptor=[
[ "POINT_SIZE_ARRAY_BUFFER_BINDING_OES", "LOC_CUSTOM, TYPE_INT, 0, 
NO_EXTRA" ],
  ]},
  
+# Enums in GLES2, GLES3

+{ "apis": ["GLES2", "GLES3"], "params": [
+  [ "GPU_DISJOINT_EXT", "LOC_CUSTOM, TYPE_INT, 0, 
extra_EXT_disjoint_timer_query" ],
+]},
+
  { "apis": ["GL", "GL_CORE", "GLES2"], "params": [
  # == GL_MAX_TEXTURE_COORDS_NV
[ "MAX_TEXTURE_COORDS_ARB", "CONTEXT_INT(Const.MaxTextureCoordUnits), 
extra_ARB_fragment_program" ],
diff --git a/src/mesa/main/glheader.h b/src/mesa/main/glheader.h
index 3f2a923782..35a442a77b 100644
--- a/src/mesa/main/glheader.h
+++ b/src/mesa/main/glheader.h
@@ -144,6 +144,10 @@ typedef void *GLeglImageOES;
  #define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52
  #endif
  
+#ifndef GL_EXT_disjoint_timer_query

+#define GL_GPU_DISJOINT_EXT 0x8FBB
+#endif
+
  /* Inexplicably, GL_HALF_FLOAT_OES has a different value than GL_HALF_FLOAT.
   */
  #ifndef GL_HALF_FLOAT_OES
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 4cb6a74d69..9ed8d86688 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -4143,6 +4143,7 @@ struct gl_extensions
 GLboolean EXT_blend_func_separate;
 GLboolean EXT_blend_minmax;
 GLboolean EXT_depth_bounds_test;
+   GLboolean 

Re: [Mesa-dev] [PATCH 4/4] mesa: enable GL_EXT_disjoint_timer_query extension

2017-12-12 Thread Ian Romanick
On 11/19/2017 11:18 PM, Tapani Pälli wrote:
> Add GL_GPU_DISJOINT_EXT and enable extension when ARB_timer_query
> is supported by the driver.
> 
> Following dEQP cases pass:
>dEQP-EGL.functional.get_proc_address.extension.gl_ext_disjoint_timer_query
>dEQP-EGL.functional.client_extensions.disjoint
> 
> Piglit test 'ext_disjoint_timer_query-simple' passes with these changes.
> 
> No changes/regression observed in Intel CI.
> 
> Signed-off-by: Tapani Pälli 
> ---
>  src/mesa/main/extensions_table.h |  1 +
>  src/mesa/main/get.c  | 17 +
>  src/mesa/main/get_hash_params.py |  5 +
>  src/mesa/main/glheader.h |  4 
>  src/mesa/main/mtypes.h   |  1 +
>  src/mesa/main/queryobj.c |  3 ++-
>  6 files changed, 30 insertions(+), 1 deletion(-)
> 
> diff --git a/src/mesa/main/extensions_table.h 
> b/src/mesa/main/extensions_table.h
> index 5b66e7d30d..78f0d35feb 100644
> --- a/src/mesa/main/extensions_table.h
> +++ b/src/mesa/main/extensions_table.h
> @@ -209,6 +209,7 @@ EXT(EXT_copy_image  , 
> OES_copy_image
>  EXT(EXT_copy_texture, dummy_true 
> , GLL,  x ,  x ,  x , 1995)
>  EXT(EXT_depth_bounds_test   , EXT_depth_bounds_test  
> , GLL, GLC,  x ,  x , 2002)
>  EXT(EXT_discard_framebuffer , dummy_true 
> ,  x ,  x , ES1, ES2, 2009)
> +EXT(EXT_disjoint_timer_query, ARB_timer_query
> ,  x ,  x ,  x , ES2, 2016)
 ^^^

This should be EXT_disjoint_timer_query, right?  All of the things below
seem to use that flag.

>  EXT(EXT_draw_buffers, dummy_true 
> ,  x ,  x ,  x , ES2, 2012)
>  EXT(EXT_draw_buffers2   , EXT_draw_buffers2  
> , GLL, GLC,  x ,  x , 2006)
>  EXT(EXT_draw_buffers_indexed, ARB_draw_buffers_blend 
> ,  x ,  x ,  x ,  30, 2014)
> diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
> index ea8d932b18..6c0d1f7e9a 100644
> --- a/src/mesa/main/get.c
> +++ b/src/mesa/main/get.c
> @@ -578,6 +578,13 @@ static const int extra_EXT_provoking_vertex_32[] = {
> EXTRA_END
>  };
>  
> +static const int extra_EXT_disjoint_timer_query[] = {
> +   EXTRA_API_ES2,
> +   EXTRA_API_ES3,
> +   EXT(EXT_disjoint_timer_query),
> +   EXTRA_END
> +};
> +
>  
>  /* This is the big table describing all the enums we accept in
>   * glGet*v().  The table is partitioned into six parts: enums
> @@ -1151,6 +1158,16 @@ find_custom_value(struct gl_context *ctx, const struct 
> value_desc *d, union valu
>   }
>}
>break;
> +   /* GL_EXT_disjoint_timer_query */
> +   case GL_GPU_DISJOINT_EXT:
> +  {
> + simple_mtx_lock(>Shared->Mutex);
> + v->value_int = ctx->Shared->DisjointOperation;
> + /* Reset state as expected by the spec. */
> + ctx->Shared->DisjointOperation = false;
> + simple_mtx_unlock(>Shared->Mutex);
> +  }
> +  break;
> }
>  }
>  
> diff --git a/src/mesa/main/get_hash_params.py 
> b/src/mesa/main/get_hash_params.py
> index 20ef6e4977..55a956da84 100644
> --- a/src/mesa/main/get_hash_params.py
> +++ b/src/mesa/main/get_hash_params.py
> @@ -254,6 +254,11 @@ descriptor=[
>[ "POINT_SIZE_ARRAY_BUFFER_BINDING_OES", "LOC_CUSTOM, TYPE_INT, 0, 
> NO_EXTRA" ],
>  ]},
>  
> +# Enums in GLES2, GLES3
> +{ "apis": ["GLES2", "GLES3"], "params": [
> +  [ "GPU_DISJOINT_EXT", "LOC_CUSTOM, TYPE_INT, 0, 
> extra_EXT_disjoint_timer_query" ],
> +]},
> +
>  { "apis": ["GL", "GL_CORE", "GLES2"], "params": [
>  # == GL_MAX_TEXTURE_COORDS_NV
>[ "MAX_TEXTURE_COORDS_ARB", "CONTEXT_INT(Const.MaxTextureCoordUnits), 
> extra_ARB_fragment_program" ],
> diff --git a/src/mesa/main/glheader.h b/src/mesa/main/glheader.h
> index 3f2a923782..35a442a77b 100644
> --- a/src/mesa/main/glheader.h
> +++ b/src/mesa/main/glheader.h
> @@ -144,6 +144,10 @@ typedef void *GLeglImageOES;
>  #define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52
>  #endif
>  
> +#ifndef GL_EXT_disjoint_timer_query
> +#define GL_GPU_DISJOINT_EXT 0x8FBB
> +#endif
> +
>  /* Inexplicably, GL_HALF_FLOAT_OES has a different value than GL_HALF_FLOAT.
>   */
>  #ifndef GL_HALF_FLOAT_OES
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index 4cb6a74d69..9ed8d86688 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -4143,6 +4143,7 @@ struct gl_extensions
> GLboolean EXT_blend_func_separate;
> GLboolean EXT_blend_minmax;
> GLboolean EXT_depth_bounds_test;
> +   GLboolean EXT_disjoint_timer_query;
> GLboolean EXT_draw_buffers2;
> GLboolean EXT_framebuffer_multisample;
> GLboolean EXT_framebuffer_multisample_blit_scaled;
> diff --git 

[Mesa-dev] [PATCH 4/4] mesa: enable GL_EXT_disjoint_timer_query extension

2017-11-19 Thread Tapani Pälli
Add GL_GPU_DISJOINT_EXT and enable extension when ARB_timer_query
is supported by the driver.

Following dEQP cases pass:
   dEQP-EGL.functional.get_proc_address.extension.gl_ext_disjoint_timer_query
   dEQP-EGL.functional.client_extensions.disjoint

Piglit test 'ext_disjoint_timer_query-simple' passes with these changes.

No changes/regression observed in Intel CI.

Signed-off-by: Tapani Pälli 
---
 src/mesa/main/extensions_table.h |  1 +
 src/mesa/main/get.c  | 17 +
 src/mesa/main/get_hash_params.py |  5 +
 src/mesa/main/glheader.h |  4 
 src/mesa/main/mtypes.h   |  1 +
 src/mesa/main/queryobj.c |  3 ++-
 6 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
index 5b66e7d30d..78f0d35feb 100644
--- a/src/mesa/main/extensions_table.h
+++ b/src/mesa/main/extensions_table.h
@@ -209,6 +209,7 @@ EXT(EXT_copy_image  , OES_copy_image
 EXT(EXT_copy_texture, dummy_true   
  , GLL,  x ,  x ,  x , 1995)
 EXT(EXT_depth_bounds_test   , EXT_depth_bounds_test
  , GLL, GLC,  x ,  x , 2002)
 EXT(EXT_discard_framebuffer , dummy_true   
  ,  x ,  x , ES1, ES2, 2009)
+EXT(EXT_disjoint_timer_query, ARB_timer_query  
  ,  x ,  x ,  x , ES2, 2016)
 EXT(EXT_draw_buffers, dummy_true   
  ,  x ,  x ,  x , ES2, 2012)
 EXT(EXT_draw_buffers2   , EXT_draw_buffers2
  , GLL, GLC,  x ,  x , 2006)
 EXT(EXT_draw_buffers_indexed, ARB_draw_buffers_blend   
  ,  x ,  x ,  x ,  30, 2014)
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index ea8d932b18..6c0d1f7e9a 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -578,6 +578,13 @@ static const int extra_EXT_provoking_vertex_32[] = {
EXTRA_END
 };
 
+static const int extra_EXT_disjoint_timer_query[] = {
+   EXTRA_API_ES2,
+   EXTRA_API_ES3,
+   EXT(EXT_disjoint_timer_query),
+   EXTRA_END
+};
+
 
 /* This is the big table describing all the enums we accept in
  * glGet*v().  The table is partitioned into six parts: enums
@@ -1151,6 +1158,16 @@ find_custom_value(struct gl_context *ctx, const struct 
value_desc *d, union valu
  }
   }
   break;
+   /* GL_EXT_disjoint_timer_query */
+   case GL_GPU_DISJOINT_EXT:
+  {
+ simple_mtx_lock(>Shared->Mutex);
+ v->value_int = ctx->Shared->DisjointOperation;
+ /* Reset state as expected by the spec. */
+ ctx->Shared->DisjointOperation = false;
+ simple_mtx_unlock(>Shared->Mutex);
+  }
+  break;
}
 }
 
diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py
index 20ef6e4977..55a956da84 100644
--- a/src/mesa/main/get_hash_params.py
+++ b/src/mesa/main/get_hash_params.py
@@ -254,6 +254,11 @@ descriptor=[
   [ "POINT_SIZE_ARRAY_BUFFER_BINDING_OES", "LOC_CUSTOM, TYPE_INT, 0, NO_EXTRA" 
],
 ]},
 
+# Enums in GLES2, GLES3
+{ "apis": ["GLES2", "GLES3"], "params": [
+  [ "GPU_DISJOINT_EXT", "LOC_CUSTOM, TYPE_INT, 0, 
extra_EXT_disjoint_timer_query" ],
+]},
+
 { "apis": ["GL", "GL_CORE", "GLES2"], "params": [
 # == GL_MAX_TEXTURE_COORDS_NV
   [ "MAX_TEXTURE_COORDS_ARB", "CONTEXT_INT(Const.MaxTextureCoordUnits), 
extra_ARB_fragment_program" ],
diff --git a/src/mesa/main/glheader.h b/src/mesa/main/glheader.h
index 3f2a923782..35a442a77b 100644
--- a/src/mesa/main/glheader.h
+++ b/src/mesa/main/glheader.h
@@ -144,6 +144,10 @@ typedef void *GLeglImageOES;
 #define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52
 #endif
 
+#ifndef GL_EXT_disjoint_timer_query
+#define GL_GPU_DISJOINT_EXT 0x8FBB
+#endif
+
 /* Inexplicably, GL_HALF_FLOAT_OES has a different value than GL_HALF_FLOAT.
  */
 #ifndef GL_HALF_FLOAT_OES
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 4cb6a74d69..9ed8d86688 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -4143,6 +4143,7 @@ struct gl_extensions
GLboolean EXT_blend_func_separate;
GLboolean EXT_blend_minmax;
GLboolean EXT_depth_bounds_test;
+   GLboolean EXT_disjoint_timer_query;
GLboolean EXT_draw_buffers2;
GLboolean EXT_framebuffer_multisample;
GLboolean EXT_framebuffer_multisample_blit_scaled;
diff --git a/src/mesa/main/queryobj.c b/src/mesa/main/queryobj.c
index d966814a76..79600d7db1 100644
--- a/src/mesa/main/queryobj.c
+++ b/src/mesa/main/queryobj.c
@@ -822,7 +822,8 @@ get_query_object(struct gl_context *ctx, const char *func,
if (buf && buf != ctx->Shared->NullBufferObj) {
   bool is_64bit = ptype == GL_INT64_ARB ||
  ptype == GL_UNSIGNED_INT64_ARB;
-  if (!ctx->Extensions.ARB_query_buffer_object) {
+  if