ФлеймФорумПрограммирование

Общие вопросы по программированию графония. (232 стр)

Страницы: 1231 232 233 234236 Следующая »
#3465
21:54, 8 апр 2025

std::variant
> uint index = atomicCompSwap(selBuffer[customIndex].counter, 0, 0xffffffff);
> if(index == 0) {
> // Мы получили блокировку
> index = atomicAdd(selBuffer[0].counter, 1) + 1;
> atomicExchange(selBuffer[customIndex].counter, index);
В этом месте как минимум две инструкции, которые дважды во времени обращаются к selBuffer[customIndex]. Таким образом атомарность не обеспечить ;)

#3466
22:02, 8 апр 2025

totoro
> Таким образом атомарность не обеспечить ;)
Тогда чтоб гарантировать атомарность, нужно сразу записывать итоговое значение в atomicCompSwap, а не в два этапа.

// 1. Пытаемся атомарно захватить ячейку, записывая в неё временный маркер (0xffffffff)
uint index = atomicCompSwap(selBuffer[customIndex].counter, 0, 0xffffffff);

if (index == 0) {
    // 2. Если захватили успешно, вычисляем новый индекс
    uint newIndex = atomicAdd(selBuffer[0].counter, 1) + 1;
    
    // 3. Атомарно записываем итоговый индекс (вместо 0xffffffff)
    uint oldValue = atomicCompSwap(selBuffer[customIndex].counter, 0xffffffff, newIndex);
    
    // 4. Проверяем, что никто не испортил значение (если да — это ошибка логики)
    if (oldValue != 0xffffffff) {
        // Это не должно происходить, если логика корректна
        return; // или какая-то обработка ошибки
    }
    
    index = newIndex;
} else {
    // 5. Если ячейка уже занята, читаем её значение (с барьерами)
    for (int i = 0; i < 3; i++) {
        index = atomicAdd(selBuffer[customIndex].counter, 0);
        if (index != 0xffffffff) break;
        memoryBarrier();
    }
    if (index == 0xffffffff) return; // не удалось прочитать
}
#3467
22:53, 8 апр 2025

std::variant
> Пытаемся атомарно захватить ячейку
У меня именно так и сделано

#3468
13:48, 21 апр 2025

Как на АМД включить dual-issue?
Обещают что будет 2х к производительности ALU и во всех спеках указываются FLOPS с учетом dual-issue.

#3469
(Правка: 15:27) 15:21, 13 мая 2025

Кто знает, по какой причине может происходить вот это вот:
Antarctic pengu | Общие вопросы по программированию графония.
???
  Что я делаю. Я делаю несколько FBO, рисую в каждую текстуру отдельно. Потом эти текстуры накладываю друг на друга. Откуда может взяться этот отпечаток? Почему он не везде? (хотя есть заметные изменения в других местах, например на буквах видно).

  Это может происходить по той причине, что накладываемая текстура может оказаться не прозрачной в этих местах?

#3470
15:28, 13 мая 2025

На скрине не вижу куда смотреть.
Может прозрачность криво интерполируется

#3471
(Правка: 15:39) 15:32, 13 мая 2025

1 frag / 2 deaths, "прямоугольников" не должно быть.

  "Проблему" решил. Если просто выводить масштабированием, то вот эти зазоры появляются. Вывожу в текстуру без масштабирования, потом вывожу саму текстуру уже с масштабированием.
  Блин, а вот без лишних телодвижений это как-то решить можно?

#3472
21:08, 13 мая 2025

Mirrel
ClampToEdge поставь

#3473
(Правка: 14 мая 2025, 0:10) 23:56, 13 мая 2025

/A\, благодарю, проверю!

  Не помогло... :(

#3474
7:19, 14 мая 2025

Mirrel
У тебя фон закрашивается синим, а это щели между полигонами?
Такие проблемы были на интеле даже в оноайн картах.
Есть invariant в шейдере, если они разные. Либо растянуть полигон на полпикселя.

#3475
7:58, 14 мая 2025

MrShoor бы подсказал, но его захейтил Мирель.
И MrShoor ушёл в лес.

#3476
9:12, 14 мая 2025

/A\, фон чёрный. Остальное в Nes тайлами забито. Там где выделяется, это спрайты.

> Либо растянуть полигон на полпикселя.
да, знакомо... древнейшая проблема, попробую.

#3477
11:34, 14 мая 2025

Mirrel
Процентов 90 что это https://gamedev.ru/flame/forum/?id=280941

#3478
14:22, 14 мая 2025

Dmitry_Milk
Что вообще за каргокульт углов Эйлера, я никогда ими не пользовался

#3479
15:00, 14 мая 2025

Рендерферма кроликов, ты вообще о чем?

Страницы: 1231 232 233 234236 Следующая »
ФлеймФорумПрограммирование