Commit 0927ce03 authored by jchen10's avatar jchen10 Committed by Commit Bot

Enforce KHR_robust_buffer_access_behavior for webgl2-compute

This checks the KHR_robust_buffer_access_behavior extension in
the passthrough-cmd-decoder when creating webgl2-compute context.

Bug: 898030
Change-Id: I1deb3308c852054a9ae29cd620231a212b82e16e
Reviewed-on: https://chromium-review.googlesource.com/c/1297735Reviewed-by: default avatarGeoff Lang <geofflang@chromium.org>
Reviewed-by: default avatarKenneth Russell <kbr@chromium.org>
Commit-Queue: Jie A Chen <jie.a.chen@intel.com>
Cr-Commit-Position: refs/heads/master@{#603727}
parent f6fb62b1
......@@ -1520,6 +1520,11 @@ void FeatureInfo::InitializeFeatures() {
validators_.shader_parameter.AddValue(GL_COMPLETION_STATUS_KHR);
validators_.program_parameter.AddValue(GL_COMPLETION_STATUS_KHR);
}
if (gfx::HasExtension(extensions, "GL_KHR_robust_buffer_access_behavior")) {
AddExtensionString("GL_KHR_robust_buffer_access_behavior");
feature_flags_.khr_robust_buffer_access_behavior = true;
}
}
void FeatureInfo::InitializeFloatAndHalfFloatFeatures(
......
......@@ -133,6 +133,7 @@ class GPU_GLES2_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> {
bool angle_multiview = false;
bool khr_parallel_shader_compile = false;
bool android_surface_control = false;
bool khr_robust_buffer_access_behavior = false;
};
FeatureInfo();
......
......@@ -733,6 +733,7 @@ gpu::ContextResult GLES2DecoderPassthroughImpl::Initialize(
"GL_EXT_texture_storage",
"GL_EXT_unpack_subimage",
"GL_KHR_parallel_shader_compile",
"GL_KHR_robust_buffer_access_behavior",
"GL_KHR_texture_compression_astc_hdr",
"GL_KHR_texture_compression_astc_ldr",
"GL_NV_pack_subimage",
......@@ -766,27 +767,40 @@ gpu::ContextResult GLES2DecoderPassthroughImpl::Initialize(
// TODO(geofflang): verify
// feature_info_->feature_flags().angle_robust_resource_initialization and
// api()->glIsEnabledFn(GL_ROBUST_RESOURCE_INITIALIZATION_ANGLE)
if (!feature_info_->feature_flags().angle_robust_client_memory ||
!feature_info_->feature_flags().chromium_bind_generates_resource ||
!feature_info_->feature_flags().chromium_copy_texture ||
!feature_info_->feature_flags().angle_client_arrays ||
api()->glIsEnabledFn(GL_CLIENT_ARRAYS_ANGLE) != GL_FALSE ||
feature_info_->feature_flags().angle_webgl_compatibility !=
IsWebGLContextType(attrib_helper.context_type) ||
!feature_info_->feature_flags().angle_request_extension ||
!feature_info_->feature_flags().khr_debug) {
Destroy(true);
LOG(ERROR) << "ContextResult::kFatalFailure: "
"missing required extension";
return gpu::ContextResult::kFatalFailure;
}
if (attrib_helper.enable_oop_rasterization) {
Destroy(true);
LOG(ERROR) << "ContextResult::kFatalFailure: "
"oop rasterization not supported";
return gpu::ContextResult::kFatalFailure;
}
#define FAIL_INIT_IF_NOT(feature, message) \
if (!(feature)) { \
Destroy(true); \
LOG(ERROR) << "ContextResult::kFatalFailure: " << (message); \
return gpu::ContextResult::kFatalFailure; \
}
FAIL_INIT_IF_NOT(feature_info_->feature_flags().angle_robust_client_memory,
"missing GL_ANGLE_robust_client_memory");
FAIL_INIT_IF_NOT(
feature_info_->feature_flags().chromium_bind_generates_resource,
"missing GL_CHROMIUM_bind_generates_resource");
FAIL_INIT_IF_NOT(feature_info_->feature_flags().chromium_copy_texture,
"missing GL_CHROMIUM_copy_texture");
FAIL_INIT_IF_NOT(feature_info_->feature_flags().angle_client_arrays,
"missing GL_ANGLE_client_arrays");
FAIL_INIT_IF_NOT(api()->glIsEnabledFn(GL_CLIENT_ARRAYS_ANGLE) == GL_FALSE,
"GL_ANGLE_client_arrays shouldn't be enabled");
FAIL_INIT_IF_NOT(feature_info_->feature_flags().angle_webgl_compatibility ==
IsWebGLContextType(attrib_helper.context_type),
"missing GL_ANGLE_webgl_compatibility");
FAIL_INIT_IF_NOT(feature_info_->feature_flags().angle_request_extension,
"missing GL_ANGLE_request_extension");
FAIL_INIT_IF_NOT(feature_info_->feature_flags().khr_debug,
"missing GL_KHR_debug");
FAIL_INIT_IF_NOT(
!IsWebGL2ComputeContextType(attrib_helper.context_type) ||
feature_info_->feature_flags().khr_robust_buffer_access_behavior,
"missing GL_KHR_robust_buffer_access_behavior");
FAIL_INIT_IF_NOT(!attrib_helper.enable_oop_rasterization,
"oop rasterization not supported");
#undef FAIL_INIT_IF_NOT
bind_generates_resource_ = group_->bind_generates_resource();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment