vlc/vlc-3.0 | branch: master | Steve Lhomme <[email protected]> | Thu Dec 21 18:35:22 2017 +0100| [1480cd7c2b3cdaff48f68907af721bb8334dec48] | committer: Steve Lhomme
d3d11_quad: move the vertex input layout in the Quad (this is not necessary as long as we all use the same one on the same context) (cherry picked from commit 5269cb157f237a2aa421761526f4d86493d97946) > http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=1480cd7c2b3cdaff48f68907af721bb8334dec48 --- modules/video_output/win32/d3d11_quad.c | 6 +++++- modules/video_output/win32/d3d11_quad.h | 5 +++-- modules/video_output/win32/direct3d11.c | 16 +++++++++------- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/modules/video_output/win32/d3d11_quad.c b/modules/video_output/win32/d3d11_quad.c index f05badb667..278516b9f4 100644 --- a/modules/video_output/win32/d3d11_quad.c +++ b/modules/video_output/win32/d3d11_quad.c @@ -50,7 +50,10 @@ void D3D11_RenderQuad(d3d11_device_t *d3d_dev, d3d_quad_t *quad, ID3D11DeviceContext_OMSetRenderTargets(d3d_dev->d3dcontext, 1, &d3drenderTargetView, NULL); /* Render the quad */ + ID3D11DeviceContext_IASetPrimitiveTopology(d3d_dev->d3dcontext, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + /* vertex shader */ + ID3D11DeviceContext_IASetInputLayout(d3d_dev->d3dcontext, quad->pVertexLayout); ID3D11DeviceContext_IASetVertexBuffers(d3d_dev->d3dcontext, 0, 1, &quad->pVertexBuffer, &quad->vertexStride, &offset); ID3D11DeviceContext_IASetIndexBuffer(d3d_dev->d3dcontext, quad->pIndexBuffer, DXGI_FORMAT_R16_UINT, 0); if ( quad->pVertexShaderConstants ) @@ -611,7 +614,7 @@ void D3D11_UpdateQuadLuminanceScale(vlc_object_t *o, d3d11_device_t *d3d_dev, d3 #undef D3D11_SetupQuad int D3D11_SetupQuad(vlc_object_t *o, d3d11_device_t *d3d_dev, const video_format_t *fmt, d3d_quad_t *quad, const display_info_t *displayFormat, const RECT *output, - ID3D11VertexShader *d3dvertexShader, + ID3D11VertexShader *d3dvertexShader, ID3D11InputLayout *pVertexLayout, video_projection_mode_t projection, video_orientation_t orientation) { HRESULT hr; @@ -772,6 +775,7 @@ int D3D11_SetupQuad(vlc_object_t *o, d3d11_device_t *d3d_dev, const video_format goto error; quad->d3dvertexShader = d3dvertexShader; + quad->pVertexLayout = pVertexLayout; quad->resourceCount = DxgiResourceCount(quad->formatInfo); return VLC_SUCCESS; diff --git a/modules/video_output/win32/d3d11_quad.h b/modules/video_output/win32/d3d11_quad.h index 788b7a1c13..6297a23042 100644 --- a/modules/video_output/win32/d3d11_quad.h +++ b/modules/video_output/win32/d3d11_quad.h @@ -44,6 +44,7 @@ typedef struct ID3D11Buffer *pPixelShaderConstants[2]; UINT PSConstantsCount; ID3D11PixelShader *d3dpixelShader; + ID3D11InputLayout *pVertexLayout; D3D11_VIEWPORT cropViewport; unsigned int i_width; unsigned int i_height; @@ -73,9 +74,9 @@ void D3D11_ReleaseQuad(d3d_quad_t *); int D3D11_SetupQuad(vlc_object_t *, d3d11_device_t *, const video_format_t *, d3d_quad_t *, const display_info_t *, const RECT *, - ID3D11VertexShader *, video_projection_mode_t, + ID3D11VertexShader *, ID3D11InputLayout *, video_projection_mode_t, video_orientation_t); -#define D3D11_SetupQuad(a,b,c,d,e,f,g,h,i) D3D11_SetupQuad(VLC_OBJECT(a),b,c,d,e,f,g,h,i) +#define D3D11_SetupQuad(a,b,c,d,e,f,g,h,i,j) D3D11_SetupQuad(VLC_OBJECT(a),b,c,d,e,f,g,h,i,j) bool D3D11_UpdateQuadPosition( vlc_object_t *, d3d11_device_t *, d3d_quad_t *, const RECT *output, video_orientation_t ); diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c index 348d84fff3..aeb6c19f9a 100644 --- a/modules/video_output/win32/direct3d11.c +++ b/modules/video_output/win32/direct3d11.c @@ -105,6 +105,7 @@ struct vout_display_sys_t ID3D11RenderTargetView *d3drenderTargetView; ID3D11DepthStencilView *d3ddepthStencilView; + ID3D11InputLayout *pVertexLayout; ID3D11VertexShader *flatVSShader; ID3D11VertexShader *projectionVSShader; @@ -358,6 +359,7 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned pool_size) if (D3D11_SetupQuad( vd, &sys->d3d_dev, &surface_fmt, &sys->picQuad, &sys->display, &sys->sys.rect_src_clipped, vd->fmt.projection_mode == PROJECTION_MODE_RECTANGULAR ? sys->flatVSShader : sys->projectionVSShader, + sys->pVertexLayout, surface_fmt.projection_mode, vd->fmt.orientation ) != VLC_SUCCESS) { msg_Err(vd, "Could not Create the main quad picture."); return NULL; @@ -1598,9 +1600,8 @@ static int Direct3D11CreateGenericResources(vout_display_t *vd) { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}, }; - ID3D11InputLayout* pVertexLayout = NULL; hr = ID3D11Device_CreateInputLayout(sys->d3d_dev.d3ddevice, layout, 2, (void *)ID3D10Blob_GetBufferPointer(pVSBlob), - ID3D10Blob_GetBufferSize(pVSBlob), &pVertexLayout); + ID3D10Blob_GetBufferSize(pVSBlob), &sys->pVertexLayout); ID3D10Blob_Release(pVSBlob); @@ -1608,8 +1609,6 @@ static int Direct3D11CreateGenericResources(vout_display_t *vd) msg_Err(vd, "Failed to create the vertex input layout. (hr=0x%lX)", hr); return VLC_EGENERIC; } - ID3D11DeviceContext_IASetInputLayout(sys->d3d_dev.d3dcontext, pVertexLayout); - ID3D11InputLayout_Release(pVertexLayout); pVSBlob = D3D11_CompileShader(vd, &sys->hd3d, &sys->d3d_dev, globVertexShaderProjection, false); if (!pVSBlob) @@ -1625,8 +1624,6 @@ static int Direct3D11CreateGenericResources(vout_display_t *vd) } ID3D10Blob_Release(pVSBlob); - ID3D11DeviceContext_IASetPrimitiveTopology(sys->d3d_dev.d3dcontext, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); - UpdatePicQuadPosition(vd); D3D11_SAMPLER_DESC sampDesc; @@ -1683,6 +1680,11 @@ static void Direct3D11DestroyResources(vout_display_t *vd) ReleasePictureSys(&sys->stagingSys); + if (sys->pVertexLayout) + { + ID3D11InputLayout_Release(sys->pVertexLayout); + sys->pVertexLayout = NULL; + } if (sys->flatVSShader) { ID3D11VertexShader_Release(sys->flatVSShader); @@ -1808,7 +1810,7 @@ static int Direct3D11MapSubpicture(vout_display_t *vd, int *subpicture_region_co d3dquad->formatInfo = sys->d3dregion_format; err = D3D11_SetupQuad( vd, &sys->d3d_dev, &r->fmt, d3dquad, &sys->display, &output, - sys->flatVSShader, PROJECTION_MODE_RECTANGULAR, ORIENT_NORMAL ); + sys->flatVSShader, sys->pVertexLayout, PROJECTION_MODE_RECTANGULAR, ORIENT_NORMAL ); if (err != VLC_SUCCESS) { msg_Err(vd, "Failed to create %dx%d quad for OSD", r->fmt.i_visible_width, r->fmt.i_visible_height); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
