{
struct etna_cmd_stream *stream = ctx->stream;
struct etna_screen *screen = ctx->screen;
+ uint32_t dummy_attribs[VIVS_NFE_GENERIC_ATTRIB__LEN] = { 0 };
etna_set_state(stream, VIVS_GL_API_MODE, VIVS_GL_API_MODE_OPENGL);
etna_set_state(stream, VIVS_GL_VERTEX_ELEMENT_CONFIG, 0x00000001);
VIVS_VS_ICACHE_INVALIDATE_UNK4);
}
+ /* It seems that some GPUs (at least some GC400 have shown this behavior)
+ * come out of reset with random vertex attributes enabled and also don't
+ * disable them on the write to the first config register as normal. Enabling
+ * all attributes seems to provide the GPU with the required edge to actually
+ * disable the unused attributes on the next draw.
+ */
+ if (screen->specs.halti >= 5) {
+ etna_set_state_multi(stream, VIVS_NFE_GENERIC_ATTRIB_CONFIG0(0),
+ VIVS_NFE_GENERIC_ATTRIB__LEN, dummy_attribs);
+ } else {
+ etna_set_state_multi(stream, VIVS_FE_VERTEX_ELEMENT_CONFIG(0),
+ screen->specs.halti >= 0 ? 16 : 12, dummy_attribs);
+ }
+
ctx->dirty = ~0L;
ctx->dirty_sampler_views = ~0L;
}