| 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 d402c935ba4c63d940a3c6d4eefbbeb9b5cf92dc..d1d1d9ce97e67a92688eff24a752e9cb06fd542a 100644
|
| --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| @@ -1690,6 +1690,10 @@ class GLES2DecoderImpl : public GLES2Decoder,
|
| return feature_info_->workarounds();
|
| }
|
|
|
| + const gfx::GLVersionInfo& gl_version() const {
|
| + return feature_info_->gl_version_info();
|
| + }
|
| +
|
| bool ShouldDeferDraws() {
|
| return !offscreen_target_frame_buffer_.get() &&
|
| framebuffer_state_.bound_draw_framebuffer.get() == NULL &&
|
| @@ -2739,7 +2743,7 @@ bool GLES2DecoderImpl::Initialize(
|
|
|
| bool default_fb = (GetBackbufferServiceId() == 0);
|
|
|
| - if (feature_info_->gl_version_info().is_desktop_core_profile) {
|
| + if (gl_version().is_desktop_core_profile) {
|
| glGetFramebufferAttachmentParameterivEXT(
|
| GL_FRAMEBUFFER,
|
| default_fb ? GL_BACK_LEFT : GL_COLOR_ATTACHMENT0,
|
| @@ -2778,7 +2782,7 @@ bool GLES2DecoderImpl::Initialize(
|
| // mailing list archives. It also implicitly enables the desktop GL
|
| // capability GL_POINT_SPRITE to provide access to the gl_PointCoord
|
| // variable in fragment shaders.
|
| - if (!feature_info_->gl_version_info().BehavesLikeGLES()) {
|
| + if (!gl_version().BehavesLikeGLES()) {
|
| glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
|
| glEnable(GL_POINT_SPRITE);
|
| }
|
| @@ -3016,8 +3020,11 @@ bool GLES2DecoderImpl::InitializeShaderTranslator() {
|
| else
|
| resources.HashFunction = NULL;
|
| ShaderTranslatorInterface::GlslImplementationType implementation_type =
|
| - gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2 ?
|
| - ShaderTranslatorInterface::kGlslES : ShaderTranslatorInterface::kGlsl;
|
| + ShaderTranslatorInterface::kGlsl;
|
| + if (gl_version().is_es)
|
| + implementation_type = ShaderTranslatorInterface::kGlslES;
|
| + else if (gl_version().is_desktop_core_profile)
|
| + implementation_type = ShaderTranslatorInterface::kGlslCoreProfile;
|
| int driver_bug_workarounds = 0;
|
| if (workarounds().needs_glsl_built_in_function_emulation)
|
| driver_bug_workarounds |= SH_EMULATE_BUILT_IN_FUNCTIONS;
|
| @@ -4589,7 +4596,7 @@ void GLES2DecoderImpl::DoDiscardFramebufferEXT(GLenum target,
|
| }
|
|
|
| ScopedRenderTo do_render(framebuffer);
|
| - if (feature_info_->gl_version_info().is_es3) {
|
| + if (gl_version().is_es3) {
|
| glInvalidateFramebuffer(
|
| target, numAttachments, translated_attachments.get());
|
| } else {
|
| @@ -4771,7 +4778,7 @@ bool GLES2DecoderImpl::GetHelper(
|
| *num_written = 1;
|
| if (params) {
|
| GLint v = 0;
|
| - if (feature_info_->gl_version_info().is_desktop_core_profile) {
|
| + if (gl_version().is_desktop_core_profile) {
|
| Framebuffer* framebuffer =
|
| GetFramebufferInfoForTarget(GL_DRAW_FRAMEBUFFER_EXT);
|
| if (framebuffer) {
|
| @@ -4792,7 +4799,7 @@ bool GLES2DecoderImpl::GetHelper(
|
| *num_written = 1;
|
| if (params) {
|
| GLint v = 0;
|
| - if (feature_info_->gl_version_info().is_desktop_core_profile) {
|
| + if (gl_version().is_desktop_core_profile) {
|
| Framebuffer* framebuffer =
|
| GetFramebufferInfoForTarget(GL_DRAW_FRAMEBUFFER_EXT);
|
| if (framebuffer) {
|
| @@ -4814,7 +4821,7 @@ bool GLES2DecoderImpl::GetHelper(
|
| *num_written = 1;
|
| if (params) {
|
| GLint v = 0;
|
| - if (feature_info_->gl_version_info().is_desktop_core_profile) {
|
| + if (gl_version().is_desktop_core_profile) {
|
| Framebuffer* framebuffer =
|
| GetFramebufferInfoForTarget(GL_DRAW_FRAMEBUFFER_EXT);
|
| if (framebuffer) {
|
| @@ -4845,7 +4852,7 @@ bool GLES2DecoderImpl::GetHelper(
|
| *num_written = 1;
|
| if (params) {
|
| GLint v = 0;
|
| - if (feature_info_->gl_version_info().is_desktop_core_profile) {
|
| + if (gl_version().is_desktop_core_profile) {
|
| Framebuffer* framebuffer =
|
| GetFramebufferInfoForTarget(GL_DRAW_FRAMEBUFFER_EXT);
|
| if (framebuffer) {
|
| @@ -5689,7 +5696,7 @@ void GLES2DecoderImpl::BlitFramebufferHelper(GLint srcX0,
|
| GLenum filter) {
|
| // TODO(sievers): This could be resolved at the GL binding level, but the
|
| // binding process is currently a bit too 'brute force'.
|
| - if (feature_info_->gl_version_info().is_angle) {
|
| + if (gl_version().is_angle) {
|
| glBlitFramebufferANGLE(
|
| srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
|
| } else if (feature_info_->feature_flags().use_core_framebuffer_multisample) {
|
| @@ -6704,7 +6711,7 @@ bool GLES2DecoderImpl::SimulateAttrib0(
|
| DCHECK(simulated);
|
| *simulated = false;
|
|
|
| - if (feature_info_->gl_version_info().BehavesLikeGLES())
|
| + if (gl_version().BehavesLikeGLES())
|
| return true;
|
|
|
| const VertexAttrib* attrib =
|
| @@ -8061,7 +8068,7 @@ error::Error GLES2DecoderImpl::HandleReadPixels(uint32 immediate_data_size,
|
| glGenBuffersARB(1, &buffer);
|
| glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, buffer);
|
| // For ANGLE client version 2, GL_STREAM_READ is not available.
|
| - const GLenum usage_hint = feature_info_->gl_version_info().is_angle ?
|
| + const GLenum usage_hint = gl_version().is_angle ?
|
| GL_STATIC_DRAW : GL_STREAM_READ;
|
| glBufferData(GL_PIXEL_PACK_BUFFER_ARB, pixels_size, NULL, usage_hint);
|
| GLenum error = glGetError();
|
| @@ -10293,7 +10300,7 @@ void GLES2DecoderImpl::DoSwapBuffers() {
|
| // Ensure the side effects of the copy are visible to the parent
|
| // context. There is no need to do this for ANGLE because it uses a
|
| // single D3D device for all contexts.
|
| - if (!feature_info_->gl_version_info().is_angle)
|
| + if (!gl_version().is_angle)
|
| glFlush();
|
| }
|
| } else {
|
|
|