R6XX GPU doesn't like to have two partial flush writting back to memory in row without a prior flush of the pipeline. Add PS_PARTIAL_FLUSH to flush all work between the CP and the ES, GS, VS, PS shaders. Thanks a lot to Alban Browaeys (prahal on irc) for investigating this issue. Signed-off-by: Alban Browaeys <prahal@yahoo.com> Signed-off-by: Jerome Glisse <jglisse@redhat.com>tags/android-x86-2.2
@@ -1112,6 +1112,8 @@ void r600_context_flush(struct r600_context *ctx) | |||
r600_context_queries_suspend(ctx); | |||
/* emit fence */ | |||
ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE, 0); | |||
ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE(EVENT_TYPE_PS_PARTIAL_FLUSH) | EVENT_INDEX(4); | |||
ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE_EOP, 4); | |||
ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE(EVENT_TYPE_CACHE_FLUSH_AND_INV_TS_EVENT) | EVENT_INDEX(5); | |||
ctx->pm4[ctx->pm4_cdwords++] = 0; |
@@ -91,6 +91,7 @@ | |||
#define PKT3_SET_CTL_CONST 0x6F | |||
#define PKT3_SURFACE_BASE_UPDATE 0x73 | |||
#define EVENT_TYPE_PS_PARTIAL_FLUSH 0x10 | |||
#define EVENT_TYPE_CACHE_FLUSH_AND_INV_TS_EVENT 0x14 | |||
#define EVENT_TYPE_ZPASS_DONE 0x15 | |||
#define EVENT_TYPE_CACHE_FLUSH_AND_INV_EVENT 0x16 |