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,
mDirtyBits.set(DIRTY_BIT_TRANSFORM_FEEDBACK_BINDING);
}
TransformFeedback *State::getCurrentTransformFeedback() const
{
return mTransformFeedback.get();
}
bool State::isTransformFeedbackActiveUnpaused() const
{
TransformFeedback *curTransformFeedback = getCurrentTransformFeedback();
TransformFeedback *curTransformFeedback = mTransformFeedback.get();
return curTransformFeedback && curTransformFeedback->isActive() &&
!curTransformFeedback->isPaused();
}
......
......@@ -215,7 +215,8 @@ class State : public angle::ObserverInterface, angle::NonCopyable
// Transform feedback object (not buffer) binding manipulation
void setTransformFeedbackBinding(const Context *context, TransformFeedback *transformFeedback);
TransformFeedback *getCurrentTransformFeedback() const;
TransformFeedback *getCurrentTransformFeedback() const { return mTransformFeedback.get(); }
bool isTransformFeedbackActiveUnpaused() const;
bool removeTransformFeedbackBinding(const Context *context, GLuint transformFeedback);
......
......@@ -100,12 +100,6 @@ GLint DrawCallParams::firstVertex() const
return mFirstVertex;
}
size_t DrawCallParams::vertexCount() const
{
ASSERT(!isDrawElements() || mIndexRange.valid());
return mVertexCount;
}
GLsizei DrawCallParams::indexCount() const
{
ASSERT(isDrawElements());
......
......@@ -99,7 +99,12 @@ class DrawCallParams final : angle::NonCopyable
// This value is the sum of 'baseVertex' and the first indexed vertex for DrawElements calls.
GLint firstVertex() const;
size_t vertexCount() const;
size_t vertexCount() const
{
ASSERT(!isDrawElements() || mIndexRange.valid());
return mVertexCount;
}
GLsizei indexCount() const;
GLint baseVertex() const;
GLenum type() const;
......
......@@ -296,6 +296,8 @@ class ProgramD3D : public ProgramImpl
const std::vector<D3DUniform *> &getD3DUniforms() const { return mD3DUniforms; }
void markUniformsClean();
const gl::ProgramState &getState() const { return mState; }
private:
// These forward-declared tasks are used for multi-thread shader compiles.
class GetExecutableTask;
......
......@@ -14,9 +14,9 @@
#include "common/debug.h"
#include "libANGLE/Framebuffer.h"
#include "libANGLE/FramebufferAttachment.h"
#include "libANGLE/renderer/d3d/FramebufferD3D.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
#include "libANGLE/renderer/d3d/d3d11/Framebuffer11.h"
#include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
namespace rx
{
......@@ -44,11 +44,11 @@ void RenderStateCache::clear()
// static
d3d11::BlendStateKey RenderStateCache::GetBlendStateKey(const gl::Context *context,
FramebufferD3D *framebufferD3D,
Framebuffer11 *framebuffer11,
const gl::BlendState &blendState)
{
d3d11::BlendStateKey key;
const gl::AttachmentList &colorbuffers = framebufferD3D->getColorAttachmentsForRender(context);
const gl::AttachmentList &colorbuffers = framebuffer11->getColorAttachmentsForRender(context);
const UINT8 blendStateMask =
gl_d3d11::ConvertColorMask(blendState.colorMaskRed, blendState.colorMaskGreen,
blendState.colorMaskBlue, blendState.colorMaskAlpha);
......
......@@ -18,11 +18,6 @@
#include <unordered_map>
namespace gl
{
class Framebuffer;
}
namespace std
{
template <>
......@@ -61,7 +56,7 @@ struct hash<gl::SamplerState>
namespace rx
{
class FramebufferD3D;
class Framebuffer11;
class Renderer11;
class RenderStateCache : angle::NonCopyable
......@@ -73,7 +68,7 @@ class RenderStateCache : angle::NonCopyable
void clear();
static d3d11::BlendStateKey GetBlendStateKey(const gl::Context *context,
FramebufferD3D *framebufferD3D,
Framebuffer11 *framebuffer11,
const gl::BlendState &blendState);
gl::Error getBlendState(Renderer11 *renderer,
const d3d11::BlendStateKey &key,
......
......@@ -501,6 +501,10 @@ class Renderer11 : public RendererD3D
d3d11::ANGLED3D11DeviceType getDeviceType() const;
gl::Error markTransformFeedbackUsage(const gl::Context *context);
gl::Error drawWithGeometryShaderAndTransformFeedback(const gl::Context *context,
gl::PrimitiveMode mode,
UINT instanceCount,
UINT vertexCount);
HMODULE mD3d11Module;
HMODULE mDxgiModule;
......
......@@ -248,6 +248,8 @@ class StateManager11 final : angle::NonCopyable
GLsizei getCurrentMinimumDrawCount() const { return mCurrentMinimumDrawCount; }
VertexDataManager *getVertexDataManager() { return &mVertexDataManager; }
ProgramD3D *getProgramD3D() const { return mProgramD3D; }
private:
template <typename SRVType>
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