vlc | branch: master | Steve Lhomme <[email protected]> | Wed Feb 10 10:31:58 2021 +0100| [549d93fe790bcfbdd69858d132c3246dc2d7c644] | committer: Steve Lhomme
direct3d11: the number of pixel shaders depends on the number of render targets At most we have 2 rendering targets (when rendering to NV12/P010). The cropping is also tied to the number of rendering targets. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=549d93fe790bcfbdd69858d132c3246dc2d7c644 --- modules/video_output/win32/d3d11_quad.c | 8 +++----- modules/video_output/win32/d3d11_shaders.h | 4 ++-- modules/video_output/win32/direct3d11.c | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/modules/video_output/win32/d3d11_quad.c b/modules/video_output/win32/d3d11_quad.c index ac4d880285..4f0423d844 100644 --- a/modules/video_output/win32/d3d11_quad.c +++ b/modules/video_output/win32/d3d11_quad.c @@ -67,7 +67,7 @@ void D3D11_RenderQuad(d3d11_device_t *d3d_dev, d3d11_quad_t *quad, d3d11_vertex_ ID3D11DeviceContext_PSSetConstantBuffers(d3d_dev->d3dcontext, 0, ARRAY_SIZE(quad->pPixelShaderConstants), quad->pPixelShaderConstants); assert(quad->resourceCount <= DXGI_MAX_SHADER_VIEW); - for (size_t i=0; i<DXGI_MAX_SHADER_VIEW; i++) + for (size_t i=0; i<ARRAY_SIZE(quad->d3dpixelShader); i++) { if (!quad->d3dpixelShader[i]) break; @@ -1144,7 +1144,7 @@ int D3D11_SetupQuad(vlc_object_t *o, d3d11_device_t *d3d_dev, const video_format ShaderUpdateConstants(o, d3d_dev, quad, PS_CONST_COLORSPACE, &colorspace); - for (size_t i=0; i<DXGI_MAX_SHADER_VIEW; i++) + for (size_t i=0; i<ARRAY_SIZE(quad->cropViewport); i++) { quad->cropViewport[i].MinDepth = 0.0f; quad->cropViewport[i].MaxDepth = 1.0f; @@ -1201,8 +1201,7 @@ void D3D11_UpdateViewport(d3d11_quad_t *quad, const RECT *rect, const d3d_format if ( display->formatTexture != DXGI_FORMAT_NV12 && display->formatTexture != DXGI_FORMAT_P010 ) { - quad->cropViewport[1] = quad->cropViewport[2] = - quad->cropViewport[3] = quad->cropViewport[0]; + quad->cropViewport[1] = quad->cropViewport[0]; break; } /* fallthrough */ @@ -1212,7 +1211,6 @@ void D3D11_UpdateViewport(d3d11_quad_t *quad, const RECT *rect, const d3d_format quad->cropViewport[1].TopLeftY = quad->cropViewport[0].TopLeftY / 2; quad->cropViewport[1].Width = quad->cropViewport[0].Width / 2; quad->cropViewport[1].Height = quad->cropViewport[0].Height / 2; - quad->cropViewport[2] = quad->cropViewport[1]; break; } break; diff --git a/modules/video_output/win32/d3d11_shaders.h b/modules/video_output/win32/d3d11_shaders.h index cb149c63d2..dc0f89b7f3 100644 --- a/modules/video_output/win32/d3d11_shaders.h +++ b/modules/video_output/win32/d3d11_shaders.h @@ -91,9 +91,9 @@ typedef struct ID3D11Buffer *viewpointShaderConstant; ID3D11Buffer *pPixelShaderConstants[2]; UINT PSConstantsCount; - ID3D11PixelShader *d3dpixelShader[DXGI_MAX_SHADER_VIEW]; + ID3D11PixelShader *d3dpixelShader[DXGI_MAX_RENDER_TARGET]; ID3D11SamplerState *SamplerStates[2]; - D3D11_VIEWPORT cropViewport[DXGI_MAX_SHADER_VIEW]; + D3D11_VIEWPORT cropViewport[DXGI_MAX_RENDER_TARGET]; unsigned int i_width; unsigned int i_height; video_projection_mode_t projection; diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c index 0d905cd95b..f34602cde4 100644 --- a/modules/video_output/win32/direct3d11.c +++ b/modules/video_output/win32/direct3d11.c @@ -1372,7 +1372,7 @@ static int Direct3D11MapSubpicture(vout_display_t *vd, int *subpicture_region_co continue; } quad_picture = (*region)[i]; - for (size_t j=0; j<DXGI_MAX_SHADER_VIEW; j++) + for (size_t j=0; j<ARRAY_SIZE(sys->regionQuad.d3dpixelShader); j++) { /* TODO use something more accurate if we have different formats */ if (sys->regionQuad.d3dpixelShader[j]) _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
