Skip to content

Commit

Permalink
Revert "WIP: batch buffer bindings in render cmd encoder"
Browse files Browse the repository at this point in the history
This reverts commit 797dfc9.
  • Loading branch information
kakashidinho committed Nov 8, 2020
1 parent 797dfc9 commit eb8db7b
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 107 deletions.
26 changes: 1 addition & 25 deletions src/libANGLE/renderer/metal/mtl_command_buffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -190,16 +190,6 @@ class CommandEncoder : public WrappedObject<id<MTLCommandEncoder>>, angle::NonCo
CommandBuffer &mCmdBuffer;
};

struct CommandEncoderBatchBufferSettings
{
CommandEncoderBatchBufferSettings();
void reset();

std::vector<id<MTLBuffer>> bufferBindingBuffers;
std::vector<NSUInteger> bufferBindingOffsets;
NSRange bufferBindingRange;
};

// Per shader stage's states
struct RenderCommandEncoderShaderStates
{
Expand Down Expand Up @@ -436,8 +426,6 @@ class RenderCommandEncoder final : public CommandEncoder
void simulateDiscardFramebuffer();
void endEncodingImpl(bool considerDiscardSimulation);
void applyStates();
void applyBatchedBufferBindings();
void clearBatchedBufferBindings();

RenderCommandEncoder &commonSetBuffer(gl::ShaderType shaderType,
id<MTLBuffer> mtlBuffer,
Expand All @@ -459,9 +447,6 @@ class RenderCommandEncoder final : public CommandEncoder
RenderCommandEncoder &mtlSetBlendColor(float r, float g, float b, float a);

RenderCommandEncoder &mtlSetVertexBuffer(id<MTLBuffer> buffer, uint32_t offset, uint32_t index);
RenderCommandEncoder &mtlSetVertexBuffers(const id<MTLBuffer> *buffers,
const NSUInteger *offsets,
const NSRange &range);
RenderCommandEncoder &mtlSetVertexBufferOffset(uint32_t offset, uint32_t index);
RenderCommandEncoder &mtlSetVertexBytes(const uint8_t *bytes, size_t size, uint32_t index);
RenderCommandEncoder &mtlSetVertexSamplerState(id<MTLSamplerState> state, uint32_t index);
Expand All @@ -474,9 +459,6 @@ class RenderCommandEncoder final : public CommandEncoder
RenderCommandEncoder &mtlSetFragmentBuffer(id<MTLBuffer> buffer,
uint32_t offset,
uint32_t index);
RenderCommandEncoder &mtlSetFragmentBuffers(const id<MTLBuffer> *buffers,
const NSUInteger *offsets,
const NSRange &range);
RenderCommandEncoder &mtlSetFragmentBufferOffset(uint32_t offset, uint32_t index);
RenderCommandEncoder &mtlSetFragmentBytes(const uint8_t *bytes, size_t size, uint32_t index);
RenderCommandEncoder &mtlSetFragmentSamplerState(id<MTLSamplerState> state, uint32_t index);
Expand Down Expand Up @@ -519,12 +501,9 @@ class RenderCommandEncoder final : public CommandEncoder
const OcclusionQueryPool &mOcclusionQueryPool;
bool mRecording = false;

using SetBufferFunc = RenderCommandEncoder &(RenderCommandEncoder::*)(id<MTLBuffer>,
using SetBufferFunc = RenderCommandEncoder &(RenderCommandEncoder::*)(id<MTLBuffer>,
uint32_t,
uint32_t);
using SetBuffersFunc = RenderCommandEncoder &(RenderCommandEncoder::*)(const id<MTLBuffer> *,
const NSUInteger *,
const NSRange &);
using SetBufferOffsetFunc = RenderCommandEncoder &(RenderCommandEncoder::*)(uint32_t, uint32_t);
using SetBytesFunc = RenderCommandEncoder &(RenderCommandEncoder::*)(const uint8_t *,
size_t,
Expand All @@ -539,15 +518,12 @@ class RenderCommandEncoder final : public CommandEncoder
uint32_t);

gl::ShaderMap<SetBufferFunc> mSetBufferFuncs;
gl::ShaderMap<SetBuffersFunc> mSetBuffersFuncs;
gl::ShaderMap<SetBufferOffsetFunc> mSetBufferOffsetFuncs;
gl::ShaderMap<SetBytesFunc> mSetBytesFuncs;
gl::ShaderMap<SetTextureFunc> mSetTextureFuncs;
gl::ShaderMap<SetSamplerStateFunc> mSetSamplerFuncs;
gl::ShaderMap<SetSamplerStateWithoutLodFunc> mSetSamplerWithoutLodFuncs;

gl::ShaderMap<CommandEncoderBatchBufferSettings> mBatchedBufferBindings;

RenderCommandEncoderStates mStateCache = {};
};

Expand Down
84 changes: 2 additions & 82 deletions src/libANGLE/renderer/metal/mtl_command_buffer.mm
Original file line number Diff line number Diff line change
Expand Up @@ -498,18 +498,6 @@
[get() insertDebugSignpost:label];
}

// CommandEncoderBatchBufferSettings implementation
CommandEncoderBatchBufferSettings::CommandEncoderBatchBufferSettings()
{
reset();
}
void CommandEncoderBatchBufferSettings::reset()
{
bufferBindingBuffers.clear();
bufferBindingOffsets.clear();
bufferBindingRange = NSMakeRange(0, 0);
}

// RenderCommandEncoderShaderStates implementation
RenderCommandEncoderShaderStates::RenderCommandEncoderShaderStates()
{
Expand Down Expand Up @@ -590,7 +578,6 @@
for (gl::ShaderType shaderType : gl::AllShaderTypes())
{
mSetBufferFuncs[shaderType] = nullptr;
mSetBuffersFuncs[shaderType] = nullptr;
mSetBufferOffsetFuncs[shaderType] = nullptr;
mSetBytesFuncs[shaderType] = nullptr;
mSetTextureFuncs[shaderType] = nullptr;
Expand All @@ -601,9 +588,6 @@
mSetBufferFuncs[gl::ShaderType::Vertex] = &RenderCommandEncoder::mtlSetVertexBuffer;
mSetBufferFuncs[gl::ShaderType::Fragment] = &RenderCommandEncoder::mtlSetFragmentBuffer;

mSetBuffersFuncs[gl::ShaderType::Vertex] = &RenderCommandEncoder::mtlSetVertexBuffers;
mSetBuffersFuncs[gl::ShaderType::Fragment] = &RenderCommandEncoder::mtlSetFragmentBuffers;

mSetBufferOffsetFuncs[gl::ShaderType::Vertex] = &RenderCommandEncoder::mtlSetVertexBufferOffset;
mSetBufferOffsetFuncs[gl::ShaderType::Fragment] =
&RenderCommandEncoder::mtlSetFragmentBufferOffset;
Expand Down Expand Up @@ -637,8 +621,6 @@
mDeferredDebugGroups.clear();
}

clearBatchedBufferBindings();

mRecording = false;
}

Expand Down Expand Up @@ -854,7 +836,6 @@
ASSERT(get());

applyStates();
clearBatchedBufferBindings();
}
}

