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); }