features: add transform_feedback feature (v2)

This just stops us binding any transform feedback if we don't support it

v2: gles fixups (Gert)
macos/master
Dave Airlie 6 years ago
parent 41457142c8
commit 79582250e1
  1. 13
      src/vrend_renderer.c

@ -123,6 +123,7 @@ enum features_id
feat_texture_multisample, feat_texture_multisample,
feat_texture_storage, feat_texture_storage,
feat_texture_view, feat_texture_view,
feat_transform_feedback,
feat_transform_feedback2, feat_transform_feedback2,
feat_transform_feedback3, feat_transform_feedback3,
feat_transform_feedback_overflow_query, feat_transform_feedback_overflow_query,
@ -172,6 +173,7 @@ static const struct {
[feat_texture_multisample] = { 32, 30, { "GL_ARB_texture_multisample" } }, [feat_texture_multisample] = { 32, 30, { "GL_ARB_texture_multisample" } },
[feat_texture_storage] = { 42, UNAVAIL, { "GL_ARB_texture_storage" } }, [feat_texture_storage] = { 42, UNAVAIL, { "GL_ARB_texture_storage" } },
[feat_texture_view] = { 43, UNAVAIL, { "GL_ARB_texture_view" } }, [feat_texture_view] = { 43, UNAVAIL, { "GL_ARB_texture_view" } },
[feat_transform_feedback] = { 30, 30, { "GL_EXT_transform_feedback" } },
[feat_transform_feedback2] = { 40, 30, { "GL_ARB_transform_feedback2" } }, [feat_transform_feedback2] = { 40, 30, { "GL_ARB_transform_feedback2" } },
[feat_transform_feedback3] = { 40, UNAVAIL, { "GL_ARB_transform_feedback3" } }, [feat_transform_feedback3] = { 40, UNAVAIL, { "GL_ARB_transform_feedback3" } },
[feat_transform_feedback_overflow_query] = { 46, UNAVAIL, { "GL_ARB_transform_feedback_overflow_query" } }, [feat_transform_feedback_overflow_query] = { 46, UNAVAIL, { "GL_ARB_transform_feedback_overflow_query" } },
@ -6318,6 +6320,9 @@ void vrend_set_streamout_targets(struct vrend_context *ctx,
struct vrend_so_target *target; struct vrend_so_target *target;
uint i; uint i;
if (!has_feature(feat_transform_feedback))
return;
if (num_targets) { if (num_targets) {
bool found = false; bool found = false;
struct vrend_streamout_object *obj; struct vrend_streamout_object *obj;
@ -7537,7 +7542,7 @@ static void vrend_renderer_fill_caps_gles(uint32_t set, UNUSED uint32_t version,
caps->v1.max_uniform_blocks = max + 1; caps->v1.max_uniform_blocks = max + 1;
} }
if (gles_ver >= 30) { if (has_feature(feat_transform_feedback)) {
glGetIntegerv(GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, &max); glGetIntegerv(GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, &max);
/* As with the earlier version of transform feedback this min 4. */ /* As with the earlier version of transform feedback this min 4. */
if (max >= 4) { if (max >= 4) {
@ -7732,14 +7737,14 @@ void vrend_renderer_fill_caps(uint32_t set, uint32_t version,
} }
/* we need tf3 so we can do gallium skip buffers */ /* we need tf3 so we can do gallium skip buffers */
if (has_feature(feat_transform_feedback2)) { if (has_feature(feat_transform_feedback)) {
if (has_feature(feat_transform_feedback2))
caps->v1.bset.streamout_pause_resume = 1; caps->v1.bset.streamout_pause_resume = 1;
}
if (has_feature(feat_transform_feedback3)) { if (has_feature(feat_transform_feedback3)) {
glGetIntegerv(GL_MAX_TRANSFORM_FEEDBACK_BUFFERS, &max); glGetIntegerv(GL_MAX_TRANSFORM_FEEDBACK_BUFFERS, &max);
caps->v1.max_streamout_buffers = max; caps->v1.max_streamout_buffers = max;
} else if (epoxy_has_gl_extension("GL_EXT_transform_feedback")) { } else
caps->v1.max_streamout_buffers = 4; caps->v1.max_streamout_buffers = 4;
} }

Loading…
Cancel
Save