Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(181)

Unified Diff: gpu/command_buffer/service/gles2_cmd_decoder.cc

Issue 15846014: Added support for EXT_frag_depth (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebasing Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/service/gles2_cmd_decoder.cc
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 1642fe9be4d445fff20f539db9af4ab2ff203282..c4dd98bf9b80fea03821df9fec37419f0ccff436 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -74,6 +74,7 @@ namespace gles2 {
namespace {
static const char kOESDerivativeExtension[] = "GL_OES_standard_derivatives";
+static const char kEXTFragDepthExtension[] = "GL_EXT_frag_depth";
#if !defined(ANGLE_SH_VERSION) || ANGLE_SH_VERSION < 108
khronos_uint64_t CityHashForAngle(const char* name, unsigned int len) {
@@ -1676,6 +1677,7 @@ class GLES2DecoderImpl : public GLES2Decoder {
// WebGL semantics.
bool force_webgl_glsl_validation_;
bool derivatives_explicitly_enabled_;
+ bool frag_depth_explicitly_enabled_;
bool compile_shader_always_succeeds_;
@@ -2130,6 +2132,7 @@ GLES2DecoderImpl::GLES2DecoderImpl(ContextGroup* group)
reset_status_(GL_NO_ERROR),
force_webgl_glsl_validation_(false),
derivatives_explicitly_enabled_(false),
+ frag_depth_explicitly_enabled_(false),
compile_shader_always_succeeds_(false),
service_logging_(CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableGPUServiceLoggingGPU)),
@@ -2521,6 +2524,7 @@ bool GLES2DecoderImpl::InitializeShaderTranslator() {
if (force_webgl_glsl_validation_) {
resources.OES_standard_derivatives = derivatives_explicitly_enabled_;
+ resources.EXT_frag_depth = frag_depth_explicitly_enabled_;
} else {
resources.OES_standard_derivatives =
features().oes_standard_derivatives ? 1 : 0;
@@ -2530,6 +2534,8 @@ bool GLES2DecoderImpl::InitializeShaderTranslator() {
features().oes_egl_image_external ? 1 : 0;
resources.EXT_draw_buffers =
features().ext_draw_buffers ? 1 : 0;
+ resources.EXT_frag_depth =
+ features().ext_frag_depth ? 1 : 0;
}
ShShaderSpec shader_spec = force_webgl_glsl_validation_ ? SH_WEBGL_SPEC
@@ -7132,16 +7138,25 @@ error::Error GLES2DecoderImpl::HandleGetString(
break;
case GL_EXTENSIONS:
{
- // For WebGL contexts, strip out the OES derivatives extension if it has
- // not been enabled.
- if (force_webgl_glsl_validation_ &&
- !derivatives_explicitly_enabled_) {
+ // For WebGL contexts, strip out the OES derivatives and
+ // EXT frag depth extensions if they have not been enabled.
+ if (force_webgl_glsl_validation_) {
extensions = feature_info_->extensions();
- size_t offset = extensions.find(kOESDerivativeExtension);
- if (std::string::npos != offset) {
- extensions.replace(offset,
- offset + arraysize(kOESDerivativeExtension),
- std::string());
+ if (!derivatives_explicitly_enabled_) {
+ size_t offset = extensions.find(kOESDerivativeExtension);
+ if (std::string::npos != offset) {
+ extensions.replace(offset,
+ offset + arraysize(kOESDerivativeExtension),
+ std::string());
+ }
+ }
+ if (!frag_depth_explicitly_enabled_) {
+ size_t offset = extensions.find(kEXTFragDepthExtension);
+ if (std::string::npos != offset) {
+ extensions.replace(offset,
+ offset + arraysize(kEXTFragDepthExtension),
+ std::string());
+ }
}
} else {
extensions = feature_info_->extensions().c_str();
@@ -8866,15 +8881,20 @@ error::Error GLES2DecoderImpl::HandleRequestExtensionCHROMIUM(
bool desire_webgl_glsl_validation =
feature_str.find("GL_CHROMIUM_webglsl") != std::string::npos;
bool desire_standard_derivatives = false;
+ bool desire_frag_depth = false;
if (force_webgl_glsl_validation_) {
desire_standard_derivatives =
feature_str.find("GL_OES_standard_derivatives") != std::string::npos;
+ desire_frag_depth =
+ feature_str.find("GL_EXT_frag_depth") != std::string::npos;
}
if (desire_webgl_glsl_validation != force_webgl_glsl_validation_ ||
- desire_standard_derivatives != derivatives_explicitly_enabled_) {
- force_webgl_glsl_validation_ = desire_webgl_glsl_validation;
- derivatives_explicitly_enabled_ = desire_standard_derivatives;
+ desire_standard_derivatives != derivatives_explicitly_enabled_ ||
+ desire_frag_depth != frag_depth_explicitly_enabled_) {
+ force_webgl_glsl_validation_ |= desire_webgl_glsl_validation;
+ derivatives_explicitly_enabled_ |= desire_standard_derivatives;
+ frag_depth_explicitly_enabled_ |= desire_frag_depth;
InitializeShaderTranslator();
}
« no previous file with comments | « gpu/command_buffer/service/feature_info_unittest.cc ('k') | gpu/command_buffer/service/shader_translator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698