[PATCH i-g-t,v3 1/6] lib/intel_compute: Make loop count a parameter
Francois Dugast
francois.dugast at intel.com
Wed Feb 26 11:24:02 UTC 2025
The loop count was previously hardcoded as 0x400 in *create_indirect_data()
functions. Turn it into a parameterized value that gets used during the
batch buffer generation so that the function user can specify the count.
Signed-off-by: Francois Dugast <francois.dugast at intel.com>
Reviewed-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
---
lib/intel_compute.c | 27 +++++++++++++++------------
1 file changed, 15 insertions(+), 12 deletions(-)
diff --git a/lib/intel_compute.c b/lib/intel_compute.c
index f46de1074..b698bf77d 100644
--- a/lib/intel_compute.c
+++ b/lib/intel_compute.c
@@ -293,7 +293,8 @@ static void bo_execenv_exec(struct bo_execenv *execenv, uint64_t start_addr)
static void create_indirect_data(uint32_t *addr_bo_buffer_batch,
uint64_t addr_input,
uint64_t addr_output,
- uint32_t end_value)
+ uint32_t end_value,
+ unsigned int loop_count)
{
uint32_t val = 0;
int b = 0, curr = 0;
@@ -313,7 +314,7 @@ static void create_indirect_data(uint32_t *addr_bo_buffer_batch,
addr_bo_buffer_batch[b++] = addr_output & 0xffffffff;
addr_bo_buffer_batch[b++] = addr_output >> 32;
- addr_bo_buffer_batch[b++] = 0x00000400;
+ addr_bo_buffer_batch[b++] = loop_count;
addr_bo_buffer_batch[b++] = 0x00000000;
addr_bo_buffer_batch[b++] = 0x00000000;
addr_bo_buffer_batch[b++] = 0x00000000;
@@ -708,7 +709,7 @@ static void compute_exec(int fd, const unsigned char *kernel,
create_dynamic_state(bo_dict[1].data, OFFSET_KERNEL);
create_surface_state(bo_dict[2].data, ADDR_INPUT, ADDR_OUTPUT);
create_indirect_data(bo_dict[3].data, ADDR_INPUT, ADDR_OUTPUT,
- IS_DG1(devid) ? 0x200 : 0x40);
+ IS_DG1(devid) ? 0x200 : 0x40, SIZE_DATA);
dinput = (float *)bo_dict[4].data;
srand(time(NULL));
@@ -746,7 +747,8 @@ static void compute_exec(int fd, const unsigned char *kernel,
static void xehp_create_indirect_data(uint32_t *addr_bo_buffer_batch,
uint64_t addr_input,
- uint64_t addr_output)
+ uint64_t addr_output,
+ unsigned int loop_count)
{
int b = 0;
@@ -754,7 +756,7 @@ static void xehp_create_indirect_data(uint32_t *addr_bo_buffer_batch,
addr_bo_buffer_batch[b++] = addr_input >> 32;
addr_bo_buffer_batch[b++] = addr_output & 0xffffffff;
addr_bo_buffer_batch[b++] = addr_output >> 32;
- addr_bo_buffer_batch[b++] = 0x00000400;
+ addr_bo_buffer_batch[b++] = loop_count;
addr_bo_buffer_batch[b++] = 0x00000000;
addr_bo_buffer_batch[b++] = 0x00000000;
addr_bo_buffer_batch[b++] = 0x00000000;
@@ -986,7 +988,7 @@ static void xehp_compute_exec(int fd, const unsigned char *kernel,
memcpy(bo_dict[0].data, kernel, size);
create_dynamic_state(bo_dict[1].data, OFFSET_KERNEL);
xehp_create_surface_state(bo_dict[2].data, ADDR_INPUT, ADDR_OUTPUT);
- xehp_create_indirect_data(bo_dict[3].data, ADDR_INPUT, ADDR_OUTPUT);
+ xehp_create_indirect_data(bo_dict[3].data, ADDR_INPUT, ADDR_OUTPUT, SIZE_DATA);
xehp_create_surface_state(bo_dict[7].data, ADDR_INPUT, ADDR_OUTPUT);
dinput = (float *)bo_dict[4].data;
@@ -1020,7 +1022,8 @@ static void xehp_compute_exec(int fd, const unsigned char *kernel,
static void xehpc_create_indirect_data(uint32_t *addr_bo_buffer_batch,
uint64_t addr_input,
- uint64_t addr_output)
+ uint64_t addr_output,
+ unsigned int loop_count)
{
int b = 0;
@@ -1036,7 +1039,7 @@ static void xehpc_create_indirect_data(uint32_t *addr_bo_buffer_batch,
addr_bo_buffer_batch[b++] = addr_input >> 32;
addr_bo_buffer_batch[b++] = addr_output & 0xffffffff;
addr_bo_buffer_batch[b++] = addr_output >> 32;
- addr_bo_buffer_batch[b++] = 0x00000400;
+ addr_bo_buffer_batch[b++] = loop_count;
addr_bo_buffer_batch[b++] = 0x00000400;
addr_bo_buffer_batch[b++] = 0x00000001;
addr_bo_buffer_batch[b++] = 0x00000001;
@@ -1191,7 +1194,7 @@ static void xehpc_compute_exec(int fd, const unsigned char *kernel,
bo_execenv_bind(&execenv, bo_dict, XEHPC_BO_DICT_ENTRIES);
memcpy(bo_dict[0].data, kernel, size);
- xehpc_create_indirect_data(bo_dict[1].data, ADDR_INPUT, ADDR_OUTPUT);
+ xehpc_create_indirect_data(bo_dict[1].data, ADDR_INPUT, ADDR_OUTPUT, SIZE_DATA);
dinput = (float *)bo_dict[2].data;
srand(time(NULL));
@@ -1551,7 +1554,7 @@ static void xelpg_compute_exec(int fd, const unsigned char *kernel,
create_dynamic_state(bo_dict[1].data, OFFSET_KERNEL);
xehp_create_surface_state(bo_dict[2].data, ADDR_INPUT, ADDR_OUTPUT);
- xehp_create_indirect_data(bo_dict[3].data, ADDR_INPUT, ADDR_OUTPUT);
+ xehp_create_indirect_data(bo_dict[3].data, ADDR_INPUT, ADDR_OUTPUT, SIZE_DATA);
xehp_create_surface_state(bo_dict[7].data, ADDR_INPUT, ADDR_OUTPUT);
dinput = (float *)bo_dict[4].data;
@@ -1640,7 +1643,7 @@ static void xe2lpg_compute_exec(int fd, const unsigned char *kernel,
memcpy(bo_dict[0].data, kernel, size);
create_dynamic_state(bo_dict[1].data, OFFSET_KERNEL);
xehp_create_surface_state(bo_dict[2].data, ADDR_INPUT, ADDR_OUTPUT);
- xehp_create_indirect_data(bo_dict[3].data, ADDR_INPUT, ADDR_OUTPUT);
+ xehp_create_indirect_data(bo_dict[3].data, ADDR_INPUT, ADDR_OUTPUT, SIZE_DATA);
xehp_create_surface_state(bo_dict[7].data, ADDR_INPUT, ADDR_OUTPUT);
dinput = (float *)bo_dict[4].data;
@@ -1946,7 +1949,7 @@ static void xe2lpg_compute_preempt_exec(int fd, const unsigned char *long_kernel
create_dynamic_state(bo_dict_short[1].data, OFFSET_KERNEL);
xehp_create_surface_state(bo_dict_short[2].data, ADDR_INPUT, ADDR_OUTPUT);
- xehp_create_indirect_data(bo_dict_short[3].data, ADDR_INPUT, ADDR_OUTPUT);
+ xehp_create_indirect_data(bo_dict_short[3].data, ADDR_INPUT, ADDR_OUTPUT, SIZE_DATA);
xehp_create_surface_state(bo_dict_short[7].data, ADDR_INPUT, ADDR_OUTPUT);
dinput = (float *)bo_dict_long[4].data;
--
2.43.0
More information about the igt-dev
mailing list