summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Olšák <maraeo@gmail.com>2011-03-13 03:12:11 +0100
committerMarek Olšák <maraeo@gmail.com>2011-03-14 03:12:34 +0100
commit0f84ddad29284b407c6bbef0b731201056d40324 (patch)
tree69bf6fbf119e0d200dcfef95f19c9e42298366fb
parent110f5e2056f80d0b87f2a4388bc35727070ba6d5 (diff)
ir_to_mesa: do not check the number of uniforms against hw limits
The r300 compiler can eliminate unused uniforms and remap uniform locations if their number surpasses hardware limits, so the limit is actually NumParameters + NumUnusedParameters. This is important for some apps under Wine to run. Wine sometimes declares a uniform array of 256 vec4's and some Wine-specific constants on top of that, so in total there is more uniforms than r300 can handle. This was the main motivation for implementing the elimination of unused constants. We should allow drivers to implement fail & recovery paths where it makes sense, so giving up too early especially when comes to uniforms is not so good idea, though I agree there should be some hard limit for all drivers. This patch fixes: - glsl-fs-uniform-array-5 - glsl-vs-large-uniform-array on drivers which can eliminate unused uniforms.
-rw-r--r--src/mesa/program/ir_to_mesa.cpp8
1 files changed, 3 insertions, 5 deletions
diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index eff0d37a587..9578f42f144 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2453,8 +2453,7 @@ check_resources(const struct gl_context *ctx,
ctx->Const.MaxVertexTextureImageUnits) {
fail_link(shader_program, "Too many vertex shader texture samplers");
}
- if (prog->Parameters->NumParameters >
- ctx->Const.VertexProgram.MaxUniformComponents / 4) {
+ if (prog->Parameters->NumParameters > MAX_UNIFORMS) {
fail_link(shader_program, "Too many vertex shader constants");
}
break;
@@ -2464,7 +2463,7 @@ check_resources(const struct gl_context *ctx,
fail_link(shader_program, "Too many geometry shader texture samplers");
}
if (prog->Parameters->NumParameters >
- ctx->Const.GeometryProgram.MaxUniformComponents / 4) {
+ MAX_GEOMETRY_UNIFORM_COMPONENTS / 4) {
fail_link(shader_program, "Too many geometry shader constants");
}
break;
@@ -2473,8 +2472,7 @@ check_resources(const struct gl_context *ctx,
ctx->Const.MaxTextureImageUnits) {
fail_link(shader_program, "Too many fragment shader texture samplers");
}
- if (prog->Parameters->NumParameters >
- ctx->Const.FragmentProgram.MaxUniformComponents / 4) {
+ if (prog->Parameters->NumParameters > MAX_UNIFORMS) {
fail_link(shader_program, "Too many fragment shader constants");
}
break;