DrawPrimitives, BindGraphicsPipeline, misc cleanup
							parent
							
								
									c327c3547a
								
							
						
					
					
						commit
						e17f86724a
					
				| 
						 | 
					@ -290,9 +290,9 @@ typedef struct D3D11CommandBuffer
 | 
				
			||||||
	D3D11SwapchainData *swapchainData;
 | 
						D3D11SwapchainData *swapchainData;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Render Pass */
 | 
						/* Render Pass */
 | 
				
			||||||
	uint8_t numBoundColorAttachments;
 | 
					 | 
				
			||||||
	ID3D11RenderTargetView *rtViews[MAX_COLOR_TARGET_BINDINGS];
 | 
						ID3D11RenderTargetView *rtViews[MAX_COLOR_TARGET_BINDINGS];
 | 
				
			||||||
	ID3D11DepthStencilView* dsView;
 | 
						ID3D11DepthStencilView *dsView;
 | 
				
			||||||
 | 
						struct D3D11GraphicsPipeline *graphicsPipeline;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* State */
 | 
						/* State */
 | 
				
			||||||
	SDL_threadID threadID;
 | 
						SDL_threadID threadID;
 | 
				
			||||||
| 
						 | 
					@ -325,7 +325,7 @@ typedef struct D3D11GraphicsPipeline
 | 
				
			||||||
	uint8_t hasDepthStencilAttachment;
 | 
						uint8_t hasDepthStencilAttachment;
 | 
				
			||||||
	DXGI_FORMAT depthStencilAttachmentFormat;
 | 
						DXGI_FORMAT depthStencilAttachmentFormat;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	D3D11_PRIMITIVE_TOPOLOGY primitiveTopology;
 | 
						Refresh_PrimitiveType primitiveType;
 | 
				
			||||||
	uint32_t stencilRef;
 | 
						uint32_t stencilRef;
 | 
				
			||||||
	ID3D11DepthStencilState *depthStencilState;
 | 
						ID3D11DepthStencilState *depthStencilState;
 | 
				
			||||||
	ID3D11RasterizerState *rasterizerState;
 | 
						ID3D11RasterizerState *rasterizerState;
 | 
				
			||||||
