From 1d7c38a5def7f6f8b4441ca60780ddb78b4c5216 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Mon, 25 Mar 2024 10:13:50 +0200 Subject: [PATCH] blorp: handle a few allocation failure cases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lionel Landwerlin Cc: mesa-stable Reviewed-by: Tapani Pälli Part-of: --- src/intel/blorp/blorp_genX_exec_brw.h | 17 ++++++++++++++++- src/intel/blorp/blorp_genX_exec_elk.h | 8 +++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/intel/blorp/blorp_genX_exec_brw.h b/src/intel/blorp/blorp_genX_exec_brw.h index 95b38d8f415..751d4f31eba 100644 --- a/src/intel/blorp/blorp_genX_exec_brw.h +++ b/src/intel/blorp/blorp_genX_exec_brw.h @@ -302,6 +302,8 @@ blorp_emit_vertex_data(struct blorp_batch *batch, }; void *data = blorp_alloc_vertex_buffer(batch, sizeof(vertices), addr); + if (data == NULL) + return; memcpy(data, vertices, sizeof(vertices)); *size = sizeof(vertices); blorp_flush_range(batch, data, *size); @@ -324,6 +326,8 @@ blorp_emit_input_varying_data(struct blorp_batch *batch, const uint32_t *const inputs_src = (const uint32_t *)¶ms->wm_inputs; void *data = blorp_alloc_vertex_buffer(batch, *size, addr); + if (data == NULL) + return; uint32_t *inputs = data; /* Copy in the VS inputs */ @@ -399,8 +403,10 @@ blorp_emit_vertex_buffers(struct blorp_batch *batch, const uint32_t num_vbs = ARRAY_SIZE(vb); struct blorp_address addrs[2] = {}; - uint32_t sizes[2]; + uint32_t sizes[2] = {}; blorp_emit_vertex_data(batch, params, &addrs[0], &sizes[0]); + if (sizes[0] == 0) + return; blorp_fill_vertex_buffer_state(vb, 0, addrs[0], sizes[0], 3 * sizeof(float)); @@ -858,6 +864,8 @@ blorp_emit_blend_state(struct blorp_batch *batch, int size = GENX(BLEND_STATE_length) * 4; size += GENX(BLEND_STATE_ENTRY_length) * 4 * params->num_draw_buffers; uint32_t *state = blorp_alloc_dynamic_state(batch, size, 64, &offset); + if (state == NULL) + return; uint32_t *pos = state; GENX(BLEND_STATE_pack)(NULL, pos, &blend); @@ -1591,6 +1599,11 @@ blorp_get_compute_push_const(struct blorp_batch *batch, &push_const_offset) : blorp_alloc_dynamic_state(batch, push_const_size, 64, &push_const_offset); + if (push_const == NULL) { + *state_offset = 0; + *state_size = 0; + return; + } memset(push_const, 0x0, push_const_size); void *dst = push_const; @@ -1762,6 +1775,8 @@ blorp_exec_compute(struct blorp_batch *batch, const struct blorp_params *params) uint32_t idd_offset; uint32_t size = GENX(INTERFACE_DESCRIPTOR_DATA_length) * sizeof(uint32_t); void *state = blorp_alloc_dynamic_state(batch, size, 64, &idd_offset); + if (state == NULL) + return; GENX(INTERFACE_DESCRIPTOR_DATA_pack)(NULL, state, &idd); blorp_emit(batch, GENX(MEDIA_INTERFACE_DESCRIPTOR_LOAD), mid) { diff --git a/src/intel/blorp/blorp_genX_exec_elk.h b/src/intel/blorp/blorp_genX_exec_elk.h index 5ef8c18e159..1b3b12cb74d 100644 --- a/src/intel/blorp/blorp_genX_exec_elk.h +++ b/src/intel/blorp/blorp_genX_exec_elk.h @@ -355,6 +355,8 @@ blorp_emit_input_varying_data(struct blorp_batch *batch, const uint32_t *const inputs_src = (const uint32_t *)¶ms->wm_inputs; void *data = blorp_alloc_vertex_buffer(batch, *size, addr); + if (data == NULL) + return; uint32_t *inputs = data; /* Copy in the VS inputs */ @@ -445,8 +447,10 @@ blorp_emit_vertex_buffers(struct blorp_batch *batch, const uint32_t num_vbs = ARRAY_SIZE(vb); struct blorp_address addrs[2] = {}; - uint32_t sizes[2]; + uint32_t sizes[2] = {}; blorp_emit_vertex_data(batch, params, &addrs[0], &sizes[0]); + if (sizes[0] == 0) + return; blorp_fill_vertex_buffer_state(vb, 0, addrs[0], sizes[0], 3 * sizeof(float)); @@ -1131,6 +1135,8 @@ blorp_emit_blend_state(struct blorp_batch *batch, int size = GENX(BLEND_STATE_length) * 4; size += GENX(BLEND_STATE_ENTRY_length) * 4 * params->num_draw_buffers; uint32_t *state = blorp_alloc_dynamic_state(batch, size, 64, &offset); + if (state == NULL) + return 0; uint32_t *pos = state; GENX(BLEND_STATE_pack)(NULL, pos, &blend);