Compare commits

...

2 Commits

1 changed files with 48 additions and 17 deletions

View File

@ -465,11 +465,11 @@ static void D3D11_DrawPrimitives(
uint32_t vertexParamOffset, uint32_t vertexParamOffset,
uint32_t fragmentParamOffset uint32_t fragmentParamOffset
) { ) {
D3D11CommandBuffer *cmdbuf = (D3D11CommandBuffer*) commandBuffer; D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*) commandBuffer;
ID3D11DeviceContext_Draw( ID3D11DeviceContext_Draw(
cmdbuf->context, d3d11CommandBuffer->context,
PrimitiveVerts(cmdbuf->graphicsPipeline->primitiveType, primitiveCount), PrimitiveVerts(d3d11CommandBuffer->graphicsPipeline->primitiveType, primitiveCount),
vertexStart vertexStart
); );
@ -789,6 +789,10 @@ static Refresh_GraphicsPipeline* D3D11_CreateGraphicsPipeline(
if (vertShaderModule->shader == NULL) if (vertShaderModule->shader == NULL)
{ {
/* FIXME:
* Could we store a flag in the shaderc output to mark if a shader is vertex/fragment?
* Then we could compile on shader module creation instead of at bind time.
*/
res = renderer->D3DCompileFunc( res = renderer->D3DCompileFunc(
vertShaderModule->shaderSource, vertShaderModule->shaderSource,
vertShaderModule->shaderSourceLength, vertShaderModule->shaderSourceLength,
@ -1312,48 +1316,48 @@ static void D3D11_BindGraphicsPipeline(
Refresh_GraphicsPipeline *graphicsPipeline Refresh_GraphicsPipeline *graphicsPipeline
) { ) {
D3D11Renderer *renderer = (D3D11Renderer*) driverData; D3D11Renderer *renderer = (D3D11Renderer*) driverData;
D3D11CommandBuffer *cmdbuf = (D3D11CommandBuffer*) commandBuffer; D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*) commandBuffer;
D3D11GraphicsPipeline *pipeline = (D3D11GraphicsPipeline*) graphicsPipeline; D3D11GraphicsPipeline *pipeline = (D3D11GraphicsPipeline*) graphicsPipeline;
cmdbuf->graphicsPipeline = pipeline; d3d11CommandBuffer->graphicsPipeline = pipeline;
ID3D11DeviceContext_OMSetBlendState( ID3D11DeviceContext_OMSetBlendState(
cmdbuf->context, d3d11CommandBuffer->context,
pipeline->colorAttachmentBlendState, pipeline->colorAttachmentBlendState,
pipeline->blendConstants, pipeline->blendConstants,
pipeline->multisampleState.sampleMask pipeline->multisampleState.sampleMask
); );
ID3D11DeviceContext_OMSetDepthStencilState( ID3D11DeviceContext_OMSetDepthStencilState(
cmdbuf->context, d3d11CommandBuffer->context,
pipeline->depthStencilState, pipeline->depthStencilState,
pipeline->stencilRef pipeline->stencilRef
); );
ID3D11DeviceContext_IASetPrimitiveTopology( ID3D11DeviceContext_IASetPrimitiveTopology(
cmdbuf->context, d3d11CommandBuffer->context,
RefreshToD3D11_PrimitiveType[pipeline->primitiveType] RefreshToD3D11_PrimitiveType[pipeline->primitiveType]
); );
ID3D11DeviceContext_IASetInputLayout( ID3D11DeviceContext_IASetInputLayout(
cmdbuf->context, d3d11CommandBuffer->context,
pipeline->inputLayout pipeline->inputLayout
); );
ID3D11DeviceContext_RSSetState( ID3D11DeviceContext_RSSetState(
cmdbuf->context, d3d11CommandBuffer->context,
pipeline->rasterizerState pipeline->rasterizerState
); );
ID3D11DeviceContext_VSSetShader( ID3D11DeviceContext_VSSetShader(
cmdbuf->context, d3d11CommandBuffer->context,
pipeline->vertexShader, pipeline->vertexShader,
NULL, NULL,
0 0
); );
ID3D11DeviceContext_PSSetShader( ID3D11DeviceContext_PSSetShader(
cmdbuf->context, d3d11CommandBuffer->context,
pipeline->fragmentShader, pipeline->fragmentShader,
NULL, NULL,
0 0
@ -1365,7 +1369,22 @@ static void D3D11_SetViewport(
Refresh_CommandBuffer *commandBuffer, Refresh_CommandBuffer *commandBuffer,
Refresh_Viewport *viewport Refresh_Viewport *viewport
) { ) {
NOT_IMPLEMENTED D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*) commandBuffer;
D3D11_VIEWPORT vp =
{
viewport->x,
viewport->y,
viewport->w,
viewport->h,
viewport->minDepth,
viewport->maxDepth
};
ID3D11DeviceContext_RSSetViewports(
d3d11CommandBuffer->context,
1,
&vp
);
} }
static void D3D11_SetScissor( static void D3D11_SetScissor(
@ -1373,7 +1392,20 @@ static void D3D11_SetScissor(
Refresh_CommandBuffer *commandBuffer, Refresh_CommandBuffer *commandBuffer,
Refresh_Rect *scissor Refresh_Rect *scissor
) { ) {
NOT_IMPLEMENTED D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*)commandBuffer;
D3D11_RECT rect =
{
scissor->x,
scissor->y,
scissor->x + scissor->w,
scissor->y + scissor->h
};
ID3D11DeviceContext_RSSetScissorRects(
d3d11CommandBuffer->context,
1,
&rect
);
} }
static void D3D11_BindVertexBuffers( static void D3D11_BindVertexBuffers(
@ -1739,7 +1771,7 @@ static Refresh_Texture* D3D11_AcquireSwapchainTexture(
uint32_t *pHeight uint32_t *pHeight
) { ) {
D3D11Renderer *renderer = (D3D11Renderer*) driverData; D3D11Renderer *renderer = (D3D11Renderer*) driverData;
D3D11CommandBuffer *cmdbuf = (D3D11CommandBuffer*) commandBuffer; D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*) commandBuffer;
D3D11WindowData *windowData; D3D11WindowData *windowData;
D3D11SwapchainData *swapchainData; D3D11SwapchainData *swapchainData;
DXGI_SWAP_CHAIN_DESC swapchainDesc; DXGI_SWAP_CHAIN_DESC swapchainDesc;
@ -1774,7 +1806,7 @@ static Refresh_Texture* D3D11_AcquireSwapchainTexture(
} }
/* Let the command buffer know it's associated with this swapchain. */ /* Let the command buffer know it's associated with this swapchain. */
cmdbuf->swapchainData = swapchainData; d3d11CommandBuffer->swapchainData = swapchainData;
/* Send the dimensions to the out parameters. */ /* Send the dimensions to the out parameters. */
*pWidth = swapchainData->texture.twod.width; *pWidth = swapchainData->texture.twod.width;
@ -1782,7 +1814,6 @@ static Refresh_Texture* D3D11_AcquireSwapchainTexture(
/* Return the swapchain texture */ /* Return the swapchain texture */
return (Refresh_Texture*) &swapchainData->texture; return (Refresh_Texture*) &swapchainData->texture;
} }
static Refresh_TextureFormat D3D11_GetSwapchainFormat( static Refresh_TextureFormat D3D11_GetSwapchainFormat(