radv/winsys: Remove extra sizeof multiply.
[mesa.git] / src / amd / vulkan / winsys / amdgpu / radv_amdgpu_cs.c
index b4533bb4dc7edc6e7a1a248e9b9af779642215a6..5209addacfa39bcf3d644dd714c90ad98ed5e5a5 100644 (file)
@@ -24,7 +24,7 @@
 
 #include <stdlib.h>
 #include <amdgpu.h>
-#include <amdgpu_drm.h>
+#include "drm-uapi/amdgpu_drm.h"
 #include <assert.h>
 #include <pthread.h>
 #include <errno.h>
@@ -164,7 +164,7 @@ static void radv_amdgpu_request_to_fence(struct radv_amdgpu_ctx *ctx,
        fence->fence.ip_instance = req->ip_instance;
        fence->fence.ring = req->ring;
        fence->fence.fence = req->seq_no;
-       fence->user_ptr = (volatile uint64_t*)(ctx->fence_map + (req->ip_type * MAX_RINGS_PER_TYPE + req->ring) * sizeof(uint64_t));
+       fence->user_ptr = (volatile uint64_t*)(ctx->fence_map + req->ip_type * MAX_RINGS_PER_TYPE + req->ring);
 }
 
 static struct radeon_winsys_fence *radv_amdgpu_create_fence()
@@ -731,10 +731,8 @@ static int radv_amdgpu_create_bo_list(struct radv_amdgpu_winsys *ws,
                        return 0;
                }
                struct drm_amdgpu_bo_list_entry *handles = malloc(sizeof(struct drm_amdgpu_bo_list_entry) * total_buffer_count);
-               if (!handles) {
-                       free(handles);
+               if (!handles)
                        return -ENOMEM;
-               }
 
                for (unsigned i = 0; i < num_extra_bo; i++) {
                        handles[i].bo_handle = extra_bo_array[i]->bo_handle;
@@ -1318,20 +1316,26 @@ static uint32_t radv_to_amdgpu_priority(enum radeon_ctx_priority radv_priority)
        }
 }
 
-static struct radeon_winsys_ctx *radv_amdgpu_ctx_create(struct radeon_winsys *_ws,
-                                                       enum radeon_ctx_priority priority)
+static VkResult radv_amdgpu_ctx_create(struct radeon_winsys *_ws,
+                                       enum radeon_ctx_priority priority,
+                                       struct radeon_winsys_ctx **rctx)
 {
        struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws);
        struct radv_amdgpu_ctx *ctx = CALLOC_STRUCT(radv_amdgpu_ctx);
        uint32_t amdgpu_priority = radv_to_amdgpu_priority(priority);
+       VkResult result;
        int r;
 
        if (!ctx)
-               return NULL;
+               return VK_ERROR_OUT_OF_HOST_MEMORY;
 
        r = amdgpu_cs_ctx_create2(ws->dev, amdgpu_priority, &ctx->ctx);
-       if (r) {
+       if (r && r == -EACCES) {
+               result = VK_ERROR_NOT_PERMITTED_EXT;
+               goto error_create;
+       } else if (r) {
                fprintf(stderr, "amdgpu: radv_amdgpu_cs_ctx_create2 failed. (%i)\n", r);
+               result = VK_ERROR_OUT_OF_HOST_MEMORY;
                goto error_create;
        }
        ctx->ws = ws;
@@ -1346,10 +1350,12 @@ static struct radeon_winsys_ctx *radv_amdgpu_ctx_create(struct radeon_winsys *_w
                ctx->fence_map = (uint64_t*)ws->base.buffer_map(ctx->fence_bo);
        if (ctx->fence_map)
                memset(ctx->fence_map, 0, 4096);
-       return (struct radeon_winsys_ctx *)ctx;
+
+       *rctx = (struct radeon_winsys_ctx *)ctx;
+       return VK_SUCCESS;
 error_create:
        FREE(ctx);
-       return NULL;
+       return result;
 }
 
 static void radv_amdgpu_ctx_destroy(struct radeon_winsys_ctx *rwctx)