Vasara Posted January 28, 2021 Posted January 28, 2021 Добрый день. Очень нужны методы для чтения записи. #include <core/shaders/common/compute.h> INIT_W_TEXTURE_INT(0, RW_BLOB_TEST, r8ui, uint) MAIN_COMPUTE_BEGIN(4,4,1) int i = GROUP_ID.x * 1 + GROUP_THREAD_ID.x; int j = GROUP_ID.y * 1 + GROUP_THREAD_ID.y; TEXTURE_W_STORE(RW_BLOB_TEST,int2(i,j),10); END_COMPUTE #pragma once #include <UnigineStreams.h> #include <UnigineMaterials.h> #include <UnigineImage.h> using namespace Unigine; class MyBlob { public: MyBlob(); MyBlob(const MyBlob&); ~MyBlob(); private: BlobPtr ptrBlob; unsigned long int size = 0; MaterialPtr ptrTestMaterial; TexturePtr ptrTestDataTexture; RenderTargetPtr ptrRenderTarget; void init(); void saveData(); void clear(); public: void runTest(); }; void MyBlob::init() { size = sizeof(unsigned char) * 16; ptrBlob = Blob::create(size); Log::message("Blob size = %d\n", ptrBlob->getSize()); unsigned char data = 2; for (size_t i = 0; i < 16; i++) { ptrBlob->set(i, (unsigned char)data); data += 2; } Log::message("Blob data in = "); for (size_t i = 0; i < 16; i++) { Log::message("%d\t", ptrBlob->get(i)); } ptrTestMaterial = Materials::findMaterial("test_material"); ptrTestDataTexture = Texture::create(); ptrTestDataTexture->create2D(4, 4, Texture::FORMAT_R8, Texture::USAGE_READWRITE | Texture::USAGE_RENDER); ptrTestDataTexture->setBlob(ptrBlob); ptrRenderTarget = RenderTarget::create(); } void MyBlob::saveData() { ImagePtr tempImage = Image::create(); tempImage->create2D(4, 4, Image::FORMAT_R8); ptrTestDataTexture->getImage(tempImage); tempImage->save("images_temp/sourceR8.dds"); tempImage->clear(); } void MyBlob::clear() { ptrBlob->clear(); ptrTestMaterial.clear(); ptrTestDataTexture->destroy(); ptrTestDataTexture->clear(); ptrRenderTarget.clear(); } void MyBlob::runTest() { init(); ptrRenderTarget->bindUnorderedAccessTexture(0, ptrTestDataTexture, 0); ptrRenderTarget->enableCompute(); ptrTestMaterial->renderCompute(Render::PASS_POST, 1, 1); ptrRenderTarget->disable(); ptrRenderTarget->unbindUnorderedAccessTextures(); saveData(); clear(); } Вариант к сожалению не взлетел. Гонять 3 пустых канала вместо R8, в нескольких потоках очень дорого. про 4 R32F против одного RGBA16F вообще без комментариев. Очень надеюсь на реализацию _RW_LOAD_\_RW_STORE_ методов. С Уважением Константин.
andrey-kozlov Posted January 29, 2021 Posted January 29, 2021 Добрый день. В Directx 11 для read/write гарантированно доступны только r32f, r32u и r32s. (https://docs.microsoft.com/en-us/windows/win32/direct3d12/typed-unordered-access-view-loads ). RGBA8 у нас реализован уже через распаковку/запаковку в uint32. Обычно проблема решается тем, что используется две текстуры: одна для чтения, которая биндится как обычная текстура; другая для записи, которая биндится как write-only и может быть любого формата. После выполнения прохода они меняются местами
Vasara Posted January 29, 2021 Author Posted January 29, 2021 Лично моё мнение, стоит выровняться с версией 11.3. Меньше костылей, больше довольных пользователей.
silent Posted January 29, 2021 Posted January 29, 2021 К сожалению, много людей еще сидят на Windows 7 с DirectX 11.0/1 и мы не можем просто так повысить минспек до Windows 10. Безусловоно, больше форматов пойдут всем на пользу, и они будут добавлены позже. Спасибо. How to submit a good bug report --- FTP server for test scenes and user uploads: ftp://files.unigine.com user: upload password: 6xYkd6vLYWjpW6SN
andrey-kozlov Posted January 29, 2021 Posted January 29, 2021 В 11.3 поддержка других форматов также опциональна, согласно документации UPD Хотя нет, неправильно прочитал. Список "The following formats are supported as a set on D3D12 or D3D11.3 hardware, so if any one is supported, all are supported" похоже обязательный
Vasara Posted January 29, 2021 Author Posted January 29, 2021 Понимаю вашу дилемму. Игровой мир очень требователен. А вычисления на гпу позволяют обойти многие старые узкие места. Буду ждать расширения функционала. 1
Vasara Posted January 29, 2021 Author Posted January 29, 2021 Есть ли возможность поменять версию шейдера с 4.0 на 5.1. Настройки проекта ни как не влияют, похоже версия гдето захардкожена. Изза специфики вычислений не могу перевести на другие типы текстур, не остаётся ни каких других вариантов как временно пересесть на HLSL.
silent Posted January 30, 2021 Posted January 30, 2021 Vasara Движок использует Shader Model 5.0 (не 4.0). 5.1 добавить нельзя, т.к. эта модель появилась в DirectX 12. How to submit a good bug report --- FTP server for test scenes and user uploads: ftp://files.unigine.com user: upload password: 6xYkd6vLYWjpW6SN
Recommended Posts