summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/shader_query.cpp
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2016-05-19 18:09:00 -0700
committerIan Romanick <ian.d.romanick@intel.com>2016-05-26 16:22:25 -0700
commit3722c76001ae3190ce7a813e02b5f1eefa5d07eb (patch)
tree045d4e159547167a92f975870795d5db52f71de2 /src/mesa/main/shader_query.cpp
parentbd3f15cffdbbec6d1ea5b7db2fcddaf8b7ae4524 (diff)
downloadexternal_mesa3d-3722c76001ae3190ce7a813e02b5f1eefa5d07eb.zip
external_mesa3d-3722c76001ae3190ce7a813e02b5f1eefa5d07eb.tar.gz
external_mesa3d-3722c76001ae3190ce7a813e02b5f1eefa5d07eb.tar.bz2
mesa: Remove old validate_io function
The new validate_io catches all of the cases (and many more) that the old function caught. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com> Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
Diffstat (limited to 'src/mesa/main/shader_query.cpp')
-rw-r--r--src/mesa/main/shader_query.cpp109
1 files changed, 0 insertions, 109 deletions
diff --git a/src/mesa/main/shader_query.cpp b/src/mesa/main/shader_query.cpp
index 80e9274..81277b6 100644
--- a/src/mesa/main/shader_query.cpp
+++ b/src/mesa/main/shader_query.cpp
@@ -1371,110 +1371,6 @@ _mesa_get_program_resourceiv(struct gl_shader_program *shProg,
}
static bool
-validate_io(const struct gl_shader *producer,
- const struct gl_shader *consumer, bool isES)
-{
- assert(producer && consumer);
- unsigned inputs = 0, outputs = 0;
-
- /* From OpenGL ES 3.1 spec (Interface matching):
- *
- * "An output variable is considered to match an input variable in the
- * subsequent shader if:
- *
- * - the two variables match in name, type, and qualification; or
- * - the two variables are declared with the same location qualifier and
- * match in type and qualification.
- *
- * ...
- *
- * At an interface between program objects, the set of inputs and outputs
- * are considered to match exactly if and only if:
- *
- * - Every declared input variable has a matching output, as described
- * above.
- *
- * - There are no user-defined output variables declared without a
- * matching input variable declaration.
- *
- * - All matched input and output variables have identical precision
- * qualification.
- *
- * When the set of inputs and outputs on an interface between programs
- * matches exactly, all inputs are well-defined except when the
- * corresponding outputs were not written in the previous shader. However,
- * any mismatch between inputs and outputs will result in a validation
- * failure."
- *
- * OpenGL Core 4.5 spec includes same paragraph as above but without check
- * for precision and the last 'validation failure' clause. Therefore
- * behaviour is more relaxed, input and output amount is not required by the
- * spec to be validated.
- *
- * FIXME: Update once Khronos spec bug #15331 is resolved.
- * FIXME: Add validation by type, currently information loss during varying
- * packing makes this challenging.
- */
-
- /* Currently no matching done for desktop. */
- if (!isES)
- return true;
-
- /* For each output in a, find input in b and do any required checks. */
- foreach_in_list(ir_instruction, out, producer->ir) {
- ir_variable *out_var = out->as_variable();
- if (!out_var || out_var->data.mode != ir_var_shader_out ||
- is_gl_identifier(out_var->name))
- continue;
-
- outputs++;
-
- inputs = 0;
- foreach_in_list(ir_instruction, in, consumer->ir) {
- ir_variable *in_var = in->as_variable();
- if (!in_var || in_var->data.mode != ir_var_shader_in ||
- is_gl_identifier(in_var->name))
- continue;
-
- inputs++;
-
- /* Match by location qualifier and precision.
- *
- * FIXME: Add explicit location matching validation here. Be careful
- * not to match varyings with explicit locations to varyings without
- * explicit locations.
- */
- if ((in_var->data.explicit_location &&
- out_var->data.explicit_location) &&
- in_var->data.location == out_var->data.location &&
- in_var->data.precision == out_var->data.precision)
- continue;
-
- unsigned len = strlen(in_var->name);
-
- /* Handle input swizzle in variable name. */
- const char *dot = strchr(in_var->name, '.');
- if (dot)
- len = dot - in_var->name;
-
- /* Match by name and precision. */
- if (strncmp(in_var->name, out_var->name, len) == 0) {
- /* From OpenGL ES 3.1 spec:
- * "When both shaders are in separate programs, mismatched
- * precision qualifiers will result in a program interface
- * mismatch that will result in program pipeline validation
- * failures, as described in section 7.4.1 (“Shader Interface
- * Matching”) of the OpenGL ES 3.1 Specification."
- */
- if (in_var->data.precision != out_var->data.precision)
- return false;
- }
- }
- }
- return inputs == outputs;
-}
-
-static bool
validate_io(struct gl_shader_program *producer,
struct gl_shader_program *consumer)
{
@@ -1673,11 +1569,6 @@ _mesa_validate_pipeline_io(struct gl_pipeline_object *pipeline)
if (shProg[idx]->_LinkedShaders[idx]->Stage == MESA_SHADER_COMPUTE)
break;
- if (!validate_io(shProg[prev]->_LinkedShaders[prev],
- shProg[idx]->_LinkedShaders[idx],
- shProg[prev]->IsES || shProg[idx]->IsES))
- return false;
-
if (!validate_io(shProg[prev], shProg[idx]))
return false;