spirv: Use the LOCAL_GROUP_SIZE system value
authorJason Ekstrand <jason.ekstrand@intel.com>
Thu, 22 Mar 2018 00:20:00 +0000 (17:20 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 10 Apr 2018 02:45:25 +0000 (19:45 -0700)
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
src/compiler/spirv/vtn_variables.c

index b2897407fb1c6d73b087df86f1b754a6882ed7bf..0673fe80675a5f436f39e346c83c8928b4232699 100644 (file)
@@ -1276,8 +1276,8 @@ vtn_get_builtin_location(struct vtn_builder *b,
       set_mode_system_value(b, mode);
       break;
    case SpvBuiltInWorkgroupSize:
-      /* This should already be handled */
-      vtn_fail("unsupported builtin");
+      *location = SYSTEM_VALUE_LOCAL_GROUP_SIZE;
+      set_mode_system_value(b, mode);
       break;
    case SpvBuiltInWorkgroupId:
       *location = SYSTEM_VALUE_WORK_GROUP_ID;
@@ -1407,19 +1407,6 @@ apply_var_decoration(struct vtn_builder *b, nir_variable *nir_var,
    case SpvDecorationBuiltIn: {
       SpvBuiltIn builtin = dec->literals[0];
 
-      if (builtin == SpvBuiltInWorkgroupSize) {
-         /* This shouldn't be a builtin.  It's actually a constant. */
-         nir_var->data.mode = nir_var_global;
-         nir_var->data.read_only = true;
-
-         nir_constant *c = rzalloc(nir_var, nir_constant);
-         c->values[0].u32[0] = b->shader->info.cs.local_size[0];
-         c->values[0].u32[1] = b->shader->info.cs.local_size[1];
-         c->values[0].u32[2] = b->shader->info.cs.local_size[2];
-         nir_var->constant_initializer = c;
-         break;
-      }
-
       nir_variable_mode mode = nir_var->data.mode;
       vtn_get_builtin_location(b, builtin, &nir_var->data.location, &mode);
       nir_var->data.mode = mode;