radv/winsys: Remove extra sizeof multiply.
[mesa.git] / src / amd / vulkan / winsys / amdgpu / radv_amdgpu_cs.c
index 0c521917027b078d65a1dc163258b14f590a5307..5209addacfa39bcf3d644dd714c90ad98ed5e5a5 100644 (file)
 
 #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>
 
+#include "util/u_memory.h"
 #include "ac_debug.h"
 #include "radv_radeon_winsys.h"
 #include "radv_amdgpu_cs.h"
@@ -163,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()
@@ -730,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;
@@ -1119,6 +1118,7 @@ static int radv_amdgpu_winsys_cs_submit_sysmem(struct radeon_winsys_ctx *_ctx,
 
                                ibs[j].size = size;
                                ibs[j].ib_mc_address = radv_buffer_get_va(bos[j]);
+                               ibs[j].flags = 0;
                        }
 
                        cnt++;
@@ -1163,6 +1163,7 @@ static int radv_amdgpu_winsys_cs_submit_sysmem(struct radeon_winsys_ctx *_ctx,
 
                        ibs[0].size = size;
                        ibs[0].ib_mc_address = radv_buffer_get_va(bos[0]);
+                       ibs[0].flags = 0;
                }
 
                r = radv_amdgpu_create_bo_list(cs0->ws, &cs_array[i], cnt,
@@ -1237,7 +1238,7 @@ static int radv_amdgpu_winsys_cs_submit(struct radeon_winsys_ctx *_ctx,
        if (!cs->ws->use_ib_bos) {
                ret = radv_amdgpu_winsys_cs_submit_sysmem(_ctx, queue_idx, sem_info, bo_list, cs_array,
                                                           cs_count, initial_preamble_cs, continue_preamble_cs, _fence);
-       } else if (can_patch && cs->ws->batchchain) {
+       } else if (can_patch) {
                ret = radv_amdgpu_winsys_cs_submit_chained(_ctx, queue_idx, sem_info, bo_list, cs_array,
                                                            cs_count, initial_preamble_cs, continue_preamble_cs, _fence);
        } else {
@@ -1315,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;
@@ -1343,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)
@@ -1582,7 +1591,7 @@ static bool radv_amdgpu_wait_syncobj(struct radeon_winsys *_ws, const uint32_t *
                                         &tmp);
        if (ret == 0) {
                return true;
-       } else if (ret == -1 && errno == ETIME) {
+       } else if (ret == -ETIME) {
                return false;
        } else {
                fprintf(stderr, "amdgpu: radv_amdgpu_wait_syncobj failed!\nerrno: %d\n", errno);