Split MakeVertexDesc so it is const
Fixed: dawn:1384 Change-Id: I6071097e8d78b8462459623443b66f3afa42d9d8 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/130480 Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: Brandon Jones <toji@google.com> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Austin Eng <enga@chromium.org>
This commit is contained in:
parent
4e9ebeff02
commit
b15d853239
|
@ -47,7 +47,7 @@ class PipelineLayout final : public PipelineLayoutBase {
|
|||
const BindingIndexInfo& GetBindingIndexInfo(SingleShaderStage stage) const;
|
||||
|
||||
// The number of Metal vertex stage buffers used for the whole pipeline layout.
|
||||
uint32_t GetBufferBindingCount(SingleShaderStage stage);
|
||||
uint32_t GetBufferBindingCount(SingleShaderStage stage) const;
|
||||
|
||||
private:
|
||||
PipelineLayout(Device* device, const PipelineLayoutDescriptor* descriptor);
|
||||
|
|
|
@ -77,7 +77,7 @@ const PipelineLayout::BindingIndexInfo& PipelineLayout::GetBindingIndexInfo(
|
|||
return mIndexInfo[stage];
|
||||
}
|
||||
|
||||
uint32_t PipelineLayout::GetBufferBindingCount(SingleShaderStage stage) {
|
||||
uint32_t PipelineLayout::GetBufferBindingCount(SingleShaderStage stage) const {
|
||||
return mBufferBindingCount[stage];
|
||||
}
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ class RenderPipeline final : public RenderPipelineBase {
|
|||
private:
|
||||
using RenderPipelineBase::RenderPipelineBase;
|
||||
|
||||
NSRef<MTLVertexDescriptor> MakeVertexDesc();
|
||||
NSRef<MTLVertexDescriptor> MakeVertexDesc() const;
|
||||
|
||||
MTLPrimitiveType mMtlPrimitiveTopology;
|
||||
MTLWinding mMtlFrontFace;
|
||||
|
|
|
@ -323,19 +323,29 @@ MaybeError RenderPipeline::Initialize() {
|
|||
mMtlPrimitiveTopology = MTLPrimitiveTopology(GetPrimitiveTopology());
|
||||
mMtlFrontFace = MTLFrontFace(GetFrontFace());
|
||||
mMtlCullMode = ToMTLCullMode(GetCullMode());
|
||||
// Build a mapping of vertex buffer slots to packed indices
|
||||
{
|
||||
// Vertex buffers are placed after all the buffers for the bind groups.
|
||||
uint32_t mtlVertexBufferIndex =
|
||||
ToBackend(GetLayout())->GetBufferBindingCount(SingleShaderStage::Vertex);
|
||||
|
||||
for (VertexBufferSlot slot : IterateBitSet(GetVertexBufferSlotsUsed())) {
|
||||
mMtlVertexBufferIndices[slot] = mtlVertexBufferIndex;
|
||||
mtlVertexBufferIndex++;
|
||||
}
|
||||
}
|
||||
|
||||
auto mtlDevice = ToBackend(GetDevice())->GetMTLDevice();
|
||||
|
||||
NSRef<MTLRenderPipelineDescriptor> descriptorMTLRef =
|
||||
AcquireNSRef([MTLRenderPipelineDescriptor new]);
|
||||
MTLRenderPipelineDescriptor* descriptorMTL = descriptorMTLRef.Get();
|
||||
|
||||
// TODO(dawn:1384): MakeVertexDesc should be const in the future, so we don't need to call
|
||||
// it here when vertex pulling is enabled
|
||||
NSRef<MTLVertexDescriptor> vertexDesc = MakeVertexDesc();
|
||||
|
||||
// Calling MakeVertexDesc first is important since it sets indices for packed bindings
|
||||
NSRef<MTLVertexDescriptor> vertexDesc;
|
||||
if (GetDevice()->IsToggleEnabled(Toggle::MetalEnableVertexPulling)) {
|
||||
vertexDesc = AcquireNSRef([MTLVertexDescriptor new]);
|
||||
} else {
|
||||
vertexDesc = MakeVertexDesc();
|
||||
}
|
||||
descriptorMTL.vertexDescriptor = vertexDesc.Get();
|
||||
|
||||
|
@ -449,13 +459,9 @@ wgpu::ShaderStage RenderPipeline::GetStagesRequiringStorageBufferLength() const
|
|||
return mStagesRequiringStorageBufferLength;
|
||||
}
|
||||
|
||||
NSRef<MTLVertexDescriptor> RenderPipeline::MakeVertexDesc() {
|
||||
NSRef<MTLVertexDescriptor> RenderPipeline::MakeVertexDesc() const {
|
||||
MTLVertexDescriptor* mtlVertexDescriptor = [MTLVertexDescriptor new];
|
||||
|
||||
// Vertex buffers are packed after all the buffers for the bind groups.
|
||||
uint32_t mtlVertexBufferIndex =
|
||||
ToBackend(GetLayout())->GetBufferBindingCount(SingleShaderStage::Vertex);
|
||||
|
||||
for (VertexBufferSlot slot : IterateBitSet(GetVertexBufferSlotsUsed())) {
|
||||
const VertexBufferInfo& info = GetVertexBuffer(slot);
|
||||
|
||||
|
@ -486,11 +492,8 @@ NSRef<MTLVertexDescriptor> RenderPipeline::MakeVertexDesc() {
|
|||
layoutDesc.stride = info.arrayStride;
|
||||
}
|
||||
|
||||
mtlVertexDescriptor.layouts[mtlVertexBufferIndex] = layoutDesc;
|
||||
mtlVertexDescriptor.layouts[GetMtlVertexBufferIndex(slot)] = layoutDesc;
|
||||
[layoutDesc release];
|
||||
|
||||
mMtlVertexBufferIndices[slot] = mtlVertexBufferIndex;
|
||||
mtlVertexBufferIndex++;
|
||||
}
|
||||
|
||||
for (VertexAttributeLocation loc : IterateBitSet(GetAttributeLocationsUsed())) {
|
||||
|
@ -499,7 +502,7 @@ NSRef<MTLVertexDescriptor> RenderPipeline::MakeVertexDesc() {
|
|||
auto attribDesc = [MTLVertexAttributeDescriptor new];
|
||||
attribDesc.format = VertexFormatType(info.format);
|
||||
attribDesc.offset = info.offset;
|
||||
attribDesc.bufferIndex = mMtlVertexBufferIndices[info.vertexBufferSlot];
|
||||
attribDesc.bufferIndex = GetMtlVertexBufferIndex(info.vertexBufferSlot);
|
||||
mtlVertexDescriptor.attributes[static_cast<uint8_t>(loc)] = attribDesc;
|
||||
[attribDesc release];
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue