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
4461f097
Commit
4461f097
authored
Oct 10, 2013
by
Jamie Madill
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add support for the "fast path" (GPU copy) pixel unpack buffers in TexImage2D.
TRAC #23844 Signed-off-by: Geoff Lang Signed-off-by: Shannon Woods
parent
171ca0ea
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
71 additions
and
4 deletions
+71
-4
BufferStorage11.cpp
src/libGLESv2/renderer/d3d11/BufferStorage11.cpp
+34
-2
BufferStorage11.h
src/libGLESv2/renderer/d3d11/BufferStorage11.h
+4
-0
Renderer11.cpp
src/libGLESv2/renderer/d3d11/Renderer11.cpp
+33
-2
No files found.
src/libGLESv2/renderer/d3d11/BufferStorage11.cpp
View file @
4461f097
...
@@ -10,6 +10,7 @@
...
@@ -10,6 +10,7 @@
#include "libGLESv2/renderer/d3d11/BufferStorage11.h"
#include "libGLESv2/renderer/d3d11/BufferStorage11.h"
#include "libGLESv2/main.h"
#include "libGLESv2/main.h"
#include "libGLESv2/renderer/d3d11/Renderer11.h"
#include "libGLESv2/renderer/d3d11/Renderer11.h"
#include "libGLESv2/renderer/d3d11/formatutils11.h"
namespace
rx
namespace
rx
{
{
...
@@ -268,7 +269,38 @@ ID3D11Buffer *BufferStorage11::getBuffer(bool isConstantBufferUsage)
...
@@ -268,7 +269,38 @@ ID3D11Buffer *BufferStorage11::getBuffer(bool isConstantBufferUsage)
ID3D11ShaderResourceView
*
BufferStorage11
::
getSRV
(
DXGI_FORMAT
srvFormat
)
ID3D11ShaderResourceView
*
BufferStorage11
::
getSRV
(
DXGI_FORMAT
srvFormat
)
{
{
return
NULL
;
ID3D11Buffer
*
buffer
=
getBuffer
(
false
);
auto
bufferSRVIt
=
mBufferResourceViews
.
find
(
srvFormat
);
if
(
bufferSRVIt
!=
mBufferResourceViews
.
end
())
{
if
(
bufferSRVIt
->
second
.
first
==
buffer
)
{
return
bufferSRVIt
->
second
.
second
;
}
else
{
// The underlying buffer has changed since the SRV was created: recreate the SRV.
SafeRelease
(
bufferSRVIt
->
second
.
second
);
}
}
ID3D11Device
*
device
=
mRenderer
->
getDevice
();
ID3D11ShaderResourceView
*
bufferSRV
=
NULL
;
D3D11_SHADER_RESOURCE_VIEW_DESC
bufferSRVDesc
;
bufferSRVDesc
.
Buffer
.
ElementOffset
=
0
;
bufferSRVDesc
.
Buffer
.
ElementWidth
=
mSize
/
d3d11
::
GetFormatPixelBytes
(
srvFormat
,
mRenderer
->
getCurrentClientVersion
());
bufferSRVDesc
.
ViewDimension
=
D3D11_SRV_DIMENSION_BUFFER
;
bufferSRVDesc
.
Format
=
srvFormat
;
HRESULT
result
=
device
->
CreateShaderResourceView
(
buffer
,
&
bufferSRVDesc
,
&
bufferSRV
);
ASSERT
(
SUCCEEDED
(
result
));
mBufferResourceViews
[
srvFormat
]
=
BufferSRVPair
(
buffer
,
bufferSRV
);
return
bufferSRV
;
}
}
DirectBufferStorage11
::
DirectBufferStorage11
(
Renderer11
*
renderer
,
bool
isConstantBufferUsage
)
DirectBufferStorage11
::
DirectBufferStorage11
(
Renderer11
*
renderer
,
bool
isConstantBufferUsage
)
...
@@ -352,7 +384,7 @@ void DirectBufferStorage11::fillBufferDesc(D3D11_BUFFER_DESC* bufferDesc, unsign
...
@@ -352,7 +384,7 @@ void DirectBufferStorage11::fillBufferDesc(D3D11_BUFFER_DESC* bufferDesc, unsign
if
(
!
mIsConstantBufferUsage
)
if
(
!
mIsConstantBufferUsage
)
{
{
bufferDesc
->
Usage
=
D3D11_USAGE_DEFAULT
;
bufferDesc
->
Usage
=
D3D11_USAGE_DEFAULT
;
bufferDesc
->
BindFlags
=
D3D11_BIND_INDEX_BUFFER
|
D3D11_BIND_VERTEX_BUFFER
;
bufferDesc
->
BindFlags
=
D3D11_BIND_INDEX_BUFFER
|
D3D11_BIND_VERTEX_BUFFER
|
D3D11_BIND_SHADER_RESOURCE
;
bufferDesc
->
CPUAccessFlags
=
0
;
bufferDesc
->
CPUAccessFlags
=
0
;
}
}
else
else
...
...
src/libGLESv2/renderer/d3d11/BufferStorage11.h
View file @
4461f097
...
@@ -42,6 +42,10 @@ class BufferStorage11 : public BufferStorage
...
@@ -42,6 +42,10 @@ class BufferStorage11 : public BufferStorage
unsigned
int
mStagingBufferSize
;
unsigned
int
mStagingBufferSize
;
std
::
vector
<
DirectBufferStorage11
*>
mDirectBuffers
;
std
::
vector
<
DirectBufferStorage11
*>
mDirectBuffers
;
typedef
std
::
pair
<
ID3D11Buffer
*
,
ID3D11ShaderResourceView
*>
BufferSRVPair
;
std
::
map
<
DXGI_FORMAT
,
BufferSRVPair
>
mBufferResourceViews
;
unsigned
int
mSize
;
unsigned
int
mSize
;
void
*
mResolvedData
;
void
*
mResolvedData
;
...
...
src/libGLESv2/renderer/d3d11/Renderer11.cpp
View file @
4461f097
...
@@ -2769,8 +2769,39 @@ FenceImpl *Renderer11::createFence()
...
@@ -2769,8 +2769,39 @@ FenceImpl *Renderer11::createFence()
bool
Renderer11
::
supportsFastCopyBufferToTexture
(
GLint
internalFormat
)
const
bool
Renderer11
::
supportsFastCopyBufferToTexture
(
GLint
internalFormat
)
const
{
{
//TODO
int
clientVersion
=
getCurrentClientVersion
();
return
false
;
// We only support buffer to texture copies in ES3
if
(
clientVersion
<=
2
)
{
return
false
;
}
// sRGB formats do not work with D3D11 buffer SRVs
if
(
gl
::
GetColorEncoding
(
internalFormat
,
clientVersion
)
==
GL_SRGB
)
{
return
false
;
}
// We cannot support direct copies to non-color-renderable formats
if
(
!
gl
::
IsColorRenderingSupported
(
internalFormat
,
this
))
{
return
false
;
}
// We skip all 3-channel formats since sometimes format support is missing
if
(
gl
::
GetComponentCount
(
internalFormat
,
clientVersion
)
==
3
)
{
return
false
;
}
// We don't support formats which we can't represent without conversion
if
(
getNativeTextureFormat
(
internalFormat
)
!=
internalFormat
)
{
return
false
;
}
return
true
;
}
}
bool
Renderer11
::
fastCopyBufferToTexture
(
const
gl
::
PixelUnpackState
&
unpack
,
unsigned
int
offset
,
RenderTarget
*
destRenderTarget
,
bool
Renderer11
::
fastCopyBufferToTexture
(
const
gl
::
PixelUnpackState
&
unpack
,
unsigned
int
offset
,
RenderTarget
*
destRenderTarget
,
...
...
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