| 
						 | 
					@ -465,7 +465,15 @@ static void D3D11_DrawPrimitives(
 | 
				
			||||||
	uint32_t vertexParamOffset,
 | 
						uint32_t vertexParamOffset,
 | 
				
			||||||
	uint32_t fragmentParamOffset
 | 
						uint32_t fragmentParamOffset
 | 
				
			||||||
) {
 | 
					) {
 | 
				
			||||||
	NOT_IMPLEMENTED
 | 
						D3D11CommandBuffer *cmdbuf = (D3D11CommandBuffer*) commandBuffer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ID3D11DeviceContext_Draw(
 | 
				
			||||||
 | 
							cmdbuf->context,
 | 
				
			||||||
 | 
							PrimitiveVerts(cmdbuf->graphicsPipeline->primitiveType, primitiveCount),
 | 
				
			||||||
 | 
							vertexStart
 | 
				
			||||||
 | 
						);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* FIXME: vertex/fragment param offsets */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void D3D11_DrawPrimitivesIndirect(
 | 
					static void D3D11_DrawPrimitivesIndirect(
 | 
				
			||||||
| 
						 | 
					@ -735,6 +743,12 @@ static Refresh_GraphicsPipeline* D3D11_CreateGraphicsPipeline(
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Color */
 | 
						/* Color */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pipeline->colorAttachmentBlendState = D3D11_INTERNAL_FetchBlendState(
 | 
				
			||||||
 | 
							renderer,
 | 
				
			||||||
 | 
							pipelineCreateInfo->attachmentInfo.colorAttachmentCount,
 | 
				
			||||||
 | 
							pipelineCreateInfo->attachmentInfo.colorAttachmentDescriptions
 | 
				
			||||||
 | 
						);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pipeline->numColorAttachments = pipelineCreateInfo->attachmentInfo.colorAttachmentCount;
 | 
						pipeline->numColorAttachments = pipelineCreateInfo->attachmentInfo.colorAttachmentCount;
 | 
				
			||||||
	for (i = 0; i < pipeline->numColorAttachments; i += 1)
 | 
						for (i = 0; i < pipeline->numColorAttachments; i += 1)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -750,31 +764,22 @@ static Refresh_GraphicsPipeline* D3D11_CreateGraphicsPipeline(
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pipeline->multisampleState = pipelineCreateInfo->multisampleState;
 | 
						pipeline->multisampleState = pipelineCreateInfo->multisampleState;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pipeline->colorAttachmentBlendState = D3D11_INTERNAL_FetchBlendState(
 | 
					 | 
				
			||||||
		renderer,
 | 
					 | 
				
			||||||
		pipelineCreateInfo->attachmentInfo.colorAttachmentCount,
 | 
					 | 
				
			||||||
		pipelineCreateInfo->attachmentInfo.colorAttachmentDescriptions
 | 
					 | 
				
			||||||
	);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* Depth stencil */
 | 
						/* Depth stencil */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pipeline->hasDepthStencilAttachment = pipelineCreateInfo->attachmentInfo.hasDepthStencilAttachment;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	pipeline->depthStencilAttachmentFormat = RefreshToD3D11_TextureFormat[
 | 
					 | 
				
			||||||
		pipelineCreateInfo->attachmentInfo.depthStencilFormat
 | 
					 | 
				
			||||||
	];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	pipeline->stencilRef = pipelineCreateInfo->depthStencilState.backStencilState.reference; /* FIXME: Should we use front or back? */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	pipeline->depthStencilState = D3D11_INTERNAL_FetchDepthStencilState(
 | 
						pipeline->depthStencilState = D3D11_INTERNAL_FetchDepthStencilState(
 | 
				
			||||||
		renderer,
 | 
							renderer,
 | 
				
			||||||
		pipelineCreateInfo->depthStencilState
 | 
							pipelineCreateInfo->depthStencilState
 | 
				
			||||||
	);
 | 
						);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pipeline->hasDepthStencilAttachment = pipelineCreateInfo->attachmentInfo.hasDepthStencilAttachment;
 | 
				
			||||||
 | 
						pipeline->depthStencilAttachmentFormat = RefreshToD3D11_TextureFormat[
 | 
				
			||||||
 | 
							pipelineCreateInfo->attachmentInfo.depthStencilFormat
 | 
				
			||||||
 | 
						];
 | 
				
			||||||
 | 
						pipeline->stencilRef = pipelineCreateInfo->depthStencilState.backStencilState.reference; /* FIXME: Should we use front or back? */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Rasterizer */
 | 
						/* Rasterizer */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pipeline->primitiveTopology = RefreshToD3D11_PrimitiveType[pipelineCreateInfo->primitiveType];
 | 
						pipeline->primitiveType = pipelineCreateInfo->primitiveType;
 | 
				
			||||||
 | 
					 | 
				
			||||||
	pipeline->rasterizerState = D3D11_INTERNAL_FetchRasterizerState(
 | 
						pipeline->rasterizerState = D3D11_INTERNAL_FetchRasterizerState(
 | 
				
			||||||
		renderer,
 | 
							renderer,
 | 
				
			||||||
		pipelineCreateInfo->rasterizerState
 | 
							pipelineCreateInfo->rasterizerState
 | 
				
			||||||
| 
						 | 
					@ -1056,7 +1061,11 @@ static void D3D11_QueueDestroyShaderModule(
 | 
				
			||||||
	Refresh_Renderer *driverData,
 | 
						Refresh_Renderer *driverData,
 | 
				
			||||||
	Refresh_ShaderModule *shaderModule
 | 
						Refresh_ShaderModule *shaderModule
 | 
				
			||||||
) {
 | 
					) {
 | 
				
			||||||
	NOT_IMPLEMENTED
 | 
						D3D11ShaderModule *d3dShaderModule = (D3D11ShaderModule*) shaderModule;
 | 
				
			||||||
 | 
						ID3D11DeviceChild_Release(d3dShaderModule->shader);
 | 
				
			||||||
 | 
						ID3D10Blob_Release(d3dShaderModule->blob);
 | 
				
			||||||
 | 
						SDL_free(d3dShaderModule->shaderSource);
 | 
				
			||||||
 | 
						SDL_free(d3dShaderModule);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void D3D11_QueueDestroyComputePipeline(
 | 
					static void D3D11_QueueDestroyComputePipeline(
 | 
				
			||||||
| 
						 | 
					@ -1070,7 +1079,17 @@ static void D3D11_QueueDestroyGraphicsPipeline(
 | 
				
			||||||
	Refresh_Renderer *driverData,
 | 
						Refresh_Renderer *driverData,
 | 
				
			||||||
	Refresh_GraphicsPipeline *graphicsPipeline
 | 
						Refresh_GraphicsPipeline *graphicsPipeline
 | 
				
			||||||
) {
 | 
					) {
 | 
				
			||||||
	NOT_IMPLEMENTED
 | 
						D3D11Renderer *renderer = (D3D11Renderer*) driverData;
 | 
				
			||||||
 | 
						D3D11GraphicsPipeline *d3dGraphicsPipeline = (D3D11GraphicsPipeline*) graphicsPipeline;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ID3D11BlendState_Release(d3dGraphicsPipeline->colorAttachmentBlendState);
 | 
				
			||||||
 | 
						ID3D11DepthStencilState_Release(d3dGraphicsPipeline->depthStencilState);
 | 
				
			||||||
 | 
						ID3D11RasterizerState_Release(d3dGraphicsPipeline->rasterizerState);
 | 
				
			||||||
 | 
						ID3D11InputLayout_Release(d3dGraphicsPipeline->inputLayout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* FIXME: Release uniform buffers, once that's written in */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						SDL_free(d3dGraphicsPipeline);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Graphics State */
 | 
					/* Graphics State */
 | 
				
			||||||
| 
						 | 
					@ -1152,7 +1171,7 @@ static Refresh_CommandBuffer* D3D11_AcquireCommandBuffer(
 | 
				
			||||||
	commandBuffer->threadID = SDL_ThreadID();
 | 
						commandBuffer->threadID = SDL_ThreadID();
 | 
				
			||||||
	commandBuffer->swapchainData = NULL;
 | 
						commandBuffer->swapchainData = NULL;
 | 
				
			||||||
	commandBuffer->dsView = NULL;
 | 
						commandBuffer->dsView = NULL;
 | 
				
			||||||
	commandBuffer->numBoundColorAttachments = 0;
 | 
						commandBuffer->graphicsPipeline = NULL;
 | 
				
			||||||
	for (i = 0; i < MAX_COLOR_TARGET_BINDINGS; i += 1)
 | 
						for (i = 0; i < MAX_COLOR_TARGET_BINDINGS; i += 1)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		commandBuffer->rtViews[i] = NULL;
 | 
							commandBuffer->rtViews[i] = NULL;
 | 
				
			||||||
| 
						 | 
					@ -1292,7 +1311,53 @@ static void D3D11_BindGraphicsPipeline(
 | 
				
			||||||
	Refresh_CommandBuffer *commandBuffer,
 | 
						Refresh_CommandBuffer *commandBuffer,
 | 
				
			||||||
	Refresh_GraphicsPipeline *graphicsPipeline
 | 
						Refresh_GraphicsPipeline *graphicsPipeline
 | 
				
			||||||
) {
 | 
					) {
 | 
				
			||||||
	NOT_IMPLEMENTED
 | 
						D3D11Renderer *renderer = (D3D11Renderer*) driverData;
 | 
				
			||||||
 | 
						D3D11CommandBuffer *cmdbuf = (D3D11CommandBuffer*) commandBuffer;
 | 
				
			||||||
 | 
						D3D11GraphicsPipeline *pipeline = (D3D11GraphicsPipeline*) graphicsPipeline;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cmdbuf->graphicsPipeline = pipeline;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ID3D11DeviceContext_OMSetBlendState(
 | 
				
			||||||
 | 
							cmdbuf->context,
 | 
				
			||||||
 | 
							pipeline->colorAttachmentBlendState,
 | 
				
			||||||
 | 
							pipeline->blendConstants,
 | 
				
			||||||
 | 
							pipeline->multisampleState.sampleMask
 | 
				
			||||||
 | 
						);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ID3D11DeviceContext_OMSetDepthStencilState(
 | 
				
			||||||
 | 
							cmdbuf->context,
 | 
				
			||||||
 | 
							pipeline->depthStencilState,
 | 
				
			||||||
 | 
							pipeline->stencilRef
 | 
				
			||||||
 | 
						);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ID3D11DeviceContext_IASetPrimitiveTopology(
 | 
				
			||||||
 | 
							cmdbuf->context,
 | 
				
			||||||
 | 
							RefreshToD3D11_PrimitiveType[pipeline->primitiveType]
 | 
				
			||||||
 | 
						);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ID3D11DeviceContext_IASetInputLayout(
 | 
				
			||||||
 | 
							cmdbuf->context,
 | 
				
			||||||
 | 
							pipeline->inputLayout
 | 
				
			||||||
 | 
						);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ID3D11DeviceContext_RSSetState(
 | 
				
			||||||
 | 
							cmdbuf->context,
 | 
				
			||||||
 | 
							pipeline->rasterizerState
 | 
				
			||||||
 | 
						);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ID3D11DeviceContext_VSSetShader(
 | 
				
			||||||
 | 
							cmdbuf->context,
 | 
				
			||||||
 | 
							pipeline->vertexShader,
 | 
				
			||||||
 | 
							NULL,
 | 
				
			||||||
 | 
							0
 | 
				
			||||||
 | 
						);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ID3D11DeviceContext_PSSetShader(
 | 
				
			||||||
 | 
							cmdbuf->context,
 | 
				
			||||||
 | 
							pipeline->fragmentShader,
 | 
				
			||||||
 | 
							NULL,
 | 
				
			||||||
 | 
							0
 | 
				
			||||||
 | 
						);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void D3D11_SetViewport(
 | 
					static void D3D11_SetViewport(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue