From: Samuel Pitoiset Date: Wed, 21 Jun 2023 11:45:01 +0000 (+0200) Subject: radv/amdgpu: add a helper to get a new IB X-Git-Tag: upstream/23.3.3~6536 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=82e2802b7d69c4b64ba40868466aaf23630d949c;p=platform%2Fupstream%2Fmesa.git radv/amdgpu: add a helper to get a new IB Signed-off-by: Samuel Pitoiset Part-of: --- diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c index 97a6a97..6a697da 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c @@ -246,6 +246,38 @@ radv_amdgpu_cs_bo_create(struct radv_amdgpu_cs *cs, uint32_t ib_size) &cs->ib_buffer); } +static VkResult +radv_amdgpu_cs_get_new_ib(struct radeon_cmdbuf *_cs, uint32_t ib_size) +{ + struct radv_amdgpu_cs *cs = radv_amdgpu_cs(_cs); + VkResult result; + + result = radv_amdgpu_cs_bo_create(cs, ib_size); + if (result != VK_SUCCESS) + return result; + + cs->ib_mapped = cs->ws->base.buffer_map(cs->ib_buffer); + if (!cs->ib_mapped) { + cs->ws->base.buffer_destroy(&cs->ws->base, cs->ib_buffer); + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + cs->ib.ib_mc_address = radv_amdgpu_winsys_bo(cs->ib_buffer)->base.va; + cs->base.buf = (uint32_t *)cs->ib_mapped; + cs->base.cdw = 0; + cs->base.reserved_dw = 0; + cs->base.max_dw = ib_size / 4 - 4; + cs->ib.size = 0; + cs->ib.ip_type = cs->hw_ip; + + if (cs->use_ib) + cs->ib_size_ptr = &cs->ib.size; + + cs->ws->base.cs_add_buffer(&cs->base, cs->ib_buffer); + + return VK_SUCCESS; +} + static struct radeon_cmdbuf * radv_amdgpu_cs_create(struct radeon_winsys *ws, enum amd_ip_type ip_type, bool is_secondary) { @@ -262,30 +294,12 @@ radv_amdgpu_cs_create(struct radeon_winsys *ws, enum amd_ip_type ip_type, bool i cs->use_ib = ring_can_use_ib_bos(cs->ws, ip_type); - VkResult result = radv_amdgpu_cs_bo_create(cs, ib_size); + VkResult result = radv_amdgpu_cs_get_new_ib(&cs->base, ib_size); if (result != VK_SUCCESS) { free(cs); return NULL; } - cs->ib_mapped = ws->buffer_map(cs->ib_buffer); - if (!cs->ib_mapped) { - ws->buffer_destroy(ws, cs->ib_buffer); - free(cs); - return NULL; - } - - cs->ib.ib_mc_address = radv_amdgpu_winsys_bo(cs->ib_buffer)->base.va; - cs->base.buf = (uint32_t *)cs->ib_mapped; - cs->base.max_dw = ib_size / 4 - 4; - cs->ib.size = 0; - cs->ib.ip_type = ip_type; - - if (cs->use_ib) - cs->ib_size_ptr = &cs->ib.size; - - ws->cs_add_buffer(&cs->base, cs->ib_buffer); - return &cs->base; }