Commit 4166f014 by Jamie Madill Committed by Commit Bot

D3D11: Optimize Renderer11::drawArrays.

Uses inlining and more efficient computation re-use to streamline this function. Bug: angleproject:2575 Change-Id: Ib13e32811f56ec9a010ed66f298d4235e5c6807d Reviewed-on: https://chromium-review.googlesource.com/1067120Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent bf7b95db
...@@ -1327,14 +1327,9 @@ void State::setTransformFeedbackBinding(const Context *context, ...@@ -1327,14 +1327,9 @@ void State::setTransformFeedbackBinding(const Context *context,
mDirtyBits.set(DIRTY_BIT_TRANSFORM_FEEDBACK_BINDING); mDirtyBits.set(DIRTY_BIT_TRANSFORM_FEEDBACK_BINDING);
} }
TransformFeedback *State::getCurrentTransformFeedback() const
{
return mTransformFeedback.get();
}
bool State::isTransformFeedbackActiveUnpaused() const bool State::isTransformFeedbackActiveUnpaused() const
{ {
TransformFeedback *curTransformFeedback = getCurrentTransformFeedback(); TransformFeedback *curTransformFeedback = mTransformFeedback.get();
return curTransformFeedback && curTransformFeedback->isActive() && return curTransformFeedback && curTransformFeedback->isActive() &&
!curTransformFeedback->isPaused(); !curTransformFeedback->isPaused();
} }
......
...@@ -215,7 +215,8 @@ class State : public angle::ObserverInterface, angle::NonCopyable ...@@ -215,7 +215,8 @@ class State : public angle::ObserverInterface, angle::NonCopyable
// Transform feedback object (not buffer) binding manipulation // Transform feedback object (not buffer) binding manipulation
void setTransformFeedbackBinding(const Context *context, TransformFeedback *transformFeedback); void setTransformFeedbackBinding(const Context *context, TransformFeedback *transformFeedback);
TransformFeedback *getCurrentTransformFeedback() const; TransformFeedback *getCurrentTransformFeedback() const { return mTransformFeedback.get(); }
bool isTransformFeedbackActiveUnpaused() const; bool isTransformFeedbackActiveUnpaused() const;
bool removeTransformFeedbackBinding(const Context *context, GLuint transformFeedback); bool removeTransformFeedbackBinding(const Context *context, GLuint transformFeedback);
......
...@@ -100,12 +100,6 @@ GLint DrawCallParams::firstVertex() const ...@@ -100,12 +100,6 @@ GLint DrawCallParams::firstVertex() const
return mFirstVertex; return mFirstVertex;
} }
size_t DrawCallParams::vertexCount() const
{
ASSERT(!isDrawElements() || mIndexRange.valid());
return mVertexCount;
}
GLsizei DrawCallParams::indexCount() const GLsizei DrawCallParams::indexCount() const
{ {
ASSERT(isDrawElements()); ASSERT(isDrawElements());
......
...@@ -99,7 +99,12 @@ class DrawCallParams final : angle::NonCopyable ...@@ -99,7 +99,12 @@ class DrawCallParams final : angle::NonCopyable
// This value is the sum of 'baseVertex' and the first indexed vertex for DrawElements calls. // This value is the sum of 'baseVertex' and the first indexed vertex for DrawElements calls.
GLint firstVertex() const; GLint firstVertex() const;
size_t vertexCount() const; size_t vertexCount() const
{
ASSERT(!isDrawElements() || mIndexRange.valid());
return mVertexCount;
}
GLsizei indexCount() const; GLsizei indexCount() const;
GLint baseVertex() const; GLint baseVertex() const;
GLenum type() const; GLenum type() const;
......
...@@ -296,6 +296,8 @@ class ProgramD3D : public ProgramImpl ...@@ -296,6 +296,8 @@ class ProgramD3D : public ProgramImpl
const std::vector<D3DUniform *> &getD3DUniforms() const { return mD3DUniforms; } const std::vector<D3DUniform *> &getD3DUniforms() const { return mD3DUniforms; }
void markUniformsClean(); void markUniformsClean();
const gl::ProgramState &getState() const { return mState; }
private: private:
// These forward-declared tasks are used for multi-thread shader compiles. // These forward-declared tasks are used for multi-thread shader compiles.
class GetExecutableTask; class GetExecutableTask;
......
...@@ -14,9 +14,9 @@ ...@@ -14,9 +14,9 @@
#include "common/debug.h" #include "common/debug.h"
#include "libANGLE/Framebuffer.h" #include "libANGLE/Framebuffer.h"
#include "libANGLE/FramebufferAttachment.h" #include "libANGLE/FramebufferAttachment.h"
#include "libANGLE/renderer/d3d/FramebufferD3D.h" #include "libANGLE/renderer/d3d/d3d11/Framebuffer11.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
#include "libANGLE/renderer/d3d/d3d11/Renderer11.h" #include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
namespace rx namespace rx
{ {
...@@ -44,11 +44,11 @@ void RenderStateCache::clear() ...@@ -44,11 +44,11 @@ void RenderStateCache::clear()
// static // static
d3d11::BlendStateKey RenderStateCache::GetBlendStateKey(const gl::Context *context, d3d11::BlendStateKey RenderStateCache::GetBlendStateKey(const gl::Context *context,
FramebufferD3D *framebufferD3D, Framebuffer11 *framebuffer11,
const gl::BlendState &blendState) const gl::BlendState &blendState)
{ {
d3d11::BlendStateKey key; d3d11::BlendStateKey key;
const gl::AttachmentList &colorbuffers = framebufferD3D->getColorAttachmentsForRender(context); const gl::AttachmentList &colorbuffers = framebuffer11->getColorAttachmentsForRender(context);
const UINT8 blendStateMask = const UINT8 blendStateMask =
gl_d3d11::ConvertColorMask(blendState.colorMaskRed, blendState.colorMaskGreen, gl_d3d11::ConvertColorMask(blendState.colorMaskRed, blendState.colorMaskGreen,
blendState.colorMaskBlue, blendState.colorMaskAlpha); blendState.colorMaskBlue, blendState.colorMaskAlpha);
......
...@@ -18,11 +18,6 @@ ...@@ -18,11 +18,6 @@
#include <unordered_map> #include <unordered_map>
namespace gl
{
class Framebuffer;
}
namespace std namespace std
{ {
template <> template <>
...@@ -61,7 +56,7 @@ struct hash<gl::SamplerState> ...@@ -61,7 +56,7 @@ struct hash<gl::SamplerState>
namespace rx namespace rx
{ {
class FramebufferD3D; class Framebuffer11;
class Renderer11; class Renderer11;
class RenderStateCache : angle::NonCopyable class RenderStateCache : angle::NonCopyable
...@@ -73,7 +68,7 @@ class RenderStateCache : angle::NonCopyable ...@@ -73,7 +68,7 @@ class RenderStateCache : angle::NonCopyable
void clear(); void clear();
static d3d11::BlendStateKey GetBlendStateKey(const gl::Context *context, static d3d11::BlendStateKey GetBlendStateKey(const gl::Context *context,
FramebufferD3D *framebufferD3D, Framebuffer11 *framebuffer11,
const gl::BlendState &blendState); const gl::BlendState &blendState);
gl::Error getBlendState(Renderer11 *renderer, gl::Error getBlendState(Renderer11 *renderer,
const d3d11::BlendStateKey &key, const d3d11::BlendStateKey &key,
......
...@@ -501,6 +501,10 @@ class Renderer11 : public RendererD3D ...@@ -501,6 +501,10 @@ class Renderer11 : public RendererD3D
d3d11::ANGLED3D11DeviceType getDeviceType() const; d3d11::ANGLED3D11DeviceType getDeviceType() const;
gl::Error markTransformFeedbackUsage(const gl::Context *context); gl::Error markTransformFeedbackUsage(const gl::Context *context);
gl::Error drawWithGeometryShaderAndTransformFeedback(const gl::Context *context,
gl::PrimitiveMode mode,
UINT instanceCount,
UINT vertexCount);
HMODULE mD3d11Module; HMODULE mD3d11Module;
HMODULE mDxgiModule; HMODULE mDxgiModule;
......
...@@ -248,6 +248,8 @@ class StateManager11 final : angle::NonCopyable ...@@ -248,6 +248,8 @@ class StateManager11 final : angle::NonCopyable
GLsizei getCurrentMinimumDrawCount() const { return mCurrentMinimumDrawCount; } GLsizei getCurrentMinimumDrawCount() const { return mCurrentMinimumDrawCount; }
VertexDataManager *getVertexDataManager() { return &mVertexDataManager; } VertexDataManager *getVertexDataManager() { return &mVertexDataManager; }
ProgramD3D *getProgramD3D() const { return mProgramD3D; }
private: private:
template <typename SRVType> template <typename SRVType>
void setShaderResourceInternal(gl::ShaderType shaderType, void setShaderResourceInternal(gl::ShaderType shaderType,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment