[Mesa-dev] [PATCH 52/53] mesa/glsl: set and get cs layouts to and from shader_info
Timothy Arceri
timothy.arceri at collabora.com
Tue Jan 3 02:43:56 UTC 2017
---
src/compiler/glsl/linker.cpp | 35 +++++++++++++++--------------------
src/mesa/main/mtypes.h | 10 ----------
src/mesa/main/shaderapi.c | 6 ++----
src/mesa/main/shaderobj.c | 2 --
4 files changed, 17 insertions(+), 36 deletions(-)
diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index cae6fb5..02f9483 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -2004,21 +2004,21 @@ link_gs_inout_layout_qualifiers(struct gl_shader_program *prog,
*/
static void
link_cs_input_layout_qualifiers(struct gl_shader_program *prog,
- struct gl_linked_shader *linked_shader,
+ struct gl_program *gl_prog,
struct gl_shader **shader_list,
unsigned num_shaders)
{
- for (int i = 0; i < 3; i++)
- linked_shader->info.Comp.LocalSize[i] = 0;
-
- linked_shader->info.Comp.LocalSizeVariable = false;
-
/* This function is called for all shader stages, but it only has an effect
* for compute shaders.
*/
- if (linked_shader->Stage != MESA_SHADER_COMPUTE)
+ if (gl_prog->info.stage != MESA_SHADER_COMPUTE)
return;
+ for (int i = 0; i < 3; i++)
+ gl_prog->info.cs.local_size[i] = 0;
+
+ gl_prog->info.cs.local_size_variable = false;
+
/* From the ARB_compute_shader spec, in the section describing local size
* declarations:
*
@@ -2033,9 +2033,9 @@ link_cs_input_layout_qualifiers(struct gl_shader_program *prog,
struct gl_shader *shader = shader_list[sh];
if (shader->info.Comp.LocalSize[0] != 0) {
- if (linked_shader->info.Comp.LocalSize[0] != 0) {
+ if (gl_prog->info.cs.local_size[0] != 0) {
for (int i = 0; i < 3; i++) {
- if (linked_shader->info.Comp.LocalSize[i] !=
+ if (gl_prog->info.cs.local_size[i] !=
shader->info.Comp.LocalSize[i]) {
linker_error(prog, "compute shader defined with conflicting "
"local sizes\n");
@@ -2044,11 +2044,11 @@ link_cs_input_layout_qualifiers(struct gl_shader_program *prog,
}
}
for (int i = 0; i < 3; i++) {
- linked_shader->info.Comp.LocalSize[i] =
+ gl_prog->info.cs.local_size[i] =
shader->info.Comp.LocalSize[i];
}
} else if (shader->info.Comp.LocalSizeVariable) {
- if (linked_shader->info.Comp.LocalSize[0] != 0) {
+ if (gl_prog->info.cs.local_size[0] != 0) {
/* The ARB_compute_variable_group_size spec says:
*
* If one compute shader attached to a program declares a
@@ -2060,7 +2060,7 @@ link_cs_input_layout_qualifiers(struct gl_shader_program *prog,
"variable local group size\n");
return;
}
- linked_shader->info.Comp.LocalSizeVariable = true;
+ gl_prog->info.cs.local_size_variable = true;
}
}
@@ -2068,17 +2068,12 @@ link_cs_input_layout_qualifiers(struct gl_shader_program *prog,
* since we already know we're in the right type of shader program
* for doing it.
*/
- if (linked_shader->info.Comp.LocalSize[0] == 0 &&
- !linked_shader->info.Comp.LocalSizeVariable) {
+ if (gl_prog->info.cs.local_size[0] == 0 &&
+ !gl_prog->info.cs.local_size_variable) {
linker_error(prog, "compute shader must contain a fixed or a variable "
"local group size\n");
return;
}
- for (int i = 0; i < 3; i++)
- prog->Comp.LocalSize[i] = linked_shader->info.Comp.LocalSize[i];
-
- prog->Comp.LocalSizeVariable =
- linked_shader->info.Comp.LocalSizeVariable;
}
@@ -2208,7 +2203,7 @@ link_intrastage_shaders(void *mem_ctx,
link_tcs_out_layout_qualifiers(prog, gl_prog, shader_list, num_shaders);
link_tes_in_layout_qualifiers(prog, gl_prog, shader_list, num_shaders);
link_gs_inout_layout_qualifiers(prog, gl_prog, shader_list, num_shaders);
- link_cs_input_layout_qualifiers(prog, linked, shader_list, num_shaders);
+ link_cs_input_layout_qualifiers(prog, gl_prog, shader_list, num_shaders);
link_xfb_stride_layout_qualifiers(ctx, prog, linked, shader_list,
num_shaders);
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 81bf53a..1159ca5 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -2762,19 +2762,9 @@ struct gl_shader_program
*/
struct {
/**
- * If this shader contains a compute stage, size specified using
- * local_size_{x,y,z}. Otherwise undefined.
- */
- unsigned LocalSize[3];
- /**
* Size of shared variables accessed by the compute shader.
*/
unsigned SharedSize;
-
- /**
- * Whether a variable work group size has been specified.
- */
- bool LocalSizeVariable;
} Comp;
/** Data shared by gl_program and gl_shader_program */
diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index f764eb6..a63d4b9 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -807,7 +807,8 @@ get_programiv(struct gl_context *ctx, GLuint program, GLenum pname,
return;
}
for (i = 0; i < 3; i++)
- params[i] = shProg->Comp.LocalSize[i];
+ params[i] = shProg->_LinkedShaders[MESA_SHADER_COMPUTE]->
+ Program->info.cs.local_size[i];
return;
}
case GL_PROGRAM_SEPARABLE:
@@ -2199,10 +2200,7 @@ _mesa_copy_linked_program_data(const struct gl_shader_program *src,
break;
}
case MESA_SHADER_COMPUTE: {
- for (int i = 0; i < 3; i++)
- dst->info.cs.local_size[i] = src->Comp.LocalSize[i];
dst->info.cs.shared_size = src->Comp.SharedSize;
- dst->info.cs.local_size_variable = src->Comp.LocalSizeVariable;
break;
}
default:
diff --git a/src/mesa/main/shaderobj.c b/src/mesa/main/shaderobj.c
index 4e514a3..b41137f 100644
--- a/src/mesa/main/shaderobj.c
+++ b/src/mesa/main/shaderobj.c
@@ -282,8 +282,6 @@ init_shader_program(struct gl_shader_program *prog)
prog->Geom.UsesEndPrimitive = false;
prog->Geom.UsesStreams = false;
- prog->Comp.LocalSizeVariable = false;
-
prog->TransformFeedback.BufferMode = GL_INTERLEAVED_ATTRIBS;
exec_list_make_empty(&prog->EmptyUniformLocations);
--
2.9.3
More information about the mesa-dev
mailing list