Which seems logical to me; - dynamic flag allows me to read on gpu, write on cpu - cpu access write says I'll be wanting to write to the buffer However, on calling CreateBuffer on my device I get;
D3D11_BUFFER_DESC desc; ZeroMemory( &desc, sizeof(desc) ); desc.Usage = D3D11_USAGE_DYNAMIC; desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; desc.BindFlags = D3D11_BIND_UNORDERED_ACCESS | D3D11_BIND_SHADER_RESOURCE; desc.ByteWidth = uElementSize * uCount; desc.MiscFlags = D3D11_RESOURCE_MISC_BUFFER_STRUCTURED; desc.StructureByteStride = uElementSize;
thrown back at me. I'm a bit confused as to what it wants me to do, as from what I can see I HAVE a bind buffer bit set (UNORDERED_ACCESS) which should let me do what I need. So, any clues from anyone out there? Or even a better way to do it? (I'll be uploading somewhere in the region of 5120 floats per frame, in a linear manner but not contiguous in destination memory).
D3D11: ERROR: ID3D11Device::CreateBuffer: A D3D11_USAGE_DYNAMIC Resource cannot be bound to certain parts of the graphics pipeline, but must have at least one BindFlags bit set. The BindFlags bits (0x88) have the following settings: D3D11_BIND_STREAM_OUTPUT (0), D3D11_BIND_RENDER_TARGET (0), D3D11_BIND_DEPTH_STENCIL (0), D3D11_BIND_UNORDERED_ACCESS (1). [ STATE_CREATION ERROR #64: CREATEBUFFER_INVALIDBINDFLAGS ] First-chance exception at 0x7560b727 in D3D11VisualiserTest.exe: Microsoft C++ exception: _com_error at memory location 0x0018f4c4.. D3D11: ERROR: ID3D11Device::CreateBuffer: CreateBuffer returning E_INVALIDARG, meaning invalid parameters were passed. [ STATE_CREATION ERROR #69: CREATEBUFFER_INVALIDARG_RETURN ]