Migrate Image to Image9 and add an abstract base

TRAC #22254 Author: Shannon Woods Signed-off-by: Geoff Lang Signed-off-by: Daniel Koch git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1572 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent f721fdbd
......@@ -257,6 +257,8 @@
'libGLESv2/renderer/Blit.h',
'libGLESv2/renderer/Image.cpp',
'libGLESv2/renderer/Image.h',
'libGLESv2/renderer/Image9.cpp',
'libGLESv2/renderer/Image9.h',
'libGLESv2/renderer/Renderer.cpp',
'libGLESv2/renderer/Renderer.h',
'libGLESv2/renderer/Renderer11.cpp',
......
......@@ -487,8 +487,6 @@ void Texture2D::setCompressedImage(GLint level, GLenum format, GLsizei width, GL
void Texture2D::commitRect(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height)
{
ASSERT(mImageArray[level]->getSurface() != NULL);
if (level < levelCount())
{
rx::Image *image = mImageArray[level];
......@@ -822,7 +820,7 @@ void Texture2D::generateMipmaps()
{
for (unsigned int i = 1; i <= q; i++)
{
rx::Image::generateMipmap(mImageArray[i], mImageArray[i - 1]);
mRenderer->generateMipmap(mImageArray[i], mImageArray[i - 1]);
}
}
}
......@@ -1041,8 +1039,6 @@ void TextureCubeMap::setCompressedImage(GLenum face, GLint level, GLenum format,
void TextureCubeMap::commitRect(int face, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height)
{
ASSERT(mImageArray[face][level]->getSurface() != NULL);
if (level < levelCount())
{
rx::Image *image = mImageArray[face][level];
......@@ -1448,7 +1444,7 @@ void TextureCubeMap::generateMipmaps()
{
for (unsigned int i = 1; i <= q; i++)
{
rx::Image::generateMipmap(mImageArray[f][i], mImageArray[f][i - 1]);
mRenderer->generateMipmap(mImageArray[f][i], mImageArray[f][i - 1]);
}
}
}
......
......@@ -9,6 +9,7 @@
// not for code blocks that use SSE2 explicitly.
#include "libGLESv2/Texture.h"
#include "libGLESv2/renderer/Image.h"
#include <intrin.h>
......@@ -16,7 +17,7 @@ namespace rx
{
void Image::loadRGBAUByteDataSSE2(GLsizei width, GLsizei height,
int inputPitch, const void *input, size_t outputPitch, void *output) const
int inputPitch, const void *input, size_t outputPitch, void *output)
{
const unsigned int *source = NULL;
unsigned int *dest = NULL;
......@@ -58,7 +59,7 @@ void Image::loadRGBAUByteDataSSE2(GLsizei width, GLsizei height,
}
void Image::loadAlphaDataSSE2(GLsizei width, GLsizei height,
int inputPitch, const void *input, size_t outputPitch, void *output) const
int inputPitch, const void *input, size_t outputPitch, void *output)
{
const unsigned char *source = NULL;
unsigned int *dest = NULL;
......
......@@ -241,16 +241,17 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\"
<ClCompile Include="Program.cpp" />
<ClCompile Include="ProgramBinary.cpp" />
<ClCompile Include="Query.cpp" />
<ClCompile Include="..\common\RefCountObject.cpp" />
<ClCompile Include="Renderbuffer.cpp" />
<ClCompile Include="renderer\Blit.cpp" />
<ClCompile Include="..\common\RefCountObject.cpp" />
<ClCompile Include="Renderbuffer.cpp" />
<ClCompile Include="renderer\Blit.cpp" />
<ClCompile Include="renderer\D3DConstantTable.cpp" />
<ClCompile Include="renderer\Image.cpp" />
<ClCompile Include="renderer\Image9.cpp" />
<ClCompile Include="renderer\IndexDataManager.cpp" />
<ClCompile Include="renderer\Renderer.cpp" />
<ClCompile Include="renderer\Renderer11.cpp" />
<ClCompile Include="renderer\renderer11_utils.cpp" />
<ClCompile Include="renderer\Renderer.cpp" />
<ClCompile Include="renderer\Renderer11.cpp" />
<ClCompile Include="renderer\renderer11_utils.cpp" />
<ClCompile Include="renderer\Renderer9.cpp" />
<ClCompile Include="renderer\Image.cpp" />
<ClCompile Include="renderer\renderer9_utils.cpp" />
<ClCompile Include="renderer\RenderTarget11.cpp" />
<ClCompile Include="renderer\RenderTarget9.cpp" />
......@@ -285,15 +286,16 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\"
<ClInclude Include="Program.h" />
<ClInclude Include="ProgramBinary.h" />
<ClInclude Include="Query.h" />
<ClInclude Include="..\common\RefCountObject.h" />
<ClInclude Include="Renderbuffer.h" />
<ClInclude Include="renderer\Blit.h" />
<ClInclude Include="..\common\RefCountObject.h" />
<ClInclude Include="Renderbuffer.h" />
<ClInclude Include="renderer\Blit.h" />
<ClInclude Include="renderer\D3DConstantTable.h" />
<ClInclude Include="renderer\Image.h" />
<ClInclude Include="renderer\Image.h" />
<ClInclude Include="renderer\Image9.h" />
<ClInclude Include="renderer\IndexDataManager.h" />
<ClInclude Include="renderer\Renderer.h" />
<ClInclude Include="renderer\Renderer11.h" />
<ClInclude Include="renderer\renderer11_utils.h" />
<ClInclude Include="renderer\Renderer.h" />
<ClInclude Include="renderer\Renderer11.h" />
<ClInclude Include="renderer\renderer11_utils.h" />
<ClInclude Include="renderer\Renderer9.h" />
<ClInclude Include="renderer\renderer9_utils.h" />
<ClInclude Include="renderer\RenderTarget.h" />
......@@ -337,4 +339,4 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\"
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
\ No newline at end of file
</Project>
......@@ -74,12 +74,12 @@
<ClCompile Include="TextureSSE2.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="utilities.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="renderer\Renderer9.cpp">
<Filter>Renderer</Filter>
</ClCompile>
<ClCompile Include="utilities.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="renderer\Renderer9.cpp">
<Filter>Renderer</Filter>
</ClCompile>
<ClCompile Include="renderer\Image.cpp">
<Filter>Renderer</Filter>
</ClCompile>
......@@ -122,9 +122,6 @@
<ClCompile Include="renderer\VertexDeclarationCache.cpp">
<Filter>Renderer</Filter>
</ClCompile>
<ClCompile Include="renderer\ShaderExecutable9.cpp">
<Filter>Renderer</Filter>
</ClCompile>
<ClCompile Include="renderer\D3DConstantTable.cpp">
<Filter>Renderer</Filter>
</ClCompile>
......@@ -133,10 +130,22 @@
</ClCompile>
<ClCompile Include="renderer\VertexDataManager.cpp">
<Filter>Renderer</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="BinaryStream.h">
</ClCompile>
<ClCompile Include="renderer\ShaderExecutable9.cpp">
<Filter>Renderer</Filter>
</ClCompile>
<ClCompile Include="renderer\ShaderExecutable11.cpp">
<Filter>Renderer</Filter>
</ClCompile>
<ClCompile Include="renderer\Image9.cpp">
<Filter>Renderer</Filter>
</ClCompile>
<ClCompile Include="renderer\Image.cpp">
<Filter>Renderer</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="BinaryStream.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Buffer.h">
......@@ -214,9 +223,6 @@
<ClInclude Include="renderer\Renderer9.h">
<Filter>Renderer</Filter>
</ClInclude>
<ClInclude Include="renderer\Image.h">
<Filter>Renderer</Filter>
</ClInclude>
<ClInclude Include="renderer\TextureStorage.h">
<Filter>Renderer</Filter>
</ClInclude>
......@@ -262,9 +268,6 @@
<ClInclude Include="renderer\ShaderExecutable.h">
<Filter>Renderer</Filter>
</ClInclude>
<ClInclude Include="renderer\ShaderExecutable9.h">
<Filter>Renderer</Filter>
</ClInclude>
<ClInclude Include="renderer\VertexDataManager.h">
<Filter>Renderer</Filter>
</ClInclude>
......@@ -276,14 +279,26 @@
</ClInclude>
<ClInclude Include="renderer\vertexconversion.h">
<Filter>Renderer</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="libGLESv2.def">
</ClInclude>
<ClInclude Include="renderer\ShaderExecutable9.h">
<Filter>Renderer</Filter>
</ClInclude>
<ClInclude Include="renderer\ShaderExecutable11.h">
<Filter>Renderer</Filter>
</ClInclude>
<ClInclude Include="renderer\Image9.h">
<Filter>Renderer</Filter>
</ClInclude>
<ClInclude Include="renderer\Image.h">
<Filter>Renderer</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="libGLESv2.def">
<Filter>Source Files</Filter>
</None>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="libGLESv2.rc" />
</ItemGroup>
</Project>
\ No newline at end of file
</Project>
//
// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Image9.h: Defines the rx::Image9 class, which acts as the interface to
// the actual underlying surfaces of a Texture.
#ifndef LIBGLESV2_RENDERER_IMAGE9_H_
#define LIBGLESV2_RENDERER_IMAGE9_H_
#define GL_APICALL
#include <GLES2/gl2.h>
#include <d3d9.h>
#include "libGLESv2/renderer/Image.h"
#include "common/debug.h"
namespace gl
{
class Framebuffer;
}
namespace rx
{
class Renderer;
class Renderer9;
class TextureStorage2D;
class TextureStorageCubeMap;
class Image9 : public Image
{
public:
Image9();
~Image9();
static Image9 *makeImage9(Image *img);
static void generateMipmap(Image9 *dest, Image9 *source);
static void copyLockableSurfaces(IDirect3DSurface9 *dest, IDirect3DSurface9 *source);
virtual bool redefine(Renderer *renderer, GLint internalformat, GLsizei width, GLsizei height, bool forceRelease);
virtual bool isRenderableFormat() const;
D3DFORMAT getD3DFormat() const;
virtual bool isDirty() const {return mSurface && mDirty;}
IDirect3DSurface9 *getSurface();
virtual void setManagedSurface(TextureStorage2D *storage, int level);
virtual void setManagedSurface(TextureStorageCubeMap *storage, int face, int level);
virtual bool updateSurface(TextureStorage2D *storage, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
virtual bool updateSurface(TextureStorageCubeMap *storage, int face, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
virtual void loadData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
GLint unpackAlignment, const void *input);
virtual void loadCompressedData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
const void *input);
virtual void copy(GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source);
private:
DISALLOW_COPY_AND_ASSIGN(Image9);
void createSurface();
void setManagedSurface(IDirect3DSurface9 *surface);
bool updateSurface(IDirect3DSurface9 *dest, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
HRESULT lock(D3DLOCKED_RECT *lockedRect, const RECT *rect);
void unlock();
Renderer9 *mRenderer;
D3DPOOL mD3DPool; // can only be D3DPOOL_SYSTEMMEM or D3DPOOL_MANAGED since it needs to be lockable.
D3DFORMAT mD3DFormat;
IDirect3DSurface9 *mSurface;
};
}
#endif // LIBGLESV2_RENDERER_IMAGE9_H_
......@@ -21,7 +21,7 @@
#include "libGLESv2/renderer/ShaderExecutable9.h"
#include "libGLESv2/renderer/SwapChain9.h"
#include "libGLESv2/renderer/TextureStorage.h"
#include "libGLESv2/renderer/Image.h"
#include "libGLESv2/renderer/Image9.h"
#include "libGLESv2/renderer/Blit.h"
#include "libGLESv2/renderer/RenderTarget9.h"
......@@ -2789,7 +2789,7 @@ bool Renderer9::copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurface9 *s
if (SUCCEEDED(result))
{
Image::copyLockableSurfaces(surf, source);
Image9::copyLockableSurfaces(surf, source);
result = device->UpdateSurface(surf, NULL, dest, NULL);
surf->Release();
}
......@@ -2812,12 +2812,14 @@ bool Renderer9::copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurface9 *s
Image *Renderer9::createImage()
{
return new Image();
return new Image9();
}
void Renderer9::generateMipmap(Image *dest, Image *src)
{
Image::generateMipmap(dest, src);
Image9 *src9 = Image9::makeImage9(src);
Image9 *dst9 = Image9::makeImage9(dest);
Image9::generateMipmap(dst9, src9);
}
}
\ No newline at end of file
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