lavapipe: interpret inputRate as an enum-value
authorErik Faye-Lund <erik.faye-lund@collabora.com>
Fri, 4 Dec 2020 18:45:00 +0000 (19:45 +0100)
committerDave Airlie <airlied@redhat.com>
Thu, 10 Dec 2020 01:00:56 +0000 (11:00 +1000)
This isn't an integer, it's an enum, We need to support
VK_EXT_vertex_attribute_divisor if we want to support using values other
than 0 and 1 here.

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7930>

src/gallium/frontends/lavapipe/lvp_execute.c

index 41af4ac..f7a6aa1 100644 (file)
@@ -574,7 +574,18 @@ static void handle_graphics_pipeline(struct lvp_cmd_buffer_entry *cmd,
          state->ve[location].src_offset = vi->pVertexAttributeDescriptions[i].offset;
          state->ve[location].vertex_buffer_index = vi->pVertexAttributeDescriptions[i].binding;
          state->ve[location].src_format = vk_format_to_pipe(vi->pVertexAttributeDescriptions[i].format);
-         state->ve[location].instance_divisor = vi->pVertexBindingDescriptions[vi->pVertexAttributeDescriptions[i].binding].inputRate;
+
+         switch (vi->pVertexBindingDescriptions[vi->pVertexAttributeDescriptions[i].binding].inputRate) {
+         case VK_VERTEX_INPUT_RATE_VERTEX:
+            state->ve[location].instance_divisor = 0;
+            break;
+         case VK_VERTEX_INPUT_RATE_INSTANCE:
+            state->ve[location].instance_divisor = 1;
+            break;
+         default:
+            assert(0);
+            break;
+         }
 
          if ((int)location > max_location)
             max_location = location;