zink: process ubos with location values set as long as they're actually ubos
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Fri, 14 Aug 2020 21:37:41 +0000 (17:37 -0400)
committerMarge Bot <eric+marge@anholt.net>
Tue, 19 Jan 2021 14:14:59 +0000 (14:14 +0000)
Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8514>

src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c
src/gallium/drivers/zink/zink_compiler.c

index 0ec7397..0d97a6c 100644 (file)
@@ -669,7 +669,7 @@ emit_ubo(struct ntv_context *ctx, struct nir_variable *var)
    /* variables accessed inside a uniform block will get merged into a big
     * memory blob and accessed by offset
     */
-   if (var->data.location && !is_ubo_array)
+   if (var->data.location && !is_ubo_array && var->type != var->interface_type)
       return;
 
    uint32_t size = glsl_count_attribute_slots(var->interface_type, false);
index 58d9bdd..cc2e178 100644 (file)
@@ -466,7 +466,7 @@ zink_shader_create(struct zink_screen *screen, struct nir_shader *nir,
          if (var->data.mode == nir_var_mem_ubo) {
             /* ignore variables being accessed if they aren't the base of the UBO */
             bool ubo_array = glsl_type_is_array(var->type) && glsl_type_is_interface(glsl_without_array(var->type));
-            if (var->data.location && !ubo_array)
+            if (var->data.location && !ubo_array && var->type != var->interface_type)
                continue;
             var->data.binding = cur_ubo;
             /* if this is a ubo array, create a binding point for each array member: