radeonsi: Bugfix needed for hashcat
authorChristian Inci <chris.bugsfd@broke-the-inter.net>
Mon, 19 Dec 2016 22:26:35 +0000 (23:26 +0100)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Thu, 22 Dec 2016 16:11:43 +0000 (17:11 +0100)
Hashcat needs MAX_GLOBAL_BUFFERS to be 21 or even 22 for some modes. It'll crash otherwise.
I'm adding an assert to see if programs need it to be even higher.

Signed-off-by: Christian Inci <chris.bugsfd@broke-the-inter.net>
[Handle first properly; should be NFC, since clover always uses first == 0.]
Signed-off-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/radeonsi/si_compute.c

index 9d83cb3a7361891593843e973023824c5f37c6a9..cb14a35d7549c52594e4f13fa425bfd9a16aa5e8 100644 (file)
@@ -32,7 +32,7 @@
 #include "si_pipe.h"
 #include "sid.h"
 
-#define MAX_GLOBAL_BUFFERS 20
+#define MAX_GLOBAL_BUFFERS 22
 
 struct si_compute {
        unsigned ir_type;
@@ -196,17 +196,19 @@ static void si_set_global_binding(
        struct si_context *sctx = (struct si_context*)ctx;
        struct si_compute *program = sctx->cs_shader_state.program;
 
+       assert(first + n <= MAX_GLOBAL_BUFFERS);
+
        if (!resources) {
-               for (i = first; i < first + n; i++) {
-                       pipe_resource_reference(&program->global_buffers[i], NULL);
+               for (i = 0; i < n; i++) {
+                       pipe_resource_reference(&program->global_buffers[first + i], NULL);
                }
                return;
        }
 
-       for (i = first; i < first + n; i++) {
+       for (i = 0; i < n; i++) {
                uint64_t va;
                uint32_t offset;
-               pipe_resource_reference(&program->global_buffers[i], resources[i]);
+               pipe_resource_reference(&program->global_buffers[first + i], resources[i]);
                va = r600_resource(resources[i])->gpu_address;
                offset = util_le32_to_cpu(*handles[i]);
                va += offset;