Expand Down Expand Up @@ -940,38 +921,6 @@
}
}

void RenderCommandEncoder::applyBatchedBufferBindings()
{
for (gl::ShaderType shaderType : gl::AllGLES2ShaderTypes())
{
const CommandEncoderBatchBufferSettings &batchedBufferBindings =
mBatchedBufferBindings[shaderType];
if (batchedBufferBindings.bufferBindingRange.length == 1)
{
(this->*mSetBufferFuncs[shaderType])(
*batchedBufferBindings.bufferBindingBuffers.data(),
static_cast<uint32_t>(*batchedBufferBindings.bufferBindingOffsets.data()),
static_cast<uint32_t>(batchedBufferBindings.bufferBindingRange.location));
}
else if (batchedBufferBindings.bufferBindingRange.length > 1)
{
(this->*mSetBuffersFuncs[shaderType])(batchedBufferBindings.bufferBindingBuffers.data(),
batchedBufferBindings.bufferBindingOffsets.data(),
batchedBufferBindings.bufferBindingRange);
}
}

clearBatchedBufferBindings();
}

void RenderCommandEncoder::clearBatchedBufferBindings()
{
for (gl::ShaderType shaderType : gl::AllGLES2ShaderTypes())
{
mBatchedBufferBindings[shaderType].reset();
}
}

