This commit is contained in:
Branimir Karadžić 2018-04-03 11:28:40 -07:00
parent a9024a9ba5
commit 1f9c077236

View File

@ -65,23 +65,45 @@ namespace bgfx { namespace mtl
typedef void (*mtlCallback)(void* userData);
MTL_CLASS(BlitCommandEncoder)
void copyFromTexture(id<MTLTexture> _sourceTexture, NSUInteger _sourceSlice, NSUInteger _sourceLevel, MTLOrigin _sourceOrigin, MTLSize _sourceSize,
id<MTLTexture> _destinationTexture, NSUInteger _destinationSlice, NSUInteger _destinationLevel, MTLOrigin _destinationOrigin)
void copyFromTexture(
id<MTLTexture> _sourceTexture
, NSUInteger _sourceSlice
, NSUInteger _sourceLevel
, MTLOrigin _sourceOrigin
, MTLSize _sourceSize
, id<MTLTexture> _destinationTexture
, NSUInteger _destinationSlice
, NSUInteger _destinationLevel
, MTLOrigin _destinationOrigin
)
{
[m_obj copyFromTexture:_sourceTexture sourceSlice:_sourceSlice sourceLevel:_sourceLevel sourceOrigin:_sourceOrigin sourceSize:_sourceSize
toTexture:_destinationTexture destinationSlice:_destinationSlice destinationLevel:_destinationLevel destinationOrigin:_destinationOrigin];
}
void copyFromBuffer(id<MTLBuffer> _sourceBuffer, NSUInteger _sourceOffset, id<MTLBuffer> _destinationBuffer,
NSUInteger _destinationOffset, NSUInteger _size)
void copyFromBuffer(
id<MTLBuffer> _sourceBuffer
, NSUInteger _sourceOffset
, id<MTLBuffer> _destinationBuffer
, NSUInteger _destinationOffset
, NSUInteger _size
)
{
[m_obj copyFromBuffer:_sourceBuffer sourceOffset:_sourceOffset toBuffer:_destinationBuffer
destinationOffset:_destinationOffset size:_size];
}
void copyFromBuffer(id<MTLBuffer> _sourceBuffer, NSUInteger _sourceOffset, NSUInteger _sourceBytesPerRow,
NSUInteger _sourceBytesPerImage, MTLSize _sourceSize, id<MTLTexture> _destinationTexture,
NSUInteger _destinationSlice, NSUInteger _destinationLevel, MTLOrigin _destinationOrigin)
void copyFromBuffer(
id<MTLBuffer> _sourceBuffer
, NSUInteger _sourceOffset
, NSUInteger _sourceBytesPerRow
, NSUInteger _sourceBytesPerImage
, MTLSize _sourceSize
, id<MTLTexture> _destinationTexture
, NSUInteger _destinationSlice
, NSUInteger _destinationLevel
, MTLOrigin _destinationOrigin
)
{
[m_obj copyFromBuffer:_sourceBuffer sourceOffset:_sourceOffset sourceBytesPerRow:_sourceBytesPerRow
sourceBytesPerImage:_sourceBytesPerImage sourceSize:_sourceSize toTexture:_destinationTexture
@ -120,7 +142,7 @@ namespace bgfx { namespace mtl
MTL_CLASS(CommandBuffer)
// Creating Command Encoders
id<MTLRenderCommandEncoder> renderCommandEncoderWithDescriptor( MTLRenderPassDescriptor* _renderPassDescriptor){
id<MTLRenderCommandEncoder> renderCommandEncoderWithDescriptor(MTLRenderPassDescriptor* _renderPassDescriptor){
return [m_obj renderCommandEncoderWithDescriptor:_renderPassDescriptor];
}
@ -281,7 +303,11 @@ namespace bgfx { namespace mtl
return state;
}
id <MTLRenderPipelineState> newRenderPipelineStateWithDescriptor(MTLRenderPipelineDescriptor* _descriptor, MTLPipelineOption _options, MTLRenderPipelineReflection** _reflection)
id <MTLRenderPipelineState> newRenderPipelineStateWithDescriptor(
MTLRenderPipelineDescriptor* _descriptor
, MTLPipelineOption _options
, MTLRenderPipelineReflection** _reflection
)
{
NSError* error;
id <MTLRenderPipelineState> state = [m_obj newRenderPipelineStateWithDescriptor:_descriptor options:_options reflection:_reflection error:&error];
@ -325,7 +351,10 @@ namespace bgfx { namespace mtl
MTL_CLASS_END
MTL_CLASS(Function)
NSArray* vertexAttributes() { return m_obj.vertexAttributes; }
NSArray* vertexAttributes()
{
return m_obj.vertexAttributes;
}
void setLabel(const char* _label)
{
@ -337,7 +366,10 @@ namespace bgfx { namespace mtl
MTL_CLASS_END
MTL_CLASS(Library)
id <MTLFunction> newFunctionWithName(const char* _functionName) { return [m_obj newFunctionWithName:@(_functionName)]; }
id <MTLFunction> newFunctionWithName(const char* _functionName)
{
return [m_obj newFunctionWithName:@(_functionName)];
}
MTL_CLASS_END
MTL_CLASS(RenderCommandEncoder)
@ -431,12 +463,24 @@ namespace bgfx { namespace mtl
//Drawing Geometric Primitives
//NOTE: not exposing functions without instanceCount, it seems they are just wrappers
void drawIndexedPrimitives(MTLPrimitiveType _primitiveType, NSUInteger _indexCount, MTLIndexType _indexType, id<MTLBuffer> _indexBuffer, NSUInteger _indexBufferOffset, NSUInteger _instanceCount)
void drawIndexedPrimitives(
MTLPrimitiveType _primitiveType
, NSUInteger _indexCount
, MTLIndexType _indexType
, id<MTLBuffer> _indexBuffer
, NSUInteger _indexBufferOffset
, NSUInteger _instanceCount
)
{
[m_obj drawIndexedPrimitives:_primitiveType indexCount:_indexCount indexType:_indexType indexBuffer:_indexBuffer indexBufferOffset:_indexBufferOffset instanceCount:_instanceCount];
}
void drawPrimitives(MTLPrimitiveType _primitiveType, NSUInteger _vertexStart, NSUInteger _vertexCount, NSUInteger _instanceCount)
void drawPrimitives(
MTLPrimitiveType _primitiveType
, NSUInteger _vertexStart
, NSUInteger _vertexCount
, NSUInteger _instanceCount
)
{
[m_obj drawPrimitives:_primitiveType vertexStart:_vertexStart vertexCount:_vertexCount instanceCount:_instanceCount];
}
@ -603,10 +647,10 @@ namespace bgfx { namespace mtl
return [_str UTF8String];
}
#define MTL_RELEASE(_obj) \
#define MTL_RELEASE(_obj) \
BX_MACRO_BLOCK_BEGIN \
[_obj release]; \
_obj = nil; \
[_obj release]; \
_obj = nil; \
BX_MACRO_BLOCK_END
// end of c++ wrapper
@ -670,7 +714,9 @@ namespace bgfx { namespace mtl
, m_bufferIndex(0)
{
for (uint32_t ii = 0; ii < MTL_MAX_FRAMES_IN_FLIGHT; ++ii)
{
m_buffers[ii] = NULL;
}
}
void create(uint32_t _size, void* _data, uint16_t _flags, uint16_t _stride = 0, bool _vertex = false);
@ -682,6 +728,7 @@ namespace bgfx { namespace mtl
{
MTL_RELEASE(m_buffers[ii]);
}
m_dynamic = false;
}
@ -748,9 +795,15 @@ namespace bgfx { namespace mtl
void create(const ShaderMtl* _vsh, const ShaderMtl* _fsh);
void destroy();
RenderPipelineState getRenderPipelineState(uint64_t _state, uint32_t _rgba, FrameBufferHandle _fbHandle, VertexDeclHandle _declHandle, uint16_t _numInstanceData);
RenderPipelineState getRenderPipelineState(
uint64_t _state
, uint32_t _rgba
, FrameBufferHandle _fbHandle
, VertexDeclHandle _declHandle
, uint16_t _numInstanceData
);
StateCacheT<RenderPipelineState> m_renderPipelineStateCache;
StateCacheT<RenderPipelineState> m_renderPipelineStateCache;
uint8_t m_used[Attrib::Count+1]; // dense
uint32_t m_attributes[Attrib::Count]; // sparse
@ -808,8 +861,21 @@ namespace bgfx { namespace mtl
MTL_RELEASE(m_ptr);
MTL_RELEASE(m_ptrStencil);
}
void update(uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem);
void commit(uint8_t _stage, bool _vertex, bool _fragment, uint32_t _flags = BGFX_TEXTURE_INTERNAL_DEFAULT_SAMPLER);
void update(
uint8_t _side
, uint8_t _mip
, const Rect& _rect
, uint16_t _z
, uint16_t _depth
, uint16_t _pitch
, const Memory* _mem
);
void commit(
uint8_t _stage
, bool _vertex
, bool _fragment
, uint32_t _flags = BGFX_TEXTURE_INTERNAL_DEFAULT_SAMPLER
);
Texture m_ptr;
Texture m_ptrMSAA;
@ -836,7 +902,13 @@ namespace bgfx { namespace mtl
}
void create(uint8_t _num, const Attachment* _attachment);
void create(uint16_t _denseIdx, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat);
void create(
uint16_t _denseIdx
, void* _nwh
, uint32_t _width
, uint32_t _height
, TextureFormat::Enum _depthFormat
);
void postReset();
uint16_t destroy();
@ -854,7 +926,9 @@ namespace bgfx { namespace mtl
struct CommandQueueMtl
{
CommandQueueMtl() : m_releaseWriteIndex(0), m_releaseReadIndex(0)
CommandQueueMtl()
: m_releaseWriteIndex(0)
, m_releaseReadIndex(0)
{
}
@ -880,7 +954,7 @@ namespace bgfx { namespace mtl
struct TimerQueryMtl
{
TimerQueryMtl()
: m_control(4)
: m_control(4)
{
}