Branimir Karadžić 9 年之前
父节点
当前提交
77033fe74e
共有 2 个文件被更改,包括 44 次插入44 次删除
  1. 4 4
      src/renderer_mtl.h
  2. 40 40
      src/renderer_mtl.mm

+ 4 - 4
src/renderer_mtl.h

@@ -29,7 +29,7 @@ namespace bgfx { namespace mtl
 		return false;
 #endif
 	}
-	
+
 	inline bool macOSVersionEqualOrGreater(NSInteger _majorVersion,
 										   NSInteger _minorVersion,
 										   NSInteger _patchVersion)
@@ -43,8 +43,8 @@ namespace bgfx { namespace mtl
 		return false;
 #endif
 	}
-	
-	
+
+
 	// c++ wrapper
 	// objects with creation functions starting with 'new' has a refcount 1 after creation, object must be destroyed with release.
 	// commandBuffer, commandEncoders are autoreleased objects. Needs AutoreleasePool!
@@ -275,7 +275,7 @@ namespace bgfx { namespace mtl
 				);
 			return state;
 		}
-	
+
 		bool supportsTextureSampleCount(int sampleCount)
 		{
 			if (BX_ENABLED(BX_PLATFORM_IOS) && !iOSVersionEqualOrGreater("9.0.0") )

+ 40 - 40
src/renderer_mtl.mm

@@ -38,7 +38,7 @@ Known issues(driver problems??):
 			Only on this device ( no problem on iPad Air 2 with iOS9.3.1)
 
   TODOs:
- 
+
  - texture msaa: 09-hdr
  - texture blit support: 08-update, 09-hdr
  - texture read_back: 09-hdr
@@ -50,7 +50,7 @@ Known issues(driver problems??):
 
  - 14-shadowvolumes: texture as stencil mode - columns are dark
  - backbuffer msaa color/depth/stencil is not saved. could have problem with views like: backbuffermsaa then rt then backbuffermsaa again
- 
+
  - finish savescreenshot with screenshotbegin/end
 
  - support multiple windows: 22-windows
@@ -342,7 +342,7 @@ namespace bgfx { namespace mtl
 	BX_STATIC_ASSERT(TextureFormat::Count == BX_COUNTOF(s_textureFormat) );
 
 	int s_msaa[5] = { 1,2,4,8,16 };
-	
+
 	#define SHADER_FUNCTION_NAME ("xlatMtlMain")
 	#define SHADER_UNIFORM_NAME ("_mtl_u")
 
@@ -466,7 +466,7 @@ namespace bgfx { namespace mtl
 			m_renderPipelineDescriptor.vertexFunction = m_screenshotBlitProgram.m_vsh->m_function;
 			m_renderPipelineDescriptor.fragmentFunction = m_screenshotBlitProgram.m_fsh->m_function;
 			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_ALL
@@ -599,7 +599,7 @@ namespace bgfx { namespace mtl
 					s_textureFormat[ii].m_fmtSrgb = MTLPixelFormatInvalid;
 				}
 			}
-			
+
 			for(uint32_t ii=1; ii<5; ++ii)
 			{
 				if (!m_device.supportsTextureSampleCount(s_msaa[ii]))
@@ -1083,9 +1083,9 @@ namespace bgfx { namespace mtl
 				|| (m_resolution.m_flags&maskFlags) != (_resolution.m_flags&maskFlags) )
 			{
 				int sampleCount = s_msaa[(_resolution.m_flags&BGFX_RESET_MSAA_MASK)>>BGFX_RESET_MSAA_SHIFT];
-			
+
 				MTLPixelFormat prevMetalLayerPixelFormat = m_metalLayer.pixelFormat;
-				
+
 				m_metalLayer.drawableSize = CGSizeMake(_resolution.m_width, _resolution.m_height);
 				m_metalLayer.pixelFormat = (m_resolution.m_flags & BGFX_RESET_SRGB_BACKBUFFER)
 								? MTLPixelFormatBGRA8Unorm_sRGB
@@ -1139,7 +1139,7 @@ namespace bgfx { namespace mtl
 					m_textureDescriptor.pixelFormat = m_metalLayer.pixelFormat;
 					m_backBufferColorMSAA   = m_device.newTextureWithDescriptor(m_textureDescriptor);
 				}
-				
+
 				bx::HashMurmur2A murmur;
 				murmur.begin();
 				murmur.add(1);
@@ -1156,7 +1156,7 @@ namespace bgfx { namespace mtl
 
 				m_textVideoMem.resize(false, _resolution.m_width, _resolution.m_height);
 				m_textVideoMem.clear();
-		
+
 				if ( prevMetalLayerPixelFormat != m_metalLayer.pixelFormat)
 				{
 					MTL_RELEASE(m_screenshotBlitRenderPipelineState)
@@ -1275,7 +1275,7 @@ namespace bgfx { namespace mtl
 		{
 			uint32_t width;
 			uint32_t height;
-			
+
 			if (isValid(m_fbh) )
 			{
 				const FrameBufferMtl& fb = m_frameBuffers[m_fbh.idx];
@@ -1287,12 +1287,12 @@ namespace bgfx { namespace mtl
 				width  = getBufferWidth();
 				height = getBufferHeight();
 			}
-			
-			
+
+
 			uint64_t state = 0;
 			state |= _clear.m_flags & BGFX_CLEAR_COLOR ? BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE : 0;
 			state |= _clear.m_flags & BGFX_CLEAR_DEPTH ? BGFX_STATE_DEPTH_TEST_ALWAYS|BGFX_STATE_DEPTH_WRITE : 0;
-			
+
 			uint64_t stencil = 0;
 			stencil |= _clear.m_flags & BGFX_CLEAR_STENCIL ? 0
 			| BGFX_STENCIL_TEST_ALWAYS
@@ -1303,9 +1303,9 @@ namespace bgfx { namespace mtl
 			| BGFX_STENCIL_OP_PASS_Z_REPLACE
 			: 0
 			;
-			
+
 			setDepthStencilState(state, stencil);
-			
+
 			uint32_t numMrt = 1;
 			FrameBufferHandle fbh = m_fbh;
 			if (isValid(fbh) )
@@ -1313,12 +1313,12 @@ namespace bgfx { namespace mtl
 				const FrameBufferMtl& fb = m_frameBuffers[fbh.idx];
 				numMrt = bx::uint32_max(1, fb.m_num);
 			}
-			
+
 			ProgramMtl& program = m_program[_clearQuad.m_program[numMrt-1].idx];
 			m_renderCommandEncoder.setRenderPipelineState(program.getRenderPipelineState(state, 0, fbh, _clearQuad.m_vb->decl, 0));
-			
+
 			uint32_t fragmentUniformBufferSize = program.m_fshConstantBufferSize;
-			
+
 			m_uniformBufferFragmentOffset = m_uniformBufferVertexOffset;
 			if (fragmentUniformBufferSize)
 			{
@@ -1334,7 +1334,7 @@ namespace bgfx { namespace mtl
 					uint8_t index = (uint8_t)bx::uint32_min(BGFX_CONFIG_MAX_COLOR_PALETTE-1, _clear.m_index[ii]);
 					memcpy(mrtClear[ii], _palette[index], 16);
 				}
-				
+
 				memcpy((uint8_t*)m_uniformBuffer.contents() + m_uniformBufferFragmentOffset,
 					   mrtClear,
 					   bx::uint32_min(fragmentUniformBufferSize, sizeof(mrtClear)));
@@ -1348,12 +1348,12 @@ namespace bgfx { namespace mtl
 					_clear.m_index[2]*1.0f/255.0f,
 					_clear.m_index[3]*1.0f/255.0f,
 				};
-				
+
 				memcpy((uint8_t*)m_uniformBuffer.contents() + m_uniformBufferFragmentOffset,
 					   rgba,
 					   bx::uint32_min(fragmentUniformBufferSize, sizeof(rgba)));
 			}
-			
+
 			m_uniformBufferFragmentOffset += fragmentUniformBufferSize;
 			m_uniformBufferVertexOffset = m_uniformBufferFragmentOffset;
 
@@ -1361,7 +1361,7 @@ namespace bgfx { namespace mtl
 			const VertexDecl& vertexDecl = m_vertexDecls[_clearQuad.m_vb->decl.idx];
 			const uint32_t stride = vertexDecl.m_stride;
 			const uint32_t offset = 0;
-			
+
 			{
 				struct Vertex
 				{
@@ -1369,12 +1369,12 @@ namespace bgfx { namespace mtl
 					float m_y;
 					float m_z;
 				};
-				
+
 				Vertex* vertex = (Vertex*)_clearQuad.m_vb->data;
 				BX_CHECK(stride == sizeof(Vertex), "Stride/Vertex mismatch (stride %d, sizeof(Vertex) %d)", stride, sizeof(Vertex) );
-				
+
 				const float depth = _clear.m_depth;
-				
+
 				vertex->m_x = -1.0f;
 				vertex->m_y = -1.0f;
 				vertex->m_z = depth;
@@ -1391,7 +1391,7 @@ namespace bgfx { namespace mtl
 				vertex->m_y =  1.0f;
 				vertex->m_z = depth;
 			}
-			
+
 			m_vertexBuffers[_clearQuad.m_vb->handle.idx].update(0, 4*_clearQuad.m_decl.m_stride, _clearQuad.m_vb->data);
 			m_renderCommandEncoder.setCullMode(MTLCullModeNone);
 			m_renderCommandEncoder.setVertexBuffer(vb.getBuffer(), offset, 1);
@@ -2492,7 +2492,7 @@ namespace bgfx { namespace mtl
 		murmur.add((uint32_t)depthTexture.m_ptr.pixelFormat());
 		murmur.add((uint32_t)(NULL != depthTexture.m_ptrStencil ? depthTexture.m_ptrStencil.pixelFormat() : MTLPixelFormatInvalid));
 		murmur.add(1); //SampleCount
-		
+
 		m_pixelFormatHash = murmur.end();
 	}
 
@@ -2631,7 +2631,7 @@ namespace bgfx { namespace mtl
 		}
 
 		updateResolution(_render->m_resolution);
-		
+
 		if ( m_saveScreenshot )
 		{
 			if ( m_screenshotTarget )
@@ -2810,16 +2810,16 @@ namespace bgfx { namespace mtl
 					{
 						RenderPassDescriptor renderPassDescriptor = newRenderPassDescriptor();
 						renderPassDescriptor.visibilityResultBuffer = m_occlusionQuery.m_buffer;
-						
+
 						fbh = _render->m_fb[view];
 						setFrameBuffer(renderPassDescriptor, fbh);
-						
+
 						if ( clearWithRenderPass )
 						{
 							for(uint32_t ii = 0; ii < g_caps.maxFBAttachments; ++ii)
 							{
 								MTLRenderPassColorAttachmentDescriptor* desc = renderPassDescriptor.colorAttachments[ii];
-								
+
 								if ( desc.texture != NULL)
 								{
 									if (0 != (BGFX_CLEAR_COLOR & clr.m_flags) )
@@ -2842,7 +2842,7 @@ namespace bgfx { namespace mtl
 											float aa = clr.m_index[3]*1.0f/255.0f;
 											desc.clearColor = MTLClearColorMake(rr, gg, bb, aa);
 										}
-										
+
 										desc.loadAction = MTLLoadActionClear;
 									}
 									else
@@ -2852,7 +2852,7 @@ namespace bgfx { namespace mtl
 									desc.storeAction = NULL != m_backBufferColorMSAA ? MTLStoreActionMultisampleResolve : MTLStoreActionStore;
 								}
 							}
-							
+
 							//TODO: optimize store actions use discard flag
 							RenderPassDepthAttachmentDescriptor depthAttachment = renderPassDescriptor.depthAttachment;
 							if (NULL != depthAttachment.texture)
@@ -2864,7 +2864,7 @@ namespace bgfx { namespace mtl
 								;
 								depthAttachment.storeAction = NULL != m_backBufferColorMSAA ? MTLStoreActionDontCare : MTLStoreActionStore;
 							}
-							
+
 							RenderPassStencilAttachmentDescriptor stencilAttachment = renderPassDescriptor.stencilAttachment;
 							if (NULL != stencilAttachment.texture)
 							{
@@ -2884,7 +2884,7 @@ namespace bgfx { namespace mtl
 								if ( desc.texture != NULL)
 									desc.loadAction = MTLLoadActionLoad;
 							}
-							
+
 							//TODO: optimize store actions use discard flag
 							RenderPassDepthAttachmentDescriptor depthAttachment = renderPassDescriptor.depthAttachment;
 							if (NULL != depthAttachment.texture)
@@ -2892,7 +2892,7 @@ namespace bgfx { namespace mtl
 								depthAttachment.loadAction = MTLLoadActionLoad;
 								depthAttachment.storeAction = MTLStoreActionStore;
 							}
-							
+
 							RenderPassStencilAttachmentDescriptor stencilAttachment = renderPassDescriptor.stencilAttachment;
 							if (NULL != stencilAttachment.texture)
 							{
@@ -2901,12 +2901,12 @@ namespace bgfx { namespace mtl
 								stencilAttachment.storeAction  = MTLStoreActionStore;
 							}
 						}
-						
+
 						if (0 != m_renderCommandEncoder)
 						{
 							m_renderCommandEncoder.endEncoding();
 						}
-						
+
 						rce = m_commandBuffer.renderCommandEncoderWithDescriptor(renderPassDescriptor);
 						m_renderCommandEncoder = rce;
 						m_renderCommandEncoderFrameBufferHandle = fbh;
@@ -3106,7 +3106,7 @@ namespace bgfx { namespace mtl
 						currentProgram = &program;
 
 						RenderPipelineState pipelineState = NULL;
-						
+
 						if ( isValid(draw.m_vertexBuffer) )
 						{
 							uint16_t handle = draw.m_vertexBuffer.idx;
@@ -3116,7 +3116,7 @@ namespace bgfx { namespace mtl
 
 							pipelineState = program.getRenderPipelineState(newFlags, draw.m_rgba, fbh, decl, draw.m_instanceDataStride/16);
 						}
-						
+
 						if (NULL == pipelineState )
 						{  //call with invalid program
 							currentProgram = NULL;