| 222 | } |
| 223 | |
| 224 | void ParameterBlock::prepareResource(CopyContext* pContext, Resource* pResource, bool isUav) |
| 225 | { |
| 226 | if (!pResource) |
| 227 | return; |
| 228 | |
| 229 | // If it's a buffer with a UAV counter, insert a UAV barrier |
| 230 | const Buffer* pBuffer = pResource->asBuffer().get(); |
| 231 | if (isUav && pBuffer && pBuffer->getUAVCounter()) |
| 232 | { |
| 233 | pContext->resourceBarrier(pBuffer->getUAVCounter().get(), Resource::State::UnorderedAccess); |
| 234 | pContext->uavBarrier(pBuffer->getUAVCounter().get()); |
| 235 | } |
| 236 | |
| 237 | bool insertBarrier = true; |
| 238 | insertBarrier = (is_set(pResource->getBindFlags(), ResourceBindFlags::AccelerationStructure) == false); |
| 239 | if (insertBarrier) |
| 240 | { |
| 241 | insertBarrier = !pContext->resourceBarrier(pResource, isUav ? Resource::State::UnorderedAccess : Resource::State::ShaderResource); |
| 242 | } |
| 243 | |
| 244 | // Insert UAV barrier automatically if the resource is an UAV that is already in UnorderedAccess state. |
| 245 | // Otherwise the user would have to insert barriers explicitly between passes accessing UAVs, which is easily forgotten. |
| 246 | if (insertBarrier && isUav) |
| 247 | pContext->uavBarrier(pResource); |
| 248 | } |
| 249 | |
| 250 | ParameterBlock::~ParameterBlock() {} |
| 251 |
nothing calls this directly
no test coverage detected