Do actual stalls instead of just setting the semaphore
...oops...
diff --git a/src/cmdstream.h b/src/cmdstream.h
index c700611..743f75f 100644
--- a/src/cmdstream.h
+++ b/src/cmdstream.h
@@ -4,6 +4,7 @@
#include <etnaviv_drmif.h>
#include "cmdstream.xml.h"
+#include "state.xml.h"
static inline void etna_emit_load_state(struct etna_cmd_stream *stream,
const uint16_t offset, const uint16_t count)
@@ -36,4 +37,13 @@
});
}
+static inline void etna_stall(struct etna_cmd_stream *stream, uint32_t from, uint32_t to)
+{
+ etna_cmd_stream_reserve(stream, 4);
+ etna_emit_load_state(stream, VIVS_GL_SEMAPHORE_TOKEN >> 2, 1);
+ etna_cmd_stream_emit(stream, VIVS_GL_SEMAPHORE_TOKEN_FROM(from) | VIVS_GL_SEMAPHORE_TOKEN_TO(to));
+ etna_cmd_stream_emit(stream, VIV_FE_STALL_HEADER_OP_STALL);
+ etna_cmd_stream_emit(stream, VIV_FE_STALL_TOKEN_FROM(from) | VIV_FE_STALL_TOKEN_TO(to));
+}
+
#endif
diff --git a/src/etnaviv_cl_test.c b/src/etnaviv_cl_test.c
index e099fd7..b157b52 100644
--- a/src/etnaviv_cl_test.c
+++ b/src/etnaviv_cl_test.c
@@ -34,7 +34,8 @@
etna_set_state_from_bo(stream, VIVS_VS_UNIFORMS(0), bmp);
- etna_set_state(stream, VIVS_GL_SEMAPHORE_TOKEN, VIVS_GL_SEMAPHORE_TOKEN_FROM(SYNC_RECIPIENT_FE) | VIVS_GL_SEMAPHORE_TOKEN_TO(SYNC_RECIPIENT_PE));
+ etna_stall(stream, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE);
+
etna_set_state(stream, VIVS_VS_INPUT_COUNT, VIVS_VS_INPUT_COUNT_COUNT(1) | VIVS_VS_INPUT_COUNT_UNK8(1));
etna_set_state(stream, VIVS_VS_TEMP_REGISTER_CONTROL, VIVS_VS_TEMP_REGISTER_CONTROL_NUM_TEMPS(10));
etna_set_state(stream, VIVS_VS_OUTPUT(0), VIVS_VS_OUTPUT_O0(0) | VIVS_VS_OUTPUT_O1(0) | VIVS_VS_OUTPUT_O2(0) | VIVS_VS_OUTPUT_O3(0));
@@ -159,7 +160,7 @@
etna_set_state(stream, VIVS_CL_THREAD_ALLOCATION, 0x1);
etna_set_state(stream, VIVS_CL_KICKER, 0xbadabeeb);
etna_set_state(stream, VIVS_GL_FLUSH_CACHE, VIVS_GL_FLUSH_CACHE_TEXTURE | VIVS_GL_FLUSH_CACHE_SHADER_L1);
- etna_set_state(stream, VIVS_GL_SEMAPHORE_TOKEN, VIVS_GL_SEMAPHORE_TOKEN_FROM(SYNC_RECIPIENT_FE) | VIVS_GL_SEMAPHORE_TOKEN_TO(SYNC_RECIPIENT_PE));
+ etna_stall(stream, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE);
etna_set_state(stream, VIVS_GL_FLUSH_CACHE, VIVS_GL_FLUSH_CACHE_DEPTH | VIVS_GL_FLUSH_CACHE_COLOR);
}