This commit is contained in:
Branimir Karadžić
2017-05-14 19:19:28 -07:00
parent 89119ba850
commit 0ca2e6c9eb

View File

@@ -134,7 +134,7 @@ namespace bgfx { namespace mtl
{ MTLVertexFormatUChar2, MTLVertexFormatUChar2Normalized },
{ MTLVertexFormatUChar2, MTLVertexFormatUChar2Normalized },
{ MTLVertexFormatUChar3, MTLVertexFormatUChar3Normalized },
{ MTLVertexFormatUChar4, MTLVertexFormatUChar4Normalized }
{ MTLVertexFormatUChar4, MTLVertexFormatUChar4Normalized },
},
//Uint10
@@ -143,7 +143,7 @@ namespace bgfx { namespace mtl
{ MTLVertexFormatUInt1010102Normalized, MTLVertexFormatUInt1010102Normalized },
{ MTLVertexFormatUInt1010102Normalized, MTLVertexFormatUInt1010102Normalized },
{ MTLVertexFormatUInt1010102Normalized, MTLVertexFormatUInt1010102Normalized },
{ MTLVertexFormatUInt1010102Normalized, MTLVertexFormatUInt1010102Normalized }
{ MTLVertexFormatUInt1010102Normalized, MTLVertexFormatUInt1010102Normalized },
},
//Int16
@@ -151,7 +151,7 @@ namespace bgfx { namespace mtl
{ MTLVertexFormatShort2, MTLVertexFormatShort2Normalized },
{ MTLVertexFormatShort2, MTLVertexFormatShort2Normalized },
{ MTLVertexFormatShort3, MTLVertexFormatShort3Normalized },
{ MTLVertexFormatShort4, MTLVertexFormatShort4Normalized }
{ MTLVertexFormatShort4, MTLVertexFormatShort4Normalized },
},
//Half
@@ -159,7 +159,7 @@ namespace bgfx { namespace mtl
{ MTLVertexFormatHalf2, MTLVertexFormatHalf2 },
{ MTLVertexFormatHalf2, MTLVertexFormatHalf2 },
{ MTLVertexFormatHalf3, MTLVertexFormatHalf3 },
{ MTLVertexFormatHalf4, MTLVertexFormatHalf4 }
{ MTLVertexFormatHalf4, MTLVertexFormatHalf4 },
},
//Float
@@ -167,7 +167,7 @@ namespace bgfx { namespace mtl
{ MTLVertexFormatFloat, MTLVertexFormatFloat },
{ MTLVertexFormatFloat2, MTLVertexFormatFloat2 },
{ MTLVertexFormatFloat3, MTLVertexFormatFloat3 },
{ MTLVertexFormatFloat4, MTLVertexFormatFloat4 }
{ MTLVertexFormatFloat4, MTLVertexFormatFloat4 },
},
};
BX_STATIC_ASSERT(AttribType::Count == BX_COUNTOF(s_attribType) );
@@ -217,7 +217,7 @@ namespace bgfx { namespace mtl
MTLCompareFunctionGreater,
MTLCompareFunctionNotEqual,
MTLCompareFunctionNever,
MTLCompareFunctionAlways
MTLCompareFunctionAlways,
};
static const MTLStencilOperation s_stencilOp[] =
@@ -229,7 +229,7 @@ namespace bgfx { namespace mtl
MTLStencilOperationIncrementClamp,
MTLStencilOperationDecrementWrap,
MTLStencilOperationDecrementClamp,
MTLStencilOperationInvert
MTLStencilOperationInvert,
};
static const MTLSamplerAddressMode s_textureAddress[] =
@@ -342,8 +342,8 @@ namespace bgfx { namespace mtl
int s_msaa[5] = { 1,2,4,8,16 };
#define SHADER_FUNCTION_NAME ("xlatMtlMain")
#define SHADER_UNIFORM_NAME ("_mtl_u")
#define SHADER_FUNCTION_NAME ("xlatMtlMain")
#define SHADER_UNIFORM_NAME ("_mtl_u")
struct RendererContextMtl : public RendererContextI
{
@@ -447,28 +447,35 @@ namespace bgfx { namespace mtl
"struct xlatMtlShaderOutput { float4 gl_Position [[position]]; float2 v_texcoord0; }; \n"
"vertex xlatMtlShaderOutput xlatMtlMain (uint v_id [[ vertex_id ]]) \n"
"{\n"
" xlatMtlShaderOutput _mtl_o;\n"
" xlatMtlShaderOutput _mtl_o;\n"
" if (v_id==0) { _mtl_o.gl_Position = float4(-1.0,-1.0,0.0,1.0); _mtl_o.v_texcoord0 = float2(0.0,1.0); } \n"
" else if (v_id==1) { _mtl_o.gl_Position = float4(3.0,-1.0,0.0,1.0); _mtl_o.v_texcoord0 = float2(2.0,1.0); } \n"
" else { _mtl_o.gl_Position = float4(-1.0,3.0,0.0,1.0); _mtl_o.v_texcoord0 = float2(0.0,-1.0); }\n"
" return _mtl_o;\n"
"}\n";
"}\n"
;
const char* fshSource = "using namespace metal; \n"
" struct xlatMtlShaderInput { float2 v_texcoord0; }; \n"
" fragment half4 xlatMtlMain (xlatMtlShaderInput _mtl_i[[stage_in]], texture2d<float> s_texColor [[texture(0)]], sampler _mtlsmp_s_texColor [[sampler(0)]] ) \n"
" { return half4(s_texColor.sample(_mtlsmp_s_texColor, _mtl_i.v_texcoord0) ); } \n";
const char* fshSource =
"using namespace metal;\n"
"struct xlatMtlShaderInput { float2 v_texcoord0; };\n"
"fragment half4 xlatMtlMain (xlatMtlShaderInput _mtl_i[[stage_in]], texture2d<float> s_texColor [[texture(0)]], sampler _mtlsmp_s_texColor [[sampler(0)]] )\n"
"{\n"
" return half4(s_texColor.sample(_mtlsmp_s_texColor, _mtl_i.v_texcoord0) );\n"
"}\n"
;
Library lib = m_device.newLibraryWithSource(vshSource);
if (NULL != lib)
{
m_screenshotBlitProgramVsh.m_function = lib.newFunctionWithName(SHADER_FUNCTION_NAME);
}
lib = m_device.newLibraryWithSource(fshSource);
if (NULL != lib)
{
m_screenshotBlitProgramFsh.m_function = lib.newFunctionWithName(SHADER_FUNCTION_NAME);
}
m_screenshotBlitProgram.create(&m_screenshotBlitProgramVsh, &m_screenshotBlitProgramFsh);
reset(m_renderPipelineDescriptor);
@@ -478,7 +485,7 @@ namespace bgfx { namespace mtl
m_screenshotBlitRenderPipelineState = m_device.newRenderPipelineStateWithDescriptor(m_renderPipelineDescriptor);
g_caps.supported |= (0
| BGFX_CAPS_TEXTURE_COMPARE_LEQUAL //NOTE: on IOS Gpu Family 1/2 have to set compare in shader
| BGFX_CAPS_TEXTURE_COMPARE_LEQUAL
| BGFX_CAPS_TEXTURE_COMPARE_ALL
| BGFX_CAPS_TEXTURE_3D
| BGFX_CAPS_VERTEX_ATTRIB_HALF
@@ -491,7 +498,7 @@ namespace bgfx { namespace mtl
| BGFX_CAPS_TEXTURE_READ_BACK
| BGFX_CAPS_OCCLUSION_QUERY
| BGFX_CAPS_ALPHA_TO_COVERAGE
| BGFX_CAPS_TEXTURE_2D_ARRAY // supported on all platforms
| BGFX_CAPS_TEXTURE_2D_ARRAY
);
if (BX_ENABLED(BX_PLATFORM_IOS) )
@@ -516,7 +523,7 @@ namespace bgfx { namespace mtl
//todo: vendor id, device id, gpu enum
m_hasPixelFormatDepth32Float_Stencil8 = false
m_hasPixelFormatDepth32Float_Stencil8 = false
|| BX_ENABLED(BX_PLATFORM_OSX)
|| (BX_ENABLED(BX_PLATFORM_IOS) && iOSVersionEqualOrGreater("9.0.0") )
;
@@ -531,7 +538,7 @@ namespace bgfx { namespace mtl
if (BX_ENABLED(BX_PLATFORM_OSX) )
{
s_textureFormat[TextureFormat::R8].m_fmtSrgb = MTLPixelFormatInvalid;
s_textureFormat[TextureFormat::R8].m_fmtSrgb = MTLPixelFormatInvalid;
s_textureFormat[TextureFormat::RG8].m_fmtSrgb = MTLPixelFormatInvalid;
}
@@ -566,34 +573,34 @@ namespace bgfx { namespace mtl
g_caps.formats[ii] = support;
}
g_caps.formats[TextureFormat::A8] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER | BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
g_caps.formats[TextureFormat::RG32I] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
g_caps.formats[TextureFormat::RG32U] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
g_caps.formats[TextureFormat::A8 ] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER | BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
g_caps.formats[TextureFormat::RG32I ] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
g_caps.formats[TextureFormat::RG32U ] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
g_caps.formats[TextureFormat::RGBA32I] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
g_caps.formats[TextureFormat::RGBA32U] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
if (BX_ENABLED(BX_PLATFORM_IOS) )
{
s_textureFormat[TextureFormat::D24S8].m_fmt = MTLPixelFormatDepth32Float;
g_caps.formats[TextureFormat::BC1] =
g_caps.formats[TextureFormat::BC2] =
g_caps.formats[TextureFormat::BC3] =
g_caps.formats[TextureFormat::BC4] =
g_caps.formats[TextureFormat::BC5] =
g_caps.formats[TextureFormat::BC1 ] =
g_caps.formats[TextureFormat::BC2 ] =
g_caps.formats[TextureFormat::BC3 ] =
g_caps.formats[TextureFormat::BC4 ] =
g_caps.formats[TextureFormat::BC5 ] =
g_caps.formats[TextureFormat::BC6H] =
g_caps.formats[TextureFormat::BC7] = BGFX_CAPS_FORMAT_TEXTURE_NONE;
g_caps.formats[TextureFormat::BC7 ] = BGFX_CAPS_FORMAT_TEXTURE_NONE;
g_caps.formats[TextureFormat::RG32F] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
g_caps.formats[TextureFormat::RG32F ] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
g_caps.formats[TextureFormat::RGBA32F] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
}
if (BX_ENABLED(BX_PLATFORM_OSX) )
{
s_textureFormat[TextureFormat::D24S8].m_fmt = (MTLPixelFormat)(m_device.depth24Stencil8PixelFormatSupported() ?
255 /* Depth24Unorm_Stencil8 */ :
MTLPixelFormatDepth32Float_Stencil8);
s_textureFormat[TextureFormat::D24S8].m_fmt = (MTLPixelFormat)(m_device.depth24Stencil8PixelFormatSupported()
? 255 /* Depth24Unorm_Stencil8 */
: MTLPixelFormatDepth32Float_Stencil8)
;
g_caps.formats[TextureFormat::ETC2 ] =
g_caps.formats[TextureFormat::ETC2A ] =
@@ -618,7 +625,7 @@ namespace bgfx { namespace mtl
}
}
for(uint32_t ii=1; ii<5; ++ii)
for (uint32_t ii=1; ii<5; ++ii)
{
if (!m_device.supportsTextureSampleCount(s_msaa[ii]) )
{
@@ -626,7 +633,6 @@ namespace bgfx { namespace mtl
}
}
// Init reserved part of view name.
for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii)
{
@@ -990,9 +996,10 @@ namespace bgfx { namespace mtl
FrameBufferHandle fbh = BGFX_INVALID_HANDLE;
if ( NULL == rce || m_renderCommandEncoderFrameBufferHandle.idx != invalidHandle )
if (NULL == rce
|| m_renderCommandEncoderFrameBufferHandle.idx != invalidHandle)
{
if ( m_renderCommandEncoder )
if (m_renderCommandEncoder )
m_renderCommandEncoder.endEncoding();
RenderPassDescriptor renderPassDescriptor = newRenderPassDescriptor();
@@ -1081,7 +1088,7 @@ namespace bgfx { namespace mtl
}
// Present and commit the command buffer
if ( NULL != m_drawable)
if (NULL != m_drawable)
{
m_commandBuffer.presentDrawable(m_drawable);
MTL_RELEASE(m_drawable);
@@ -1135,7 +1142,8 @@ namespace bgfx { namespace mtl
m_textureDescriptor.mipmapLevelCount = 1;
m_textureDescriptor.sampleCount = sampleCount;
m_textureDescriptor.arrayLength = 1;
if ( m_iOS9Runtime || m_macOS11Runtime )
if (m_iOS9Runtime
|| m_macOS11Runtime)
{
m_textureDescriptor.cpuCacheMode = MTLCPUCacheModeDefaultCache;
m_textureDescriptor.storageMode = MTLStorageModePrivate;
@@ -1148,16 +1156,17 @@ namespace bgfx { namespace mtl
}
m_backBufferDepth = m_device.newTextureWithDescriptor(m_textureDescriptor);
if (m_hasPixelFormatDepth32Float_Stencil8)
{
m_backBufferStencil = m_backBufferDepth;
}
else
{
m_textureDescriptor.pixelFormat = MTLPixelFormatStencil8;
m_backBufferStencil = m_device.newTextureWithDescriptor(m_textureDescriptor);
}
if ( sampleCount > 1 )
if (sampleCount > 1)
{
if (NULL != m_backBufferColorMSAA)
{
@@ -1186,7 +1195,7 @@ namespace bgfx { namespace mtl
m_textVideoMem.resize(false, _resolution.m_width, _resolution.m_height);
m_textVideoMem.clear();
if ( prevMetalLayerPixelFormat != m_metalLayer.pixelFormat)
if (prevMetalLayerPixelFormat != m_metalLayer.pixelFormat)
{
MTL_RELEASE(m_screenshotBlitRenderPipelineState)
reset(m_renderPipelineDescriptor);
@@ -1682,8 +1691,8 @@ namespace bgfx { namespace mtl
m_samplerDescriptor.normalizedCoordinates = TRUE;
m_samplerDescriptor.maxAnisotropy = (0 != (_flags & (BGFX_TEXTURE_MIN_ANISOTROPIC|BGFX_TEXTURE_MAG_ANISOTROPIC) ) ) ? m_maxAnisotropy : 1;
//NOTE: Comparison function can be specified in shader on all metal hw.
if ( m_macOS11Runtime || [m_device supportsFeatureSet:(MTLFeatureSet)4/*MTLFeatureSet_iOS_GPUFamily3_v1*/])
if (m_macOS11Runtime
|| [m_device supportsFeatureSet:(MTLFeatureSet)4 /*MTLFeatureSet_iOS_GPUFamily3_v1*/])
{
const uint32_t cmpFunc = (_flags&BGFX_TEXTURE_COMPARE_MASK)>>BGFX_TEXTURE_COMPARE_SHIFT;
m_samplerDescriptor.compareFunction = 0 == cmpFunc ? MTLCompareFunctionNever : s_cmpFunc[cmpFunc];
@@ -1704,9 +1713,9 @@ namespace bgfx { namespace mtl
BlitCommandEncoder getBlitCommandEncoder()
{
if ( m_blitCommandEncoder == NULL)
if (m_blitCommandEncoder == NULL)
{
if ( m_commandBuffer == NULL )
if (m_commandBuffer == NULL)
{
m_commandBuffer = m_cmd.alloc();
}
@@ -2070,7 +2079,7 @@ namespace bgfx { namespace mtl
}
else
{
if ( texture.m_textureFormat == TextureFormat::D24S8)
if (texture.m_textureFormat == TextureFormat::D24S8)
{
pd.stencilAttachmentPixelFormat = texture.m_ptr.m_obj.pixelFormat;
}
@@ -2353,12 +2362,15 @@ namespace bgfx { namespace mtl
m_bufferIndex = (m_bufferIndex + 1) % MTL_MAX_FRAMES_IN_FLIGHT;
bx::memCopy( (uint8_t*)getBuffer().contents() + _offset, _data, _size);
}
else if ( NULL != s_renderMtl->m_renderCommandEncoder )
else if (NULL != s_renderMtl->m_renderCommandEncoder)
{
s_renderMtl->m_cmd.release(m_buffers[m_bufferIndex]);
if (_offset == 0 && _size == m_size)
if (_offset == 0
&& _size == m_size)
{
m_buffers[m_bufferIndex] = s_renderMtl->m_device.newBufferWithBytes(_data, _size, 0);
}
else
{
const void* oldContent = m_buffers[m_bufferIndex].contents();
@@ -2521,12 +2533,15 @@ namespace bgfx { namespace mtl
m_ptr = s_renderMtl->m_device.newTextureWithDescriptor(desc);
if ( sampleCount > 1)
if (sampleCount > 1)
{
desc.textureType = MTLTextureType2DMultisample;
desc.sampleCount = sampleCount;
if (s_renderMtl->m_iOS9Runtime || s_renderMtl->m_macOS11Runtime)
if (s_renderMtl->m_iOS9Runtime
|| s_renderMtl->m_macOS11Runtime)
{
desc.storageMode = (MTLStorageMode)( 2 /*MTLStorageModePrivate*/);
}
m_ptrMSAA = s_renderMtl->m_device.newTextureWithDescriptor(desc);
}
@@ -2645,13 +2660,13 @@ namespace bgfx { namespace mtl
data = temp;
}
if ( NULL != s_renderMtl->m_renderCommandEncoder )
if (NULL != s_renderMtl->m_renderCommandEncoder)
{
s_renderMtl->m_cmd.finish(true);
MTLRegion region =
{
{ _rect.m_x, _rect.m_y, z },
{ _rect.m_x, _rect.m_y, z },
{ _rect.m_width, _rect.m_height, _depth },
};
@@ -2727,7 +2742,7 @@ namespace bgfx { namespace mtl
{
const TextureMtl& texture = s_renderMtl->m_textures[handle.idx];
if ( 0 == m_width )
if (0 == m_width)
{
m_width = texture.m_width;
m_height = texture.m_height;
@@ -2814,34 +2829,42 @@ namespace bgfx { namespace mtl
static void commandBufferFinishedCallback(void* _data)
{
CommandQueueMtl* queue = (CommandQueueMtl*)_data;
if ( queue )
if (queue)
{
queue->m_framesSemaphore.post();
}
}
void CommandQueueMtl::kick(bool _endFrame, bool _waitForFinish)
{
if ( m_activeCommandBuffer )
if (m_activeCommandBuffer)
{
if ( _endFrame )
if (_endFrame)
{
m_releaseWriteIndex = (m_releaseWriteIndex + 1) % MTL_MAX_FRAMES_IN_FLIGHT;
m_activeCommandBuffer.addCompletedHandler(commandBufferFinishedCallback, this);
}
m_activeCommandBuffer.commit();
if ( _waitForFinish )
if (_waitForFinish)
{
m_activeCommandBuffer.waitUntilCompleted();
}
MTL_RELEASE(m_activeCommandBuffer);
}
}
void CommandQueueMtl::finish(bool _finishAll)
{
if ( _finishAll)
if (_finishAll)
{
int count = m_activeCommandBuffer != NULL ? 2 : 3;
uint32_t count = m_activeCommandBuffer != NULL
? 2
: 3
;
for( int i=0; i< count; ++i)
for (uint32_t ii = 0; ii < count; ++ii)
{
consume();
}
@@ -3009,7 +3032,7 @@ namespace bgfx { namespace mtl
bool readBack = !!(dst.m_flags & BGFX_TEXTURE_READ_BACK);
#endif // BX_PLATFORM_OSX
if ( MTLTextureType3D == src.m_ptr.textureType() )
if (MTLTextureType3D == src.m_ptr.textureType() )
{
m_blitCommandEncoder.copyFromTexture(
src.m_ptr
@@ -3104,14 +3127,20 @@ namespace bgfx { namespace mtl
m_textureDescriptor.mipmapLevelCount = 1;
m_textureDescriptor.sampleCount = 1;
m_textureDescriptor.arrayLength = 1;
if ( m_iOS9Runtime || m_macOS11Runtime )
if (m_iOS9Runtime
|| m_macOS11Runtime)
{
m_textureDescriptor.cpuCacheMode = MTLCPUCacheModeDefaultCache;
m_textureDescriptor.storageMode = (MTLStorageMode)(BX_ENABLED(BX_PLATFORM_IOS)
? 0 /* MTLStorageModeShared */
: 1 /*MTLStorageModeManaged*/
);
m_textureDescriptor.usage = MTLTextureUsageRenderTarget | MTLTextureUsageShaderRead;
m_textureDescriptor.storageMode = BX_ENABLED(BX_PLATFORM_IOS)
? (MTLStorageMode)0 // MTLStorageModeShared
: (MTLStorageMode)1 // MTLStorageModeManaged
;
m_textureDescriptor.usage = 0
| MTLTextureUsageRenderTarget
| MTLTextureUsageShaderRead
;
}
m_screenshotTarget = m_device.newTextureWithDescriptor(m_textureDescriptor);
@@ -3263,7 +3292,8 @@ namespace bgfx { namespace mtl
Rect viewRect = viewState.m_rect;
bool clearWithRenderPass = false;
if ( NULL == m_renderCommandEncoder || fbh.idx != _render->m_fb[view].idx )
if (NULL == m_renderCommandEncoder
|| fbh.idx != _render->m_fb[view].idx)
{
if (0 != m_renderCommandEncoder)
{
@@ -3278,10 +3308,10 @@ namespace bgfx { namespace mtl
uint32_t width = m_resolution.m_width;
uint32_t height = m_resolution.m_height;
if ( isValid(fbh) )
if (isValid(fbh) )
{
FrameBufferMtl& frameBuffer = m_frameBuffers[fbh.idx];
width = frameBuffer.m_width;
width = frameBuffer.m_width;
height = frameBuffer.m_height;
}
@@ -3293,14 +3323,13 @@ namespace bgfx { namespace mtl
setFrameBuffer(renderPassDescriptor, fbh);
if ( clearWithRenderPass )
if (clearWithRenderPass)
{
for(uint32_t ii = 0; ii < g_caps.limits.maxFBAttachments; ++ii)
for (uint32_t ii = 0; ii < g_caps.limits.maxFBAttachments; ++ii)
{
MTLRenderPassColorAttachmentDescriptor* desc = renderPassDescriptor.colorAttachments[ii];
if ( desc.texture != NULL)
if (desc.texture != NULL)
{
if (0 != (BGFX_CLEAR_COLOR & clr.m_flags) )
{
@@ -3338,10 +3367,13 @@ namespace bgfx { namespace mtl
{
depthAttachment.clearDepth = clr.m_depth;
depthAttachment.loadAction = 0 != (BGFX_CLEAR_DEPTH & clr.m_flags)
? MTLLoadActionClear
: MTLLoadActionLoad
;
depthAttachment.storeAction = NULL != m_backBufferColorMSAA ? MTLStoreActionDontCare : MTLStoreActionStore;
? MTLLoadActionClear
: MTLLoadActionLoad
;
depthAttachment.storeAction = NULL != m_backBufferColorMSAA
? MTLStoreActionDontCare
: MTLStoreActionStore
;
}
RenderPassStencilAttachmentDescriptor stencilAttachment = renderPassDescriptor.stencilAttachment;
@@ -3349,19 +3381,24 @@ namespace bgfx { namespace mtl
{
stencilAttachment.clearStencil = clr.m_stencil;
stencilAttachment.loadAction = 0 != (BGFX_CLEAR_STENCIL & clr.m_flags)
? MTLLoadActionClear
: MTLLoadActionLoad
;
stencilAttachment.storeAction = NULL != m_backBufferColorMSAA ? MTLStoreActionDontCare : MTLStoreActionStore;
? MTLLoadActionClear
: MTLLoadActionLoad
;
stencilAttachment.storeAction = NULL != m_backBufferColorMSAA
? MTLStoreActionDontCare
: MTLStoreActionStore
;
}
}
else
{
for(uint32_t ii = 0; ii < g_caps.limits.maxFBAttachments; ++ii)
for (uint32_t ii = 0; ii < g_caps.limits.maxFBAttachments; ++ii)
{
MTLRenderPassColorAttachmentDescriptor* desc = renderPassDescriptor.colorAttachments[ii];
if ( desc.texture != NULL)
if (desc.texture != NULL)
{
desc.loadAction = MTLLoadActionLoad;
}
}
RenderPassDepthAttachmentDescriptor depthAttachment = renderPassDescriptor.depthAttachment;
@@ -3493,6 +3530,7 @@ namespace bgfx { namespace mtl
{
Rect scissorRect;
scissorRect.setIntersect(viewScissorRect, _render->m_rectCache.m_cache[scissor]);
if (scissorRect.isZeroArea() )
{
continue;
@@ -3953,8 +3991,7 @@ namespace bgfx { namespace mtl
m_renderCommandEncoder = 0;
m_renderCommandEncoderFrameBufferHandle.idx = invalidHandle;
if ( m_screenshotTarget )
if (m_screenshotTarget)
{
RenderPassDescriptor renderPassDescriptor = newRenderPassDescriptor();
renderPassDescriptor.colorAttachments[0].texture = currentDrawable().texture;
@@ -3972,7 +4009,7 @@ namespace bgfx { namespace mtl
rce.drawPrimitives(MTLPrimitiveTypeTriangle, 0, 3, 1);
rce.endEncoding();
}
}
}
} /* namespace mtl */ } // namespace bgfx