i965/fs: Don't double-convert integer/boolean uniforms.

When ctx->Const.NativeIntegers is set, Core Mesa loads integer/boolean
uniforms directly, rather than loading the floating point equivalent.
So, when that's set, we don't need to perform any conversions.

Unfortunately, we can't properly support native integers with the old
vertex shader backend, so this patch leaves them disabled for now.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Kenneth Graunke
2011-08-11 16:42:01 -07:00
parent 01d81dedc7
commit e98ee06776
+20 -16
View File
@@ -279,23 +279,27 @@ fs_visitor::setup_uniform_values(int loc, const glsl_type *type)
assert(param < ARRAY_SIZE(c->prog_data.param));
switch (type->base_type) {
case GLSL_TYPE_FLOAT:
if (ctx->Const.NativeIntegers) {
c->prog_data.param_convert[param] = PARAM_NO_CONVERT;
break;
case GLSL_TYPE_UINT:
c->prog_data.param_convert[param] = PARAM_CONVERT_F2U;
break;
case GLSL_TYPE_INT:
c->prog_data.param_convert[param] = PARAM_CONVERT_F2I;
break;
case GLSL_TYPE_BOOL:
c->prog_data.param_convert[param] = PARAM_CONVERT_F2B;
break;
default:
assert(!"not reached");
c->prog_data.param_convert[param] = PARAM_NO_CONVERT;
break;
} else {
switch (type->base_type) {
case GLSL_TYPE_FLOAT:
c->prog_data.param_convert[param] = PARAM_NO_CONVERT;
break;
case GLSL_TYPE_UINT:
c->prog_data.param_convert[param] = PARAM_CONVERT_F2U;
break;
case GLSL_TYPE_INT:
c->prog_data.param_convert[param] = PARAM_CONVERT_F2I;
break;
case GLSL_TYPE_BOOL:
c->prog_data.param_convert[param] = PARAM_CONVERT_F2B;
break;
default:
assert(!"not reached");
c->prog_data.param_convert[param] = PARAM_NO_CONVERT;
break;
}
}
this->param_index[param] = loc;
this->param_offset[param] = i;