Re: [Mesa-dev] [PATCH 15/19] program_resource: add subroutine support

2015-07-20 Thread Marek Olšák
On Thu, Jul 9, 2015 at 9:17 AM, Dave Airlie airl...@gmail.com wrote:
 From: Dave Airlie airl...@redhat.com

 This fleshes out the ARB_program_query support for the
 APIs that ARB_shader_subroutine introduces, leaving
 some TODOs for later addition.

 Signed-off-by: Dave Airlie airl...@redhat.com
 ---
  src/mesa/main/shader_query.cpp | 46 
 ++
  1 file changed, 46 insertions(+)

 diff --git a/src/mesa/main/shader_query.cpp b/src/mesa/main/shader_query.cpp
 index a6246a3..4fa5913 100644
 --- a/src/mesa/main/shader_query.cpp
 +++ b/src/mesa/main/shader_query.cpp
 @@ -61,6 +61,7 @@ DECL_RESOURCE_FUNC(UBO, gl_uniform_block);
  DECL_RESOURCE_FUNC(UNI, gl_uniform_storage);
  DECL_RESOURCE_FUNC(ATC, gl_active_atomic_buffer);
  DECL_RESOURCE_FUNC(XFB, gl_transform_feedback_varying_info);
 +DECL_RESOURCE_FUNC(SUB, gl_subroutine_function);

  void GLAPIENTRY
  _mesa_BindAttribLocation(GLhandleARB program, GLuint index,
 @@ -497,6 +498,24 @@ _mesa_program_resource_name(struct gl_program_resource 
 *res)
return RESOURCE_VAR(res)-name;
 case GL_UNIFORM:
return RESOURCE_UNI(res)-name;
 +   case GL_VERTEX_SUBROUTINE_UNIFORM:
 +   case GL_GEOMETRY_SUBROUTINE_UNIFORM:
 +   case GL_FRAGMENT_SUBROUTINE_UNIFORM:
 +  /* TODO
 + case GL_COMPUTE_SUBROUTINE_UNIFORM:
 + case GL_TESS_CONTROL_SUBROUTINE_UNIFORM:
 + case GL_TESS_EVALUATION_SUBROUTINE_UNIFORM:
 +  */
 +  return RESOURCE_UNI(res)-name + 9;
 +   case GL_VERTEX_SUBROUTINE:
 +   case GL_GEOMETRY_SUBROUTINE:
 +   case GL_FRAGMENT_SUBROUTINE:
 +  /* TODO
 + case GL_COMPUTE_SUBROUTINE:
 + case GL_TESS_CONTROL_SUBROUTINE:
 + case GL_TESS_EVALUATION_SUBROUTINE:
 +  */
 +  return RESOURCE_SUB(res)-name;

Is there any reason not to add all tess and compute cases? Same for
all the other cases below.


 default:
assert(!support for resource type not implemented);
 }
 @@ -515,6 +534,9 @@ _mesa_program_resource_array_size(struct 
 gl_program_resource *res)
 case GL_PROGRAM_OUTPUT:
return RESOURCE_VAR(res)-data.max_array_access;
 case GL_UNIFORM:
 +   case GL_VERTEX_SUBROUTINE_UNIFORM:
 +   case GL_GEOMETRY_SUBROUTINE_UNIFORM:
 +   case GL_FRAGMENT_SUBROUTINE_UNIFORM:
