Properly pass RELOC_READ/WRITE flags when writing bo address
This code was inherited from the drm test, which always uses
RELOC_READ. I replaced it with always using RELOC_WRITE.
Neither is good, this needs to be set based on usage.
diff --git a/src/cmdstream.h b/src/cmdstream.h
index 743f75f..69f6564 100644
--- a/src/cmdstream.h
+++ b/src/cmdstream.h
@@ -24,15 +24,16 @@
etna_cmd_stream_emit(stream, value);
}
+/* reloc_flags must be combo of ETNA_RELOC_WRITE, ETNA_RELOC_READ */
static inline void etna_set_state_from_bo(struct etna_cmd_stream *stream,
- uint32_t address, struct etna_bo *bo)
+ uint32_t address, struct etna_bo *bo, uint32_t reloc_flags)
{
etna_cmd_stream_reserve(stream, 2);
etna_emit_load_state(stream, address >> 2, 1);
etna_cmd_stream_reloc(stream, &(struct etna_reloc){
.bo = bo,
- .flags = ETNA_RELOC_WRITE,
+ .flags = reloc_flags,
.offset = 0,
});
}
diff --git a/src/etnaviv_cl_test.c b/src/etnaviv_cl_test.c
index b157b52..70b19d6 100644
--- a/src/etnaviv_cl_test.c
+++ b/src/etnaviv_cl_test.c
@@ -32,7 +32,7 @@
etna_set_state(stream, VIVS_VS_OUTPUT_COUNT, 0);
etna_set_state(stream, VIVS_CL_UNK00924, 0x0);
- etna_set_state_from_bo(stream, VIVS_VS_UNIFORMS(0), bmp);
+ etna_set_state_from_bo(stream, VIVS_VS_UNIFORMS(0), bmp, ETNA_RELOC_WRITE);
etna_stall(stream, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE);
diff --git a/src/etnaviv_verifyops.c b/src/etnaviv_verifyops.c
index cadf398..952edc3 100644
--- a/src/etnaviv_verifyops.c
+++ b/src/etnaviv_verifyops.c
@@ -92,9 +92,9 @@
etna_set_state(stream, VIVS_VS_INPUT_COUNT, VIVS_VS_INPUT_COUNT_COUNT(1) | VIVS_VS_INPUT_COUNT_UNK8(31));
etna_set_state(stream, VIVS_VS_INPUT(0), VIVS_VS_INPUT_I0(0) | VIVS_VS_INPUT_I1(1) | VIVS_VS_INPUT_I2(2) | VIVS_VS_INPUT_I3(3));
- etna_set_state_from_bo(stream, VIVS_VS_UNIFORMS(0), out); /* u0.x */
- etna_set_state_from_bo(stream, VIVS_VS_UNIFORMS(1), in0); /* u0.y */
- etna_set_state_from_bo(stream, VIVS_VS_UNIFORMS(2), in1); /* u0.z */
+ etna_set_state_from_bo(stream, VIVS_VS_UNIFORMS(0), out, ETNA_RELOC_WRITE); /* u0.x */
+ etna_set_state_from_bo(stream, VIVS_VS_UNIFORMS(1), in0, ETNA_RELOC_READ); /* u0.y */
+ etna_set_state_from_bo(stream, VIVS_VS_UNIFORMS(2), in1, ETNA_RELOC_READ); /* u0.z */
etna_set_state(stream, VIVS_VS_UNIFORMS(3), 0x4); /* u0.w Left-shift */
etna_set_state(stream, VIVS_VS_UNIFORMS(4), 0x10); /* u1.x Row stride */
etna_set_state(stream, VIVS_VS_UNIFORMS(5), 0x0); /* u1.y Unused */