Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / angle / src / libGLESv2 / renderer / d3d / d3d11 / Clear11.cpp
index 1d20fd9..c60b7a6 100644 (file)
@@ -1,4 +1,3 @@
-#include "precompiled.h"
 //
 // Copyright (c) 2013 The ANGLE Project Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 #include "libGLESv2/renderer/d3d/d3d11/Renderer11.h"
 #include "libGLESv2/renderer/d3d/d3d11/renderer11_utils.h"
 #include "libGLESv2/renderer/d3d/d3d11/RenderTarget11.h"
-
 #include "libGLESv2/formatutils.h"
 #include "libGLESv2/Framebuffer.h"
 #include "libGLESv2/FramebufferAttachment.h"
 
+// Precompiled shaders
 #include "libGLESv2/renderer/d3d/d3d11/shaders/compiled/clearfloat11vs.h"
 #include "libGLESv2/renderer/d3d/d3d11/shaders/compiled/clearfloat11ps.h"
 
@@ -149,7 +148,7 @@ Clear11::~Clear11()
     SafeRelease(mRasterizerState);
 }
 
-void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer)
+gl::Error Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer)
 {
     // First determine if a scissored clear is needed, this will always require drawing a quad.
     //
@@ -184,7 +183,7 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
     else
     {
         UNREACHABLE();
-        return;
+        return gl::Error(GL_INVALID_OPERATION);
     }
 
     if (clearParams.scissorEnabled && (clearParams.scissor.x >= framebufferSize.width || 
@@ -193,7 +192,7 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
                                        clearParams.scissor.y + clearParams.scissor.height <= 0))
     {
         // Scissor is enabled and the scissor rectangle is outside the renderbuffer
-        return;
+        return gl::Error(GL_NO_ERROR);
     }
 
     bool needScissoredClear = clearParams.scissorEnabled && (clearParams.scissor.x > 0 || clearParams.scissor.y > 0 ||
@@ -212,11 +211,10 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
             gl::FramebufferAttachment *attachment = frameBuffer->getColorbuffer(colorAttachment);
             if (attachment)
             {
-                RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(attachment->getRenderTarget());
+                RenderTarget11 *renderTarget = d3d11::GetAttachmentRenderTarget(attachment);
                 if (!renderTarget)
                 {
-                    ERR("Render target pointer unexpectedly null.");
-                    return;
+                    return gl::Error(GL_OUT_OF_MEMORY, "Internal render target view pointer unexpectedly null.");
                 }
 
                 const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(attachment->getInternalFormat());
@@ -260,8 +258,7 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
                     ID3D11RenderTargetView *framebufferRTV = renderTarget->getRenderTargetView();
                     if (!framebufferRTV)
                     {
-                        ERR("Render target view pointer unexpectedly null.");
-                        return;
+                        return gl::Error(GL_OUT_OF_MEMORY, "Internal render target view pointer unexpectedly null.");
                     }
 
                     const gl::InternalFormat &actualFormatInfo = gl::GetInternalFormatInfo(attachment->getActualFormat());
@@ -287,11 +284,10 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
         gl::FramebufferAttachment *attachment = frameBuffer->getDepthOrStencilbuffer();
         if (attachment)
         {
-            RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(attachment->getDepthStencil());
+            RenderTarget11 *renderTarget = d3d11::GetAttachmentRenderTarget(attachment);
             if (!renderTarget)
             {
-                ERR("Depth stencil render target pointer unexpectedly null.");
-                return;
+                return gl::Error(GL_OUT_OF_MEMORY, "Internal depth stencil view pointer unexpectedly null.");
             }
 
             const gl::InternalFormat &actualFormatInfo = gl::GetInternalFormatInfo(attachment->getActualFormat());
@@ -308,8 +304,7 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
                 ID3D11DepthStencilView *framebufferDSV = renderTarget->getDepthStencilView();
                 if (!framebufferDSV)
                 {
-                    ERR("Depth stencil view pointer unexpectedly null.");
-                    return;
+                    return gl::Error(GL_OUT_OF_MEMORY, "Internal depth stencil view pointer unexpectedly null.");
                 }
 
                 UINT clearFlags = (clearParams.clearDepth   ? D3D11_CLEAR_DEPTH   : 0) |
@@ -356,8 +351,7 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
             ID3D11RenderTargetView *rtv = renderTarget->getRenderTargetView();
             if (!rtv)
             {
-                ERR("Render target view unexpectedly null.");
-                return;
+                return gl::Error(GL_OUT_OF_MEMORY, "Internal render target view pointer unexpectedly null.");
             }
 
             rtvs[i] = rtv;
@@ -379,8 +373,7 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
         HRESULT result = deviceContext->Map(mVertexBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
         if (FAILED(result))
         {
-            ERR("Failed to map masked clear vertex buffer, HRESULT: 0x%X.", result);
-            return;
+            return gl::Error(GL_OUT_OF_MEMORY, "Failed to map internal masked clear vertex buffer, HRESULT: 0x%X.", result);
         }
 
         const gl::Rectangle *scissorPtr = clearParams.scissorEnabled ? &clearParams.scissor : NULL;
@@ -445,6 +438,8 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
         // Clean up
         mRenderer->markAllStateDirty();
     }
+
+    return gl::Error(GL_NO_ERROR);
 }
 
 ID3D11BlendState *Clear11::getBlendState(const std::vector<MaskedRenderTarget>& rts)