[virglrenderer-devel] [PATCH 11/21] features: add viewport array feature
Dave Airlie
airlied at gmail.com
Tue Jul 24 03:39:03 UTC 2018
From: Dave Airlie <airlied at redhat.com>
Protect the calls into viewport array GL entrypoints
---
src/vrend_renderer.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c
index c5c7e0c..af069fb 100644
--- a/src/vrend_renderer.c
+++ b/src/vrend_renderer.c
@@ -119,6 +119,7 @@ enum features_id
feat_texture_view,
feat_transform_feedback2,
feat_transform_feedback3,
+ feat_viewport_array,
feat_last,
};
@@ -160,6 +161,7 @@ static const struct {
[feat_texture_view] = { 43, UNAVAIL, { "GL_ARB_texture_view" } },
[feat_transform_feedback2] = { 40, UNAVAIL, { "GL_ARB_transform_feedback2" } },
[feat_transform_feedback3] = { 40, UNAVAIL, { "GL_ARB_transform_feedback3" } },
+ [feat_viewport_array] = { 41, UNAVAIL, { "GL_ARB_viewport_array" } },
};
struct global_renderer_state {
@@ -1994,7 +1996,7 @@ void vrend_set_viewport_states(struct vrend_context *ctx,
/* Best effort despite the warning, gles will clamp. */
glDepthRangef(ctx->sub->vps[idx].near_val, ctx->sub->vps[idx].far_val);
- } else if (idx)
+ } else if (idx && has_feature(feat_viewport_array))
glDepthRangeIndexed(idx, ctx->sub->vps[idx].near_val, ctx->sub->vps[idx].far_val);
else
glDepthRange(ctx->sub->vps[idx].near_val, ctx->sub->vps[idx].far_val);
@@ -2963,7 +2965,7 @@ static void vrend_update_scissor_state(struct vrend_context *ctx)
else
y = ss->miny;
- if (idx > 0)
+ if (idx > 0 && has_feature(feat_viewport_array))
glScissorIndexed(idx, ss->minx, y, ss->maxx - ss->minx, ss->maxy - ss->miny);
else
glScissor(ss->minx, y, ss->maxx - ss->minx, ss->maxy - ss->miny);
@@ -2983,7 +2985,7 @@ static void vrend_update_viewport_state(struct vrend_context *ctx)
cy = ctx->sub->vps[idx].cur_y - ctx->sub->vps[idx].height;
else
cy = ctx->sub->vps[idx].cur_y;
- if (idx > 0)
+ if (idx > 0 && has_feature(feat_viewport_array))
glViewportIndexedf(idx, ctx->sub->vps[idx].cur_x, cy, ctx->sub->vps[idx].width, ctx->sub->vps[idx].height);
else
glViewport(ctx->sub->vps[idx].cur_x, cy, ctx->sub->vps[idx].width, ctx->sub->vps[idx].height);
@@ -7719,7 +7721,7 @@ void vrend_renderer_fill_caps(uint32_t set, uint32_t version,
caps->v1.max_texture_gather_components = max;
}
- if (epoxy_has_gl_extension("GL_ARB_viewport_array")) {
+ if (has_feature(feat_viewport_array)) {
glGetIntegerv(GL_MAX_VIEWPORTS, &max);
caps->v1.max_viewports = max;
} else {
--
2.17.1
More information about the virglrenderer-devel
mailing list