Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
  • abdsaber000/vlc
404 results
Show changes
Commits on Source (6)
......@@ -509,6 +509,7 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
vlc_va_sys_t *sys = va->sys;
HRESULT hr;
d3d11_device_lock(sys->d3d_dev);
void *pv;
hr = ID3D11Device_QueryInterface( sys->d3d_dev->d3ddevice, &IID_ID3D10Multithread, &pv);
if (SUCCEEDED(hr)) {
......@@ -525,6 +526,7 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
isXboxHardware(sys->d3d_dev))
{
msg_Warn(va, "%dx%d resolution not supported by your hardware", fmt->i_width, fmt->i_height);
d3d11_device_unlock(sys->d3d_dev);
return VLC_EGENERIC;
}
#endif
......@@ -554,6 +556,7 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
hr = ID3D11Device_CreateTexture2D( sys->d3d_dev->d3ddevice, &texDesc, NULL, &p_texture );
if (FAILED(hr)) {
msg_Err(va, "CreateTexture2D %zu failed. (hr=0x%lX)", surface_count, hr);
d3d11_device_unlock(sys->d3d_dev);
return VLC_EGENERIC;
}
......@@ -568,6 +571,7 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
if (FAILED(hr)) {
msg_Err(va, "CreateVideoDecoderOutputView %d failed. (hr=0x%lX)", surface_idx, hr);
ID3D11Texture2D_Release(p_texture);
d3d11_device_unlock(sys->d3d_dev);
return VLC_EGENERIC;
}
......@@ -593,6 +597,7 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
hr = ID3D11VideoDevice_GetVideoDecoderConfigCount( sys->d3ddec, &decoderDesc, &cfg_count );
if (FAILED(hr)) {
msg_Err(va, "GetVideoDecoderConfigCount failed. (hr=0x%lX)", hr);
d3d11_device_unlock(sys->d3d_dev);
return VLC_EGENERIC;
}
......@@ -602,6 +607,7 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
hr = ID3D11VideoDevice_GetVideoDecoderConfig( sys->d3ddec, &decoderDesc, i, &cfg_list[i] );
if (FAILED(hr)) {
msg_Err(va, "GetVideoDecoderConfig failed. (hr=0x%lX)", hr);
d3d11_device_unlock(sys->d3d_dev);
return VLC_EGENERIC;
}
}
......@@ -635,6 +641,7 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
}
if (cfg_score <= 0) {
msg_Err(va, "Failed to find a supported decoder configuration");
d3d11_device_unlock(sys->d3d_dev);
return VLC_EGENERIC;
}
......@@ -644,8 +651,10 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
if (FAILED(hr)) {
msg_Err(va, "ID3D11VideoDevice_CreateVideoDecoder failed. (hr=0x%lX)", hr);
sys->hw.decoder = NULL;
d3d11_device_unlock(sys->d3d_dev);
return VLC_EGENERIC;
}
d3d11_device_unlock(sys->d3d_dev);
sys->hw.decoder = decoder;
msg_Dbg(va, "DxCreateDecoderSurfaces succeed");
......
......@@ -27,7 +27,10 @@
#include "../../video_chroma/d3d11_fmt.h"
#ifdef ID3D11VideoContext_VideoProcessorBlt
#ifdef __cplusplus
extern "C" {
#endif
typedef struct
{
ID3D11VideoDevice *d3dviddev;
......@@ -46,6 +49,9 @@ void D3D11_ReleaseProcessor(d3d11_processor_t *);
HRESULT D3D11_Assert_ProcessorInput(vlc_object_t *, d3d11_processor_t *, picture_sys_d3d11_t *);
#define D3D11_Assert_ProcessorInput(a,b,c) D3D11_Assert_ProcessorInput(VLC_OBJECT(a),b,c)
#ifdef __cplusplus
}
#endif
#endif /* VLC_D3D11_PROCESSOR_H */
......@@ -983,32 +983,24 @@ picture_context_t *d3d11_pic_context_copy(picture_context_t *ctx)
return &pic_ctx->s;
}
picture_t *D3D11_AllocPicture(vlc_object_t *obj,
const video_format_t *fmt, vlc_video_context *vctx_out,
bool shared, const d3d_format_t *cfg)
int D3D11_PictureFill(vlc_object_t *obj, picture_t *pic,
vlc_video_context *vctx_out,
bool shared, const d3d_format_t *cfg)
{
if (unlikely(cfg == NULL))
return NULL;
return VLC_EINVAL;
struct d3d11_pic_context *pic_ctx = calloc(1, sizeof(*pic_ctx));
if (unlikely(pic_ctx == NULL))
return NULL;
return VLC_ENOMEM;
pic_ctx->picsys.sharedHandle = INVALID_HANDLE_VALUE;
picture_t *pic = picture_NewFromFormat( fmt );
if (unlikely(pic == NULL))
{
free(pic_ctx);
return NULL;
}
d3d11_decoder_device_t *dev_sys = GetD3D11OpaqueContext(vctx_out);
if (AllocateTextures(obj, &dev_sys->d3d_dev, cfg,
fmt, shared, pic_ctx->picsys.texture, NULL) != VLC_SUCCESS)
&pic->format, shared, pic_ctx->picsys.texture, NULL) != VLC_SUCCESS)
{
picture_Release(pic);
free(pic_ctx);
return NULL;
return VLC_EGENERIC;
}
D3D11_AllocateResourceView(vlc_object_logger(obj), dev_sys->d3d_dev.d3ddevice, cfg, pic_ctx->picsys.texture, 0, pic_ctx->picsys.renderSrc);
......@@ -1035,5 +1027,22 @@ picture_t *D3D11_AllocPicture(vlc_object_t *obj,
vlc_video_context_Hold(vctx_out),
};
pic->context = &pic_ctx->s;
return VLC_SUCCESS;
}
picture_t *D3D11_AllocPicture(vlc_object_t *obj,
const video_format_t *fmt, vlc_video_context *vctx_out,
bool shared, const d3d_format_t *cfg)
{
picture_t *pic = picture_NewFromFormat( fmt );
if (unlikely(pic == NULL))
return NULL;
if (D3D11_PictureFill(obj, pic, vctx_out, shared, cfg) != VLC_SUCCESS)
{
picture_Release(pic);
return NULL;
}
return pic;
}
......@@ -206,7 +206,10 @@ picture_context_t *d3d11_pic_context_copy(picture_context_t *);
picture_t *D3D11_AllocPicture(vlc_object_t *,
const video_format_t *, vlc_video_context *,
bool, const d3d_format_t *);
bool shared, const d3d_format_t *);
int D3D11_PictureFill(vlc_object_t *,
picture_t *, vlc_video_context *,
bool shared, const d3d_format_t *);
void D3D11_PictureAttach(picture_t *, ID3D11Texture2D *textures, const d3d_format_t *cfg);
......
......@@ -370,3 +370,59 @@ void d3d11_quad_t::UpdateViewport(const RECT *rect, const d3d_format_t *display)
vlc_assert_unreachable();
}
}
#ifdef HAVE_D3D11_4_H
HRESULT D3D11_InitFence(d3d11_device_t & d3d_dev, d3d11_gpu_fence & fence)
{
HRESULT hr;
ComPtr<ID3D11Device5> d3ddev5;
hr = d3d_dev.d3ddevice->QueryInterface(IID_GRAPHICS_PPV_ARGS(&d3ddev5));
if (FAILED(hr))
goto error;
hr = d3ddev5->CreateFence(fence.renderFence, D3D11_FENCE_FLAG_NONE, IID_GRAPHICS_PPV_ARGS(&fence.d3dRenderFence));
if (FAILED(hr))
goto error;
hr = d3d_dev.d3dcontext->QueryInterface(IID_GRAPHICS_PPV_ARGS(&fence.d3dcontext4));
if (FAILED(hr))
goto error;
fence.renderFinished = CreateEvent(nullptr, TRUE, FALSE, nullptr);
if (unlikely(fence.renderFinished == nullptr))
goto error;
return S_OK;
error:
fence.d3dRenderFence.Reset();
fence.d3dcontext4.Reset();
CloseHandle(fence.renderFinished);
return hr;
}
void D3D11_ReleaseFence(d3d11_gpu_fence & fence)
{
if (fence.d3dcontext4.Get())
{
fence.d3dRenderFence.Reset();
fence.d3dcontext4.Reset();
CloseHandle(fence.renderFinished);
fence.renderFinished = nullptr;
}
}
int D3D11_WaitFence(d3d11_gpu_fence & fence)
{
if (fence.d3dcontext4.Get())
{
if (fence.renderFence == UINT64_MAX)
fence.renderFence = 0;
else
fence.renderFence++;
ResetEvent(fence.renderFinished);
fence.d3dRenderFence->SetEventOnCompletion(fence.renderFence, fence.renderFinished);
fence.d3dcontext4->Signal(fence.d3dRenderFence.Get(), fence.renderFence);
WaitForSingleObject(fence.renderFinished, INFINITE);
return VLC_SUCCESS;
}
return VLC_ENOTSUP;
}
#endif // HAVE_D3D11_4_H
......@@ -25,12 +25,30 @@
#include "../../video_chroma/d3d11_fmt.h"
#include "d3d11_shaders.h"
#ifdef HAVE_D3D11_4_H
# include <d3d11_4.h>
#endif
#define PS_CONST_LUMI_BOUNDS 0
#define VS_CONST_VIEWPOINT 1
typedef bool (*d3d11_select_plane_t)(void *opaque, size_t plane_index, ID3D11RenderTargetView **);
#ifdef HAVE_D3D11_4_H
struct d3d11_gpu_fence
{
Microsoft::WRL::ComPtr<ID3D11Fence> d3dRenderFence;
Microsoft::WRL::ComPtr<ID3D11DeviceContext4> d3dcontext4;
UINT64 renderFence = 0;
HANDLE renderFinished = nullptr;
};
HRESULT D3D11_InitFence(d3d11_device_t &, d3d11_gpu_fence &);
int D3D11_WaitFence(d3d11_gpu_fence &);
void D3D11_ReleaseFence(d3d11_gpu_fence &);
#endif
void D3D11_RenderQuad(d3d11_device_t *, d3d11_quad_t *, d3d11_vertex_shader_t *,
ID3D11ShaderResourceView *resourceViews[DXGI_MAX_SHADER_VIEW],
d3d11_select_plane_t selectPlane, void *selectOpaque);
......
......@@ -40,9 +40,6 @@
#include <new>
#include "../../video_chroma/d3d11_fmt.h"
#ifdef HAVE_D3D11_4_H
#include <d3d11_4.h>
#endif
#include "d3d11_quad.h"
#include "d3d11_shaders.h"
......@@ -92,10 +89,7 @@ typedef struct vout_display_sys_t
d3d11_quad_t picQuad;
#ifdef HAVE_D3D11_4_H
ComPtr<ID3D11Fence> d3dRenderFence;
ComPtr<ID3D11DeviceContext4> d3dcontext4;
UINT64 renderFence = 0;
HANDLE renderFinished = NULL;
d3d11_gpu_fence fence;
#endif
picture_sys_d3d11_t stagingSys;
......@@ -628,23 +622,15 @@ static void PreparePicture(vout_display_t *vd, picture_t *picture, subpicture_t
}
#ifdef HAVE_D3D11_4_H
if (sys->d3dcontext4.Get())
if (sys->log_level >= 4)
{
vlc_tick_t render_start;
if (sys->log_level >= 4)
render_start = vlc_tick_now();
if (sys->renderFence == UINT64_MAX)
sys->renderFence = 0;
else
sys->renderFence++;
ResetEvent(sys->renderFinished);
sys->d3dRenderFence->SetEventOnCompletion(sys->renderFence, sys->renderFinished);
sys->d3dcontext4->Signal(sys->d3dRenderFence.Get(), sys->renderFence);
WaitForSingleObject(sys->renderFinished, INFINITE);
if (sys->log_level >= 4)
msg_Dbg(vd, "waited %" PRId64 " ms for the render fence", MS_FROM_VLC_TICK(vlc_tick_now() - render_start));
vlc_tick_t render_start = vlc_tick_now();
D3D11_WaitFence(sys->fence);
msg_Dbg(vd, "waited %" PRId64 " ms for the render fence", MS_FROM_VLC_TICK(vlc_tick_now() - render_start));
}
else
{
D3D11_WaitFence(sys->fence);
}
#endif
}
......@@ -829,7 +815,7 @@ static int SetupOutputFormat(vout_display_t *vd, video_format_t *fmt, vlc_video_
sys->picQuad.generic.textureFormat = GetDirectRenderingFormat(vd, fmt->i_chroma);
// look for any pixel format that we can handle with enough pixels per channel
const d3d_format_t *decoder_format = NULL;
const d3d_format_t *decoder_format = nullptr;
if ( !sys->picQuad.generic.textureFormat )
{
uint8_t bits_per_channel;
......@@ -891,24 +877,22 @@ static int SetupOutputFormat(vout_display_t *vd, video_format_t *fmt, vlc_video_
/* look for a decoder format that can be decoded but not used in shaders */
if ( is_d3d11_opaque(fmt->i_chroma) )
decoder_format = GetDirectDecoderFormat(vd, fmt->i_chroma);
else
decoder_format = sys->picQuad.generic.textureFormat;
bool is_rgb = !vlc_fourcc_IsYUV(fmt->i_chroma);
sys->picQuad.generic.textureFormat = GetDisplayFormatByDepth(vd, bits_per_channel,
widthDenominator, heightDenominator,
decoder_format!=NULL,
decoder_format!=nullptr,
is_rgb ? DXGI_RGB_FORMAT : DXGI_YUV_FORMAT);
if (!sys->picQuad.generic.textureFormat)
sys->picQuad.generic.textureFormat = GetDisplayFormatByDepth(vd, bits_per_channel,
widthDenominator, heightDenominator,
decoder_format!=NULL,
decoder_format!=nullptr,
is_rgb ? DXGI_YUV_FORMAT : DXGI_RGB_FORMAT);
}
// look for any pixel format that we can handle
if ( !sys->picQuad.generic.textureFormat )
sys->picQuad.generic.textureFormat = GetDisplayFormatByDepth(vd, 0, 0, 0, false, false);
sys->picQuad.generic.textureFormat = GetDisplayFormatByDepth(vd, 0, 0, 0, false, DXGI_YUV_FORMAT|DXGI_RGB_FORMAT);
if ( !sys->picQuad.generic.textureFormat )
{
......@@ -1075,39 +1059,13 @@ static int Direct3D11CreateFormatResources(vout_display_t *vd, const video_forma
return UpdateStaging(vd, fmt);
}
#ifdef HAVE_D3D11_4_H
static HRESULT InitRenderFence(vout_display_sys_t *sys)
{
HRESULT hr;
ComPtr<ID3D11Device5> d3ddev5;
hr = sys->d3d_dev->d3ddevice->QueryInterface(IID_GRAPHICS_PPV_ARGS(&d3ddev5));
if (FAILED(hr))
goto error;
hr = d3ddev5->CreateFence(sys->renderFence, D3D11_FENCE_FLAG_NONE, IID_GRAPHICS_PPV_ARGS(&sys->d3dRenderFence));
if (FAILED(hr))
goto error;
hr = sys->d3d_dev->d3dcontext->QueryInterface(IID_GRAPHICS_PPV_ARGS(&sys->d3dcontext4));
if (FAILED(hr))
goto error;
sys->renderFinished = CreateEvent(NULL, TRUE, FALSE, NULL);
if (unlikely(sys->renderFinished == NULL))
goto error;
return S_OK;
error:
sys->d3dRenderFence.Reset();
sys->d3dcontext4.Reset();
CloseHandle(sys->renderFinished);
return hr;
}
#endif // HAVE_D3D11_4_H
static int Direct3D11CreateGenericResources(vout_display_t *vd)
{
vout_display_sys_t *sys = static_cast<vout_display_sys_t *>(vd->sys);
HRESULT hr;
#ifdef HAVE_D3D11_4_H
hr = InitRenderFence(sys);
hr = D3D11_InitFence(*sys->d3d_dev, sys->fence);
if (SUCCEEDED(hr))
{
msg_Dbg(vd, "using GPU render fence");
......@@ -1225,13 +1183,7 @@ static void Direct3D11DestroyResources(vout_display_t *vd)
D3D11_ReleaseVertexShader(&sys->projectionVShader);
#ifdef HAVE_D3D11_4_H
if (sys->d3dcontext4.Get())
{
sys->d3dRenderFence.Reset();
sys->d3dcontext4.Reset();
CloseHandle(sys->renderFinished);
sys->renderFinished = NULL;
}
D3D11_ReleaseFence(sys->fence);
#endif
msg_Dbg(vd, "Direct3D11 resources destroyed");
......