This commit is contained in:
Branimir Karadžić 2015-11-05 22:01:01 -08:00
parent dd0cd19725
commit 4142a8f64a

View File

@ -2156,8 +2156,6 @@ namespace bgfx { namespace mtl
void RendererContextMtl::submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) BX_OVERRIDE
{
BX_UNUSED(_clearQuad);
m_commandBuffer = m_commandQueue.commandBuffer();
retain(m_commandBuffer); // keep alive to be useable at 'flip'
@ -2316,13 +2314,15 @@ namespace bgfx { namespace mtl
RenderPassDescriptor renderPassDescriptor = newRenderPassDescriptor();
renderPassDescriptor.visibilityResultBuffer = m_occlusionQuery.m_buffer;
//todo: check FB size
uint32_t width = getBufferWidth();
uint32_t height = getBufferHeight();
Rect viewRect = viewState.m_rect;
bool fullscreenRect = (0 == viewRect.m_x && 0 == viewRect.m_y && width == viewRect.m_width && height == viewRect.m_height);
//TODO/OPTIMIZATION: merge views with same target framebuffer into one renderPass
bool fullscreenRect = true
&& 0 == viewRect.m_x
&& 0 == viewRect.m_y
&& width == viewRect.m_width
&& height == viewRect.m_height
;
fbh = _render->m_fb[view];
setFrameBuffer(renderPassDescriptor, fbh);
@ -2431,7 +2431,6 @@ namespace bgfx { namespace mtl
programIdx = invalidHandle;
currentProgram = NULL;
//TODO
//invalidateCompute();
}
@ -2509,18 +2508,18 @@ namespace bgfx { namespace mtl
rce.setScissorRect(rc);
}
if ((BGFX_STATE_DEPTH_WRITE|BGFX_STATE_DEPTH_TEST_MASK) & changedFlags
|| 0 != changedStencil)
if ( (BGFX_STATE_DEPTH_WRITE|BGFX_STATE_DEPTH_TEST_MASK) & changedFlags
|| 0 != changedStencil)
{
setDepthStencilState(newFlags,newStencil);
}
if ((0
| BGFX_STATE_CULL_MASK
| BGFX_STATE_ALPHA_REF_MASK
| BGFX_STATE_PT_MASK
//| BGFX_STATE_POINT_SIZE_MASK //TODO: not supported. could be supported with uniform
) & changedFlags)
if ( (0
| BGFX_STATE_CULL_MASK
| BGFX_STATE_ALPHA_REF_MASK
| BGFX_STATE_PT_MASK
// | BGFX_STATE_POINT_SIZE_MASK
) & changedFlags)
{
if (BGFX_STATE_CULL_MASK & changedFlags)
{
@ -2543,7 +2542,8 @@ namespace bgfx { namespace mtl
}
}
if ((blendFactor != draw.m_rgba) && !(newFlags & BGFX_STATE_BLEND_INDEPENDENT) )
if (blendFactor != draw.m_rgba
&& !(newFlags & BGFX_STATE_BLEND_INDEPENDENT) )
{
const uint32_t rgba = draw.m_rgba;
float rr = ( (rgba>>24) )/255.0f;
@ -2620,8 +2620,6 @@ namespace bgfx { namespace mtl
rce.setFragmentBuffer(m_uniformBuffer, m_uniformBufferFragmentOffset, 0);
}
//TODO: create new UniformBuffer when not enough place for next buffer
if (constantsChanged)
{
UniformBuffer* vcb = program.m_vshConstantBuffer;
@ -2716,7 +2714,6 @@ namespace bgfx { namespace mtl
if (isValid(draw.m_indirectBuffer) )
{
// TODO: indirect draw
}
else
{
@ -2771,21 +2768,12 @@ namespace bgfx { namespace mtl
if (wasCompute)
{
//TODO
//invalidateCompute();
}
if (0 < _render->m_num)
{
//ASK: we now using one commandBuffer that is commited in flush. Should we implement this?
//if (0 != (m_resolution.m_flags & BGFX_RESET_FLUSH_AFTER_RENDER) )
{
// ????
//deviceCtx->Flush();
}
captureElapsed = -bx::getHPCounter();
//TODO
//capture();
captureElapsed += bx::getHPCounter();
}
@ -2799,7 +2787,6 @@ namespace bgfx { namespace mtl
}
}
//TODO: debug stats
int64_t now = bx::getHPCounter();
elapsed += now;
@ -2820,17 +2807,16 @@ namespace bgfx { namespace mtl
static double maxGpuElapsed = 0.0f;
// double elapsedGpuMs = 0.0;
//TODO: gputimer
/* m_gpuTimer.end();
// m_gpuTimer.end();
//
// while (m_gpuTimer.get() )
// {
// double toGpuMs = 1000.0 / double(m_gpuTimer.m_frequency);
// elapsedGpuMs = m_gpuTimer.m_elapsed * toGpuMs;
// maxGpuElapsed = elapsedGpuMs > maxGpuElapsed ? elapsedGpuMs : maxGpuElapsed;
// }
// maxGpuLatency = bx::uint32_imax(maxGpuLatency, m_gpuTimer.m_control.available()-1);
while (m_gpuTimer.get() )
{
double toGpuMs = 1000.0 / double(m_gpuTimer.m_frequency);
elapsedGpuMs = m_gpuTimer.m_elapsed * toGpuMs;
maxGpuElapsed = elapsedGpuMs > maxGpuElapsed ? elapsedGpuMs : maxGpuElapsed;
}
maxGpuLatency = bx::uint32_imax(maxGpuLatency, m_gpuTimer.m_control.available()-1);
*/
TextVideoMem& tvm = m_textVideoMem;
static int64_t next = now;
@ -2845,50 +2831,46 @@ namespace bgfx { namespace mtl
tvm.clear();
uint16_t pos = 0;
tvm.printf(0, pos++, BGFX_CONFIG_DEBUG ? 0x89 : 0x8f, " %s / " BX_COMPILER_NAME " / " BX_CPU_NAME " / " BX_ARCH_NAME " / " BX_PLATFORM_NAME " "
, getRendererName()
);
//const D3DADAPTER_IDENTIFIER9& identifier = m_identifier;
//tvm.printf(0, pos++, 0x0f, " Device: %s (%s)", identifier.Description, identifier.Driver);
, getRendererName()
);
pos = 10;
tvm.printf(10, pos++, 0x8e, " Frame: %7.3f, % 7.3f \x1f, % 7.3f \x1e [ms] / % 6.2f FPS "
, double(frameTime)*toMs
, double(min)*toMs
, double(max)*toMs
, freq/frameTime
);
, double(frameTime)*toMs
, double(min)*toMs
, double(max)*toMs
, freq/frameTime
);
const uint32_t msaa = (m_resolution.m_flags&BGFX_RESET_MSAA_MASK)>>BGFX_RESET_MSAA_SHIFT;
tvm.printf(10, pos++, 0x8e, " Reset flags: [%c] vsync, [%c] MSAAx%d, [%c] MaxAnisotropy "
, !!(m_resolution.m_flags&BGFX_RESET_VSYNC) ? '\xfe' : ' '
, 0 != msaa ? '\xfe' : ' '
, 1<<msaa
, !!(m_resolution.m_flags&BGFX_RESET_MAXANISOTROPY) ? '\xfe' : ' '
);
/*
const uint32_t msaa = (m_resolution.m_flags&BGFX_RESET_MSAA_MASK)>>BGFX_RESET_MSAA_SHIFT;
tvm.printf(10, pos++, 0x8e, " Reset flags: [%c] vsync, [%c] MSAAx%d, [%c] MaxAnisotropy "
, !!(m_resolution.m_flags&BGFX_RESET_VSYNC) ? '\xfe' : ' '
, 0 != msaa ? '\xfe' : ' '
, 1<<msaa
, !!(m_resolution.m_flags&BGFX_RESET_MAXANISOTROPY) ? '\xfe' : ' '
);
*/
double elapsedCpuMs = double(elapsed)*toMs;
tvm.printf(10, pos++, 0x8e, " Submitted: %4d (draw %4d, compute %4d) / CPU %3.4f [ms] %c GPU %3.4f [ms] (latency %d)"
, _render->m_num
, statsKeyType[0]
, statsKeyType[1]
, elapsedCpuMs
, elapsedCpuMs > maxGpuElapsed ? '>' : '<'
, maxGpuElapsed
, maxGpuLatency
);
, _render->m_num
, statsKeyType[0]
, statsKeyType[1]
, elapsedCpuMs
, elapsedCpuMs > maxGpuElapsed ? '>' : '<'
, maxGpuElapsed
, maxGpuLatency
);
maxGpuLatency = 0;
maxGpuElapsed = 0.0;
for (uint32_t ii = 0; ii < BX_COUNTOF(s_primName); ++ii)
{
tvm.printf(10, pos++, 0x8e, " %9s: %7d (#inst: %5d), submitted: %7d"
, s_primName[ii]
, statsNumPrimsRendered[ii]
, statsNumInstances[ii]
, statsNumPrimsSubmitted[ii]
);
, s_primName[ii]
, statsNumPrimsRendered[ii]
, statsNumInstances[ii]
, statsNumPrimsSubmitted[ii]
);
}
tvm.printf(10, pos++, 0x8e, " Indices: %7d ", statsNumIndices);