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
4cfff5f3
Commit
4cfff5f3
authored
Oct 24, 2013
by
Jamie Madill
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Modify texture storage classes to store a base and max level, instead of a range of levels.
TRAC #23978 Signed-off-by: Geoff Lang Signed-off-by: Shannon Woods
parent
b16b8ed7
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
163 additions
and
141 deletions
+163
-141
Texture.cpp
src/libGLESv2/Texture.cpp
+29
-35
Renderer.h
src/libGLESv2/renderer/Renderer.h
+4
-4
TextureStorage.cpp
src/libGLESv2/renderer/TextureStorage.cpp
+21
-15
TextureStorage.h
src/libGLESv2/renderer/TextureStorage.h
+8
-6
Renderer11.cpp
src/libGLESv2/renderer/d3d11/Renderer11.cpp
+8
-8
Renderer11.h
src/libGLESv2/renderer/d3d11/Renderer11.h
+4
-4
TextureStorage11.cpp
src/libGLESv2/renderer/d3d11/TextureStorage11.cpp
+40
-34
TextureStorage11.h
src/libGLESv2/renderer/d3d11/TextureStorage11.h
+9
-7
Renderer9.cpp
src/libGLESv2/renderer/d3d9/Renderer9.cpp
+8
-8
Renderer9.h
src/libGLESv2/renderer/d3d9/Renderer9.h
+4
-4
TextureStorage9.cpp
src/libGLESv2/renderer/d3d9/TextureStorage9.cpp
+21
-12
TextureStorage9.h
src/libGLESv2/renderer/d3d9/TextureStorage9.h
+7
-4
No files found.
src/libGLESv2/Texture.cpp
View file @
4cfff5f3
...
@@ -331,7 +331,7 @@ bool Texture::isImmutable() const
...
@@ -331,7 +331,7 @@ bool Texture::isImmutable() const
int
Texture
::
immutableLevelCount
()
int
Texture
::
immutableLevelCount
()
{
{
return
(
mImmutable
?
getNativeTexture
()
->
getStorageInstance
()
->
levelCount
()
:
0
);
return
(
mImmutable
?
getNativeTexture
()
->
getStorageInstance
()
->
getMaxLevel
()
:
0
);
}
}
GLint
Texture
::
creationLevels
(
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
const
GLint
Texture
::
creationLevels
(
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
const
...
@@ -436,7 +436,7 @@ void Texture2D::redefineImage(GLint level, GLenum internalformat, GLsizei width,
...
@@ -436,7 +436,7 @@ void Texture2D::redefineImage(GLint level, GLenum internalformat, GLsizei width,
if
(
mTexStorage
)
if
(
mTexStorage
)
{
{
const
int
storageLevels
=
mTexStorage
->
levelCount
();
const
int
storageLevels
=
mTexStorage
->
getMaxLevel
();
if
((
level
>=
storageLevels
&&
storageLevels
!=
0
)
||
if
((
level
>=
storageLevels
&&
storageLevels
!=
0
)
||
width
!=
storageWidth
||
width
!=
storageWidth
||
...
@@ -659,7 +659,7 @@ void Texture2D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GL
...
@@ -659,7 +659,7 @@ void Texture2D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GL
mImmutable
=
true
;
mImmutable
=
true
;
setCompleteTexStorage
(
new
rx
::
TextureStorageInterface2D
(
mRenderer
,
levels
,
internalformat
,
IsRenderTargetUsage
(
mUsage
),
width
,
height
));
setCompleteTexStorage
(
new
rx
::
TextureStorageInterface2D
(
mRenderer
,
0
,
levels
,
internalformat
,
IsRenderTargetUsage
(
mUsage
),
width
,
height
));
}
}
void
Texture2D
::
setCompleteTexStorage
(
rx
::
TextureStorageInterface2D
*
newCompleteTexStorage
)
void
Texture2D
::
setCompleteTexStorage
(
rx
::
TextureStorageInterface2D
*
newCompleteTexStorage
)
...
@@ -669,7 +669,7 @@ void Texture2D::setCompleteTexStorage(rx::TextureStorageInterface2D *newComplete
...
@@ -669,7 +669,7 @@ void Texture2D::setCompleteTexStorage(rx::TextureStorageInterface2D *newComplete
if
(
mTexStorage
&&
mTexStorage
->
isManaged
())
if
(
mTexStorage
&&
mTexStorage
->
isManaged
())
{
{
for
(
int
level
=
0
;
level
<
mTexStorage
->
levelCount
();
level
++
)
for
(
int
level
=
0
;
level
<
mTexStorage
->
getMaxLevel
();
level
++
)
{
{
mImageArray
[
level
]
->
setManagedSurface
(
mTexStorage
,
level
);
mImageArray
[
level
]
->
setManagedSurface
(
mTexStorage
,
level
);
}
}
...
@@ -845,16 +845,14 @@ rx::TextureStorageInterface2D *Texture2D::createCompleteStorage(bool renderTarge
...
@@ -845,16 +845,14 @@ rx::TextureStorageInterface2D *Texture2D::createCompleteStorage(bool renderTarge
ASSERT
(
width
>
0
&&
height
>
0
);
ASSERT
(
width
>
0
&&
height
>
0
);
// use existing storage level count, when previously specified by TexStorage*D
// use existing storage level count, when previously specified by TexStorage*D
GLint
levels
=
(
mTexStorage
?
mTexStorage
->
levelCount
()
:
creationLevels
(
width
,
height
));
GLint
levels
=
(
mTexStorage
?
mTexStorage
->
getMaxLevel
()
:
creationLevels
(
width
,
height
));
return
new
rx
::
TextureStorageInterface2D
(
mRenderer
,
levels
,
getBaseLevelInternalFormat
(),
renderTarget
,
width
,
height
);
return
new
rx
::
TextureStorageInterface2D
(
mRenderer
,
0
,
levels
,
getBaseLevelInternalFormat
(),
renderTarget
,
width
,
height
);
}
}
void
Texture2D
::
updateStorage
()
void
Texture2D
::
updateStorage
()
{
{
int
storageLevels
=
levelCount
();
for
(
int
level
=
0
;
level
<
gl
::
IMPLEMENTATION_MAX_TEXTURE_LEVELS
;
level
++
)
for
(
int
level
=
0
;
level
<
storageLevels
;
level
++
)
{
{
if
(
isLevelComplete
(
level
))
if
(
isLevelComplete
(
level
))
{
{
...
@@ -994,7 +992,7 @@ rx::RenderTarget *Texture2D::getDepthSencil(GLint level)
...
@@ -994,7 +992,7 @@ rx::RenderTarget *Texture2D::getDepthSencil(GLint level)
bool
Texture2D
::
isValidLevel
(
int
level
)
const
bool
Texture2D
::
isValidLevel
(
int
level
)
const
{
{
return
(
mTexStorage
?
(
level
<
mTexStorage
->
levelCount
())
:
false
);
return
(
mTexStorage
?
(
level
>=
mTexStorage
->
getBaseLevel
()
&&
level
<
mTexStorage
->
getMaxLevel
())
:
false
);
}
}
TextureCubeMap
::
TextureCubeMap
(
rx
::
Renderer
*
renderer
,
GLuint
id
)
:
Texture
(
renderer
,
id
,
GL_TEXTURE_CUBE_MAP
)
TextureCubeMap
::
TextureCubeMap
(
rx
::
Renderer
*
renderer
,
GLuint
id
)
:
Texture
(
renderer
,
id
,
GL_TEXTURE_CUBE_MAP
)
...
@@ -1299,9 +1297,9 @@ rx::TextureStorageInterfaceCube *TextureCubeMap::createCompleteStorage(bool rend
...
@@ -1299,9 +1297,9 @@ rx::TextureStorageInterfaceCube *TextureCubeMap::createCompleteStorage(bool rend
ASSERT
(
size
>
0
);
ASSERT
(
size
>
0
);
// use existing storage level count, when previously specified by TexStorage*D
// use existing storage level count, when previously specified by TexStorage*D
GLint
levels
=
(
mTexStorage
?
mTexStorage
->
levelCount
()
:
creationLevels
(
size
));
GLint
levels
=
(
mTexStorage
?
mTexStorage
->
getMaxLevel
()
:
creationLevels
(
size
));
return
new
rx
::
TextureStorageInterfaceCube
(
mRenderer
,
levels
,
getBaseLevelInternalFormat
(),
renderTarget
,
size
);
return
new
rx
::
TextureStorageInterfaceCube
(
mRenderer
,
0
,
levels
,
getBaseLevelInternalFormat
(),
renderTarget
,
size
);
}
}
void
TextureCubeMap
::
setCompleteTexStorage
(
rx
::
TextureStorageInterfaceCube
*
newCompleteTexStorage
)
void
TextureCubeMap
::
setCompleteTexStorage
(
rx
::
TextureStorageInterfaceCube
*
newCompleteTexStorage
)
...
@@ -1311,9 +1309,11 @@ void TextureCubeMap::setCompleteTexStorage(rx::TextureStorageInterfaceCube *newC
...
@@ -1311,9 +1309,11 @@ void TextureCubeMap::setCompleteTexStorage(rx::TextureStorageInterfaceCube *newC
if
(
mTexStorage
&&
mTexStorage
->
isManaged
())
if
(
mTexStorage
&&
mTexStorage
->
isManaged
())
{
{
int
levels
=
mTexStorage
->
getMaxLevel
();
for
(
int
faceIndex
=
0
;
faceIndex
<
6
;
faceIndex
++
)
for
(
int
faceIndex
=
0
;
faceIndex
<
6
;
faceIndex
++
)
{
{
for
(
int
level
=
0
;
level
<
mTexStorage
->
levelCount
();
level
++
)
for
(
int
level
=
0
;
level
<
mTexStorage
->
getMaxLevel
();
level
++
)
{
{
mImageArray
[
faceIndex
][
level
]
->
setManagedSurface
(
mTexStorage
,
faceIndex
,
level
);
mImageArray
[
faceIndex
][
level
]
->
setManagedSurface
(
mTexStorage
,
faceIndex
,
level
);
}
}
...
@@ -1325,11 +1325,9 @@ void TextureCubeMap::setCompleteTexStorage(rx::TextureStorageInterfaceCube *newC
...
@@ -1325,11 +1325,9 @@ void TextureCubeMap::setCompleteTexStorage(rx::TextureStorageInterfaceCube *newC
void
TextureCubeMap
::
updateStorage
()
void
TextureCubeMap
::
updateStorage
()
{
{
int
storageLevels
=
levelCount
();
for
(
int
face
=
0
;
face
<
6
;
face
++
)
for
(
int
face
=
0
;
face
<
6
;
face
++
)
{
{
for
(
int
level
=
0
;
level
<
storageLevels
;
level
++
)
for
(
int
level
=
0
;
level
<
gl
::
IMPLEMENTATION_MAX_TEXTURE_LEVELS
;
level
++
)
{
{
if
(
isFaceLevelComplete
(
face
,
level
))
if
(
isFaceLevelComplete
(
face
,
level
))
{
{
...
@@ -1407,7 +1405,7 @@ void TextureCubeMap::redefineImage(int faceIndex, GLint level, GLenum internalfo
...
@@ -1407,7 +1405,7 @@ void TextureCubeMap::redefineImage(int faceIndex, GLint level, GLenum internalfo
if
(
mTexStorage
)
if
(
mTexStorage
)
{
{
const
int
storageLevels
=
mTexStorage
->
levelCount
();
const
int
storageLevels
=
mTexStorage
->
getMaxLevel
();
if
((
level
>=
storageLevels
&&
storageLevels
!=
0
)
||
if
((
level
>=
storageLevels
&&
storageLevels
!=
0
)
||
width
!=
storageWidth
||
width
!=
storageWidth
||
...
@@ -1527,7 +1525,7 @@ void TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei size
...
@@ -1527,7 +1525,7 @@ void TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei size
mImmutable
=
true
;
mImmutable
=
true
;
setCompleteTexStorage
(
new
rx
::
TextureStorageInterfaceCube
(
mRenderer
,
levels
,
internalformat
,
IsRenderTargetUsage
(
mUsage
),
size
));
setCompleteTexStorage
(
new
rx
::
TextureStorageInterfaceCube
(
mRenderer
,
0
,
levels
,
internalformat
,
IsRenderTargetUsage
(
mUsage
),
size
));
}
}
void
TextureCubeMap
::
generateMipmaps
()
void
TextureCubeMap
::
generateMipmaps
()
...
@@ -1647,7 +1645,7 @@ rx::RenderTarget *TextureCubeMap::getDepthStencil(GLenum target, GLint level)
...
@@ -1647,7 +1645,7 @@ rx::RenderTarget *TextureCubeMap::getDepthStencil(GLenum target, GLint level)
bool
TextureCubeMap
::
isValidFaceLevel
(
int
faceIndex
,
int
level
)
const
bool
TextureCubeMap
::
isValidFaceLevel
(
int
faceIndex
,
int
level
)
const
{
{
return
(
mTexStorage
?
(
level
<
mTexStorage
->
levelCount
())
:
0
);
return
(
mTexStorage
?
(
level
>=
mTexStorage
->
getBaseLevel
()
&&
level
<
mTexStorage
->
getMaxLevel
())
:
0
);
}
}
Texture3D
::
Texture3D
(
rx
::
Renderer
*
renderer
,
GLuint
id
)
:
Texture
(
renderer
,
id
,
GL_TEXTURE_3D
)
Texture3D
::
Texture3D
(
rx
::
Renderer
*
renderer
,
GLuint
id
)
:
Texture
(
renderer
,
id
,
GL_TEXTURE_3D
)
...
@@ -1795,7 +1793,7 @@ void Texture3D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GL
...
@@ -1795,7 +1793,7 @@ void Texture3D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GL
mImmutable
=
true
;
mImmutable
=
true
;
setCompleteTexStorage
(
new
rx
::
TextureStorageInterface3D
(
mRenderer
,
levels
,
internalformat
,
IsRenderTargetUsage
(
mUsage
),
width
,
height
,
depth
));
setCompleteTexStorage
(
new
rx
::
TextureStorageInterface3D
(
mRenderer
,
0
,
levels
,
internalformat
,
IsRenderTargetUsage
(
mUsage
),
width
,
height
,
depth
));
}
}
void
Texture3D
::
generateMipmaps
()
void
Texture3D
::
generateMipmaps
()
...
@@ -1987,7 +1985,7 @@ unsigned int Texture3D::getRenderTargetSerial(GLint level, GLint layer)
...
@@ -1987,7 +1985,7 @@ unsigned int Texture3D::getRenderTargetSerial(GLint level, GLint layer)
bool
Texture3D
::
isValidLevel
(
int
level
)
const
bool
Texture3D
::
isValidLevel
(
int
level
)
const
{
{
return
(
mTexStorage
?
(
level
<
mTexStorage
->
levelCount
())
:
0
);
return
(
mTexStorage
?
(
level
>=
mTexStorage
->
getBaseLevel
()
&&
level
<
mTexStorage
->
getMaxLevel
())
:
0
);
}
}
void
Texture3D
::
initializeStorage
(
bool
renderTarget
)
void
Texture3D
::
initializeStorage
(
bool
renderTarget
)
...
@@ -2022,9 +2020,9 @@ rx::TextureStorageInterface3D *Texture3D::createCompleteStorage(bool renderTarge
...
@@ -2022,9 +2020,9 @@ rx::TextureStorageInterface3D *Texture3D::createCompleteStorage(bool renderTarge
ASSERT
(
width
>
0
&&
height
>
0
&&
depth
>
0
);
ASSERT
(
width
>
0
&&
height
>
0
&&
depth
>
0
);
// use existing storage level count, when previously specified by TexStorage*D
// use existing storage level count, when previously specified by TexStorage*D
GLint
levels
=
(
mTexStorage
?
mTexStorage
->
levelCount
()
:
creationLevels
(
width
,
height
,
depth
));
GLint
levels
=
(
mTexStorage
?
mTexStorage
->
getMaxLevel
()
:
creationLevels
(
width
,
height
,
depth
));
return
new
rx
::
TextureStorageInterface3D
(
mRenderer
,
levels
,
getBaseLevelInternalFormat
(),
renderTarget
,
width
,
height
,
depth
);
return
new
rx
::
TextureStorageInterface3D
(
mRenderer
,
0
,
levels
,
getBaseLevelInternalFormat
(),
renderTarget
,
width
,
height
,
depth
);
}
}
void
Texture3D
::
setCompleteTexStorage
(
rx
::
TextureStorageInterface3D
*
newCompleteTexStorage
)
void
Texture3D
::
setCompleteTexStorage
(
rx
::
TextureStorageInterface3D
*
newCompleteTexStorage
)
...
@@ -2039,9 +2037,7 @@ void Texture3D::setCompleteTexStorage(rx::TextureStorageInterface3D *newComplete
...
@@ -2039,9 +2037,7 @@ void Texture3D::setCompleteTexStorage(rx::TextureStorageInterface3D *newComplete
void
Texture3D
::
updateStorage
()
void
Texture3D
::
updateStorage
()
{
{
int
storageLevels
=
levelCount
();
for
(
int
level
=
0
;
level
<
gl
::
IMPLEMENTATION_MAX_TEXTURE_LEVELS
;
level
++
)
for
(
int
level
=
0
;
level
<
storageLevels
;
level
++
)
{
{
if
(
isLevelComplete
(
level
))
if
(
isLevelComplete
(
level
))
{
{
...
@@ -2154,7 +2150,7 @@ void Texture3D::redefineImage(GLint level, GLenum internalformat, GLsizei width,
...
@@ -2154,7 +2150,7 @@ void Texture3D::redefineImage(GLint level, GLenum internalformat, GLsizei width,
if
(
mTexStorage
)
if
(
mTexStorage
)
{
{
const
int
storageLevels
=
mTexStorage
->
levelCount
();
const
int
storageLevels
=
mTexStorage
->
getMaxLevel
();
if
((
level
>=
storageLevels
&&
storageLevels
!=
0
)
||
if
((
level
>=
storageLevels
&&
storageLevels
!=
0
)
||
width
!=
storageWidth
||
width
!=
storageWidth
||
...
@@ -2346,7 +2342,7 @@ void Texture2DArray::storage(GLsizei levels, GLenum internalformat, GLsizei widt
...
@@ -2346,7 +2342,7 @@ void Texture2DArray::storage(GLsizei levels, GLenum internalformat, GLsizei widt
}
}
mImmutable
=
true
;
mImmutable
=
true
;
setCompleteTexStorage
(
new
rx
::
TextureStorageInterface2DArray
(
mRenderer
,
levels
,
internalformat
,
IsRenderTargetUsage
(
mUsage
),
width
,
height
,
depth
));
setCompleteTexStorage
(
new
rx
::
TextureStorageInterface2DArray
(
mRenderer
,
0
,
levels
,
internalformat
,
IsRenderTargetUsage
(
mUsage
),
width
,
height
,
depth
));
}
}
void
Texture2DArray
::
generateMipmaps
()
void
Texture2DArray
::
generateMipmaps
()
...
@@ -2543,7 +2539,7 @@ unsigned int Texture2DArray::getRenderTargetSerial(GLint level, GLint layer)
...
@@ -2543,7 +2539,7 @@ unsigned int Texture2DArray::getRenderTargetSerial(GLint level, GLint layer)
bool
Texture2DArray
::
isValidLevel
(
int
level
)
const
bool
Texture2DArray
::
isValidLevel
(
int
level
)
const
{
{
return
(
mTexStorage
?
(
level
<
mTexStorage
->
levelCount
())
:
0
);
return
(
mTexStorage
?
(
level
>=
mTexStorage
->
getBaseLevel
()
&&
level
<
mTexStorage
->
getMaxLevel
())
:
0
);
}
}
void
Texture2DArray
::
initializeStorage
(
bool
renderTarget
)
void
Texture2DArray
::
initializeStorage
(
bool
renderTarget
)
...
@@ -2578,9 +2574,9 @@ rx::TextureStorageInterface2DArray *Texture2DArray::createCompleteStorage(bool r
...
@@ -2578,9 +2574,9 @@ rx::TextureStorageInterface2DArray *Texture2DArray::createCompleteStorage(bool r
ASSERT
(
width
>
0
&&
height
>
0
&&
depth
>
0
);
ASSERT
(
width
>
0
&&
height
>
0
&&
depth
>
0
);
// use existing storage level count, when previously specified by TexStorage*D
// use existing storage level count, when previously specified by TexStorage*D
GLint
levels
=
(
mTexStorage
?
mTexStorage
->
levelCount
()
:
creationLevels
(
width
,
height
));
GLint
levels
=
(
mTexStorage
?
mTexStorage
->
getMaxLevel
()
:
creationLevels
(
width
,
height
));
return
new
rx
::
TextureStorageInterface2DArray
(
mRenderer
,
levels
,
getBaseLevelInternalFormat
(),
renderTarget
,
width
,
height
,
depth
);
return
new
rx
::
TextureStorageInterface2DArray
(
mRenderer
,
0
,
levels
,
getBaseLevelInternalFormat
(),
renderTarget
,
width
,
height
,
depth
);
}
}
void
Texture2DArray
::
setCompleteTexStorage
(
rx
::
TextureStorageInterface2DArray
*
newCompleteTexStorage
)
void
Texture2DArray
::
setCompleteTexStorage
(
rx
::
TextureStorageInterface2DArray
*
newCompleteTexStorage
)
...
@@ -2595,9 +2591,7 @@ void Texture2DArray::setCompleteTexStorage(rx::TextureStorageInterface2DArray *n
...
@@ -2595,9 +2591,7 @@ void Texture2DArray::setCompleteTexStorage(rx::TextureStorageInterface2DArray *n
void
Texture2DArray
::
updateStorage
()
void
Texture2DArray
::
updateStorage
()
{
{
int
storageLevels
=
levelCount
();
for
(
int
level
=
0
;
level
<
gl
::
IMPLEMENTATION_MAX_TEXTURE_LEVELS
;
level
++
)
for
(
int
level
=
0
;
level
<
storageLevels
;
level
++
)
{
{
if
(
isLevelComplete
(
level
))
if
(
isLevelComplete
(
level
))
{
{
...
@@ -2712,7 +2706,7 @@ void Texture2DArray::redefineImage(GLint level, GLenum internalformat, GLsizei w
...
@@ -2712,7 +2706,7 @@ void Texture2DArray::redefineImage(GLint level, GLenum internalformat, GLsizei w
if
(
mTexStorage
)
if
(
mTexStorage
)
{
{
const
int
storageLevels
=
mTexStorage
->
levelCount
();
const
int
storageLevels
=
mTexStorage
->
getMaxLevel
();
if
((
level
>=
storageLevels
&&
storageLevels
!=
0
)
||
if
((
level
>=
storageLevels
&&
storageLevels
!=
0
)
||
width
!=
storageWidth
||
width
!=
storageWidth
||
...
...
src/libGLESv2/renderer/Renderer.h
View file @
4cfff5f3
...
@@ -242,10 +242,10 @@ class Renderer
...
@@ -242,10 +242,10 @@ class Renderer
virtual
Image
*
createImage
()
=
0
;
virtual
Image
*
createImage
()
=
0
;
virtual
void
generateMipmap
(
Image
*
dest
,
Image
*
source
)
=
0
;
virtual
void
generateMipmap
(
Image
*
dest
,
Image
*
source
)
=
0
;
virtual
TextureStorage
*
createTextureStorage2D
(
SwapChain
*
swapChain
)
=
0
;
virtual
TextureStorage
*
createTextureStorage2D
(
SwapChain
*
swapChain
)
=
0
;
virtual
TextureStorage
*
createTextureStorage2D
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
)
=
0
;
virtual
TextureStorage
*
createTextureStorage2D
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
)
=
0
;
virtual
TextureStorage
*
createTextureStorageCube
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
)
=
0
;
virtual
TextureStorage
*
createTextureStorageCube
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
)
=
0
;
virtual
TextureStorage
*
createTextureStorage3D
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
=
0
;
virtual
TextureStorage
*
createTextureStorage3D
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
=
0
;
virtual
TextureStorage
*
createTextureStorage2DArray
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
=
0
;
virtual
TextureStorage
*
createTextureStorage2DArray
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
=
0
;
// Buffer creation
// Buffer creation
virtual
VertexBuffer
*
createVertexBuffer
()
=
0
;
virtual
VertexBuffer
*
createVertexBuffer
()
=
0
;
...
...
src/libGLESv2/renderer/TextureStorage.cpp
View file @
4cfff5f3
...
@@ -57,13 +57,19 @@ int TextureStorageInterface::getLodOffset() const
...
@@ -57,13 +57,19 @@ int TextureStorageInterface::getLodOffset() const
return
mInstance
->
getLodOffset
();
return
mInstance
->
getLodOffset
();
}
}
int
TextureStorageInterface
::
levelCount
()
int
TextureStorageInterface
::
getBaseLevel
()
const
{
{
return
mInstance
->
levelCount
();
return
mInstance
->
getBaseLevel
();
}
}
static
unsigned
int
GetActualLevelCount
(
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
,
GLint
levelCount
)
int
TextureStorageInterface
::
getMaxLevel
()
const
{
{
return
mInstance
->
getMaxLevel
();
}
static
unsigned
int
GetActualLevelCount
(
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
,
int
baseLevel
,
int
maxLevel
)
{
int
levelCount
=
maxLevel
-
baseLevel
;
return
(
levelCount
<=
0
)
?
std
::
max
(
std
::
max
(
gl
::
log2
(
width
),
gl
::
log2
(
height
)),
gl
::
log2
(
depth
))
:
levelCount
;
return
(
levelCount
<=
0
)
?
std
::
max
(
std
::
max
(
gl
::
log2
(
width
),
gl
::
log2
(
height
)),
gl
::
log2
(
depth
))
:
levelCount
;
}
}
...
@@ -74,12 +80,12 @@ TextureStorageInterface2D::TextureStorageInterface2D(Renderer *renderer, SwapCha
...
@@ -74,12 +80,12 @@ TextureStorageInterface2D::TextureStorageInterface2D(Renderer *renderer, SwapCha
mInstance
=
renderer
->
createTextureStorage2D
(
swapchain
);
mInstance
=
renderer
->
createTextureStorage2D
(
swapchain
);
}
}
TextureStorageInterface2D
::
TextureStorageInterface2D
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
)
TextureStorageInterface2D
::
TextureStorageInterface2D
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
)
{
{
unsigned
int
actualLevels
=
GetActualLevelCount
(
width
,
height
,
0
,
levels
);
unsigned
int
actualLevels
=
GetActualLevelCount
(
width
,
height
,
0
,
baseLevel
,
maxLevel
);
mFirstRenderTargetSerial
=
gl
::
RenderbufferStorage
::
issueSerials
(
actualLevels
);
mFirstRenderTargetSerial
=
gl
::
RenderbufferStorage
::
issueSerials
(
actualLevels
);
mInstance
=
renderer
->
createTextureStorage2D
(
levels
,
internalformat
,
renderTarget
,
width
,
height
);
mInstance
=
renderer
->
createTextureStorage2D
(
baseLevel
,
maxLevel
,
internalformat
,
renderTarget
,
width
,
height
);
}
}
TextureStorageInterface2D
::~
TextureStorageInterface2D
()
TextureStorageInterface2D
::~
TextureStorageInterface2D
()
...
@@ -101,12 +107,12 @@ unsigned int TextureStorageInterface2D::getRenderTargetSerial(GLint level) const
...
@@ -101,12 +107,12 @@ unsigned int TextureStorageInterface2D::getRenderTargetSerial(GLint level) const
return
mFirstRenderTargetSerial
+
level
;
return
mFirstRenderTargetSerial
+
level
;
}
}
TextureStorageInterfaceCube
::
TextureStorageInterfaceCube
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
)
TextureStorageInterfaceCube
::
TextureStorageInterfaceCube
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
)
{
{
unsigned
int
actualLevels
=
GetActualLevelCount
(
size
,
size
,
0
,
levels
);
unsigned
int
actualLevels
=
GetActualLevelCount
(
size
,
size
,
0
,
baseLevel
,
maxLevel
);
mFirstRenderTargetSerial
=
gl
::
RenderbufferStorage
::
issueSerials
(
actualLevels
*
6
);
mFirstRenderTargetSerial
=
gl
::
RenderbufferStorage
::
issueSerials
(
actualLevels
*
6
);
mInstance
=
renderer
->
createTextureStorageCube
(
levels
,
internalformat
,
renderTarget
,
size
);
mInstance
=
renderer
->
createTextureStorageCube
(
baseLevel
,
maxLevel
,
internalformat
,
renderTarget
,
size
);
}
}
TextureStorageInterfaceCube
::~
TextureStorageInterfaceCube
()
TextureStorageInterfaceCube
::~
TextureStorageInterfaceCube
()
...
@@ -128,13 +134,13 @@ unsigned int TextureStorageInterfaceCube::getRenderTargetSerial(GLenum target, G
...
@@ -128,13 +134,13 @@ unsigned int TextureStorageInterfaceCube::getRenderTargetSerial(GLenum target, G
return
mFirstRenderTargetSerial
+
(
level
*
6
)
+
gl
::
TextureCubeMap
::
targetToIndex
(
target
);
return
mFirstRenderTargetSerial
+
(
level
*
6
)
+
gl
::
TextureCubeMap
::
targetToIndex
(
target
);
}
}
TextureStorageInterface3D
::
TextureStorageInterface3D
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
TextureStorageInterface3D
::
TextureStorageInterface3D
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
{
{
mLevels
=
GetActualLevelCount
(
width
,
height
,
depth
,
levels
);
mLevels
=
GetActualLevelCount
(
width
,
height
,
depth
,
baseLevel
,
maxLevel
);
mFirstRenderTargetSerial
=
gl
::
RenderbufferStorage
::
issueSerials
(
mLevels
*
depth
);
mFirstRenderTargetSerial
=
gl
::
RenderbufferStorage
::
issueSerials
(
mLevels
*
depth
);
mInstance
=
renderer
->
createTextureStorage3D
(
levels
,
internalformat
,
renderTarget
,
width
,
height
,
depth
);
mInstance
=
renderer
->
createTextureStorage3D
(
baseLevel
,
maxLevel
,
internalformat
,
renderTarget
,
width
,
height
,
depth
);
}
}
TextureStorageInterface3D
::~
TextureStorageInterface3D
()
TextureStorageInterface3D
::~
TextureStorageInterface3D
()
...
@@ -161,13 +167,13 @@ unsigned int TextureStorageInterface3D::getRenderTargetSerial(GLint level, GLint
...
@@ -161,13 +167,13 @@ unsigned int TextureStorageInterface3D::getRenderTargetSerial(GLint level, GLint
return
mFirstRenderTargetSerial
+
(
layer
*
mLevels
)
+
level
;
return
mFirstRenderTargetSerial
+
(
layer
*
mLevels
)
+
level
;
}
}
TextureStorageInterface2DArray
::
TextureStorageInterface2DArray
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
TextureStorageInterface2DArray
::
TextureStorageInterface2DArray
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
{
{
mLevels
=
GetActualLevelCount
(
width
,
height
,
0
,
levels
);
mLevels
=
GetActualLevelCount
(
width
,
height
,
0
,
baseLevel
,
maxLevel
);
mFirstRenderTargetSerial
=
gl
::
RenderbufferStorage
::
issueSerials
(
mLevels
*
depth
);
mFirstRenderTargetSerial
=
gl
::
RenderbufferStorage
::
issueSerials
(
mLevels
*
depth
);
mInstance
=
renderer
->
createTextureStorage2DArray
(
levels
,
internalformat
,
renderTarget
,
width
,
height
,
depth
);
mInstance
=
renderer
->
createTextureStorage2DArray
(
baseLevel
,
maxLevel
,
internalformat
,
renderTarget
,
width
,
height
,
depth
);
}
}
TextureStorageInterface2DArray
::~
TextureStorageInterface2DArray
()
TextureStorageInterface2DArray
::~
TextureStorageInterface2DArray
()
...
...
src/libGLESv2/renderer/TextureStorage.h
View file @
4cfff5f3
...
@@ -28,7 +28,8 @@ class TextureStorage
...
@@ -28,7 +28,8 @@ class TextureStorage
virtual
int
getLodOffset
()
const
=
0
;
virtual
int
getLodOffset
()
const
=
0
;
virtual
bool
isRenderTarget
()
const
=
0
;
virtual
bool
isRenderTarget
()
const
=
0
;
virtual
bool
isManaged
()
const
=
0
;
virtual
bool
isManaged
()
const
=
0
;
virtual
int
levelCount
()
=
0
;
virtual
int
getBaseLevel
()
const
=
0
;
virtual
int
getMaxLevel
()
const
=
0
;
virtual
RenderTarget
*
getRenderTarget
(
int
level
)
=
0
;
virtual
RenderTarget
*
getRenderTarget
(
int
level
)
=
0
;
virtual
RenderTarget
*
getRenderTargetFace
(
GLenum
faceTarget
,
int
level
)
=
0
;
virtual
RenderTarget
*
getRenderTargetFace
(
GLenum
faceTarget
,
int
level
)
=
0
;
...
@@ -54,7 +55,8 @@ class TextureStorageInterface
...
@@ -54,7 +55,8 @@ class TextureStorageInterface
virtual
int
getLodOffset
()
const
;
virtual
int
getLodOffset
()
const
;
virtual
bool
isRenderTarget
()
const
;
virtual
bool
isRenderTarget
()
const
;
virtual
bool
isManaged
()
const
;
virtual
bool
isManaged
()
const
;
virtual
int
levelCount
();
virtual
int
getBaseLevel
()
const
;
virtual
int
getMaxLevel
()
const
;
protected
:
protected
:
TextureStorage
*
mInstance
;
TextureStorage
*
mInstance
;
...
@@ -72,7 +74,7 @@ class TextureStorageInterface2D : public TextureStorageInterface
...
@@ -72,7 +74,7 @@ class TextureStorageInterface2D : public TextureStorageInterface
{
{
public
:
public
:
TextureStorageInterface2D
(
Renderer
*
renderer
,
SwapChain
*
swapchain
);
TextureStorageInterface2D
(
Renderer
*
renderer
,
SwapChain
*
swapchain
);
TextureStorageInterface2D
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
);
TextureStorageInterface2D
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
);
virtual
~
TextureStorageInterface2D
();
virtual
~
TextureStorageInterface2D
();
void
generateMipmap
(
int
level
);
void
generateMipmap
(
int
level
);
...
@@ -89,7 +91,7 @@ class TextureStorageInterface2D : public TextureStorageInterface
...
@@ -89,7 +91,7 @@ class TextureStorageInterface2D : public TextureStorageInterface
class
TextureStorageInterfaceCube
:
public
TextureStorageInterface
class
TextureStorageInterfaceCube
:
public
TextureStorageInterface
{
{
public
:
public
:
TextureStorageInterfaceCube
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
);
TextureStorageInterfaceCube
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
);
virtual
~
TextureStorageInterfaceCube
();
virtual
~
TextureStorageInterfaceCube
();
void
generateMipmap
(
int
faceIndex
,
int
level
);
void
generateMipmap
(
int
faceIndex
,
int
level
);
...
@@ -106,7 +108,7 @@ class TextureStorageInterfaceCube : public TextureStorageInterface
...
@@ -106,7 +108,7 @@ class TextureStorageInterfaceCube : public TextureStorageInterface
class
TextureStorageInterface3D
:
public
TextureStorageInterface
class
TextureStorageInterface3D
:
public
TextureStorageInterface
{
{
public
:
public
:
TextureStorageInterface3D
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
TextureStorageInterface3D
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
);
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
);
virtual
~
TextureStorageInterface3D
();
virtual
~
TextureStorageInterface3D
();
...
@@ -126,7 +128,7 @@ class TextureStorageInterface3D : public TextureStorageInterface
...
@@ -126,7 +128,7 @@ class TextureStorageInterface3D : public TextureStorageInterface
class
TextureStorageInterface2DArray
:
public
TextureStorageInterface
class
TextureStorageInterface2DArray
:
public
TextureStorageInterface
{
{
public
:
public
:
TextureStorageInterface2DArray
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
TextureStorageInterface2DArray
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
);
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
);
virtual
~
TextureStorageInterface2DArray
();
virtual
~
TextureStorageInterface2DArray
();
...
...
src/libGLESv2/renderer/d3d11/Renderer11.cpp
View file @
4cfff5f3
...
@@ -3004,24 +3004,24 @@ TextureStorage *Renderer11::createTextureStorage2D(SwapChain *swapChain)
...
@@ -3004,24 +3004,24 @@ TextureStorage *Renderer11::createTextureStorage2D(SwapChain *swapChain)
return
new
TextureStorage11_2D
(
this
,
swapChain11
);
return
new
TextureStorage11_2D
(
this
,
swapChain11
);
}
}
TextureStorage
*
Renderer11
::
createTextureStorage2D
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
)
TextureStorage
*
Renderer11
::
createTextureStorage2D
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
)
{
{
return
new
TextureStorage11_2D
(
this
,
levels
,
internalformat
,
renderTarget
,
width
,
height
);
return
new
TextureStorage11_2D
(
this
,
baseLevel
,
maxLevel
,
internalformat
,
renderTarget
,
width
,
height
);
}
}
TextureStorage
*
Renderer11
::
createTextureStorageCube
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
)
TextureStorage
*
Renderer11
::
createTextureStorageCube
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
)
{
{
return
new
TextureStorage11_Cube
(
this
,
levels
,
internalformat
,
renderTarget
,
size
);
return
new
TextureStorage11_Cube
(
this
,
baseLevel
,
maxLevel
,
internalformat
,
renderTarget
,
size
);
}
}
TextureStorage
*
Renderer11
::
createTextureStorage3D
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
TextureStorage
*
Renderer11
::
createTextureStorage3D
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
{
{
return
new
TextureStorage11_3D
(
this
,
levels
,
internalformat
,
renderTarget
,
width
,
height
,
depth
);
return
new
TextureStorage11_3D
(
this
,
baseLevel
,
maxLevel
,
internalformat
,
renderTarget
,
width
,
height
,
depth
);
}
}
TextureStorage
*
Renderer11
::
createTextureStorage2DArray
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
TextureStorage
*
Renderer11
::
createTextureStorage2DArray
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
{
{
return
new
TextureStorage11_2DArray
(
this
,
levels
,
internalformat
,
renderTarget
,
width
,
height
,
depth
);
return
new
TextureStorage11_2DArray
(
this
,
baseLevel
,
maxLevel
,
internalformat
,
renderTarget
,
width
,
height
,
depth
);
}
}
void
Renderer11
::
readTextureData
(
ID3D11Texture2D
*
texture
,
unsigned
int
subResource
,
const
gl
::
Rectangle
&
area
,
void
Renderer11
::
readTextureData
(
ID3D11Texture2D
*
texture
,
unsigned
int
subResource
,
const
gl
::
Rectangle
&
area
,
...
...
src/libGLESv2/renderer/d3d11/Renderer11.h
View file @
4cfff5f3
...
@@ -187,10 +187,10 @@ class Renderer11 : public Renderer
...
@@ -187,10 +187,10 @@ class Renderer11 : public Renderer
virtual
Image
*
createImage
();
virtual
Image
*
createImage
();
virtual
void
generateMipmap
(
Image
*
dest
,
Image
*
source
);
virtual
void
generateMipmap
(
Image
*
dest
,
Image
*
source
);
virtual
TextureStorage
*
createTextureStorage2D
(
SwapChain
*
swapChain
);
virtual
TextureStorage
*
createTextureStorage2D
(
SwapChain
*
swapChain
);
virtual
TextureStorage
*
createTextureStorage2D
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
);
virtual
TextureStorage
*
createTextureStorage2D
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
);
virtual
TextureStorage
*
createTextureStorageCube
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
);
virtual
TextureStorage
*
createTextureStorageCube
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
);
virtual
TextureStorage
*
createTextureStorage3D
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
);
virtual
TextureStorage
*
createTextureStorage3D
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
);
virtual
TextureStorage
*
createTextureStorage2DArray
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
);
virtual
TextureStorage
*
createTextureStorage2DArray
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
);
// Buffer creation
// Buffer creation
virtual
VertexBuffer
*
createVertexBuffer
();
virtual
VertexBuffer
*
createVertexBuffer
();
...
...
src/libGLESv2/renderer/d3d11/TextureStorage11.cpp
View file @
4cfff5f3
...
@@ -23,10 +23,11 @@
...
@@ -23,10 +23,11 @@
namespace
rx
namespace
rx
{
{
TextureStorage11
::
TextureStorage11
(
Renderer
*
renderer
,
UINT
bindFlags
)
TextureStorage11
::
TextureStorage11
(
Renderer
*
renderer
,
int
baseLevel
,
UINT
bindFlags
)
:
mBindFlags
(
bindFlags
),
:
mBindFlags
(
bindFlags
),
mLodOffset
(
0
),
mLodOffset
(
0
),
mMipLevels
(
0
),
mMipLevels
(
0
),
mBaseLevel
(
baseLevel
),
mTextureFormat
(
DXGI_FORMAT_UNKNOWN
),
mTextureFormat
(
DXGI_FORMAT_UNKNOWN
),
mShaderResourceFormat
(
DXGI_FORMAT_UNKNOWN
),
mShaderResourceFormat
(
DXGI_FORMAT_UNKNOWN
),
mRenderTargetFormat
(
DXGI_FORMAT_UNKNOWN
),
mRenderTargetFormat
(
DXGI_FORMAT_UNKNOWN
),
...
@@ -88,32 +89,37 @@ bool TextureStorage11::isManaged() const
...
@@ -88,32 +89,37 @@ bool TextureStorage11::isManaged() const
return
false
;
return
false
;
}
}
int
TextureStorage11
::
levelCount
()
int
TextureStorage11
::
getBaseLevel
()
const
{
return
mBaseLevel
;
}
int
TextureStorage11
::
getMaxLevel
()
const
{
{
int
levels
=
0
;
int
levels
=
0
;
if
(
getBaseTexture
())
if
(
getBaseTexture
())
{
{
levels
=
mMipLevels
-
getLodOffset
();
levels
=
mMipLevels
-
getLodOffset
();
}
}
return
levels
;
return
getBaseLevel
()
+
levels
;
}
}
int
TextureStorage11
::
getLevelWidth
(
int
mipLevel
)
const
int
TextureStorage11
::
getLevelWidth
(
int
mipLevel
)
const
{
{
return
std
::
max
((
static_cast
<
int
>
(
mTextureWidth
)
>>
mipLevel
),
1
);
return
std
::
max
((
static_cast
<
int
>
(
mTextureWidth
)
>>
(
mipLevel
-
mBaseLevel
)
),
1
);
}
}
int
TextureStorage11
::
getLevelHeight
(
int
mipLevel
)
const
int
TextureStorage11
::
getLevelHeight
(
int
mipLevel
)
const
{
{
return
std
::
max
((
static_cast
<
int
>
(
mTextureHeight
)
>>
mipLevel
),
1
);
return
std
::
max
((
static_cast
<
int
>
(
mTextureHeight
)
>>
(
mipLevel
-
mBaseLevel
)
),
1
);
}
}
int
TextureStorage11
::
getLevelDepth
(
int
mipLevel
)
const
int
TextureStorage11
::
getLevelDepth
(
int
mipLevel
)
const
{
{
return
std
::
max
((
static_cast
<
int
>
(
mTextureDepth
)
>>
mipLevel
),
1
);
return
std
::
max
((
static_cast
<
int
>
(
mTextureDepth
)
>>
(
mipLevel
-
mBaseLevel
)
),
1
);
}
}
UINT
TextureStorage11
::
getSubresourceIndex
(
int
mipLevel
,
int
layerTarget
)
UINT
TextureStorage11
::
getSubresourceIndex
(
int
mipLevel
,
int
layerTarget
)
const
{
{
UINT
index
=
0
;
UINT
index
=
0
;
if
(
getBaseTexture
())
if
(
getBaseTexture
())
...
@@ -201,7 +207,7 @@ void TextureStorage11::generateMipmapLayer(RenderTarget11 *source, RenderTarget1
...
@@ -201,7 +207,7 @@ void TextureStorage11::generateMipmapLayer(RenderTarget11 *source, RenderTarget1
}
}
TextureStorage11_2D
::
TextureStorage11_2D
(
Renderer
*
renderer
,
SwapChain11
*
swapchain
)
TextureStorage11_2D
::
TextureStorage11_2D
(
Renderer
*
renderer
,
SwapChain11
*
swapchain
)
:
TextureStorage11
(
renderer
,
D3D11_BIND_RENDER_TARGET
|
D3D11_BIND_SHADER_RESOURCE
)
:
TextureStorage11
(
renderer
,
0
,
D3D11_BIND_RENDER_TARGET
|
D3D11_BIND_SHADER_RESOURCE
)
{
{
mTexture
=
swapchain
->
getOffscreenTexture
();
mTexture
=
swapchain
->
getOffscreenTexture
();
mSRV
=
swapchain
->
getRenderTargetShaderResource
();
mSRV
=
swapchain
->
getRenderTargetShaderResource
();
...
@@ -232,8 +238,8 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch
...
@@ -232,8 +238,8 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch
mDepthStencilFormat
=
DXGI_FORMAT_UNKNOWN
;
mDepthStencilFormat
=
DXGI_FORMAT_UNKNOWN
;
}
}
TextureStorage11_2D
::
TextureStorage11_2D
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
)
TextureStorage11_2D
::
TextureStorage11_2D
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
)
:
TextureStorage11
(
renderer
,
GetTextureBindFlags
(
internalformat
,
renderer
->
getCurrentClientVersion
(),
renderTarget
))
:
TextureStorage11
(
renderer
,
baseLevel
,
GetTextureBindFlags
(
internalformat
,
renderer
->
getCurrentClientVersion
(),
renderTarget
))
{
{
mTexture
=
NULL
;
mTexture
=
NULL
;
for
(
unsigned
int
i
=
0
;
i
<
gl
::
IMPLEMENTATION_MAX_TEXTURE_LEVELS
;
i
++
)
for
(
unsigned
int
i
=
0
;
i
<
gl
::
IMPLEMENTATION_MAX_TEXTURE_LEVELS
;
i
++
)
...
@@ -260,7 +266,7 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, int levels, GLenum
...
@@ -260,7 +266,7 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, int levels, GLenum
D3D11_TEXTURE2D_DESC
desc
;
D3D11_TEXTURE2D_DESC
desc
;
desc
.
Width
=
width
;
// Compressed texture size constraints?
desc
.
Width
=
width
;
// Compressed texture size constraints?
desc
.
Height
=
height
;
desc
.
Height
=
height
;
desc
.
MipLevels
=
(
levels
>
0
)
?
levels
+
mLodOffset
:
0
;
desc
.
MipLevels
=
(
(
maxLevel
>
0
)
?
(
maxLevel
+
mLodOffset
-
baseLevel
)
:
0
)
;
desc
.
ArraySize
=
1
;
desc
.
ArraySize
=
1
;
desc
.
Format
=
mTextureFormat
;
desc
.
Format
=
mTextureFormat
;
desc
.
SampleDesc
.
Count
=
1
;
desc
.
SampleDesc
.
Count
=
1
;
...
@@ -319,7 +325,7 @@ ID3D11Resource *TextureStorage11_2D::getBaseTexture() const
...
@@ -319,7 +325,7 @@ ID3D11Resource *TextureStorage11_2D::getBaseTexture() const
RenderTarget
*
TextureStorage11_2D
::
getRenderTarget
(
int
level
)
RenderTarget
*
TextureStorage11_2D
::
getRenderTarget
(
int
level
)
{
{
if
(
level
>=
0
&&
level
<
static_cast
<
int
>
(
mMipLevels
))
if
(
level
>=
getBaseLevel
()
&&
level
<
getMaxLevel
(
))
{
{
if
(
!
mRenderTarget
[
level
])
if
(
!
mRenderTarget
[
level
])
{
{
...
@@ -329,7 +335,7 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
...
@@ -329,7 +335,7 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
D3D11_SHADER_RESOURCE_VIEW_DESC
srvDesc
;
D3D11_SHADER_RESOURCE_VIEW_DESC
srvDesc
;
srvDesc
.
Format
=
mShaderResourceFormat
;
srvDesc
.
Format
=
mShaderResourceFormat
;
srvDesc
.
ViewDimension
=
D3D11_SRV_DIMENSION_TEXTURE2D
;
srvDesc
.
ViewDimension
=
D3D11_SRV_DIMENSION_TEXTURE2D
;
srvDesc
.
Texture2D
.
MostDetailedMip
=
level
;
srvDesc
.
Texture2D
.
MostDetailedMip
=
level
-
getBaseLevel
()
;
srvDesc
.
Texture2D
.
MipLevels
=
1
;
srvDesc
.
Texture2D
.
MipLevels
=
1
;
ID3D11ShaderResourceView
*
srv
;
ID3D11ShaderResourceView
*
srv
;
...
@@ -346,7 +352,7 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
...
@@ -346,7 +352,7 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
D3D11_RENDER_TARGET_VIEW_DESC
rtvDesc
;
D3D11_RENDER_TARGET_VIEW_DESC
rtvDesc
;
rtvDesc
.
Format
=
mRenderTargetFormat
;
rtvDesc
.
Format
=
mRenderTargetFormat
;
rtvDesc
.
ViewDimension
=
D3D11_RTV_DIMENSION_TEXTURE2D
;
rtvDesc
.
ViewDimension
=
D3D11_RTV_DIMENSION_TEXTURE2D
;
rtvDesc
.
Texture2D
.
MipSlice
=
level
;
rtvDesc
.
Texture2D
.
MipSlice
=
level
-
getBaseLevel
()
;
ID3D11RenderTargetView
*
rtv
;
ID3D11RenderTargetView
*
rtv
;
result
=
device
->
CreateRenderTargetView
(
mTexture
,
&
rtvDesc
,
&
rtv
);
result
=
device
->
CreateRenderTargetView
(
mTexture
,
&
rtvDesc
,
&
rtv
);
...
@@ -434,8 +440,8 @@ void TextureStorage11_2D::generateMipmap(int level)
...
@@ -434,8 +440,8 @@ void TextureStorage11_2D::generateMipmap(int level)
generateMipmapLayer
(
source
,
dest
);
generateMipmapLayer
(
source
,
dest
);
}
}
TextureStorage11_Cube
::
TextureStorage11_Cube
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
)
TextureStorage11_Cube
::
TextureStorage11_Cube
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
)
:
TextureStorage11
(
renderer
,
GetTextureBindFlags
(
internalformat
,
renderer
->
getCurrentClientVersion
(),
renderTarget
))
:
TextureStorage11
(
renderer
,
baseLevel
,
GetTextureBindFlags
(
internalformat
,
renderer
->
getCurrentClientVersion
(),
renderTarget
))
{
{
mTexture
=
NULL
;
mTexture
=
NULL
;
for
(
unsigned
int
i
=
0
;
i
<
6
;
i
++
)
for
(
unsigned
int
i
=
0
;
i
<
6
;
i
++
)
...
@@ -466,7 +472,7 @@ TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int levels, GLe
...
@@ -466,7 +472,7 @@ TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int levels, GLe
D3D11_TEXTURE2D_DESC
desc
;
D3D11_TEXTURE2D_DESC
desc
;
desc
.
Width
=
size
;
desc
.
Width
=
size
;
desc
.
Height
=
size
;
desc
.
Height
=
size
;
desc
.
MipLevels
=
(
levels
>
0
)
?
levels
+
mLodOffset
:
0
;
desc
.
MipLevels
=
(
(
maxLevel
>
0
)
?
(
maxLevel
+
mLodOffset
-
baseLevel
)
:
0
)
;
desc
.
ArraySize
=
6
;
desc
.
ArraySize
=
6
;
desc
.
Format
=
mTextureFormat
;
desc
.
Format
=
mTextureFormat
;
desc
.
SampleDesc
.
Count
=
1
;
desc
.
SampleDesc
.
Count
=
1
;
...
@@ -522,7 +528,7 @@ ID3D11Resource *TextureStorage11_Cube::getBaseTexture() const
...
@@ -522,7 +528,7 @@ ID3D11Resource *TextureStorage11_Cube::getBaseTexture() const
RenderTarget
*
TextureStorage11_Cube
::
getRenderTargetFace
(
GLenum
faceTarget
,
int
level
)
RenderTarget
*
TextureStorage11_Cube
::
getRenderTargetFace
(
GLenum
faceTarget
,
int
level
)
{
{
if
(
level
>=
0
&&
level
<
static_cast
<
int
>
(
mMipLevels
))
if
(
level
>=
getBaseLevel
()
&&
level
<
getMaxLevel
(
))
{
{
int
faceIndex
=
gl
::
TextureCubeMap
::
targetToIndex
(
faceTarget
);
int
faceIndex
=
gl
::
TextureCubeMap
::
targetToIndex
(
faceTarget
);
if
(
!
mRenderTarget
[
faceIndex
][
level
])
if
(
!
mRenderTarget
[
faceIndex
][
level
])
...
@@ -533,7 +539,7 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int
...
@@ -533,7 +539,7 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int
D3D11_SHADER_RESOURCE_VIEW_DESC
srvDesc
;
D3D11_SHADER_RESOURCE_VIEW_DESC
srvDesc
;
srvDesc
.
Format
=
mShaderResourceFormat
;
srvDesc
.
Format
=
mShaderResourceFormat
;
srvDesc
.
ViewDimension
=
D3D11_SRV_DIMENSION_TEXTURE2DARRAY
;
// Will be used with Texture2D sampler, not TextureCube
srvDesc
.
ViewDimension
=
D3D11_SRV_DIMENSION_TEXTURE2DARRAY
;
// Will be used with Texture2D sampler, not TextureCube
srvDesc
.
Texture2DArray
.
MostDetailedMip
=
level
;
srvDesc
.
Texture2DArray
.
MostDetailedMip
=
level
-
getBaseLevel
()
;
srvDesc
.
Texture2DArray
.
MipLevels
=
1
;
srvDesc
.
Texture2DArray
.
MipLevels
=
1
;
srvDesc
.
Texture2DArray
.
FirstArraySlice
=
faceIndex
;
srvDesc
.
Texture2DArray
.
FirstArraySlice
=
faceIndex
;
srvDesc
.
Texture2DArray
.
ArraySize
=
1
;
srvDesc
.
Texture2DArray
.
ArraySize
=
1
;
...
@@ -552,7 +558,7 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int
...
@@ -552,7 +558,7 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int
D3D11_RENDER_TARGET_VIEW_DESC
rtvDesc
;
D3D11_RENDER_TARGET_VIEW_DESC
rtvDesc
;
rtvDesc
.
Format
=
mRenderTargetFormat
;
rtvDesc
.
Format
=
mRenderTargetFormat
;
rtvDesc
.
ViewDimension
=
D3D11_RTV_DIMENSION_TEXTURE2DARRAY
;
rtvDesc
.
ViewDimension
=
D3D11_RTV_DIMENSION_TEXTURE2DARRAY
;
rtvDesc
.
Texture2DArray
.
MipSlice
=
level
;
rtvDesc
.
Texture2DArray
.
MipSlice
=
level
-
getBaseLevel
()
;
rtvDesc
.
Texture2DArray
.
FirstArraySlice
=
faceIndex
;
rtvDesc
.
Texture2DArray
.
FirstArraySlice
=
faceIndex
;
rtvDesc
.
Texture2DArray
.
ArraySize
=
1
;
rtvDesc
.
Texture2DArray
.
ArraySize
=
1
;
...
@@ -578,7 +584,7 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int
...
@@ -578,7 +584,7 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int
dsvDesc
.
Format
=
mDepthStencilFormat
;
dsvDesc
.
Format
=
mDepthStencilFormat
;
dsvDesc
.
ViewDimension
=
D3D11_DSV_DIMENSION_TEXTURE2DARRAY
;
dsvDesc
.
ViewDimension
=
D3D11_DSV_DIMENSION_TEXTURE2DARRAY
;
dsvDesc
.
Flags
=
0
;
dsvDesc
.
Flags
=
0
;
dsvDesc
.
Texture2DArray
.
MipSlice
=
level
;
dsvDesc
.
Texture2DArray
.
MipSlice
=
level
-
getBaseLevel
()
;
dsvDesc
.
Texture2DArray
.
FirstArraySlice
=
faceIndex
;
dsvDesc
.
Texture2DArray
.
FirstArraySlice
=
faceIndex
;
dsvDesc
.
Texture2DArray
.
ArraySize
=
1
;
dsvDesc
.
Texture2DArray
.
ArraySize
=
1
;
...
@@ -644,9 +650,9 @@ void TextureStorage11_Cube::generateMipmap(int faceIndex, int level)
...
@@ -644,9 +650,9 @@ void TextureStorage11_Cube::generateMipmap(int faceIndex, int level)
generateMipmapLayer
(
source
,
dest
);
generateMipmapLayer
(
source
,
dest
);
}
}
TextureStorage11_3D
::
TextureStorage11_3D
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
TextureStorage11_3D
::
TextureStorage11_3D
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
:
TextureStorage11
(
renderer
,
GetTextureBindFlags
(
internalformat
,
renderer
->
getCurrentClientVersion
(),
renderTarget
))
:
TextureStorage11
(
renderer
,
baseLevel
,
GetTextureBindFlags
(
internalformat
,
renderer
->
getCurrentClientVersion
(),
renderTarget
))
{
{
mTexture
=
NULL
;
mTexture
=
NULL
;
...
@@ -675,7 +681,7 @@ TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, int levels, GLenum
...
@@ -675,7 +681,7 @@ TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, int levels, GLenum
desc
.
Width
=
width
;
desc
.
Width
=
width
;
desc
.
Height
=
height
;
desc
.
Height
=
height
;
desc
.
Depth
=
depth
;
desc
.
Depth
=
depth
;
desc
.
MipLevels
=
(
levels
>
0
)
?
levels
+
mLodOffset
:
0
;
desc
.
MipLevels
=
(
(
maxLevel
>
0
)
?
(
maxLevel
+
mLodOffset
-
baseLevel
)
:
0
)
;
desc
.
Format
=
mTextureFormat
;
desc
.
Format
=
mTextureFormat
;
desc
.
Usage
=
D3D11_USAGE_DEFAULT
;
desc
.
Usage
=
D3D11_USAGE_DEFAULT
;
desc
.
BindFlags
=
getBindFlags
();
desc
.
BindFlags
=
getBindFlags
();
...
@@ -761,7 +767,7 @@ ID3D11ShaderResourceView *TextureStorage11_3D::getSRV()
...
@@ -761,7 +767,7 @@ ID3D11ShaderResourceView *TextureStorage11_3D::getSRV()
RenderTarget
*
TextureStorage11_3D
::
getRenderTarget
(
int
mipLevel
)
RenderTarget
*
TextureStorage11_3D
::
getRenderTarget
(
int
mipLevel
)
{
{
if
(
mipLevel
>=
0
&&
mipLevel
<
static_cast
<
int
>
(
mMipLevels
))
if
(
mipLevel
>=
getBaseLevel
()
&&
mipLevel
<
getMaxLevel
(
))
{
{
if
(
!
mLevelRenderTargets
[
mipLevel
])
if
(
!
mLevelRenderTargets
[
mipLevel
])
{
{
...
@@ -771,7 +777,7 @@ RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel)
...
@@ -771,7 +777,7 @@ RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel)
D3D11_SHADER_RESOURCE_VIEW_DESC
srvDesc
;
D3D11_SHADER_RESOURCE_VIEW_DESC
srvDesc
;
srvDesc
.
Format
=
mShaderResourceFormat
;
srvDesc
.
Format
=
mShaderResourceFormat
;
srvDesc
.
ViewDimension
=
D3D11_SRV_DIMENSION_TEXTURE3D
;
srvDesc
.
ViewDimension
=
D3D11_SRV_DIMENSION_TEXTURE3D
;
srvDesc
.
Texture3D
.
MostDetailedMip
=
mipLevel
;
srvDesc
.
Texture3D
.
MostDetailedMip
=
mipLevel
-
getBaseLevel
()
;
srvDesc
.
Texture3D
.
MipLevels
=
1
;
srvDesc
.
Texture3D
.
MipLevels
=
1
;
ID3D11ShaderResourceView
*
srv
;
ID3D11ShaderResourceView
*
srv
;
...
@@ -788,7 +794,7 @@ RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel)
...
@@ -788,7 +794,7 @@ RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel)
D3D11_RENDER_TARGET_VIEW_DESC
rtvDesc
;
D3D11_RENDER_TARGET_VIEW_DESC
rtvDesc
;
rtvDesc
.
Format
=
mRenderTargetFormat
;
rtvDesc
.
Format
=
mRenderTargetFormat
;
rtvDesc
.
ViewDimension
=
D3D11_RTV_DIMENSION_TEXTURE3D
;
rtvDesc
.
ViewDimension
=
D3D11_RTV_DIMENSION_TEXTURE3D
;
rtvDesc
.
Texture3D
.
MipSlice
=
mipLevel
;
rtvDesc
.
Texture3D
.
MipSlice
=
mipLevel
-
getBaseLevel
()
;
rtvDesc
.
Texture3D
.
FirstWSlice
=
0
;
rtvDesc
.
Texture3D
.
FirstWSlice
=
0
;
rtvDesc
.
Texture3D
.
WSize
=
-
1
;
rtvDesc
.
Texture3D
.
WSize
=
-
1
;
...
@@ -824,7 +830,7 @@ RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel)
...
@@ -824,7 +830,7 @@ RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel)
RenderTarget
*
TextureStorage11_3D
::
getRenderTargetLayer
(
int
mipLevel
,
int
layer
)
RenderTarget
*
TextureStorage11_3D
::
getRenderTargetLayer
(
int
mipLevel
,
int
layer
)
{
{
if
(
mipLevel
>=
0
&&
mipLevel
<
static_cast
<
int
>
(
mMipLevels
))
if
(
mipLevel
>=
getBaseLevel
()
&&
mipLevel
<
getMaxLevel
(
))
{
{
LevelLayerKey
key
(
mipLevel
,
layer
);
LevelLayerKey
key
(
mipLevel
,
layer
);
if
(
mLevelLayerRenderTargets
.
find
(
key
)
==
mLevelLayerRenderTargets
.
end
())
if
(
mLevelLayerRenderTargets
.
find
(
key
)
==
mLevelLayerRenderTargets
.
end
())
...
@@ -840,7 +846,7 @@ RenderTarget *TextureStorage11_3D::getRenderTargetLayer(int mipLevel, int layer)
...
@@ -840,7 +846,7 @@ RenderTarget *TextureStorage11_3D::getRenderTargetLayer(int mipLevel, int layer)
D3D11_RENDER_TARGET_VIEW_DESC
rtvDesc
;
D3D11_RENDER_TARGET_VIEW_DESC
rtvDesc
;
rtvDesc
.
Format
=
mRenderTargetFormat
;
rtvDesc
.
Format
=
mRenderTargetFormat
;
rtvDesc
.
ViewDimension
=
D3D11_RTV_DIMENSION_TEXTURE3D
;
rtvDesc
.
ViewDimension
=
D3D11_RTV_DIMENSION_TEXTURE3D
;
rtvDesc
.
Texture3D
.
MipSlice
=
mipLevel
;
rtvDesc
.
Texture3D
.
MipSlice
=
mipLevel
-
getBaseLevel
()
;
rtvDesc
.
Texture3D
.
FirstWSlice
=
layer
;
rtvDesc
.
Texture3D
.
FirstWSlice
=
layer
;
rtvDesc
.
Texture3D
.
WSize
=
1
;
rtvDesc
.
Texture3D
.
WSize
=
1
;
...
@@ -882,9 +888,9 @@ void TextureStorage11_3D::generateMipmap(int level)
...
@@ -882,9 +888,9 @@ void TextureStorage11_3D::generateMipmap(int level)
generateMipmapLayer
(
source
,
dest
);
generateMipmapLayer
(
source
,
dest
);
}
}
TextureStorage11_2DArray
::
TextureStorage11_2DArray
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
TextureStorage11_2DArray
::
TextureStorage11_2DArray
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
:
TextureStorage11
(
renderer
,
GetTextureBindFlags
(
internalformat
,
renderer
->
getCurrentClientVersion
(),
renderTarget
))
:
TextureStorage11
(
renderer
,
baseLevel
,
GetTextureBindFlags
(
internalformat
,
renderer
->
getCurrentClientVersion
(),
renderTarget
))
{
{
mTexture
=
NULL
;
mTexture
=
NULL
;
...
@@ -907,7 +913,7 @@ TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, int level
...
@@ -907,7 +913,7 @@ TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, int level
D3D11_TEXTURE2D_DESC
desc
;
D3D11_TEXTURE2D_DESC
desc
;
desc
.
Width
=
width
;
desc
.
Width
=
width
;
desc
.
Height
=
height
;
desc
.
Height
=
height
;
desc
.
MipLevels
=
(
levels
>
0
)
?
levels
+
mLodOffset
:
0
;
desc
.
MipLevels
=
(
(
maxLevel
>
0
)
?
(
maxLevel
+
mLodOffset
-
baseLevel
)
:
0
)
;
desc
.
ArraySize
=
depth
;
desc
.
ArraySize
=
depth
;
desc
.
Format
=
mTextureFormat
;
desc
.
Format
=
mTextureFormat
;
desc
.
SampleDesc
.
Count
=
1
;
desc
.
SampleDesc
.
Count
=
1
;
...
@@ -1004,7 +1010,7 @@ RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int l
...
@@ -1004,7 +1010,7 @@ RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int l
D3D11_SHADER_RESOURCE_VIEW_DESC
srvDesc
;
D3D11_SHADER_RESOURCE_VIEW_DESC
srvDesc
;
srvDesc
.
Format
=
mShaderResourceFormat
;
srvDesc
.
Format
=
mShaderResourceFormat
;
srvDesc
.
ViewDimension
=
D3D11_SRV_DIMENSION_TEXTURE2DARRAY
;
srvDesc
.
ViewDimension
=
D3D11_SRV_DIMENSION_TEXTURE2DARRAY
;
srvDesc
.
Texture2DArray
.
MostDetailedMip
=
mipLevel
;
srvDesc
.
Texture2DArray
.
MostDetailedMip
=
mipLevel
-
getBaseLevel
()
;
srvDesc
.
Texture2DArray
.
MipLevels
=
1
;
srvDesc
.
Texture2DArray
.
MipLevels
=
1
;
srvDesc
.
Texture2DArray
.
FirstArraySlice
=
layer
;
srvDesc
.
Texture2DArray
.
FirstArraySlice
=
layer
;
srvDesc
.
Texture2DArray
.
ArraySize
=
1
;
srvDesc
.
Texture2DArray
.
ArraySize
=
1
;
...
@@ -1023,7 +1029,7 @@ RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int l
...
@@ -1023,7 +1029,7 @@ RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int l
D3D11_RENDER_TARGET_VIEW_DESC
rtvDesc
;
D3D11_RENDER_TARGET_VIEW_DESC
rtvDesc
;
rtvDesc
.
Format
=
mRenderTargetFormat
;
rtvDesc
.
Format
=
mRenderTargetFormat
;
rtvDesc
.
ViewDimension
=
D3D11_RTV_DIMENSION_TEXTURE2DARRAY
;
rtvDesc
.
ViewDimension
=
D3D11_RTV_DIMENSION_TEXTURE2DARRAY
;
rtvDesc
.
Texture2DArray
.
MipSlice
=
mipLevel
;
rtvDesc
.
Texture2DArray
.
MipSlice
=
mipLevel
-
getBaseLevel
()
;
rtvDesc
.
Texture2DArray
.
FirstArraySlice
=
layer
;
rtvDesc
.
Texture2DArray
.
FirstArraySlice
=
layer
;
rtvDesc
.
Texture2DArray
.
ArraySize
=
1
;
rtvDesc
.
Texture2DArray
.
ArraySize
=
1
;
...
...
src/libGLESv2/renderer/d3d11/TextureStorage11.h
View file @
4cfff5f3
...
@@ -24,7 +24,6 @@ class SwapChain11;
...
@@ -24,7 +24,6 @@ class SwapChain11;
class
TextureStorage11
:
public
TextureStorage
class
TextureStorage11
:
public
TextureStorage
{
{
public
:
public
:
TextureStorage11
(
Renderer
*
renderer
,
UINT
bindFlags
);
virtual
~
TextureStorage11
();
virtual
~
TextureStorage11
();
static
TextureStorage11
*
makeTextureStorage11
(
TextureStorage
*
storage
);
static
TextureStorage11
*
makeTextureStorage11
(
TextureStorage
*
storage
);
...
@@ -45,14 +44,16 @@ class TextureStorage11 : public TextureStorage
...
@@ -45,14 +44,16 @@ class TextureStorage11 : public TextureStorage
virtual
int
getLodOffset
()
const
;
virtual
int
getLodOffset
()
const
;
virtual
bool
isRenderTarget
()
const
;
virtual
bool
isRenderTarget
()
const
;
virtual
bool
isManaged
()
const
;
virtual
bool
isManaged
()
const
;
virtual
int
levelCount
();
virtual
int
getBaseLevel
()
const
;
UINT
getSubresourceIndex
(
int
mipLevel
,
int
layerTarget
);
virtual
int
getMaxLevel
()
const
;
UINT
getSubresourceIndex
(
int
mipLevel
,
int
layerTarget
)
const
;
bool
updateSubresourceLevel
(
ID3D11Resource
*
texture
,
unsigned
int
sourceSubresource
,
int
level
,
bool
updateSubresourceLevel
(
ID3D11Resource
*
texture
,
unsigned
int
sourceSubresource
,
int
level
,
int
layerTarget
,
GLint
xoffset
,
GLint
yoffset
,
GLint
zoffset
,
int
layerTarget
,
GLint
xoffset
,
GLint
yoffset
,
GLint
zoffset
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
);
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
);
protected
:
protected
:
TextureStorage11
(
Renderer
*
renderer
,
int
baseLevel
,
UINT
bindFlags
);
void
generateMipmapLayer
(
RenderTarget11
*
source
,
RenderTarget11
*
dest
);
void
generateMipmapLayer
(
RenderTarget11
*
source
,
RenderTarget11
*
dest
);
int
getLevelWidth
(
int
mipLevel
)
const
;
int
getLevelWidth
(
int
mipLevel
)
const
;
int
getLevelHeight
(
int
mipLevel
)
const
;
int
getLevelHeight
(
int
mipLevel
)
const
;
...
@@ -61,6 +62,7 @@ class TextureStorage11 : public TextureStorage
...
@@ -61,6 +62,7 @@ class TextureStorage11 : public TextureStorage
Renderer11
*
mRenderer
;
Renderer11
*
mRenderer
;
int
mLodOffset
;
int
mLodOffset
;
unsigned
int
mMipLevels
;
unsigned
int
mMipLevels
;
int
mBaseLevel
;
DXGI_FORMAT
mTextureFormat
;
DXGI_FORMAT
mTextureFormat
;
DXGI_FORMAT
mShaderResourceFormat
;
DXGI_FORMAT
mShaderResourceFormat
;
...
@@ -82,7 +84,7 @@ class TextureStorage11_2D : public TextureStorage11
...
@@ -82,7 +84,7 @@ class TextureStorage11_2D : public TextureStorage11
{
{
public
:
public
:
TextureStorage11_2D
(
Renderer
*
renderer
,
SwapChain11
*
swapchain
);
TextureStorage11_2D
(
Renderer
*
renderer
,
SwapChain11
*
swapchain
);
TextureStorage11_2D
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
);
TextureStorage11_2D
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
);
virtual
~
TextureStorage11_2D
();
virtual
~
TextureStorage11_2D
();
static
TextureStorage11_2D
*
makeTextureStorage11_2D
(
TextureStorage
*
storage
);
static
TextureStorage11_2D
*
makeTextureStorage11_2D
(
TextureStorage
*
storage
);
...
@@ -103,7 +105,7 @@ class TextureStorage11_2D : public TextureStorage11
...
@@ -103,7 +105,7 @@ class TextureStorage11_2D : public TextureStorage11
class
TextureStorage11_Cube
:
public
TextureStorage11
class
TextureStorage11_Cube
:
public
TextureStorage11
{
{
public
:
public
:
TextureStorage11_Cube
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
);
TextureStorage11_Cube
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
);
virtual
~
TextureStorage11_Cube
();
virtual
~
TextureStorage11_Cube
();
static
TextureStorage11_Cube
*
makeTextureStorage11_Cube
(
TextureStorage
*
storage
);
static
TextureStorage11_Cube
*
makeTextureStorage11_Cube
(
TextureStorage
*
storage
);
...
@@ -124,7 +126,7 @@ class TextureStorage11_Cube : public TextureStorage11
...
@@ -124,7 +126,7 @@ class TextureStorage11_Cube : public TextureStorage11
class
TextureStorage11_3D
:
public
TextureStorage11
class
TextureStorage11_3D
:
public
TextureStorage11
{
{
public
:
public
:
TextureStorage11_3D
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
TextureStorage11_3D
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
);
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
);
virtual
~
TextureStorage11_3D
();
virtual
~
TextureStorage11_3D
();
...
@@ -152,7 +154,7 @@ class TextureStorage11_3D : public TextureStorage11
...
@@ -152,7 +154,7 @@ class TextureStorage11_3D : public TextureStorage11
class
TextureStorage11_2DArray
:
public
TextureStorage11
class
TextureStorage11_2DArray
:
public
TextureStorage11
{
{
public
:
public
:
TextureStorage11_2DArray
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
TextureStorage11_2DArray
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
);
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
);
virtual
~
TextureStorage11_2DArray
();
virtual
~
TextureStorage11_2DArray
();
...
...
src/libGLESv2/renderer/d3d9/Renderer9.cpp
View file @
4cfff5f3
...
@@ -2658,7 +2658,7 @@ bool Renderer9::copyToRenderTarget(TextureStorageInterface2D *dest, TextureStora
...
@@ -2658,7 +2658,7 @@ bool Renderer9::copyToRenderTarget(TextureStorageInterface2D *dest, TextureStora
TextureStorage9_2D
*
source9
=
TextureStorage9_2D
::
makeTextureStorage9_2D
(
source
->
getStorageInstance
());
TextureStorage9_2D
*
source9
=
TextureStorage9_2D
::
makeTextureStorage9_2D
(
source
->
getStorageInstance
());
TextureStorage9_2D
*
dest9
=
TextureStorage9_2D
::
makeTextureStorage9_2D
(
dest
->
getStorageInstance
());
TextureStorage9_2D
*
dest9
=
TextureStorage9_2D
::
makeTextureStorage9_2D
(
dest
->
getStorageInstance
());
int
levels
=
source9
->
levelCount
();
int
levels
=
source9
->
getMaxLevel
()
-
source9
->
getBaseLevel
();
for
(
int
i
=
0
;
i
<
levels
;
++
i
)
for
(
int
i
=
0
;
i
<
levels
;
++
i
)
{
{
IDirect3DSurface9
*
srcSurf
=
source9
->
getSurfaceLevel
(
i
,
false
);
IDirect3DSurface9
*
srcSurf
=
source9
->
getSurfaceLevel
(
i
,
false
);
...
@@ -2687,7 +2687,7 @@ bool Renderer9::copyToRenderTarget(TextureStorageInterfaceCube *dest, TextureSto
...
@@ -2687,7 +2687,7 @@ bool Renderer9::copyToRenderTarget(TextureStorageInterfaceCube *dest, TextureSto
{
{
TextureStorage9_Cube
*
source9
=
TextureStorage9_Cube
::
makeTextureStorage9_Cube
(
source
->
getStorageInstance
());
TextureStorage9_Cube
*
source9
=
TextureStorage9_Cube
::
makeTextureStorage9_Cube
(
source
->
getStorageInstance
());
TextureStorage9_Cube
*
dest9
=
TextureStorage9_Cube
::
makeTextureStorage9_Cube
(
dest
->
getStorageInstance
());
TextureStorage9_Cube
*
dest9
=
TextureStorage9_Cube
::
makeTextureStorage9_Cube
(
dest
->
getStorageInstance
());
int
levels
=
source9
->
levelCount
();
int
levels
=
source9
->
getMaxLevel
()
-
source9
->
getBaseLevel
();
for
(
int
f
=
0
;
f
<
6
;
f
++
)
for
(
int
f
=
0
;
f
<
6
;
f
++
)
{
{
for
(
int
i
=
0
;
i
<
levels
;
i
++
)
for
(
int
i
=
0
;
i
<
levels
;
i
++
)
...
@@ -3313,17 +3313,17 @@ TextureStorage *Renderer9::createTextureStorage2D(SwapChain *swapChain)
...
@@ -3313,17 +3313,17 @@ TextureStorage *Renderer9::createTextureStorage2D(SwapChain *swapChain)
return
new
TextureStorage9_2D
(
this
,
swapChain9
);
return
new
TextureStorage9_2D
(
this
,
swapChain9
);
}
}
TextureStorage
*
Renderer9
::
createTextureStorage2D
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
)
TextureStorage
*
Renderer9
::
createTextureStorage2D
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
)
{
{
return
new
TextureStorage9_2D
(
this
,
levels
,
internalformat
,
renderTarget
,
width
,
height
);
return
new
TextureStorage9_2D
(
this
,
baseLevel
,
maxLevel
,
internalformat
,
renderTarget
,
width
,
height
);
}
}
TextureStorage
*
Renderer9
::
createTextureStorageCube
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
)
TextureStorage
*
Renderer9
::
createTextureStorageCube
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
)
{
{
return
new
TextureStorage9_Cube
(
this
,
levels
,
internalformat
,
renderTarget
,
size
);
return
new
TextureStorage9_Cube
(
this
,
baseLevel
,
maxLevel
,
internalformat
,
renderTarget
,
size
);
}
}
TextureStorage
*
Renderer9
::
createTextureStorage3D
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
TextureStorage
*
Renderer9
::
createTextureStorage3D
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
{
{
// 3D textures are not supported by the D3D9 backend.
// 3D textures are not supported by the D3D9 backend.
UNREACHABLE
();
UNREACHABLE
();
...
@@ -3331,7 +3331,7 @@ TextureStorage *Renderer9::createTextureStorage3D(int levels, GLenum internalfor
...
@@ -3331,7 +3331,7 @@ TextureStorage *Renderer9::createTextureStorage3D(int levels, GLenum internalfor
return
NULL
;
return
NULL
;
}
}
TextureStorage
*
Renderer9
::
createTextureStorage2DArray
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
TextureStorage
*
Renderer9
::
createTextureStorage2DArray
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
)
{
{
// 2D array textures are not supported by the D3D9 backend.
// 2D array textures are not supported by the D3D9 backend.
UNREACHABLE
();
UNREACHABLE
();
...
...
src/libGLESv2/renderer/d3d9/Renderer9.h
View file @
4cfff5f3
...
@@ -203,10 +203,10 @@ class Renderer9 : public Renderer
...
@@ -203,10 +203,10 @@ class Renderer9 : public Renderer
virtual
Image
*
createImage
();
virtual
Image
*
createImage
();
virtual
void
generateMipmap
(
Image
*
dest
,
Image
*
source
);
virtual
void
generateMipmap
(
Image
*
dest
,
Image
*
source
);
virtual
TextureStorage
*
createTextureStorage2D
(
SwapChain
*
swapChain
);
virtual
TextureStorage
*
createTextureStorage2D
(
SwapChain
*
swapChain
);
virtual
TextureStorage
*
createTextureStorage2D
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
);
virtual
TextureStorage
*
createTextureStorage2D
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
);
virtual
TextureStorage
*
createTextureStorageCube
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
);
virtual
TextureStorage
*
createTextureStorageCube
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
);
virtual
TextureStorage
*
createTextureStorage3D
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
);
virtual
TextureStorage
*
createTextureStorage3D
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
);
virtual
TextureStorage
*
createTextureStorage2DArray
(
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
);
virtual
TextureStorage
*
createTextureStorage2DArray
(
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
);
// Buffer creation
// Buffer creation
virtual
VertexBuffer
*
createVertexBuffer
();
virtual
VertexBuffer
*
createVertexBuffer
();
...
...
src/libGLESv2/renderer/d3d9/TextureStorage9.cpp
View file @
4cfff5f3
...
@@ -20,8 +20,9 @@
...
@@ -20,8 +20,9 @@
namespace
rx
namespace
rx
{
{
TextureStorage9
::
TextureStorage9
(
Renderer
*
renderer
,
DWORD
usage
)
TextureStorage9
::
TextureStorage9
(
Renderer
*
renderer
,
int
baseLevel
,
DWORD
usage
)
:
mLodOffset
(
0
),
:
mLodOffset
(
0
),
mBaseLevel
(
baseLevel
),
mRenderer
(
Renderer9
::
makeRenderer9
(
renderer
)),
mRenderer
(
Renderer9
::
makeRenderer9
(
renderer
)),
mD3DUsage
(
usage
),
mD3DUsage
(
usage
),
mD3DPool
(
mRenderer
->
getTexturePool
(
usage
))
mD3DPool
(
mRenderer
->
getTexturePool
(
usage
))
...
@@ -83,12 +84,18 @@ int TextureStorage9::getLodOffset() const
...
@@ -83,12 +84,18 @@ int TextureStorage9::getLodOffset() const
return
mLodOffset
;
return
mLodOffset
;
}
}
int
TextureStorage9
::
levelCount
()
int
TextureStorage9
::
getBaseLevel
()
const
{
{
return
getBaseTexture
()
?
getBaseTexture
()
->
GetLevelCount
()
-
getLodOffset
()
:
0
;
return
mBaseLevel
;
}
}
TextureStorage9_2D
::
TextureStorage9_2D
(
Renderer
*
renderer
,
SwapChain9
*
swapchain
)
:
TextureStorage9
(
renderer
,
D3DUSAGE_RENDERTARGET
)
int
TextureStorage9
::
getMaxLevel
()
const
{
return
getBaseLevel
()
+
(
getBaseTexture
()
?
getBaseTexture
()
->
GetLevelCount
()
-
getLodOffset
()
:
0
);
}
TextureStorage9_2D
::
TextureStorage9_2D
(
Renderer
*
renderer
,
SwapChain9
*
swapchain
)
:
TextureStorage9
(
renderer
,
0
,
D3DUSAGE_RENDERTARGET
)
{
{
IDirect3DTexture9
*
surfaceTexture
=
swapchain
->
getOffscreenTexture
();
IDirect3DTexture9
*
surfaceTexture
=
swapchain
->
getOffscreenTexture
();
mTexture
=
surfaceTexture
;
mTexture
=
surfaceTexture
;
...
@@ -97,8 +104,8 @@ TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain
...
@@ -97,8 +104,8 @@ TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain
initializeRenderTarget
();
initializeRenderTarget
();
}
}
TextureStorage9_2D
::
TextureStorage9_2D
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
)
TextureStorage9_2D
::
TextureStorage9_2D
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
)
:
TextureStorage9
(
renderer
,
GetTextureUsage
(
internalformat
,
Renderer9
::
makeRenderer9
(
renderer
),
renderTarget
))
:
TextureStorage9
(
renderer
,
baseLevel
,
GetTextureUsage
(
internalformat
,
Renderer9
::
makeRenderer9
(
renderer
),
renderTarget
))
{
{
mTexture
=
NULL
;
mTexture
=
NULL
;
mRenderTarget
=
NULL
;
mRenderTarget
=
NULL
;
...
@@ -109,8 +116,9 @@ TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, int levels, GLenum in
...
@@ -109,8 +116,9 @@ TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, int levels, GLenum in
IDirect3DDevice9
*
device
=
mRenderer
->
getDevice
();
IDirect3DDevice9
*
device
=
mRenderer
->
getDevice
();
D3DFORMAT
format
=
gl_d3d9
::
GetTextureFormat
(
internalformat
,
mRenderer
);
D3DFORMAT
format
=
gl_d3d9
::
GetTextureFormat
(
internalformat
,
mRenderer
);
d3d9
::
MakeValidSize
(
false
,
format
,
&
width
,
&
height
,
&
mLodOffset
);
d3d9
::
MakeValidSize
(
false
,
format
,
&
width
,
&
height
,
&
mLodOffset
);
HRESULT
result
=
device
->
CreateTexture
(
width
,
height
,
levels
?
levels
+
mLodOffset
:
0
,
getUsage
(),
UINT
creationLevels
=
(
maxLevel
?
maxLevel
+
mLodOffset
:
0
);
format
,
getPool
(),
&
mTexture
,
NULL
);
HRESULT
result
=
device
->
CreateTexture
(
width
,
height
,
creationLevels
,
getUsage
(),
format
,
getPool
(),
&
mTexture
,
NULL
);
if
(
FAILED
(
result
))
if
(
FAILED
(
result
))
{
{
...
@@ -191,8 +199,8 @@ void TextureStorage9_2D::initializeRenderTarget()
...
@@ -191,8 +199,8 @@ void TextureStorage9_2D::initializeRenderTarget()
}
}
}
}
TextureStorage9_Cube
::
TextureStorage9_Cube
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
)
TextureStorage9_Cube
::
TextureStorage9_Cube
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
)
:
TextureStorage9
(
renderer
,
GetTextureUsage
(
internalformat
,
Renderer9
::
makeRenderer9
(
renderer
),
renderTarget
))
:
TextureStorage9
(
renderer
,
baseLevel
,
GetTextureUsage
(
internalformat
,
Renderer9
::
makeRenderer9
(
renderer
),
renderTarget
))
{
{
mTexture
=
NULL
;
mTexture
=
NULL
;
for
(
int
i
=
0
;
i
<
6
;
++
i
)
for
(
int
i
=
0
;
i
<
6
;
++
i
)
...
@@ -208,8 +216,9 @@ TextureStorage9_Cube::TextureStorage9_Cube(Renderer *renderer, int levels, GLenu
...
@@ -208,8 +216,9 @@ TextureStorage9_Cube::TextureStorage9_Cube(Renderer *renderer, int levels, GLenu
int
height
=
size
;
int
height
=
size
;
D3DFORMAT
format
=
gl_d3d9
::
GetTextureFormat
(
internalformat
,
mRenderer
);
D3DFORMAT
format
=
gl_d3d9
::
GetTextureFormat
(
internalformat
,
mRenderer
);
d3d9
::
MakeValidSize
(
false
,
format
,
&
size
,
&
height
,
&
mLodOffset
);
d3d9
::
MakeValidSize
(
false
,
format
,
&
size
,
&
height
,
&
mLodOffset
);
HRESULT
result
=
device
->
CreateCubeTexture
(
size
,
levels
?
levels
+
mLodOffset
:
0
,
getUsage
(),
UINT
creationLevels
=
(
maxLevel
?
maxLevel
+
mLodOffset
:
0
);
format
,
getPool
(),
&
mTexture
,
NULL
);
HRESULT
result
=
device
->
CreateCubeTexture
(
size
,
creationLevels
,
getUsage
(),
format
,
getPool
(),
&
mTexture
,
NULL
);
if
(
FAILED
(
result
))
if
(
FAILED
(
result
))
{
{
...
...
src/libGLESv2/renderer/d3d9/TextureStorage9.h
View file @
4cfff5f3
...
@@ -24,7 +24,6 @@ class RenderTarget9;
...
@@ -24,7 +24,6 @@ class RenderTarget9;
class
TextureStorage9
:
public
TextureStorage
class
TextureStorage9
:
public
TextureStorage
{
{
public
:
public
:
TextureStorage9
(
Renderer
*
renderer
,
DWORD
usage
);
virtual
~
TextureStorage9
();
virtual
~
TextureStorage9
();
static
TextureStorage9
*
makeTextureStorage9
(
TextureStorage
*
storage
);
static
TextureStorage9
*
makeTextureStorage9
(
TextureStorage
*
storage
);
...
@@ -44,12 +43,16 @@ class TextureStorage9 : public TextureStorage
...
@@ -44,12 +43,16 @@ class TextureStorage9 : public TextureStorage
virtual
int
getLodOffset
()
const
;
virtual
int
getLodOffset
()
const
;
virtual
bool
isRenderTarget
()
const
;
virtual
bool
isRenderTarget
()
const
;
virtual
bool
isManaged
()
const
;
virtual
bool
isManaged
()
const
;
virtual
int
levelCount
();
virtual
int
getBaseLevel
()
const
;
virtual
int
getMaxLevel
()
const
;
protected
:
protected
:
int
mLodOffset
;
int
mLodOffset
;
int
mBaseLevel
;
Renderer9
*
mRenderer
;
Renderer9
*
mRenderer
;
TextureStorage9
(
Renderer
*
renderer
,
int
baseLevel
,
DWORD
usage
);
private
:
private
:
DISALLOW_COPY_AND_ASSIGN
(
TextureStorage9
);
DISALLOW_COPY_AND_ASSIGN
(
TextureStorage9
);
...
@@ -61,7 +64,7 @@ class TextureStorage9_2D : public TextureStorage9
...
@@ -61,7 +64,7 @@ class TextureStorage9_2D : public TextureStorage9
{
{
public
:
public
:
TextureStorage9_2D
(
Renderer
*
renderer
,
SwapChain9
*
swapchain
);
TextureStorage9_2D
(
Renderer
*
renderer
,
SwapChain9
*
swapchain
);
TextureStorage9_2D
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
);
TextureStorage9_2D
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
GLsizei
width
,
GLsizei
height
);
virtual
~
TextureStorage9_2D
();
virtual
~
TextureStorage9_2D
();
static
TextureStorage9_2D
*
makeTextureStorage9_2D
(
TextureStorage
*
storage
);
static
TextureStorage9_2D
*
makeTextureStorage9_2D
(
TextureStorage
*
storage
);
...
@@ -83,7 +86,7 @@ class TextureStorage9_2D : public TextureStorage9
...
@@ -83,7 +86,7 @@ class TextureStorage9_2D : public TextureStorage9
class
TextureStorage9_Cube
:
public
TextureStorage9
class
TextureStorage9_Cube
:
public
TextureStorage9
{
{
public
:
public
:
TextureStorage9_Cube
(
Renderer
*
renderer
,
int
levels
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
);
TextureStorage9_Cube
(
Renderer
*
renderer
,
int
baseLevel
,
int
maxLevel
,
GLenum
internalformat
,
bool
renderTarget
,
int
size
);
virtual
~
TextureStorage9_Cube
();
virtual
~
TextureStorage9_Cube
();
static
TextureStorage9_Cube
*
makeTextureStorage9_Cube
(
TextureStorage
*
storage
);
static
TextureStorage9_Cube
*
makeTextureStorage9_Cube
(
TextureStorage
*
storage
);
...
...
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