Mt2Hizmet 1
Mt2Hizmet
R 1
Roksam
[DEV]AB 1
[DEV]AB
TuZaKK 1
TuZaKK
farkmt2official 1
farkmt2official
Hikaye Ekle

How To Directx9 Device Creation with Multiple Thread Support

  • Konuyu başlatan Konuyu başlatan Luigina
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 14
  • Görüntüleme Görüntüleme 3K
Hi everyone,

With this change you can handle multiple threads on device creating on Directx9 update. It fixes application freeze / crash when creating a thread on application create.


C++:
GrpDetector.cpp

// Before

if (m_kD3DCaps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)
{
    if (m_kD3DCaps.DevCaps & D3DDEVCAPS_PUREDEVICE)
    {
        dwD3DBehavior = D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_PUREDEVICE;

        if (pfnConfirmDevice(m_kD3DCaps, dwD3DBehavior, eD3DFmtPixel))
            isFormatConfirmed = TRUE;
    }

    if (FALSE == isFormatConfirmed)
    {
        dwD3DBehavior = D3DCREATE_HARDWARE_VERTEXPROCESSING;

        if (pfnConfirmDevice(m_kD3DCaps, dwD3DBehavior, eD3DFmtPixel))
            isFormatConfirmed = TRUE;
    }

    if (FALSE == isFormatConfirmed)
    {
        dwD3DBehavior = D3DCREATE_MIXED_VERTEXPROCESSING;

        if (pfnConfirmDevice(m_kD3DCaps, dwD3DBehavior, eD3DFmtPixel))
            isFormatConfirmed = TRUE;
    }
}

// Confirm the device/format for SW vertex processing
if (FALSE == isFormatConfirmed)
{
    dwD3DBehavior = D3DCREATE_SOFTWARE_VERTEXPROCESSING;

    if (pfnConfirmDevice(m_kD3DCaps, dwD3DBehavior, eD3DFmtPixel))
        isFormatConfirmed = TRUE;
}

// After

if (m_kD3DCaps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)
{
    if (m_kD3DCaps.DevCaps & D3DDEVCAPS_PUREDEVICE)
    {
        dwD3DBehavior = D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_PUREDEVICE | D3DCREATE_MULTITHREADED;

        if (pfnConfirmDevice(m_kD3DCaps, dwD3DBehavior, eD3DFmtPixel))
            isFormatConfirmed = TRUE;
    }

    if (FALSE == isFormatConfirmed)
    {
        dwD3DBehavior = D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED;

        if (pfnConfirmDevice(m_kD3DCaps, dwD3DBehavior, eD3DFmtPixel))
            isFormatConfirmed = TRUE;
    }

    if (FALSE == isFormatConfirmed)
    {
        dwD3DBehavior = D3DCREATE_MIXED_VERTEXPROCESSING | D3DCREATE_MULTITHREADED;

        if (pfnConfirmDevice(m_kD3DCaps, dwD3DBehavior, eD3DFmtPixel))
            isFormatConfirmed = TRUE;
    }
}

// Confirm the device/format for SW vertex processing
if (FALSE == isFormatConfirmed)
{
    dwD3DBehavior = D3DCREATE_SOFTWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED;

    if (pfnConfirmDevice(m_kD3DCaps, dwD3DBehavior, eD3DFmtPixel))
        isFormatConfirmed = TRUE;
}
 

En Çok Reaksiyon Alan Mesajlar

Öğeyi görmek için üye olmalısınız.

öncesi ve sonrası karşılaştırması yararlı olabilir ne anlamda performans iyileştirmesi sağlıyor daha netleşir.
Öğeyi görmek için üye olmalısınız.

öncesi ve sonrası karşılaştırması yararlı olabilir ne anlamda performans iyileştirmesi sağlıyor daha netleşir.
Güzel bir ekleme oldu teşekkürler.


Ne işe yaradığını daha iyi anlamak isteyen arkadaşlar dx9 kullanan bir clientte app create edilirken başka bir std::thread oluştursunlar clientleri açılırken ara sıra donma veya crash gerçekleşecek. Bu flag o olayın yaşanmamasını sağlıyor. Tabi thread yerine async de kullanabilirsiniz.
raw


öncesi ve sonrası karşılaştırması yararlı olabilir ne anlamda performans iyileştirmesi sağlıyor daha netleşir.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst