[GPU/WGF] Use ByteAddressBuffer in precompiled shaders
Drivers and hardware may provide more optimal paths for untyped buffers compared to typed. Also, ByteAddressBuffer may be bound via a root descriptor in Direct3D 12, greatly simplifying the binding logic. ByteAddressBuffer also doesn't have the 128 * 2^20 element count limit that typed and structured buffers have, and doesn't require the structure stride to be specified at resource creation time in Direct3D 11.
This commit is contained in:
@@ -519,48 +519,6 @@ D3D12CommandProcessor::GetSystemBindlessViewHandlePair(
|
||||
view_bindless_heap_gpu_start_, uint32_t(view)));
|
||||
}
|
||||
|
||||
ui::d3d12::util::DescriptorCpuGpuHandlePair
|
||||
D3D12CommandProcessor::GetSharedMemoryUintPow2BindlessSRVHandlePair(
|
||||
uint32_t element_size_bytes_pow2) const {
|
||||
SystemBindlessView view;
|
||||
switch (element_size_bytes_pow2) {
|
||||
case 2:
|
||||
view = SystemBindlessView::kSharedMemoryR32UintSRV;
|
||||
break;
|
||||
case 3:
|
||||
view = SystemBindlessView::kSharedMemoryR32G32UintSRV;
|
||||
break;
|
||||
case 4:
|
||||
view = SystemBindlessView::kSharedMemoryR32G32B32A32UintSRV;
|
||||
break;
|
||||
default:
|
||||
assert_unhandled_case(element_size_bytes_pow2);
|
||||
view = SystemBindlessView::kSharedMemoryR32UintSRV;
|
||||
}
|
||||
return GetSystemBindlessViewHandlePair(view);
|
||||
}
|
||||
|
||||
ui::d3d12::util::DescriptorCpuGpuHandlePair
|
||||
D3D12CommandProcessor::GetSharedMemoryUintPow2BindlessUAVHandlePair(
|
||||
uint32_t element_size_bytes_pow2) const {
|
||||
SystemBindlessView view;
|
||||
switch (element_size_bytes_pow2) {
|
||||
case 2:
|
||||
view = SystemBindlessView::kSharedMemoryR32UintUAV;
|
||||
break;
|
||||
case 3:
|
||||
view = SystemBindlessView::kSharedMemoryR32G32UintUAV;
|
||||
break;
|
||||
case 4:
|
||||
view = SystemBindlessView::kSharedMemoryR32G32B32A32UintUAV;
|
||||
break;
|
||||
default:
|
||||
assert_unhandled_case(element_size_bytes_pow2);
|
||||
view = SystemBindlessView::kSharedMemoryR32UintUAV;
|
||||
}
|
||||
return GetSystemBindlessViewHandlePair(view);
|
||||
}
|
||||
|
||||
ui::d3d12::util::DescriptorCpuGpuHandlePair
|
||||
D3D12CommandProcessor::GetEdramUintPow2BindlessSRVHandlePair(
|
||||
uint32_t element_size_bytes_pow2) const {
|
||||
@@ -1470,46 +1428,10 @@ bool D3D12CommandProcessor::SetupContext() {
|
||||
shared_memory_->WriteRawSRVDescriptor(provider.OffsetViewDescriptor(
|
||||
view_bindless_heap_cpu_start_,
|
||||
uint32_t(SystemBindlessView::kSharedMemoryRawSRV)));
|
||||
// kSharedMemoryR32UintSRV.
|
||||
shared_memory_->WriteUintPow2SRVDescriptor(
|
||||
provider.OffsetViewDescriptor(
|
||||
view_bindless_heap_cpu_start_,
|
||||
uint32_t(SystemBindlessView::kSharedMemoryR32UintSRV)),
|
||||
2);
|
||||
// kSharedMemoryR32G32UintSRV.
|
||||
shared_memory_->WriteUintPow2SRVDescriptor(
|
||||
provider.OffsetViewDescriptor(
|
||||
view_bindless_heap_cpu_start_,
|
||||
uint32_t(SystemBindlessView::kSharedMemoryR32G32UintSRV)),
|
||||
3);
|
||||
// kSharedMemoryR32G32B32A32UintSRV.
|
||||
shared_memory_->WriteUintPow2SRVDescriptor(
|
||||
provider.OffsetViewDescriptor(
|
||||
view_bindless_heap_cpu_start_,
|
||||
uint32_t(SystemBindlessView::kSharedMemoryR32G32B32A32UintSRV)),
|
||||
4);
|
||||
// kSharedMemoryRawUAV.
|
||||
shared_memory_->WriteRawUAVDescriptor(provider.OffsetViewDescriptor(
|
||||
view_bindless_heap_cpu_start_,
|
||||
uint32_t(SystemBindlessView::kSharedMemoryRawUAV)));
|
||||
// kSharedMemoryR32UintUAV.
|
||||
shared_memory_->WriteUintPow2UAVDescriptor(
|
||||
provider.OffsetViewDescriptor(
|
||||
view_bindless_heap_cpu_start_,
|
||||
uint32_t(SystemBindlessView::kSharedMemoryR32UintUAV)),
|
||||
2);
|
||||
// kSharedMemoryR32G32UintUAV.
|
||||
shared_memory_->WriteUintPow2UAVDescriptor(
|
||||
provider.OffsetViewDescriptor(
|
||||
view_bindless_heap_cpu_start_,
|
||||
uint32_t(SystemBindlessView::kSharedMemoryR32G32UintUAV)),
|
||||
3);
|
||||
// kSharedMemoryR32G32B32A32UintUAV.
|
||||
shared_memory_->WriteUintPow2UAVDescriptor(
|
||||
provider.OffsetViewDescriptor(
|
||||
view_bindless_heap_cpu_start_,
|
||||
uint32_t(SystemBindlessView::kSharedMemoryR32G32B32A32UintUAV)),
|
||||
4);
|
||||
// kEdramRawSRV.
|
||||
render_target_cache_->WriteEdramRawSRVDescriptor(
|
||||
provider.OffsetViewDescriptor(
|
||||
|
||||
Reference in New Issue
Block a user