[virglrenderer-devel] [PATCH] shader: get maximum number of render targets dynamically
ramin.azarmehr at gmail.com
ramin.azarmehr at gmail.com
Tue Jun 12 17:35:17 UTC 2018
From: Ramin Azarmehr <ramin.azarmehr at gmail.com>
Thank you Jakob. Upon your request I resend the patch via git-sendemail. Please advice how to push to remote repo (permissions required?).
---
src/vrend_renderer.c | 6 ++++--
src/vrend_shader.c | 4 ++--
src/vrend_shader.h | 1 +
3 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c
index 8fd113b..c7f41a4 100644
--- a/src/vrend_renderer.c
+++ b/src/vrend_renderer.c
@@ -123,6 +123,7 @@ struct global_renderer_state {
/* these appeared broken on at least one driver */
bool use_explicit_locations;
uint32_t max_uniform_blocks;
+ uint32_t max_draw_buffers;
struct list_head active_ctx_list;
/* threaded sync */
@@ -4297,6 +4298,7 @@ int vrend_renderer_init(struct vrend_if_cbs *cbs, uint32_t flags)
if (vrend_state.have_debug_cb) {
glDisable(GL_DEBUG_OUTPUT);
}
+ glGetIntegerv(GL_MAX_DRAW_BUFFERS, (GLint *) &vrend_state.max_draw_buffers);
vrend_clicbs->destroy_gl_context(gl_context);
list_inithead(&vrend_state.fence_list);
@@ -4463,6 +4465,7 @@ struct vrend_context *vrend_create_context(int id, uint32_t nlen, const char *de
grctx->shader_cfg.use_gles = vrend_state.use_gles;
grctx->shader_cfg.use_core_profile = vrend_state.use_core_profile;
grctx->shader_cfg.use_explicit_locations = vrend_state.use_explicit_locations;
+ grctx->shader_cfg.max_draw_buffers = vrend_state.max_draw_buffers;
vrend_renderer_create_sub_ctx(grctx, 0);
vrend_renderer_set_sub_ctx(grctx, 0);
@@ -6734,8 +6737,7 @@ static bool vrend_renderer_fill_caps_common(uint32_t set, UNUSED uint32_t versio
/* Common limits for all backends. */
- glGetIntegerv(GL_MAX_DRAW_BUFFERS, &max);
- caps->v1.max_render_targets = max;
+ caps->v1.max_render_targets = vrend_state.max_draw_buffers;
glGetIntegerv(GL_MAX_SAMPLES, &max);
caps->v1.max_samples = max;
diff --git a/src/vrend_shader.c b/src/vrend_shader.c
index 8cc695a..d477d67 100644
--- a/src/vrend_shader.c
+++ b/src/vrend_shader.c
@@ -994,7 +994,7 @@ static int emit_cbuf_writes(struct dump_ctx *ctx)
int i;
char *sret;
- for (i = ctx->num_outputs; i < 8; i++) {
+ for (i = ctx->num_outputs; i < ctx->cfg->max_draw_buffers; i++) {
snprintf(buf, 255, "fsout_c%d = fsout_c0;\n", i);
sret = add_str_to_glsl_main(ctx, buf);
if (!sret)
@@ -2963,7 +2963,7 @@ static char *emit_ios(struct dump_ctx *ctx, char *glsl_hdr)
}
}
if (ctx->write_all_cbufs) {
- for (i = 0; i < 8; i++) {
+ for (i = 0; i < ctx->cfg->max_draw_buffers; i++) {
if (ctx->cfg->use_gles)
snprintf(buf, 255, "layout (location=%d) out vec4 fsout_c%d;\n", i, i);
else
diff --git a/src/vrend_shader.h b/src/vrend_shader.h
index 149f389..bcfa78e 100644
--- a/src/vrend_shader.h
+++ b/src/vrend_shader.h
@@ -90,6 +90,7 @@ struct vrend_shader_key {
struct vrend_shader_cfg {
int glsl_version;
+ int max_draw_buffers;
bool use_gles;
bool use_core_profile;
bool use_explicit_locations;
--
2.17.1
More information about the virglrenderer-devel
mailing list