Use only external surface dimensions. They should always be identical to the internal ones. Bug 21424351 Change-Id: Iafa18c14cc4d2e16f20238dac0208a8159cbaa6a Reviewed-on: https://swiftshader-review.googlesource.com/3460 Reviewed-by: Nicolas Capens <capn@google.com> Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/Main/FrameBuffer.cpp b/src/Main/FrameBuffer.cpp index a2f9d52..59543ac 100644 --- a/src/Main/FrameBuffer.cpp +++ b/src/Main/FrameBuffer.cpp
@@ -124,8 +124,8 @@ cursor = cursorImage->lockExternal(0, 0, 0, sw::LOCK_READONLY, sw::PUBLIC); cursorImage->unlockExternal(); - cursorWidth = cursorImage->getExternalWidth(); - cursorHeight = cursorImage->getExternalHeight(); + cursorWidth = cursorImage->getWidth(); + cursorHeight = cursorImage->getHeight(); } else {
diff --git a/src/OpenGL/libGL/Device.cpp b/src/OpenGL/libGL/Device.cpp index 5a90363..7dc9376 100644 --- a/src/OpenGL/libGL/Device.cpp +++ b/src/OpenGL/libGL/Device.cpp
@@ -185,8 +185,8 @@ int x0 = 0; int y0 = 0; - int width = renderTarget->getExternalWidth(); - int height = renderTarget->getExternalHeight(); + int width = renderTarget->getWidth(); + int height = renderTarget->getHeight(); if(scissorEnable) // Clamp against scissor rectangle { @@ -211,8 +211,8 @@ int x0 = 0; int y0 = 0; - int width = depthStencil->getExternalWidth(); - int height = depthStencil->getExternalHeight(); + int width = depthStencil->getWidth(); + int height = depthStencil->getHeight(); if(scissorEnable) // Clamp against scissor rectangle { @@ -234,8 +234,8 @@ int x0 = 0; int y0 = 0; - int width = depthStencil->getExternalWidth(); - int height = depthStencil->getExternalHeight(); + int width = depthStencil->getWidth(); + int height = depthStencil->getHeight(); if(scissorEnable) // Clamp against scissor rectangle { @@ -496,10 +496,10 @@ return false; } - int sWidth = source->getExternalWidth(); - int sHeight = source->getExternalHeight(); - int dWidth = dest->getExternalWidth(); - int dHeight = dest->getExternalHeight(); + int sWidth = source->getWidth(); + int sHeight = source->getHeight(); + int dWidth = dest->getWidth(); + int dHeight = dest->getHeight(); SliceRect sRect; SliceRect dRect; @@ -547,8 +547,8 @@ sw::byte *sourceBuffer = (sw::byte*)source->lockInternal(0, 0, sRect.slice, LOCK_READONLY, PUBLIC); sw::byte *destBuffer = (sw::byte*)dest->lockInternal(0, 0, dRect.slice, LOCK_DISCARD, PUBLIC); - unsigned int width = source->getInternalWidth(); - unsigned int height = source->getInternalHeight(); + unsigned int width = source->getWidth(); + unsigned int height = source->getHeight(); unsigned int pitch = source->getInternalPitchB(); for(unsigned int y = 0; y < height; y++) @@ -568,8 +568,8 @@ sw::byte *sourceBuffer = (sw::byte*)source->lockStencil(0, PUBLIC); sw::byte *destBuffer = (sw::byte*)dest->lockStencil(0, PUBLIC); - unsigned int width = source->getInternalWidth(); - unsigned int height = source->getInternalHeight(); + unsigned int width = source->getWidth(); + unsigned int height = source->getHeight(); unsigned int pitch = source->getStencilPitchB(); for(unsigned int y = 0; y < height; y++) @@ -710,17 +710,17 @@ if(renderTarget) { scissor.x0 = max(scissor.x0, 0); - scissor.x1 = min(scissor.x1, renderTarget->getExternalWidth()); + scissor.x1 = min(scissor.x1, renderTarget->getWidth()); scissor.y0 = max(scissor.y0, 0); - scissor.y1 = min(scissor.y1, renderTarget->getExternalHeight()); + scissor.y1 = min(scissor.y1, renderTarget->getHeight()); } if(depthStencil) { scissor.x0 = max(scissor.x0, 0); - scissor.x1 = min(scissor.x1, depthStencil->getExternalWidth()); + scissor.x1 = min(scissor.x1, depthStencil->getWidth()); scissor.y0 = max(scissor.y0, 0); - scissor.y1 = min(scissor.y1, depthStencil->getExternalHeight()); + scissor.y1 = min(scissor.y1, depthStencil->getHeight()); } setScissor(scissor);
diff --git a/src/OpenGL/libGLES_CM/Device.cpp b/src/OpenGL/libGLES_CM/Device.cpp index a37fb89..508668f 100644 --- a/src/OpenGL/libGLES_CM/Device.cpp +++ b/src/OpenGL/libGLES_CM/Device.cpp
@@ -144,8 +144,8 @@ int x0 = 0; int y0 = 0; - int width = renderTarget->getExternalWidth(); - int height = renderTarget->getExternalHeight(); + int width = renderTarget->getWidth(); + int height = renderTarget->getHeight(); if(scissorEnable) // Clamp against scissor rectangle { @@ -170,8 +170,8 @@ int x0 = 0; int y0 = 0; - int width = depthStencil->getExternalWidth(); - int height = depthStencil->getExternalHeight(); + int width = depthStencil->getWidth(); + int height = depthStencil->getHeight(); if(scissorEnable) // Clamp against scissor rectangle { @@ -193,8 +193,8 @@ int x0 = 0; int y0 = 0; - int width = depthStencil->getExternalWidth(); - int height = depthStencil->getExternalHeight(); + int width = depthStencil->getWidth(); + int height = depthStencil->getHeight(); if(scissorEnable) // Clamp against scissor rectangle { @@ -414,10 +414,10 @@ return false; } - int sWidth = source->getExternalWidth(); - int sHeight = source->getExternalHeight(); - int dWidth = dest->getExternalWidth(); - int dHeight = dest->getExternalHeight(); + int sWidth = source->getWidth(); + int sHeight = source->getHeight(); + int dWidth = dest->getWidth(); + int dHeight = dest->getHeight(); SliceRect sRect; SliceRect dRect; @@ -465,8 +465,8 @@ sw::byte *sourceBuffer = (sw::byte*)source->lockInternal(0, 0, sRect.slice, LOCK_READONLY, PUBLIC); sw::byte *destBuffer = (sw::byte*)dest->lockInternal(0, 0, dRect.slice, LOCK_DISCARD, PUBLIC); - unsigned int width = source->getInternalWidth(); - unsigned int height = source->getInternalHeight(); + unsigned int width = source->getWidth(); + unsigned int height = source->getHeight(); unsigned int pitch = source->getInternalPitchB(); for(unsigned int y = 0; y < height; y++) @@ -486,8 +486,8 @@ sw::byte *sourceBuffer = (sw::byte*)source->lockStencil(0, PUBLIC); sw::byte *destBuffer = (sw::byte*)dest->lockStencil(0, PUBLIC); - unsigned int width = source->getInternalWidth(); - unsigned int height = source->getInternalHeight(); + unsigned int width = source->getWidth(); + unsigned int height = source->getHeight(); unsigned int pitch = source->getStencilPitchB(); for(unsigned int y = 0; y < height; y++) @@ -583,17 +583,17 @@ if(renderTarget) { scissor.x0 = max(scissor.x0, 0); - scissor.x1 = min(scissor.x1, renderTarget->getExternalWidth()); + scissor.x1 = min(scissor.x1, renderTarget->getWidth()); scissor.y0 = max(scissor.y0, 0); - scissor.y1 = min(scissor.y1, renderTarget->getExternalHeight()); + scissor.y1 = min(scissor.y1, renderTarget->getHeight()); } if(depthStencil) { scissor.x0 = max(scissor.x0, 0); - scissor.x1 = min(scissor.x1, depthStencil->getExternalWidth()); + scissor.x1 = min(scissor.x1, depthStencil->getWidth()); scissor.y0 = max(scissor.y0, 0); - scissor.y1 = min(scissor.y1, depthStencil->getExternalHeight()); + scissor.y1 = min(scissor.y1, depthStencil->getHeight()); } setScissor(scissor);
diff --git a/src/OpenGL/libGLESv2/Device.cpp b/src/OpenGL/libGLESv2/Device.cpp index 36ac149..79b8c26 100644 --- a/src/OpenGL/libGLESv2/Device.cpp +++ b/src/OpenGL/libGLESv2/Device.cpp
@@ -161,8 +161,8 @@ { x0 = 0; y0 = 0; - width = sourceSurface->getExternalWidth(); - height = sourceSurface->getExternalHeight(); + width = sourceSurface->getWidth(); + height = sourceSurface->getHeight(); if(scissorEnable) // Clamp against scissor rectangle { @@ -511,10 +511,10 @@ return false; } - int sWidth = source->getExternalWidth(); - int sHeight = source->getExternalHeight(); - int dWidth = dest->getExternalWidth(); - int dHeight = dest->getExternalHeight(); + int sWidth = source->getWidth(); + int sHeight = source->getHeight(); + int dWidth = dest->getWidth(); + int dHeight = dest->getHeight(); bool flipX = false; bool flipY = false; @@ -606,7 +606,7 @@ sw::byte *sourceBuffer = (sw::byte*)source->lockInternal(0, 0, sourceRect->slice, LOCK_READONLY, PUBLIC); sw::byte *destBuffer = (sw::byte*)dest->lockInternal(0, 0, destRect->slice, LOCK_DISCARD, PUBLIC); - copyBuffer(sourceBuffer, destBuffer, source->getInternalWidth(), source->getInternalHeight(), source->getInternalPitchB(), dest->getInternalPitchB(), egl::Image::bytes(source->getInternalFormat()), flipX, flipY); + copyBuffer(sourceBuffer, destBuffer, source->getWidth(), source->getHeight(), source->getInternalPitchB(), dest->getInternalPitchB(), egl::Image::bytes(source->getInternalFormat()), flipX, flipY); source->unlockInternal(); dest->unlockInternal(); @@ -617,7 +617,7 @@ sw::byte *sourceBuffer = (sw::byte*)source->lockStencil(0, PUBLIC); sw::byte *destBuffer = (sw::byte*)dest->lockStencil(0, PUBLIC); - copyBuffer(sourceBuffer, destBuffer, source->getInternalWidth(), source->getInternalHeight(), source->getInternalPitchB(), dest->getInternalPitchB(), egl::Image::bytes(source->getInternalFormat()), flipX, flipY); + copyBuffer(sourceBuffer, destBuffer, source->getWidth(), source->getHeight(), source->getInternalPitchB(), dest->getInternalPitchB(), egl::Image::bytes(source->getInternalFormat()), flipX, flipY); source->unlockStencil(); dest->unlockStencil(); @@ -673,12 +673,12 @@ return false; } - int sWidth = source->getExternalWidth(); - int sHeight = source->getExternalHeight(); - int sDepth = source->getExternalDepth(); - int dWidth = dest->getExternalWidth(); - int dHeight = dest->getExternalHeight(); - int dDepth = dest->getExternalDepth(); + int sWidth = source->getWidth(); + int sHeight = source->getHeight(); + int sDepth = source->getDepth(); + int dWidth = dest->getWidth(); + int dHeight = dest->getHeight(); + int dDepth = dest->getDepth(); bool scaling = (sWidth != dWidth) || (sHeight != dHeight) || (sDepth != dDepth); bool equalFormats = source->getInternalFormat() == dest->getInternalFormat(); @@ -817,17 +817,17 @@ if(renderTarget) { scissor.x0 = max(scissor.x0, 0); - scissor.x1 = min(scissor.x1, renderTarget->getExternalWidth()); + scissor.x1 = min(scissor.x1, renderTarget->getWidth()); scissor.y0 = max(scissor.y0, 0); - scissor.y1 = min(scissor.y1, renderTarget->getExternalHeight()); + scissor.y1 = min(scissor.y1, renderTarget->getHeight()); } if(depthStencil) { scissor.x0 = max(scissor.x0, 0); - scissor.x1 = min(scissor.x1, depthStencil->getExternalWidth()); + scissor.x1 = min(scissor.x1, depthStencil->getWidth()); scissor.y0 = max(scissor.y0, 0); - scissor.y1 = min(scissor.y1, depthStencil->getExternalHeight()); + scissor.y1 = min(scissor.y1, depthStencil->getHeight()); } setScissor(scissor);
diff --git a/src/Renderer/Blitter.cpp b/src/Renderer/Blitter.cpp index f3b9ab6..07f9e3b 100644 --- a/src/Renderer/Blitter.cpp +++ b/src/Renderer/Blitter.cpp
@@ -95,18 +95,18 @@ source->lockInternal(0, 0, 0, sw::LOCK_READONLY, sw::PUBLIC); dest->lockInternal(0, 0, 0, sw::LOCK_WRITEONLY, sw::PUBLIC); - float w = static_cast<float>(source->getExternalWidth()) / static_cast<float>(dest->getExternalWidth()); - float h = static_cast<float>(source->getExternalHeight()) / static_cast<float>(dest->getExternalHeight()); - float d = static_cast<float>(source->getExternalDepth()) / static_cast<float>(dest->getExternalDepth()); + float w = static_cast<float>(source->getWidth()) / static_cast<float>(dest->getWidth()); + float h = static_cast<float>(source->getHeight()) / static_cast<float>(dest->getHeight()); + float d = static_cast<float>(source->getDepth()) / static_cast<float>(dest->getDepth()); float z = 0.5f * d; - for(int k = 0; k < dest->getExternalDepth(); ++k) + for(int k = 0; k < dest->getDepth(); ++k) { float y = 0.5f * h; - for(int j = 0; j < dest->getExternalHeight(); ++j) + for(int j = 0; j < dest->getHeight(); ++j) { float x = 0.5f * w; - for(int i = 0; i < dest->getExternalWidth(); ++i) + for(int i = 0; i < dest->getWidth(); ++i) { dest->writeInternal(i, j, k, source->sampleInternal(x, y, z)); x += w; @@ -271,7 +271,7 @@ unscale = vector(1.0f, 1.0f, 1.0f, 1.0f); break; default: - return false; + return nullptr; } float4 scale; @@ -296,7 +296,7 @@ scale = vector(1.0f, 1.0f, 1.0f, 1.0f); break; default: - return false; + return nullptr; } if(unscale != scale) @@ -309,9 +309,9 @@ color = Min(color, Float4(1.0f, 1.0f, 1.0f, 1.0f)); color = Max(color, Float4(Surface::isUnsignedComponent(state.destFormat, 0) ? 0.0f : -1.0f, - Surface::isUnsignedComponent(state.destFormat, 1) ? 0.0f : -1.0f, - Surface::isUnsignedComponent(state.destFormat, 2) ? 0.0f : -1.0f, - Surface::isUnsignedComponent(state.destFormat, 3) ? 0.0f : -1.0f)); + Surface::isUnsignedComponent(state.destFormat, 1) ? 0.0f : -1.0f, + Surface::isUnsignedComponent(state.destFormat, 2) ? 0.0f : -1.0f, + Surface::isUnsignedComponent(state.destFormat, 3) ? 0.0f : -1.0f)); } Pointer<Byte> d = destLine + i * Surface::bytes(state.destFormat); @@ -368,7 +368,7 @@ *Pointer<Float>(d) = color.x; break; default: - return false; + return nullptr; } x += w; @@ -439,8 +439,8 @@ data.y0d = dRect.y0; data.y1d = dRect.y1; - data.sWidth = source->getInternalWidth(); - data.sHeight = source->getInternalHeight(); + data.sWidth = source->getWidth(); + data.sHeight = source->getHeight(); blitFunction(&data);
diff --git a/src/Renderer/Sampler.cpp b/src/Renderer/Sampler.cpp index 3d73ceb..9f26e4e 100644 --- a/src/Renderer/Sampler.cpp +++ b/src/Renderer/Sampler.cpp
@@ -109,9 +109,9 @@ externalTextureFormat = surface->getExternalFormat(); internalTextureFormat = surface->getInternalFormat(); - int width = surface->getInternalWidth(); - int height = surface->getInternalHeight(); - int depth = surface->getInternalDepth(); + int width = surface->getWidth(); + int height = surface->getHeight(); + int depth = surface->getDepth(); int pitchP = surface->getInternalPitchP(); int sliceP = surface->getInternalSliceP();
diff --git a/src/Renderer/Surface.hpp b/src/Renderer/Surface.hpp index b50c127..75c926a 100644 --- a/src/Renderer/Surface.hpp +++ b/src/Renderer/Surface.hpp
@@ -165,11 +165,12 @@ virtual ~Surface(); + inline int getWidth() const; + inline int getHeight() const; + inline int getDepth() const; + void *lockExternal(int x, int y, int z, Lock lock, Accessor client); void unlockExternal(); - inline int getExternalWidth() const; - inline int getExternalHeight() const; - inline int getExternalDepth() const; inline Format getExternalFormat() const; inline int getExternalPitchB() const; inline int getExternalPitchP() const; @@ -178,9 +179,6 @@ virtual void *lockInternal(int x, int y, int z, Lock lock, Accessor client); virtual void unlockInternal(); - inline int getInternalWidth() const; - inline int getInternalHeight() const; - inline int getInternalDepth() const; inline Format getInternalFormat() const; inline int getInternalPitchB() const; inline int getInternalPitchP() const; @@ -377,17 +375,17 @@ namespace sw { - int Surface::getExternalWidth() const + int Surface::getWidth() const { return external.width; } - int Surface::getExternalHeight() const + int Surface::getHeight() const { return external.height; } - int Surface::getExternalDepth() const + int Surface::getDepth() const { return external.depth; } @@ -417,21 +415,6 @@ return external.sliceP; } - int Surface::getInternalWidth() const - { - return internal.width; - } - - int Surface::getInternalHeight() const - { - return internal.height; - } - - int Surface::getInternalDepth() const - { - return internal.depth; - } - Format Surface::getInternalFormat() const { return internal.format;