r600,compute: Reserve vtx 3 for kernel arguments
authorJan Vesely <jan.vesely@rutgers.edu>
Sun, 26 Jun 2016 02:06:09 +0000 (22:06 -0400)
committerJan Vesely <jan.vesely@rutgers.edu>
Thu, 14 Jul 2016 20:04:50 +0000 (16:04 -0400)
Using vtx 0 does not work for dynamic offsets.

v2: add explanatory comment

Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu>
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
src/gallium/drivers/r600/evergreen_compute.c

index 6dd6e748a1bb7f77e54689c4bff991a3de8cf7fb..b711786da29b43d9c727f59a214a8a95ed6c2361 100644 (file)
@@ -369,7 +369,11 @@ static void evergreen_compute_upload_input(struct pipe_context *ctx,
 
        ctx->transfer_unmap(ctx, transfer);
 
-       /* ID=0 is reserved for the parameters */
+       /* ID=0 and ID=3 are reserved for the parameters.
+        * LLVM will preferably use ID=0, but it does not work for dynamic
+        * indices. */
+       evergreen_cs_set_vertex_buffer(rctx, 3, 0,
+                       (struct pipe_resource*)shader->kernel_param);
        evergreen_cs_set_constant_buffer(rctx, 0, 0, input_size,
                        (struct pipe_resource*)shader->kernel_param);
 }
@@ -615,9 +619,9 @@ static void evergreen_set_compute_resources(struct pipe_context *ctx,
                        start, count);
 
        for (unsigned i = 0; i < count; i++) {
-               /* The First three vertex buffers are reserved for parameters and
+               /* The First four vertex buffers are reserved for parameters and
                 * global buffers. */
-               unsigned vtx_id = 3 + i;
+               unsigned vtx_id = 4 + i;
                if (resources[i]) {
                        struct r600_resource_global *buffer =
                                (struct r600_resource_global*)