radeonsi/gfx9: pad shader binaries by 128 bytes
authorMarek Olšák <marek.olsak@amd.com>
Tue, 7 Feb 2017 22:45:47 +0000 (23:45 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Thu, 30 Mar 2017 12:44:33 +0000 (14:44 +0200)
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/radeonsi/si_shader.c

index 575dd6c380f865b055318dd507a49d759772e02f..20d6bd732b268c9faa00b3177b6a89582c4eebef 100644 (file)
@@ -5872,6 +5872,12 @@ int si_shader_binary_upload(struct si_screen *sscreen, struct si_shader *shader)
        assert((!prolog && !epilog) || !mainb->rodata_size);
        assert(!epilog || !epilog->rodata_size);
 
+       /* GFX9 can fetch at most 128 bytes past the end of the shader.
+        * Prevent VM faults.
+        */
+       if (sscreen->b.chip_class >= GFX9)
+               bo_size += 128;
+
        r600_resource_reference(&shader->bo, NULL);
        shader->bo = (struct r600_resource*)
                     pipe_buffer_create(&sscreen->b.b, 0,