Как получить адрес буфера текстуры

Тема в разделе "WASM.DirectX", создана пользователем ik01, 1 фев 2008.

  1. ik01

    ik01 New Member

    Публикаций:
    0
    Регистрация:
    1 фев 2008
    Сообщения:
    4
    Кто подскажет как сделать следующее:
    - гарантировано создать тескстуру в видео памяти
    - получить адрес (виртуальный достаточно) буфера созданной текстуры

    Сейчас я это делаю вызовами:
    - CreateTexture() с D3DPOOL_DEFAULT и D3DUSAGE_DYNAMIC
    - LockRect()

    на разных адаптерах, к сожалению, приводит к разным результатам.
     
  2. keYMax

    keYMax New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2003
    Сообщения:
    276
    Адрес:
    Новоуральск
    Гарантированно? Как дрова сделают и как директ это их внутреннее дело.

    D3DPOOL_DEFAULT — это любая память в том числе и видео и ОЗУ и AGP.
    D3DPOOL_MANAGED - наверняка в видеопамяти.

    Получить буфер созданной текстуры через LockRect(), как ты и делаешь.

    А в чем заключаются "разные результаты"?
     
  3. ik01

    ik01 New Member

    Публикаций:
    0
    Регистрация:
    1 фев 2008
    Сообщения:
    4
    в том что на nVidia FX3500 я получаю непрерывную видеопамять
    а на FX3700 - обычный RAM, причем сегментированный
    мне надо получить непрерывный буфер для non-scatter-gather DMA
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    ik01
    У тебя есть DirectX Sdk?
    9b
    Теперь про непрерывность:
    То есть придерживаешься питча, (то есть расстояния между строками) и всё Ok. Остальные версии DirectX сейчас обсуждать не готов, в данный момент нет доступа.
     
  5. ik01

    ik01 New Member

    Публикаций:
    0
    Регистрация:
    1 фев 2008
    Сообщения:
    4
    Питч к непрерыности памяти не имеет никакого отношения.
    Под непрерыностью я имею в виду непрерывность физической адресации.
    В случае если текстура размещена в RAM - каждая страница (4К) размещена по-своему и физический адрес первых 4К может быть и больше адреса вторых 4К. А уж вероятность того, что PhysAddres( buffer ) +4K == PhysAddres( buffer + 4K ) вообще нулевая.
    Для меня же это обязательно.

    Насчет DirectX SDK.
    В той же документации сказано:
    D3DPOOL_DEFAULT
    Resources are placed in the memory pool most appropriate for the set of usages requested for the given resource. This is usually video memory, including both local video memory and AGP memory.

    К сожалению поведение неопределено - AGP memory это RAM.
    Мой вопрос был в том - можно ли заставить DirectX создавать текстуру гарантировано в video memory



     
  6. ik01

    ik01 New Member

    Публикаций:
    0
    Регистрация:
    1 фев 2008
    Сообщения:
    4
    Обнаружилась еще более интересная вещь.
    Тестировалась nvidia quadro FX 3500.
    Если высота создаваемой текстуры кратна 2-м - буфер создается в RAM'e.
    Если нет - в видео-памяти...