mirror of
https://github.com/bkaradzic/bgfx.git
synced 2026-02-18 04:53:06 +01:00
Cleanup.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user