This commit is contained in:
Бранимир Караџић 2018-12-26 13:36:27 -08:00
parent bda120446e
commit 593731cc73
1 changed files with 41 additions and 13 deletions

View File

@ -878,16 +878,18 @@ namespace bgfx { namespace mtl
void createFrameBuffer(FrameBufferHandle _handle, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _format, TextureFormat::Enum _depthFormat) override
{
uint16_t denseIdx = m_numWindows++;
uint16_t denseIdx = m_numWindows++;
m_windows[denseIdx] = _handle;
if (!isValid(_handle))
if (!isValid(_handle) )
{
m_mainFrameBuffer.create(denseIdx, _nwh, _width, _height, _format, _depthFormat);
}
else
{
m_frameBuffers[_handle.idx].create(denseIdx, _nwh, _width, _height, _format, _depthFormat);
m_frameBuffers[_handle.idx].m_swapChain->resize(m_frameBuffers[_handle.idx], _width, _height, 0);//_resolution.reset);
FrameBufferMtl& fb = m_frameBuffers[_handle.idx];
fb.create(denseIdx, _nwh, _width, _height, _format, _depthFormat);
fb.m_swapChain->resize(m_frameBuffers[_handle.idx], _width, _height, 0);
}
}
@ -897,10 +899,12 @@ namespace bgfx { namespace mtl
if (UINT16_MAX != denseIdx)
{
--m_numWindows;
if (m_numWindows > 1)
{
FrameBufferHandle handle = m_windows[m_numWindows];
m_windows[m_numWindows] = {kInvalidHandle};
if (m_numWindows != denseIdx)
{
m_windows[denseIdx] = handle;
@ -1093,7 +1097,8 @@ namespace bgfx { namespace mtl
}
m_uniformBufferFragmentOffset = m_uniformBufferVertexOffset + vertexUniformBufferSize;
if (fragmentUniformBufferSize)
if (0 != fragmentUniformBufferSize)
{
m_uniformBufferFragmentOffset = BX_ALIGN_MASK(m_uniformBufferFragmentOffset, pso->m_fshConstantBufferAlignmentMask);
rce.setFragmentBuffer(m_uniformBuffer, m_uniformBufferFragmentOffset, 0);
@ -1114,13 +1119,30 @@ namespace bgfx { namespace mtl
const uint32_t numVertices = _numIndices*4/6;
if (0 < numVertices)
{
m_indexBuffers [_blitter.m_ib->handle.idx].update(0, _numIndices*2, _blitter.m_ib->data, true);
m_vertexBuffers[_blitter.m_vb->handle.idx].update(0, numVertices*_blitter.m_decl.m_stride, _blitter.m_vb->data, true);
m_indexBuffers [_blitter.m_ib->handle.idx].update(
0
, _numIndices*2
, _blitter.m_ib->data
, true
);
m_vertexBuffers[_blitter.m_vb->handle.idx].update(
0
, numVertices*_blitter.m_decl.m_stride
, _blitter.m_vb->data
, true
);
VertexBufferMtl& vb = m_vertexBuffers[_blitter.m_vb->handle.idx];
m_renderCommandEncoder.setVertexBuffer(vb.getBuffer(), 0, 1);
m_renderCommandEncoder.drawIndexedPrimitives(MTLPrimitiveTypeTriangle, _numIndices, MTLIndexTypeUInt16, m_indexBuffers[_blitter.m_ib->handle.idx].getBuffer(), 0, 1);
m_renderCommandEncoder.drawIndexedPrimitives(
MTLPrimitiveTypeTriangle
, _numIndices
, MTLIndexTypeUInt16
, m_indexBuffers[_blitter.m_ib->handle.idx].getBuffer()
, 0
, 1
);
}
}
@ -1194,6 +1216,7 @@ namespace bgfx { namespace mtl
{
MTL_RELEASE(m_screenshotBlitRenderPipelineState)
reset(m_renderPipelineDescriptor);
m_renderPipelineDescriptor.colorAttachments[0].pixelFormat = m_mainFrameBuffer.m_swapChain->m_metalLayer.pixelFormat;
m_renderPipelineDescriptor.vertexFunction = m_screenshotBlitProgram.m_vsh->m_function;
m_renderPipelineDescriptor.fragmentFunction = m_screenshotBlitProgram.m_fsh->m_function;
@ -1288,7 +1311,7 @@ namespace bgfx { namespace mtl
{
g_callback->captureEnd();
BX_FREE(g_allocator, m_capture);
m_capture = NULL;
m_capture = NULL;
m_captureSize = 0;
}
}
@ -3448,15 +3471,15 @@ namespace bgfx { namespace mtl
RenderCommandEncoder rce;
PipelineStateMtl* currentPso = NULL;
bool wasCompute = false;
bool wasCompute = false;
bool viewHasScissor = false;
Rect viewScissorRect;
viewScissorRect.clear();
uint32_t statsNumPrimsSubmitted[BX_COUNTOF(s_primInfo)] = {};
uint32_t statsNumPrimsRendered[BX_COUNTOF(s_primInfo)] = {};
uint32_t statsNumInstances[BX_COUNTOF(s_primInfo)] = {};
uint32_t statsNumDrawIndirect[BX_COUNTOF(s_primInfo)] = {};
uint32_t statsNumPrimsRendered[BX_COUNTOF(s_primInfo)] = {};
uint32_t statsNumInstances[BX_COUNTOF(s_primInfo)] = {};
uint32_t statsNumDrawIndirect[BX_COUNTOF(s_primInfo)] = {};
uint32_t statsNumIndices = 0;
uint32_t statsKeyType[2] = {};
@ -3567,11 +3590,13 @@ namespace bgfx { namespace mtl
{
desc.loadAction = MTLLoadActionLoad;
}
desc.storeAction = desc.texture.sampleCount > 1 ? MTLStoreActionMultisampleResolve : MTLStoreActionStore;
}
}
RenderPassDepthAttachmentDescriptor depthAttachment = renderPassDescriptor.depthAttachment;
if (NULL != depthAttachment.texture)
{
depthAttachment.clearDepth = clr.m_depth;
@ -3586,6 +3611,7 @@ namespace bgfx { namespace mtl
}
RenderPassStencilAttachmentDescriptor stencilAttachment = renderPassDescriptor.stencilAttachment;
if (NULL != stencilAttachment.texture)
{
stencilAttachment.clearStencil = clr.m_stencil;
@ -3611,6 +3637,7 @@ namespace bgfx { namespace mtl
}
RenderPassDepthAttachmentDescriptor depthAttachment = renderPassDescriptor.depthAttachment;
if (NULL != depthAttachment.texture)
{
depthAttachment.loadAction = MTLLoadActionLoad;
@ -3618,6 +3645,7 @@ namespace bgfx { namespace mtl
}
RenderPassStencilAttachmentDescriptor stencilAttachment = renderPassDescriptor.stencilAttachment;
if (NULL != stencilAttachment.texture)
{
stencilAttachment.loadAction = MTLLoadActionLoad;