i965/fs: Don't double-convert integer/boolean uniforms.
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 11 Aug 2011 23:42:01 +0000 (16:42 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Sat, 20 Aug 2011 06:32:50 +0000 (23:32 -0700)
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>
src/mesa/drivers/dri/i965/brw_fs.cpp

index b19c6e72fa6bf0d877892aa3fb226d508f1d7a2f..c8f74252654ec2d4db4fe78a70c6384cda7afd9c 100644 (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;