не только в этот чат, но и на gamedev.net про dx12, поэтому наверное, вопрос персональный :) Нормально ли в байндингах к dx12 пометить обёртки над ID3D12{Device, CommandQueue, Resource} (обертки - просто структуры с полем this: *mut ID3D12… и методами, причем AddRef завернут в Clone, а Release - в Drop) как Send, а как Sync не помечать вообще ничего, чтобы не возиться со ссылками и лайфтаймами (т. е. передача в другой тред только через .clone())? Или у такого подхода могут быть какие-то подводные камни?
Давно это было... Что помню: если выставить везде Send и не позволять клонировать объекты (copy + AddRef), то теряем возможность непосредственно сабмитить CommandList в CommandQueue из разных потоков, то есть получаем оверхед которого могло бы не быть (CommandQueue под капотом сериализует выполнение CommandList запущенных из разных потоков). А у CommandList вроде какие-то проблемы с многопоточным доступом (Sync), но это не точно.
Понятно, спасибо. Но у меня как раз есть Clone/AddRef (Copy нету), так что все хорошо должно быть? :)
Обсуждают сегодня