RenderCommandEncoder &RenderCommandEncoder::restart(const RenderPassDesc &desc)
{
if (valid())
Expand Down Expand Up @@ -1270,20 +1219,11 @@
shaderStates.buffers[index].retainAssign(mtlBuffer);
shaderStates.bufferOffsets[index] = offset;

// Try to batch continuous range buffer bindings as many as possible
CommandEncoderBatchBufferSettings &buffersBatch = mBatchedBufferBindings[shaderType];
if (buffersBatch.bufferBindingRange.length == 0 ||
buffersBatch.bufferBindingRange.location + buffersBatch.bufferBindingRange.length != index)
if (get())
{
applyBatchedBufferBindings();
buffersBatch.bufferBindingRange.location = index;
buffersBatch.bufferBindingRange.length = 0;
(this->*mSetBufferFuncs[shaderType])(mtlBuffer, offset, index);
}

buffersBatch.bufferBindingBuffers.push_back(mtlBuffer);
buffersBatch.bufferBindingOffsets.push_back(offset);
buffersBatch.bufferBindingRange.length++;

return *this;
}

Expand All @@ -1299,7 +1239,6 @@

// NOTE(hqle): find an efficient way to cache inline data.
ensureMetalEncoderStarted();
applyBatchedBufferBindings();

RenderCommandEncoderShaderStates &shaderStates = mStateCache.perShaderStates[shaderType];
shaderStates.buffers[index] = nil;
Expand Down Expand Up @@ -1375,7 +1314,6 @@
uint32_t vertexCount)
{
ensureMetalEncoderStarted();
applyBatchedBufferBindings();
[get() drawPrimitives:primitiveType vertexStart:vertexStart vertexCount:vertexCount];

return *this;
Expand All @@ -1387,7 +1325,6 @@
uint32_t instances)
{
ensureMetalEncoderStarted();
applyBatchedBufferBindings();
[get() drawPrimitives:primitiveType
vertexStart:vertexStart
vertexCount:vertexCount
Expand All @@ -1408,7 +1345,6 @@
}

ensureMetalEncoderStarted();
applyBatchedBufferBindings();
cmdBuffer().setReadDependency(indexBuffer);

[get() drawIndexedPrimitives:primitiveType
Expand All @@ -1433,7 +1369,6 @@
}

ensureMetalEncoderStarted();
applyBatchedBufferBindings();
cmdBuffer().setReadDependency(indexBuffer);

[get() drawIndexedPrimitives:primitiveType
Expand Down Expand Up @@ -1461,7 +1396,6 @@
}

ensureMetalEncoderStarted();
applyBatchedBufferBindings();
cmdBuffer().setReadDependency(indexBuffer);

[get() drawIndexedPrimitives:primitiveType
Expand Down Expand Up @@ -1735,13 +1669,6 @@
[get() setVertexBuffer:buffer offset:offset atIndex:index];
return *this;
}
RenderCommandEncoder &RenderCommandEncoder::mtlSetVertexBuffers(const id<MTLBuffer> *buffers,
const NSUInteger *offsets,
const NSRange &range)
{
[get() setVertexBuffers:buffers offsets:offsets withRange:range];
return *this;
}
RenderCommandEncoder &RenderCommandEncoder::mtlSetVertexBufferOffset(uint32_t offset,
uint32_t index)
{
Expand Down Expand Up @@ -1786,13 +1713,6 @@
[get() setFragmentBuffer:buffer offset:offset atIndex:index];
return *this;
}
RenderCommandEncoder &RenderCommandEncoder::mtlSetFragmentBuffers(const id<MTLBuffer> *buffers,
const NSUInteger *offsets,
const NSRange &range)
{
[get() setFragmentBuffers:buffers offsets:offsets withRange:range];
return *this;
}
RenderCommandEncoder &RenderCommandEncoder::mtlSetFragmentBufferOffset(uint32_t offset,
uint32_t index)
{
Expand Down

0 comments on commit eb8db7b

Please sign in to comment.