Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
angle
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
angle
Commits
e4733d7e
Commit
e4733d7e
authored
Oct 31, 2012
by
daniel@transgaming.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move shader cache into Renderer
Trac #21727 git-svn-id:
https://angleproject.googlecode.com/svn/branches/dx11proto@1333
736b8ea6-26fd-11df-bfd4-992fa37f6226
parent
f688c0d1
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
73 additions
and
75 deletions
+73
-75
build_angle.gypi
src/build_angle.gypi
+1
-0
Display.cpp
src/libEGL/Display.cpp
+0
-19
Display.h
src/libEGL/Display.h
+0
-7
Blit.cpp
src/libGLESv2/Blit.cpp
+20
-25
Blit.h
src/libGLESv2/Blit.h
+3
-3
Context.cpp
src/libGLESv2/Context.cpp
+1
-1
ProgramBinary.cpp
src/libGLESv2/ProgramBinary.cpp
+8
-7
ProgramBinary.h
src/libGLESv2/ProgramBinary.h
+4
-3
libGLESv2.vcxproj
src/libGLESv2/libGLESv2.vcxproj
+1
-0
libGLESv2.vcxproj.filters
src/libGLESv2/libGLESv2.vcxproj.filters
+3
-0
Renderer.cpp
src/libGLESv2/renderer/Renderer.cpp
+16
-0
Renderer.h
src/libGLESv2/renderer/Renderer.h
+8
-4
ShaderCache.h
src/libGLESv2/renderer/ShaderCache.h
+8
-6
No files found.
src/build_angle.gypi
View file @
e4733d7e
...
@@ -253,6 +253,7 @@
...
@@ -253,6 +253,7 @@
'libGLESv2/Renderbuffer.h',
'libGLESv2/Renderbuffer.h',
'libGLESv2/renderer/Renderer.cpp',
'libGLESv2/renderer/Renderer.cpp',
'libGLESv2/renderer/Renderer.h',
'libGLESv2/renderer/Renderer.h',
'libGLESv2/renderer/ShaderCache.h',
'libGLESv2/ResourceManager.cpp',
'libGLESv2/ResourceManager.cpp',
'libGLESv2/ResourceManager.h',
'libGLESv2/ResourceManager.h',
'libGLESv2/Shader.cpp',
'libGLESv2/Shader.cpp',
...
...
src/libEGL/Display.cpp
View file @
e4733d7e
...
@@ -212,9 +212,6 @@ bool Display::initialize()
...
@@ -212,9 +212,6 @@ bool Display::initialize()
initExtensionString
();
initExtensionString
();
mVertexShaderCache
.
initialize
(
device
);
mPixelShaderCache
.
initialize
(
device
);
return
true
;
return
true
;
}
}
...
@@ -230,9 +227,6 @@ void Display::terminate()
...
@@ -230,9 +227,6 @@ void Display::terminate()
destroyContext
(
*
mContextSet
.
begin
());
destroyContext
(
*
mContextSet
.
begin
());
}
}
mVertexShaderCache
.
clear
();
mPixelShaderCache
.
clear
();
glDestroyRenderer
(
mRenderer
);
glDestroyRenderer
(
mRenderer
);
mRenderer
=
NULL
;
mRenderer
=
NULL
;
}
}
...
@@ -497,9 +491,6 @@ bool Display::restoreLostDevice()
...
@@ -497,9 +491,6 @@ bool Display::restoreLostDevice()
(
*
surface
)
->
release
();
(
*
surface
)
->
release
();
}
}
mVertexShaderCache
.
clear
();
mPixelShaderCache
.
clear
();
if
(
!
mRenderer
->
resetDevice
())
if
(
!
mRenderer
->
resetDevice
())
{
{
return
error
(
EGL_BAD_ALLOC
,
false
);
return
error
(
EGL_BAD_ALLOC
,
false
);
...
@@ -622,15 +613,5 @@ const char *Display::getExtensionString() const
...
@@ -622,15 +613,5 @@ const char *Display::getExtensionString() const
return
mExtensionString
.
c_str
();
return
mExtensionString
.
c_str
();
}
}
IDirect3DVertexShader9
*
Display
::
createVertexShader
(
const
DWORD
*
function
,
size_t
length
)
{
return
mVertexShaderCache
.
create
(
function
,
length
);
}
IDirect3DPixelShader9
*
Display
::
createPixelShader
(
const
DWORD
*
function
,
size_t
length
)
{
return
mPixelShaderCache
.
create
(
function
,
length
);
}
}
}
src/libEGL/Display.h
View file @
e4733d7e
...
@@ -24,7 +24,6 @@
...
@@ -24,7 +24,6 @@
#include "libGLESv2/renderer/Renderer.h"
#include "libGLESv2/renderer/Renderer.h"
#include "libEGL/Config.h"
#include "libEGL/Config.h"
#include "libEGL/ShaderCache.h"
#include "libEGL/Surface.h"
#include "libEGL/Surface.h"
namespace
egl
namespace
egl
...
@@ -64,9 +63,6 @@ class Display
...
@@ -64,9 +63,6 @@ class Display
const
char
*
getExtensionString
()
const
;
const
char
*
getExtensionString
()
const
;
virtual
IDirect3DVertexShader9
*
createVertexShader
(
const
DWORD
*
function
,
size_t
length
);
virtual
IDirect3DPixelShader9
*
createPixelShader
(
const
DWORD
*
function
,
size_t
length
);
private
:
private
:
DISALLOW_COPY_AND_ASSIGN
(
Display
);
DISALLOW_COPY_AND_ASSIGN
(
Display
);
...
@@ -77,9 +73,6 @@ class Display
...
@@ -77,9 +73,6 @@ class Display
EGLNativeDisplayType
mDisplayId
;
EGLNativeDisplayType
mDisplayId
;
const
HDC
mDc
;
const
HDC
mDc
;
VertexShaderCache
mVertexShaderCache
;
PixelShaderCache
mPixelShaderCache
;
EGLint
mMaxSwapInterval
;
EGLint
mMaxSwapInterval
;
EGLint
mMinSwapInterval
;
EGLint
mMinSwapInterval
;
bool
mSoftwareDevice
;
bool
mSoftwareDevice
;
...
...
src/libGLESv2/Blit.cpp
View file @
e4733d7e
...
@@ -42,8 +42,8 @@ const size_t g_shaderSize[] =
...
@@ -42,8 +42,8 @@ const size_t g_shaderSize[] =
namespace
gl
namespace
gl
{
{
Blit
::
Blit
(
Context
*
context
)
Blit
::
Blit
(
renderer
::
Renderer
*
renderer
)
:
m
Context
(
context
),
mQuadVertexBuffer
(
NULL
),
mQuadVertexDeclaration
(
NULL
),
mSavedRenderTarget
(
NULL
),
mSavedDepthStencil
(
NULL
),
mSavedStateBlock
(
NULL
)
:
m
Renderer
(
renderer
),
mQuadVertexBuffer
(
NULL
),
mQuadVertexDeclaration
(
NULL
),
mSavedRenderTarget
(
NULL
),
mSavedDepthStencil
(
NULL
),
mSavedStateBlock
(
NULL
)
{
{
initGeometry
();
initGeometry
();
memset
(
mCompiledShaders
,
0
,
sizeof
(
mCompiledShaders
));
memset
(
mCompiledShaders
,
0
,
sizeof
(
mCompiledShaders
));
...
@@ -75,7 +75,7 @@ void Blit::initGeometry()
...
@@ -75,7 +75,7 @@ void Blit::initGeometry()
1
,
1
1
,
1
};
};
IDirect3DDevice9
*
device
=
getDevice
();
IDirect3DDevice9
*
device
=
mRenderer
->
getDevice
();
HRESULT
result
=
device
->
CreateVertexBuffer
(
sizeof
(
quad
),
D3DUSAGE_WRITEONLY
,
0
,
D3DPOOL_DEFAULT
,
&
mQuadVertexBuffer
,
NULL
);
HRESULT
result
=
device
->
CreateVertexBuffer
(
sizeof
(
quad
),
D3DUSAGE_WRITEONLY
,
0
,
D3DPOOL_DEFAULT
,
&
mQuadVertexBuffer
,
NULL
);
...
@@ -114,11 +114,10 @@ void Blit::initGeometry()
...
@@ -114,11 +114,10 @@ void Blit::initGeometry()
template
<
class
D3DShaderType
>
template
<
class
D3DShaderType
>
bool
Blit
::
setShader
(
ShaderId
source
,
const
char
*
profile
,
bool
Blit
::
setShader
(
ShaderId
source
,
const
char
*
profile
,
D3DShaderType
*
(
egl
::
Display
::*
createShader
)(
const
DWORD
*
,
size_t
length
),
D3DShaderType
*
(
renderer
::
Renderer
::*
createShader
)(
const
DWORD
*
,
size_t
length
),
HRESULT
(
WINAPI
IDirect3DDevice9
::*
setShader
)(
D3DShaderType
*
))
HRESULT
(
WINAPI
IDirect3DDevice9
::*
setShader
)(
D3DShaderType
*
))
{
{
egl
::
Display
*
display
=
getDisplay
();
IDirect3DDevice9
*
device
=
mRenderer
->
getDevice
();
// D3D9_REPLACE
IDirect3DDevice9
*
device
=
display
->
getRenderer
()
->
getDevice
();
// D3D9_REPLACE
D3DShaderType
*
shader
;
D3DShaderType
*
shader
;
...
@@ -131,7 +130,7 @@ bool Blit::setShader(ShaderId source, const char *profile,
...
@@ -131,7 +130,7 @@ bool Blit::setShader(ShaderId source, const char *profile,
const
BYTE
*
shaderCode
=
g_shaderCode
[
source
];
const
BYTE
*
shaderCode
=
g_shaderCode
[
source
];
size_t
shaderSize
=
g_shaderSize
[
source
];
size_t
shaderSize
=
g_shaderSize
[
source
];
shader
=
(
display
->*
createShader
)(
reinterpret_cast
<
const
DWORD
*>
(
shaderCode
),
shaderSize
);
shader
=
(
mRenderer
->*
createShader
)(
reinterpret_cast
<
const
DWORD
*>
(
shaderCode
),
shaderSize
);
if
(
!
shader
)
if
(
!
shader
)
{
{
ERR
(
"Failed to create shader for blit operation"
);
ERR
(
"Failed to create shader for blit operation"
);
...
@@ -154,12 +153,12 @@ bool Blit::setShader(ShaderId source, const char *profile,
...
@@ -154,12 +153,12 @@ bool Blit::setShader(ShaderId source, const char *profile,
bool
Blit
::
setVertexShader
(
ShaderId
shader
)
bool
Blit
::
setVertexShader
(
ShaderId
shader
)
{
{
return
setShader
<
IDirect3DVertexShader9
>
(
shader
,
"vs_2_0"
,
&
egl
::
Display
::
createVertexShader
,
&
IDirect3DDevice9
::
SetVertexShader
);
return
setShader
<
IDirect3DVertexShader9
>
(
shader
,
"vs_2_0"
,
&
renderer
::
Renderer
::
createVertexShader
,
&
IDirect3DDevice9
::
SetVertexShader
);
}
}
bool
Blit
::
setPixelShader
(
ShaderId
shader
)
bool
Blit
::
setPixelShader
(
ShaderId
shader
)
{
{
return
setShader
<
IDirect3DPixelShader9
>
(
shader
,
"ps_2_0"
,
&
egl
::
Display
::
createPixelShader
,
&
IDirect3DDevice9
::
SetPixelShader
);
return
setShader
<
IDirect3DPixelShader9
>
(
shader
,
"ps_2_0"
,
&
renderer
::
Renderer
::
createPixelShader
,
&
IDirect3DDevice9
::
SetPixelShader
);
}
}
RECT
Blit
::
getSurfaceRect
(
IDirect3DSurface9
*
surface
)
const
RECT
Blit
::
getSurfaceRect
(
IDirect3DSurface9
*
surface
)
const
...
@@ -185,7 +184,7 @@ bool Blit::boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest)
...
@@ -185,7 +184,7 @@ bool Blit::boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest)
}
}
// D3D9_REPLACE
// D3D9_REPLACE
IDirect3DDevice9
*
device
=
getDevice
();
IDirect3DDevice9
*
device
=
mRenderer
->
getDevice
();
saveState
();
saveState
();
...
@@ -213,7 +212,7 @@ bool Blit::boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest)
...
@@ -213,7 +212,7 @@ bool Blit::boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest)
bool
Blit
::
copy
(
IDirect3DSurface9
*
source
,
const
RECT
&
sourceRect
,
GLenum
destFormat
,
GLint
xoffset
,
GLint
yoffset
,
IDirect3DSurface9
*
dest
)
bool
Blit
::
copy
(
IDirect3DSurface9
*
source
,
const
RECT
&
sourceRect
,
GLenum
destFormat
,
GLint
xoffset
,
GLint
yoffset
,
IDirect3DSurface9
*
dest
)
{
{
// D3D9_REPLACE
// D3D9_REPLACE
IDirect3DDevice9
*
device
=
getDevice
();
IDirect3DDevice9
*
device
=
mRenderer
->
getDevice
();
D3DSURFACE_DESC
sourceDesc
;
D3DSURFACE_DESC
sourceDesc
;
D3DSURFACE_DESC
destDesc
;
D3DSURFACE_DESC
destDesc
;
...
@@ -249,7 +248,7 @@ bool Blit::formatConvert(IDirect3DSurface9 *source, const RECT &sourceRect, GLen
...
@@ -249,7 +248,7 @@ bool Blit::formatConvert(IDirect3DSurface9 *source, const RECT &sourceRect, GLen
}
}
// D3D9_REPLACE
// D3D9_REPLACE
IDirect3DDevice9
*
device
=
getDevice
();
IDirect3DDevice9
*
device
=
mRenderer
->
getDevice
();
saveState
();
saveState
();
...
@@ -329,7 +328,7 @@ bool Blit::setFormatConvertShaders(GLenum destFormat)
...
@@ -329,7 +328,7 @@ bool Blit::setFormatConvertShaders(GLenum destFormat)
break
;
break
;
}
}
getDevice
()
->
SetPixelShaderConstantF
(
0
,
psConst0
,
1
);
mRenderer
->
getDevice
()
->
SetPixelShaderConstantF
(
0
,
psConst0
,
1
);
// D3D9_REPLACE
return
true
;
return
true
;
}
}
...
@@ -342,9 +341,7 @@ IDirect3DTexture9 *Blit::copySurfaceToTexture(IDirect3DSurface9 *surface, const
...
@@ -342,9 +341,7 @@ IDirect3DTexture9 *Blit::copySurfaceToTexture(IDirect3DSurface9 *surface, const
return
NULL
;
return
NULL
;
}
}
egl
::
Display
*
display
=
getDisplay
();
IDirect3DDevice9
*
device
=
mRenderer
->
getDevice
();
// D3D9_REPLACE
renderer
::
Renderer
*
renderer
=
display
->
getRenderer
();
IDirect3DDevice9
*
device
=
renderer
->
getDevice
();
// D3D9_REPLACE
D3DSURFACE_DESC
sourceDesc
;
D3DSURFACE_DESC
sourceDesc
;
surface
->
GetDesc
(
&
sourceDesc
);
surface
->
GetDesc
(
&
sourceDesc
);
...
@@ -369,7 +366,7 @@ IDirect3DTexture9 *Blit::copySurfaceToTexture(IDirect3DSurface9 *surface, const
...
@@ -369,7 +366,7 @@ IDirect3DTexture9 *Blit::copySurfaceToTexture(IDirect3DSurface9 *surface, const
return
error
(
GL_OUT_OF_MEMORY
,
(
IDirect3DTexture9
*
)
NULL
);
return
error
(
GL_OUT_OF_MEMORY
,
(
IDirect3DTexture9
*
)
NULL
);
}
}
r
enderer
->
endScene
();
mR
enderer
->
endScene
();
result
=
device
->
StretchRect
(
surface
,
&
sourceRect
,
textureSurface
,
NULL
,
D3DTEXF_NONE
);
result
=
device
->
StretchRect
(
surface
,
&
sourceRect
,
textureSurface
,
NULL
,
D3DTEXF_NONE
);
textureSurface
->
Release
();
textureSurface
->
Release
();
...
@@ -386,7 +383,7 @@ IDirect3DTexture9 *Blit::copySurfaceToTexture(IDirect3DSurface9 *surface, const
...
@@ -386,7 +383,7 @@ IDirect3DTexture9 *Blit::copySurfaceToTexture(IDirect3DSurface9 *surface, const
void
Blit
::
setViewport
(
const
RECT
&
sourceRect
,
GLint
xoffset
,
GLint
yoffset
)
void
Blit
::
setViewport
(
const
RECT
&
sourceRect
,
GLint
xoffset
,
GLint
yoffset
)
{
{
IDirect3DDevice9
*
device
=
getDevice
();
// D3D9_REPLACE
IDirect3DDevice9
*
device
=
mRenderer
->
getDevice
();
// D3D9_REPLACE
D3DVIEWPORT9
vp
;
D3DVIEWPORT9
vp
;
vp
.
X
=
xoffset
;
vp
.
X
=
xoffset
;
...
@@ -404,7 +401,7 @@ void Blit::setViewport(const RECT &sourceRect, GLint xoffset, GLint yoffset)
...
@@ -404,7 +401,7 @@ void Blit::setViewport(const RECT &sourceRect, GLint xoffset, GLint yoffset)
// D3D9_REPLACE
// D3D9_REPLACE
void
Blit
::
setCommonBlitState
()
void
Blit
::
setCommonBlitState
()
{
{
IDirect3DDevice9
*
device
=
getDevice
();
IDirect3DDevice9
*
device
=
mRenderer
->
getDevice
();
device
->
SetDepthStencilSurface
(
NULL
);
device
->
SetDepthStencilSurface
(
NULL
);
...
@@ -435,21 +432,19 @@ void Blit::setCommonBlitState()
...
@@ -435,21 +432,19 @@ void Blit::setCommonBlitState()
// D3D9_REPLACE
// D3D9_REPLACE
void
Blit
::
render
()
void
Blit
::
render
()
{
{
egl
::
Display
*
display
=
getDisplay
();
IDirect3DDevice9
*
device
=
mRenderer
->
getDevice
();
renderer
::
Renderer
*
renderer
=
display
->
getRenderer
();
IDirect3DDevice9
*
device
=
renderer
->
getDevice
();
HRESULT
hr
=
device
->
SetStreamSource
(
0
,
mQuadVertexBuffer
,
0
,
2
*
sizeof
(
float
));
HRESULT
hr
=
device
->
SetStreamSource
(
0
,
mQuadVertexBuffer
,
0
,
2
*
sizeof
(
float
));
hr
=
device
->
SetVertexDeclaration
(
mQuadVertexDeclaration
);
hr
=
device
->
SetVertexDeclaration
(
mQuadVertexDeclaration
);
r
enderer
->
startScene
();
mR
enderer
->
startScene
();
hr
=
device
->
DrawPrimitive
(
D3DPT_TRIANGLESTRIP
,
0
,
2
);
hr
=
device
->
DrawPrimitive
(
D3DPT_TRIANGLESTRIP
,
0
,
2
);
}
}
// D3D9_REPLACE
// D3D9_REPLACE
void
Blit
::
saveState
()
void
Blit
::
saveState
()
{
{
IDirect3DDevice9
*
device
=
getDevice
();
IDirect3DDevice9
*
device
=
mRenderer
->
getDevice
();
HRESULT
hr
;
HRESULT
hr
;
...
@@ -502,7 +497,7 @@ void Blit::saveState()
...
@@ -502,7 +497,7 @@ void Blit::saveState()
// D3D9_REPLACE
// D3D9_REPLACE
void
Blit
::
restoreState
()
void
Blit
::
restoreState
()
{
{
IDirect3DDevice9
*
device
=
getDevice
();
IDirect3DDevice9
*
device
=
mRenderer
->
getDevice
();
device
->
SetDepthStencilSurface
(
mSavedDepthStencil
);
device
->
SetDepthStencilSurface
(
mSavedDepthStencil
);
if
(
mSavedDepthStencil
!=
NULL
)
if
(
mSavedDepthStencil
!=
NULL
)
...
...
src/libGLESv2/Blit.h
View file @
e4733d7e
...
@@ -27,7 +27,7 @@ class Context;
...
@@ -27,7 +27,7 @@ class Context;
class
Blit
class
Blit
{
{
public
:
public
:
explicit
Blit
(
Context
*
context
);
explicit
Blit
(
renderer
::
Renderer
*
renderer
);
~
Blit
();
~
Blit
();
// Copy from source surface to dest surface.
// Copy from source surface to dest surface.
...
@@ -44,7 +44,7 @@ class Blit
...
@@ -44,7 +44,7 @@ class Blit
bool
boxFilter
(
IDirect3DSurface9
*
source
,
IDirect3DSurface9
*
dest
);
bool
boxFilter
(
IDirect3DSurface9
*
source
,
IDirect3DSurface9
*
dest
);
private
:
private
:
Context
*
mContext
;
renderer
::
Renderer
*
mRenderer
;
IDirect3DVertexBuffer9
*
mQuadVertexBuffer
;
IDirect3DVertexBuffer9
*
mQuadVertexBuffer
;
IDirect3DVertexDeclaration9
*
mQuadVertexDeclaration
;
IDirect3DVertexDeclaration9
*
mQuadVertexDeclaration
;
...
@@ -74,7 +74,7 @@ class Blit
...
@@ -74,7 +74,7 @@ class Blit
template
<
class
D3DShaderType
>
template
<
class
D3DShaderType
>
bool
setShader
(
ShaderId
source
,
const
char
*
profile
,
bool
setShader
(
ShaderId
source
,
const
char
*
profile
,
D3DShaderType
*
(
egl
::
Display
::*
createShader
)(
const
DWORD
*
,
size_t
length
),
D3DShaderType
*
(
renderer
::
Renderer
::*
createShader
)(
const
DWORD
*
,
size_t
length
),
HRESULT
(
WINAPI
IDirect3DDevice9
::*
setShader
)(
D3DShaderType
*
));
HRESULT
(
WINAPI
IDirect3DDevice9
::*
setShader
)(
D3DShaderType
*
));
bool
setVertexShader
(
ShaderId
shader
);
bool
setVertexShader
(
ShaderId
shader
);
...
...
src/libGLESv2/Context.cpp
View file @
e4733d7e
...
@@ -264,7 +264,7 @@ void Context::makeCurrent(egl::Display *display, egl::Surface *surface)
...
@@ -264,7 +264,7 @@ void Context::makeCurrent(egl::Display *display, egl::Surface *surface)
mVertexDataManager
=
new
VertexDataManager
(
this
,
mDevice
);
mVertexDataManager
=
new
VertexDataManager
(
this
,
mDevice
);
mIndexDataManager
=
new
IndexDataManager
(
this
,
mDevice
);
mIndexDataManager
=
new
IndexDataManager
(
this
,
mDevice
);
mBlit
=
new
Blit
(
this
);
mBlit
=
new
Blit
(
mRenderer
);
mSupportsShaderModel3
=
mDeviceCaps
.
PixelShaderVersion
>=
D3DPS_VERSION
(
3
,
0
);
mSupportsShaderModel3
=
mDeviceCaps
.
PixelShaderVersion
>=
D3DPS_VERSION
(
3
,
0
);
mMaximumPointSize
=
mDeviceCaps
.
MaxPointSize
;
mMaximumPointSize
=
mDeviceCaps
.
MaxPointSize
;
...
...
src/libGLESv2/ProgramBinary.cpp
View file @
e4733d7e
...
@@ -64,7 +64,8 @@ unsigned int ProgramBinary::mCurrentSerial = 1;
...
@@ -64,7 +64,8 @@ unsigned int ProgramBinary::mCurrentSerial = 1;
ProgramBinary
::
ProgramBinary
()
:
RefCountObject
(
0
),
mSerial
(
issueSerial
())
ProgramBinary
::
ProgramBinary
()
:
RefCountObject
(
0
),
mSerial
(
issueSerial
())
{
{
mDevice
=
getDevice
();
// D3D9_REPLACE
mRenderer
=
getDisplay
()
->
getRenderer
();
mDevice
=
mRenderer
->
getDevice
();
// D3D9_REPLACE
mPixelExecutable
=
NULL
;
mPixelExecutable
=
NULL
;
mVertexExecutable
=
NULL
;
mVertexExecutable
=
NULL
;
...
@@ -1746,7 +1747,7 @@ bool ProgramBinary::load(InfoLog &infoLog, const void *binary, GLsizei length)
...
@@ -1746,7 +1747,7 @@ bool ProgramBinary::load(InfoLog &infoLog, const void *binary, GLsizei length)
ptr
+=
sizeof
(
GUID
);
ptr
+=
sizeof
(
GUID
);
// D3D9_REPLACE
// D3D9_REPLACE
D3DADAPTER_IDENTIFIER9
*
currentIdentifier
=
getDisplay
()
->
getRenderer
()
->
getAdapterIdentifier
();
D3DADAPTER_IDENTIFIER9
*
currentIdentifier
=
mRenderer
->
getAdapterIdentifier
();
if
(
memcmp
(
&
currentIdentifier
->
DeviceIdentifier
,
binaryIdentifier
,
sizeof
(
GUID
))
!=
0
)
if
(
memcmp
(
&
currentIdentifier
->
DeviceIdentifier
,
binaryIdentifier
,
sizeof
(
GUID
))
!=
0
)
{
{
infoLog
.
append
(
"Invalid program binary."
);
infoLog
.
append
(
"Invalid program binary."
);
...
@@ -1759,14 +1760,14 @@ bool ProgramBinary::load(InfoLog &infoLog, const void *binary, GLsizei length)
...
@@ -1759,14 +1760,14 @@ bool ProgramBinary::load(InfoLog &infoLog, const void *binary, GLsizei length)
const
char
*
vertexShaderFunction
=
ptr
;
const
char
*
vertexShaderFunction
=
ptr
;
ptr
+=
vertexShaderSize
;
ptr
+=
vertexShaderSize
;
mPixelExecutable
=
getDisplay
()
->
createPixelShader
(
reinterpret_cast
<
const
DWORD
*>
(
pixelShaderFunction
),
pixelShaderSize
);
mPixelExecutable
=
mRenderer
->
createPixelShader
(
reinterpret_cast
<
const
DWORD
*>
(
pixelShaderFunction
),
pixelShaderSize
);
if
(
!
mPixelExecutable
)
if
(
!
mPixelExecutable
)
{
{
infoLog
.
append
(
"Could not create pixel shader."
);
infoLog
.
append
(
"Could not create pixel shader."
);
return
false
;
return
false
;
}
}
mVertexExecutable
=
getDisplay
()
->
createVertexShader
(
reinterpret_cast
<
const
DWORD
*>
(
vertexShaderFunction
),
vertexShaderSize
);
mVertexExecutable
=
mRenderer
->
createVertexShader
(
reinterpret_cast
<
const
DWORD
*>
(
vertexShaderFunction
),
vertexShaderSize
);
if
(
!
mVertexExecutable
)
if
(
!
mVertexExecutable
)
{
{
infoLog
.
append
(
"Could not create vertex shader."
);
infoLog
.
append
(
"Could not create vertex shader."
);
...
@@ -1853,7 +1854,7 @@ bool ProgramBinary::save(void* binary, GLsizei bufSize, GLsizei *length)
...
@@ -1853,7 +1854,7 @@ bool ProgramBinary::save(void* binary, GLsizei bufSize, GLsizei *length)
stream
.
write
(
vertexShaderSize
);
stream
.
write
(
vertexShaderSize
);
// D3D9_REPLACE
// D3D9_REPLACE
D3DADAPTER_IDENTIFIER9
*
identifier
=
getDisplay
()
->
getRenderer
()
->
getAdapterIdentifier
();
D3DADAPTER_IDENTIFIER9
*
identifier
=
mRenderer
->
getAdapterIdentifier
();
GLsizei
streamLength
=
stream
.
length
();
GLsizei
streamLength
=
stream
.
length
();
const
void
*
streamData
=
stream
.
data
();
const
void
*
streamData
=
stream
.
data
();
...
@@ -1940,13 +1941,13 @@ bool ProgramBinary::link(InfoLog &infoLog, const AttributeBindings &attributeBin
...
@@ -1940,13 +1941,13 @@ bool ProgramBinary::link(InfoLog &infoLog, const AttributeBindings &attributeBin
if
(
vertexBinary
&&
pixelBinary
)
if
(
vertexBinary
&&
pixelBinary
)
{
{
mVertexExecutable
=
getDisplay
()
->
createVertexShader
((
DWORD
*
)
vertexBinary
->
GetBufferPointer
(),
vertexBinary
->
GetBufferSize
());
mVertexExecutable
=
mRenderer
->
createVertexShader
((
DWORD
*
)
vertexBinary
->
GetBufferPointer
(),
vertexBinary
->
GetBufferSize
());
if
(
!
mVertexExecutable
)
if
(
!
mVertexExecutable
)
{
{
return
error
(
GL_OUT_OF_MEMORY
,
false
);
return
error
(
GL_OUT_OF_MEMORY
,
false
);
}
}
mPixelExecutable
=
getDisplay
()
->
createPixelShader
((
DWORD
*
)
pixelBinary
->
GetBufferPointer
(),
pixelBinary
->
GetBufferSize
());
mPixelExecutable
=
mRenderer
->
createPixelShader
((
DWORD
*
)
pixelBinary
->
GetBufferPointer
(),
pixelBinary
->
GetBufferSize
());
if
(
!
mPixelExecutable
)
if
(
!
mPixelExecutable
)
{
{
mVertexExecutable
->
Release
();
mVertexExecutable
->
Release
();
...
...
src/libGLESv2/ProgramBinary.h
View file @
e4733d7e
...
@@ -184,10 +184,11 @@ class ProgramBinary : public RefCountObject
...
@@ -184,10 +184,11 @@ class ProgramBinary : public RefCountObject
void
applyUniformniv
(
Uniform
*
targetUniform
,
GLsizei
count
,
const
Vector4
*
vector
);
void
applyUniformniv
(
Uniform
*
targetUniform
,
GLsizei
count
,
const
Vector4
*
vector
);
void
applyUniformnbv
(
Uniform
*
targetUniform
,
GLsizei
count
,
int
width
,
const
GLboolean
*
v
);
void
applyUniformnbv
(
Uniform
*
targetUniform
,
GLsizei
count
,
int
width
,
const
GLboolean
*
v
);
IDirect3DDevice9
*
mDevice
;
renderer
::
Renderer
*
mRenderer
;
IDirect3DDevice9
*
mDevice
;
// D3D9_REPLACE
IDirect3DPixelShader9
*
mPixelExecutable
;
IDirect3DPixelShader9
*
mPixelExecutable
;
// D3D9_REPLACE
IDirect3DVertexShader9
*
mVertexExecutable
;
IDirect3DVertexShader9
*
mVertexExecutable
;
// D3D9_REPLACE
// These are only used during linking.
// These are only used during linking.
D3DConstantTable
*
mConstantTablePS
;
D3DConstantTable
*
mConstantTablePS
;
...
...
src/libGLESv2/libGLESv2.vcxproj
View file @
e4733d7e
...
@@ -274,6 +274,7 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\"
...
@@ -274,6 +274,7 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\"
<ClInclude
Include=
"..\common\RefCountObject.h"
/>
<ClInclude
Include=
"..\common\RefCountObject.h"
/>
<ClInclude
Include=
"Renderbuffer.h"
/>
<ClInclude
Include=
"Renderbuffer.h"
/>
<ClInclude
Include=
"renderer\Renderer.h"
/>
<ClInclude
Include=
"renderer\Renderer.h"
/>
<ClInclude
Include=
"renderer\ShaderCache.h"
/>
<ClInclude
Include=
"resource.h"
/>
<ClInclude
Include=
"resource.h"
/>
<ClInclude
Include=
"ResourceManager.h"
/>
<ClInclude
Include=
"ResourceManager.h"
/>
<ClInclude
Include=
"Shader.h"
/>
<ClInclude
Include=
"Shader.h"
/>
...
...
src/libGLESv2/libGLESv2.vcxproj.filters
View file @
e4733d7e
...
@@ -169,6 +169,9 @@
...
@@ -169,6 +169,9 @@
<ClInclude
Include=
"renderer\Renderer.h"
>
<ClInclude
Include=
"renderer\Renderer.h"
>
<Filter>
Header Files
</Filter>
<Filter>
Header Files
</Filter>
</ClInclude>
</ClInclude>
<ClInclude
Include=
"renderer\ShaderCache.h"
>
<Filter>
Header Files
</Filter>
</ClInclude>
</ItemGroup>
</ItemGroup>
<ItemGroup>
<ItemGroup>
<None
Include=
"libGLESv2.def"
>
<None
Include=
"libGLESv2.def"
>
...
...
src/libGLESv2/renderer/Renderer.cpp
View file @
e4733d7e
...
@@ -199,6 +199,9 @@ EGLint Renderer::initialize()
...
@@ -199,6 +199,9 @@ EGLint Renderer::initialize()
ASSERT
(
SUCCEEDED
(
result
));
ASSERT
(
SUCCEEDED
(
result
));
}
}
mVertexShaderCache
.
initialize
(
mDevice
);
mPixelShaderCache
.
initialize
(
mDevice
);
initializeDevice
();
initializeDevice
();
return
EGL_SUCCESS
;
return
EGL_SUCCESS
;
...
@@ -344,6 +347,16 @@ void Renderer::freeEventQuery(IDirect3DQuery9* query)
...
@@ -344,6 +347,16 @@ void Renderer::freeEventQuery(IDirect3DQuery9* query)
}
}
}
}
IDirect3DVertexShader9
*
Renderer
::
createVertexShader
(
const
DWORD
*
function
,
size_t
length
)
{
return
mVertexShaderCache
.
create
(
function
,
length
);
}
IDirect3DPixelShader9
*
Renderer
::
createPixelShader
(
const
DWORD
*
function
,
size_t
length
)
{
return
mPixelShaderCache
.
create
(
function
,
length
);
}
void
Renderer
::
releaseDeviceResources
()
void
Renderer
::
releaseDeviceResources
()
{
{
while
(
!
mEventQueryPool
.
empty
())
while
(
!
mEventQueryPool
.
empty
())
...
@@ -351,6 +364,9 @@ void Renderer::releaseDeviceResources()
...
@@ -351,6 +364,9 @@ void Renderer::releaseDeviceResources()
mEventQueryPool
.
back
()
->
Release
();
mEventQueryPool
.
back
()
->
Release
();
mEventQueryPool
.
pop_back
();
mEventQueryPool
.
pop_back
();
}
}
mVertexShaderCache
.
clear
();
mPixelShaderCache
.
clear
();
}
}
...
...
src/libGLESv2/renderer/Renderer.h
View file @
e4733d7e
...
@@ -13,7 +13,6 @@
...
@@ -13,7 +13,6 @@
#include <set>
#include <set>
#include <vector>
#include <vector>
#include "common/angleutils.h"
#define GL_APICALL
#define GL_APICALL
#include <GLES2/gl2.h>
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
#include <GLES2/gl2ext.h>
...
@@ -22,6 +21,9 @@
...
@@ -22,6 +21,9 @@
#include <d3d9.h> // D3D9_REPLACE
#include <d3d9.h> // D3D9_REPLACE
#include "common/angleutils.h"
#include "libGLESv2/renderer/ShaderCache.h"
const
int
versionWindowsVista
=
MAKEWORD
(
0x00
,
0x06
);
const
int
versionWindowsVista
=
MAKEWORD
(
0x00
,
0x06
);
const
int
versionWindows7
=
MAKEWORD
(
0x01
,
0x06
);
const
int
versionWindows7
=
MAKEWORD
(
0x01
,
0x06
);
...
@@ -59,10 +61,10 @@ class Renderer
...
@@ -59,10 +61,10 @@ class Renderer
virtual
IDirect3DQuery9
*
allocateEventQuery
();
virtual
IDirect3DQuery9
*
allocateEventQuery
();
virtual
void
freeEventQuery
(
IDirect3DQuery9
*
query
);
virtual
void
freeEventQuery
(
IDirect3DQuery9
*
query
);
#if 0
// resource creation
// resource creation
virtual void *createVertexShader(const DWORD *function, size_t length);
virtual
IDirect3DVertexShader9
*
createVertexShader
(
const
DWORD
*
function
,
size_t
length
);
// D3D9_REPLACE
virtual void *createPixelShader(const DWORD *function, size_t length);
virtual
IDirect3DPixelShader9
*
createPixelShader
(
const
DWORD
*
function
,
size_t
length
);
// D3D9_REPLACE
#if 0
virtual void *createTexture2D();
virtual void *createTexture2D();
virtual void *createTextureCube();
virtual void *createTextureCube();
virtual void *createQuery();;
virtual void *createQuery();;
...
@@ -141,6 +143,8 @@ class Renderer
...
@@ -141,6 +143,8 @@ class Renderer
// A pool of event queries that are currently unused.
// A pool of event queries that are currently unused.
std
::
vector
<
IDirect3DQuery9
*>
mEventQueryPool
;
std
::
vector
<
IDirect3DQuery9
*>
mEventQueryPool
;
VertexShaderCache
mVertexShaderCache
;
PixelShaderCache
mPixelShaderCache
;
};
};
}
}
...
...
src/lib
EGL
/ShaderCache.h
→
src/lib
GLESv2/renderer
/ShaderCache.h
View file @
e4733d7e
...
@@ -4,11 +4,11 @@
...
@@ -4,11 +4,11 @@
// found in the LICENSE file.
// found in the LICENSE file.
//
//
//
Display.h: Defines egl
::ShaderCache, a cache of Direct3D shader objects
//
ShaderCache: Defines renderer
::ShaderCache, a cache of Direct3D shader objects
// keyed by their byte code.
// keyed by their byte code.
#ifndef LIB
EGL
_SHADER_CACHE_H_
#ifndef LIB
GLESV2_RENDERER
_SHADER_CACHE_H_
#define LIB
EGL
_SHADER_CACHE_H_
#define LIB
GLESV2_RENDERER
_SHADER_CACHE_H_
#include <d3d9.h>
#include <d3d9.h>
...
@@ -18,7 +18,9 @@
...
@@ -18,7 +18,9 @@
#include <unordered_map>
#include <unordered_map>
#endif
#endif
namespace
egl
#include "common/debug.h"
namespace
renderer
{
{
template
<
typename
ShaderObject
>
template
<
typename
ShaderObject
>
class
ShaderCache
class
ShaderCache
...
@@ -48,7 +50,7 @@ class ShaderCache
...
@@ -48,7 +50,7 @@ class ShaderCache
it
->
second
->
AddRef
();
it
->
second
->
AddRef
();
return
it
->
second
;
return
it
->
second
;
}
}
ShaderObject
*
shader
;
ShaderObject
*
shader
;
HRESULT
result
=
createShader
(
function
,
&
shader
);
HRESULT
result
=
createShader
(
function
,
&
shader
);
if
(
FAILED
(
result
))
if
(
FAILED
(
result
))
...
@@ -113,4 +115,4 @@ typedef ShaderCache<IDirect3DPixelShader9> PixelShaderCache;
...
@@ -113,4 +115,4 @@ typedef ShaderCache<IDirect3DPixelShader9> PixelShaderCache;
}
}
#endif // LIB
EGL
_SHADER_CACHE_H_
#endif // LIB
GLESV2_RENDERER
_SHADER_CACHE_H_
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment