<div dir="ltr"><div>Not all platforms have 8 render targets. So, get the maximum draw buffers at runtime, and pass to shader. <br></div><div>e.g., on i.MX8 QuadMax platform (dual GPU), there are only 4 draw buffers per GPU, causing shader compile failures with current virgl code.<br></div><div><br></div><div>P.S.: I'm new to this mailing list system; please advise if there's any problem with my posting style so I can correct before posting my other patches. Thanks.<br></div><div><br></div><div>---<br></div><div>diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c</div>index 8fd113b..f43c944 100644<br>--- a/src/vrend_renderer.c<br>+++ b/src/vrend_renderer.c<br>@@ -4466,6 +4466,7 @@ struct vrend_context *vrend_create_context(int id, uint32_t nlen, const char *de<br>    vrend_renderer_create_sub_ctx(grctx, 0);<br>    vrend_renderer_set_sub_ctx(grctx, 0);<br> <br>+   glGetIntegerv(GL_MAX_DRAW_BUFFERS, &grctx->shader_cfg.max_draw_buffers);<br>    vrender_get_glsl_version(&grctx->shader_cfg.glsl_version);<br> <br>    list_addtail(&grctx->ctx_entry, &vrend_state.active_ctx_list);diff --git a/src/vrend_shader.c b/src/vrend_shader.c<br>index 8cc695a..d477d67 100644<br>--- a/src/vrend_shader.c<br>+++ b/src/vrend_shader.c<br>@@ -994,7 +994,7 @@ static int emit_cbuf_writes(struct dump_ctx *ctx)<br>    int i;<br>    char *sret;<br> <br>-   for (i = ctx->num_outputs; i < 8; i++) {<br>+   for (i = ctx->num_outputs; i < ctx->cfg->max_draw_buffers; i++) {<br>       snprintf(buf, 255, "fsout_c%d = fsout_c0;\n", i);<br>       sret = add_str_to_glsl_main(ctx, buf);<br>       if (!sret)<br>@@ -2963,7 +2963,7 @@ static char *emit_ios(struct dump_ctx *ctx, char *glsl_hdr)<br>       }<br>    }<br>    if (ctx->write_all_cbufs) {<br>-      for (i = 0; i < 8; i++) {<br>+      for (i = 0; i < ctx->cfg->max_draw_buffers; i++) {<br>          if (ctx->cfg->use_gles)<br>             snprintf(buf, 255, "layout (location=%d) out vec4 fsout_c%d;\n", i, i);<br>          elsediff --git a/src/vrend_shader.h b/src/vrend_shader.h<br>index 149f389..bcfa78e 100644<br>--- a/src/vrend_shader.h<br>+++ b/src/vrend_shader.h<br>@@ -90,6 +90,7 @@ struct vrend_shader_key {<br> <br> struct vrend_shader_cfg {<br>    int glsl_version;<br>+   int max_draw_buffers;<br>    bool use_gles;<br>    bool use_core_profile;<br>    bool use_explicit_locations;<br></div>