return RESOURCE_UNI(res)-array_elements;
 case GL_ATOMIC_COUNTER_BUFFER:
 case GL_UNIFORM_BLOCK:
 @@ -571,6 +593,12 @@ _mesa_program_resource_find_name(struct 
 gl_shader_program *shProg,
case GL_TRANSFORM_FEEDBACK_VARYING:
case GL_UNIFORM_BLOCK:
case GL_UNIFORM:
 +  case GL_VERTEX_SUBROUTINE_UNIFORM:
 +  case GL_GEOMETRY_SUBROUTINE_UNIFORM:
 +  case GL_FRAGMENT_SUBROUTINE_UNIFORM:
 +  case GL_VERTEX_SUBROUTINE:
 +  case GL_GEOMETRY_SUBROUTINE:
 +  case GL_FRAGMENT_SUBROUTINE:
   if (strncmp(rname, name, baselen) == 0) {
  /* Basename match, check if array or struct. */
  if (name[baselen] == '\0' ||
 @@ -651,6 +679,12 @@ _mesa_program_resource_find_index(struct 
 gl_shader_program *shProg,
case GL_PROGRAM_INPUT:
case GL_PROGRAM_OUTPUT:
case GL_UNIFORM:
 +  case GL_VERTEX_SUBROUTINE_UNIFORM:
 +  case GL_GEOMETRY_SUBROUTINE_UNIFORM:
 +  case GL_FRAGMENT_SUBROUTINE_UNIFORM:
 +  case GL_VERTEX_SUBROUTINE:
 +  case GL_GEOMETRY_SUBROUTINE:
 +  case GL_FRAGMENT_SUBROUTINE:
   if (++idx == (int) index)
  return res;
   break;
 @@ -740,6 +774,8 @@ program_resource_location(struct gl_shader_program 
 *shProg,
  {
 unsigned index, offset;
 int array_index = -1;
 +   long offset_ret;
 +   const GLchar *base_name_end;

 if (res-Type == GL_PROGRAM_INPUT || res-Type == GL_PROGRAM_OUTPUT) {
array_index = array_index_of_resource(res, name);
 @@ -780,6 +816,16 @@ program_resource_location(struct gl_shader_program 
 *shProg,
/* location in remap table + array element offset */
return RESOURCE_UNI(res)-remap_location + offset;

 +   case GL_VERTEX_SUBROUTINE_UNIFORM:
 +   case GL_GEOMETRY_SUBROUTINE_UNIFORM:
 +   case GL_FRAGMENT_SUBROUTINE_UNIFORM:
 +  /* TODO
 + case GL_COMPUTE_SUBROUTINE_UNIFORM:
 + case GL_TESS_CONTROL_SUBROUTINE_UNIFORM:
 + case GL_TESS_EVALUATION_SUBROUTINE_UNIFORM:
 +  */
 +  offset_ret = parse_program_resource_name(name, base_name_end);
 +  return 
 RESOURCE_UNI(res)-subroutine[_mesa_shader_stage_from_subroutine_uniform(res-Type)].index
  + ((offset_ret != -1) ? offset_ret : 0);

Oh man, this line is too long. Can it be reformatted to be shorter,
ideally no more than 80 characters?

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


[Mesa-dev] [PATCH 15/19] program_resource: add subroutine support

2015-07-09 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

This fleshes out the ARB_program_query support for the
APIs that ARB_shader_subroutine introduces, leaving
some TODOs for later addition.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/mesa/main/shader_query.cpp | 46 ++
 1 file changed, 46 insertions(+)

diff --git a/src/mesa/main/shader_query.cpp b/src/mesa/main/shader_query.cpp
index a6246a3..4fa5913 100644
--- a/src/mesa/main/shader_query.cpp
+++ b/src/mesa/main/shader_query.cpp
@@ -61,6 +61,7 @@ DECL_RESOURCE_FUNC(UBO, gl_uniform_block);
 DECL_RESOURCE_FUNC(UNI, gl_uniform_storage);
 DECL_RESOURCE_FUNC(ATC, gl_active_atomic_buffer);
 DECL_RESOURCE_FUNC(XFB, gl_transform_feedback_varying_info);
+DECL_RESOURCE_FUNC(SUB, gl_subroutine_function);
 
 void GLAPIENTRY
 _mesa_BindAttribLocation(GLhandleARB program, GLuint index,
@@ -497,6 +498,24 @@ _mesa_program_resource_name(struct gl_program_resource 
*res)
   return RESOURCE_VAR(res)-name;
case GL_UNIFORM:
   return RESOURCE_UNI(res)-name;
+   case GL_VERTEX_SUBROUTINE_UNIFORM:
+   case GL_GEOMETRY_SUBROUTINE_UNIFORM:
+   case GL_FRAGMENT_SUBROUTINE_UNIFORM:
+  /* TODO
+ case GL_COMPUTE_SUBROUTINE_UNIFORM:
+ case GL_TESS_CONTROL_SUBROUTINE_UNIFORM:
+ case GL_TESS_EVALUATION_SUBROUTINE_UNIFORM:
+  */
+  return RESOURCE_UNI(res)-name + 9;
+   case GL_VERTEX_SUBROUTINE:
+   case GL_GEOMETRY_SUBROUTINE:
+   case GL_FRAGMENT_SUBROUTINE:
+  /* TODO
+ case GL_COMPUTE_SUBROUTINE:
+ case GL_TESS_CONTROL_SUBROUTINE:
+ case GL_TESS_EVALUATION_SUBROUTINE:
+  */
+  return RESOURCE_SUB(res)-name;
default:
   assert(!support for resource type not implemented);
}
@@ -515,6 +534,9 @@ _mesa_program_resource_array_size(struct 
gl_program_resource *res)
case GL_PROGRAM_OUTPUT:
   return RESOURCE_VAR(res)-data.max_array_access;
case GL_UNIFORM:
+   case GL_VERTEX_SUBROUTINE_UNIFORM:
+   case GL_GEOMETRY_SUBROUTINE_UNIFORM:
+   case GL_FRAGMENT_SUBROUTINE_UNIFORM:
   return RESOURCE_UNI(res)-array_elements;
case GL_ATOMIC_COUNTER_BUFFER:
case GL_UNIFORM_BLOCK:
@@ -571,6 +593,12 @@ _mesa_program_resource_find_name(struct gl_shader_program 
*shProg,
   case GL_TRANSFORM_FEEDBACK_VARYING:
   case GL_UNIFORM_BLOCK:
   case GL_UNIFORM:
+  case GL_VERTEX_SUBROUTINE_UNIFORM:
+  case GL_GEOMETRY_SUBROUTINE_UNIFORM:
+  case GL_FRAGMENT_SUBROUTINE_UNIFORM:
+  case GL_VERTEX_SUBROUTINE:
+  case GL_GEOMETRY_SUBROUTINE:
+  case GL_FRAGMENT_SUBROUTINE:
  if (strncmp(rname, name, baselen) == 0) {
 /* Basename match, check if array or struct. */
 if (name[baselen] == '\0' ||
@@ -651,6 +679,12 @@ _mesa_program_resource_find_index(struct gl_shader_program 
*shProg,
   case GL_PROGRAM_INPUT:
   case GL_PROGRAM_OUTPUT:
   case GL_UNIFORM:
+  case GL_VERTEX_SUBROUTINE_UNIFORM:
+  case GL_GEOMETRY_SUBROUTINE_UNIFORM:
+  case GL_FRAGMENT_SUBROUTINE_UNIFORM:
+  case GL_VERTEX_SUBROUTINE:
+  case GL_GEOMETRY_SUBROUTINE:
+  case GL_FRAGMENT_SUBROUTINE:
  if (++idx == (int) index)
 return res;
  break;
@@ -740,6 +774,8 @@ program_resource_location(struct gl_shader_program *shProg,
 {
unsigned index, offset;
int array_index = -1;
+   long offset_ret;
+   const GLchar *base_name_end;
 
if (res-Type == GL_PROGRAM_INPUT || res-Type == GL_PROGRAM_OUTPUT) {
   array_index = array_index_of_resource(res, name);
@@ -780,6 +816,16 @@ program_resource_location(struct gl_shader_program *shProg,
   /* location in remap table + array element offset */
   return RESOURCE_UNI(res)-remap_location + offset;
 
+   case GL_VERTEX_SUBROUTINE_UNIFORM:
+   case GL_GEOMETRY_SUBROUTINE_UNIFORM:
+   case GL_FRAGMENT_SUBROUTINE_UNIFORM:
+  /* TODO
+ case GL_COMPUTE_SUBROUTINE_UNIFORM:
+ case GL_TESS_CONTROL_SUBROUTINE_UNIFORM:
+ case GL_TESS_EVALUATION_SUBROUTINE_UNIFORM:
+  */
+  offset_ret = parse_program_resource_name(name, base_name_end);
+  return 
RESOURCE_UNI(res)-subroutine[_mesa_shader_stage_from_subroutine_uniform(res-Type)].index
 + ((offset_ret != -1) ? offset_ret : 0);
default:
   return -1;
}
-- 
2.4.3

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


[Mesa-dev] [PATCH 15/19] program_resource: add subroutine support

2015-05-31 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

This fleshes out the ARB_program_query support for the
APIs that ARB_shader_subroutine introduces, leaving
some TODOs for later addition.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/mesa/main/shader_query.cpp | 46 ++
 1 file changed, 46 insertions(+)

diff --git a/src/mesa/main/shader_query.cpp b/src/mesa/main/shader_query.cpp
index 3445f89..3f5516a 100644
--- a/src/mesa/main/shader_query.cpp
+++ b/src/mesa/main/shader_query.cpp
@@ -61,6 +61,7 @@ DECL_RESOURCE_FUNC(UBO, gl_uniform_block);
 DECL_RESOURCE_FUNC(UNI, gl_uniform_storage);
 DECL_RESOURCE_FUNC(ATC, gl_active_atomic_buffer);
 DECL_RESOURCE_FUNC(XFB, gl_transform_feedback_varying_info);
+DECL_RESOURCE_FUNC(SUB, gl_subroutine_function);
 
 void GLAPIENTRY
 _mesa_BindAttribLocation(GLhandleARB program, GLuint index,
@@ -489,6 +490,24 @@ _mesa_program_resource_name(struct gl_program_resource 
*res)
   return RESOURCE_VAR(res)-name;
case GL_UNIFORM:
   return RESOURCE_UNI(res)-name;
+   case GL_VERTEX_SUBROUTINE_UNIFORM:
+   case GL_GEOMETRY_SUBROUTINE_UNIFORM:
+   case GL_FRAGMENT_SUBROUTINE_UNIFORM:
+  /* TODO
+ case GL_COMPUTE_SUBROUTINE_UNIFORM:
+ case GL_TESS_CONTROL_SUBROUTINE_UNIFORM:
+ case GL_TESS_EVALUATION_SUBROUTINE_UNIFORM:
+  */
+  return RESOURCE_UNI(res)-name + 9;
+   case GL_VERTEX_SUBROUTINE:
+   case GL_GEOMETRY_SUBROUTINE:
+   case GL_FRAGMENT_SUBROUTINE:
+  /* TODO
+ case GL_COMPUTE_SUBROUTINE:
+ case GL_TESS_CONTROL_SUBROUTINE:
+ case GL_TESS_EVALUATION_SUBROUTINE:
+  */
+  return RESOURCE_SUB(res)-name;
default:
   assert(!support for resource type not implemented);
}
@@ -507,6 +526,9 @@ _mesa_program_resource_array_size(struct 
gl_program_resource *res)
case GL_PROGRAM_OUTPUT:
   return RESOURCE_VAR(res)-data.max_array_access;
case GL_UNIFORM:
+   case GL_VERTEX_SUBROUTINE_UNIFORM:
+   case GL_GEOMETRY_SUBROUTINE_UNIFORM:
+   case GL_FRAGMENT_SUBROUTINE_UNIFORM:
   return RESOURCE_UNI(res)-array_elements;
case GL_ATOMIC_COUNTER_BUFFER:
case GL_UNIFORM_BLOCK:
@@ -552,6 +574,12 @@ _mesa_program_resource_find_name(struct gl_shader_program 
*shProg,
   case GL_TRANSFORM_FEEDBACK_VARYING:
   case GL_UNIFORM_BLOCK:
   case GL_UNIFORM:
+  case GL_VERTEX_SUBROUTINE_UNIFORM:
+  case GL_GEOMETRY_SUBROUTINE_UNIFORM:
+  case GL_FRAGMENT_SUBROUTINE_UNIFORM:
+  case GL_VERTEX_SUBROUTINE:
+  case GL_GEOMETRY_SUBROUTINE:
+  case GL_FRAGMENT_SUBROUTINE:
  if (strncmp(rname, name, baselen) == 0) {
 /* Basename match, check if array or struct. */
 if (name[baselen] == '\0' ||
@@ -632,6 +660,12 @@ _mesa_program_resource_find_index(struct gl_shader_program 
*shProg,
   case GL_PROGRAM_INPUT:
   case GL_PROGRAM_OUTPUT:
   case GL_UNIFORM:
+  case GL_VERTEX_SUBROUTINE_UNIFORM:
+  case GL_GEOMETRY_SUBROUTINE_UNIFORM:
+  case GL_FRAGMENT_SUBROUTINE_UNIFORM:
+  case GL_VERTEX_SUBROUTINE:
+  case GL_GEOMETRY_SUBROUTINE:
+  case GL_FRAGMENT_SUBROUTINE:
  if (++idx == (int) index)
 return res;
  break;
@@ -721,6 +755,8 @@ program_resource_location(struct gl_shader_program *shProg,
 {
unsigned index, offset;
int array_index = -1;
+   long offset_ret;
+   const GLchar *base_name_end;
 
if (res-Type == GL_PROGRAM_INPUT || res-Type == GL_PROGRAM_OUTPUT) {
   array_index = array_index_of_resource(res, name);
@@ -757,6 +793,16 @@ program_resource_location(struct gl_shader_program *shProg,
   /* location in remap table + array element offset */
   return RESOURCE_UNI(res)-remap_location + offset;
 
+   case GL_VERTEX_SUBROUTINE_UNIFORM:
+   case GL_GEOMETRY_SUBROUTINE_UNIFORM:
+   case GL_FRAGMENT_SUBROUTINE_UNIFORM:
+  /* TODO
+ case GL_COMPUTE_SUBROUTINE_UNIFORM:
+ case GL_TESS_CONTROL_SUBROUTINE_UNIFORM:
+ case GL_TESS_EVALUATION_SUBROUTINE_UNIFORM:
+  */
+  offset_ret = parse_program_resource_name(name, base_name_end);
+  return 
RESOURCE_UNI(res)-subroutine[_mesa_shader_stage_from_subroutine_uniform(res-Type)].index
 + ((offset_ret != -1) ? offset_ret : 0);
default:
   return -1;
}
-- 
2.1.0

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