Changeset 275476 in webkit
- Timestamp:
- Apr 5, 2021 7:16:53 PM (3 years ago)
- Location:
- trunk/Source/ThirdParty/ANGLE
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/ThirdParty/ANGLE/ChangeLog
r275222 r275476 1 2021-04-05 John Cunningham <johncunnigham@apple.com> 2 3 [METAL ANGLE] Stencil only formats being used as the depth attachment. 4 https://bugs.webkit.org/show_bug.cgi?id=224183 5 6 Reviewed by Jon Lee. 7 8 * src/compiler/translator/TranslatorMetalDirect/ProgramPrelude.cpp: 9 * src/compiler/translator/TranslatorMetalDirect/RewriteOutArgs.cpp: 10 (sh::Rewriter::argAlreadyProcessed): 11 * src/libANGLE/renderer/metal/ContextMtl.mm: 12 (rx::ContextMtl::setupDraw): 13 * src/libANGLE/renderer/metal/mtl_command_buffer.h: 14 * src/libANGLE/renderer/metal/mtl_command_buffer.mm: 15 (rx::mtl::RenderCommandEncoder::reset): 16 (rx::mtl::RenderCommandEncoder::setRenderPipelineState): 17 (rx::mtl::RenderCommandEncoder::draw): 18 (rx::mtl::RenderCommandEncoder::drawInstanced): 19 (rx::mtl::RenderCommandEncoder::drawIndexed): 20 (rx::mtl::RenderCommandEncoder::drawIndexedInstanced): 21 (rx::mtl::RenderCommandEncoder::drawIndexedInstancedBaseVertex): 22 * src/libANGLE/renderer/metal/mtl_utils.mm: 23 (rx::mtl::InitializeDepthStencilTextureContentsGPU): 24 1 25 2021-03-30 Kyle Piddington <kpiddington@apple.com> 2 26 -
trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/ProgramPrelude.cpp
r274884 r275476 1243 1243 ~ANGLE_Out() { mDest = mTemp; } 1244 1244 ANGLE_Out(thread T &dest) 1245 : m Dest(dest)1245 : mTemp(dest), mDest(dest) 1246 1246 {} 1247 1247 operator thread T &() { return mTemp; } -
trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/RewriteOutArgs.cpp
r270733 r275476 91 91 : TIntermRebuild(compiler, false, true), mSymbolEnv(symbolEnv) 92 92 {} 93 94 static bool argAlreadyProcessed(TIntermTyped *arg) 95 { 96 if (arg->getAsAggregate()) 97 { 98 const TFunction *func = arg->getAsAggregate()->getFunction(); 99 if (func && func->symbolType() == SymbolType::AngleInternal && func->name() == "swizzle_ref") 100 { 101 return true; 102 } 103 } 104 return false; 105 } 93 106 94 107 PostResult visitAggregatePost(TIntermAggregate &aggregateNode) override … … 162 175 TIntermTyped *arg = args[i]->getAsTyped(); 163 176 ASSERT(arg); 164 const TVariable *var = GetVariable(*arg); 165 const TQualifier paramQual = getParamQualifier(i); 166 167 if (hasIndeterminateVar || mVarBuffer.multiplicity(var) > 1) 177 if (!argAlreadyProcessed(arg)) 168 178 { 169 switch (paramQual) 179 const TVariable *var = GetVariable(*arg); 180 const TQualifier paramQual = getParamQualifier(i); 181 182 if (hasIndeterminateVar || mVarBuffer.multiplicity(var) > 1) 170 183 { 171 case TQualifier::EvqOut: 172 args[i] = &mSymbolEnv.callFunctionOverload(Name("out"), arg->getType(), 173 *new TIntermSequence{arg}); 174 break; 175 176 case TQualifier::EvqInOut: 177 args[i] = &mSymbolEnv.callFunctionOverload( 178 Name("inout"), arg->getType(), *new TIntermSequence{arg}); 179 break; 180 181 default: 182 break; 184 switch (paramQual) 185 { 186 case TQualifier::EvqOut: 187 args[i] = &mSymbolEnv.callFunctionOverload(Name("out"), arg->getType(), 188 *new TIntermSequence{arg}); 189 break; 190 191 case TQualifier::EvqInOut: 192 args[i] = &mSymbolEnv.callFunctionOverload( 193 Name("inout"), arg->getType(), *new TIntermSequence{arg}); 194 break; 195 196 default: 197 break; 198 } 183 199 } 184 200 } -
trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ContextMtl.mm
r274547 r275476 131 131 132 132 indexBufferPool->releaseInFlightBuffers(mContextMtl); 133 134 133 ANGLE_TRY(indexBufferPool->allocate(mContextMtl, 2 * sizeof(uint32_t), nullptr, 135 134 &mLineLoopIndexBuffer, nullptr, nullptr)); … … 2214 2213 } 2215 2214 2216 ANGLE_TRY(mProgram->setupDraw(context, &mRenderEncoder, mRenderPipelineDesc, changedPipeline, 2217 textureChanged, uniformBuffersDirty, transformFeedbackDraw)); 2215 ANGLE_TRY(mProgram->setupDraw(context, &mRenderEncoder, mRenderPipelineDesc, 2216 changedPipeline, textureChanged, 2217 uniformBuffersDirty, transformFeedbackDraw)); 2218 2219 // Setting up the draw required us to call a command buffer flush, re-run setupDraw with state invaliated to restart the command buffer from the current draw with previously set state 2220 if (!mCmdBuffer.valid()) 2221 { 2222 invalidateState(context); 2223 ANGLE_TRY(setupDraw(context, mode, firstVertex, vertexOrIndexCount, instances, indexTypeOrNone, indices, transformFeedbackDraw)); 2224 } 2218 2225 2219 2226 return angle::Result::Continue; -
trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_command_buffer.h
r270733 r275476 523 523 524 524 RenderCommandEncoderStates mStateCache = {}; 525 526 bool mPipelineStateSet = false; 525 527 }; 526 528 -
trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_command_buffer.mm
r275012 r275476 1032 1032 CommandEncoder::reset(); 1033 1033 mRecording = false; 1034 mPipelineStateSet = false; 1034 1035 mCommands.clear(); 1035 1036 } … … 1296 1297 RenderCommandEncoder &RenderCommandEncoder::setRenderPipelineState(id<MTLRenderPipelineState> state) 1297 1298 { 1299 mPipelineStateSet = true; 1298 1300 if (mStateCache.renderPipeline == state) 1299 1301 { … … 1604 1606 uint32_t vertexCount) 1605 1607 { 1608 ASSERT(mPipelineStateSet && "Render Pipeline State was never set and we've issued a draw command."); 1606 1609 mHasDrawCalls = true; 1607 1610 mCommands.push(CmdType::Draw).push(primitiveType).push(vertexStart).push(vertexCount); … … 1615 1618 uint32_t instances) 1616 1619 { 1620 ASSERT(mPipelineStateSet && "Render Pipeline State was never set and we've issued a draw command."); 1617 1621 mHasDrawCalls = true; 1618 1622 mCommands.push(CmdType::DrawInstanced) … … 1631 1635 size_t bufferOffset) 1632 1636 { 1637 ASSERT(mPipelineStateSet && "Render Pipeline State was never set and we've issued a draw command."); 1633 1638 if (!indexBuffer) 1634 1639 { … … 1656 1661 uint32_t instances) 1657 1662 { 1663 ASSERT(mPipelineStateSet && "Render Pipeline State was never set and we've issued a draw command."); 1658 1664 if (!indexBuffer) 1659 1665 { … … 1684 1690 uint32_t baseVertex) 1685 1691 { 1692 ASSERT(mPipelineStateSet && "Render Pipeline State was never set and we've issued a draw command."); 1686 1693 if (!indexBuffer) 1687 1694 { -
trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_utils.mm
r274654 r275476 313 313 rtMTL.set(texture, level, layer, textureObjFormat); 314 314 mtl::RenderPassDesc rpDesc; 315 rtMTL.toRenderPassAttachmentDesc(&rpDesc.depthAttachment); 315 // For formats such as MTLPixelFormatStencil8/GL_STENCIL_INDEX8 we only want to set the stencil attachment. 316 if (angleFormat.stencilBits && !angleFormat.depthBits) 317 { 318 rtMTL.toRenderPassAttachmentDesc(&rpDesc.stencilAttachment); 319 } 320 else 321 { 322 rtMTL.toRenderPassAttachmentDesc(&rpDesc.depthAttachment); 323 } 316 324 rpDesc.sampleCount = texture->samples(); 317 325 if (angleFormat.depthBits)
Note: See TracChangeset
for help on using the changeset viewer.