[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:
@@ -183,15 +183,13 @@ void DeferredCommandList::Execute(ID3D12GraphicsCommandList* command_list,
|
||||
} break;
|
||||
case Command::kD3DSetComputeRootConstantBufferView: {
|
||||
auto& args =
|
||||
*reinterpret_cast<const SetRootConstantBufferViewArguments*>(
|
||||
stream);
|
||||
*reinterpret_cast<const SetRootDescriptorArguments*>(stream);
|
||||
command_list->SetComputeRootConstantBufferView(
|
||||
args.root_parameter_index, args.buffer_location);
|
||||
} break;
|
||||
case Command::kD3DSetGraphicsRootConstantBufferView: {
|
||||
auto& args =
|
||||
*reinterpret_cast<const SetRootConstantBufferViewArguments*>(
|
||||
stream);
|
||||
*reinterpret_cast<const SetRootDescriptorArguments*>(stream);
|
||||
command_list->SetGraphicsRootConstantBufferView(
|
||||
args.root_parameter_index, args.buffer_location);
|
||||
} break;
|
||||
@@ -207,6 +205,18 @@ void DeferredCommandList::Execute(ID3D12GraphicsCommandList* command_list,
|
||||
command_list->SetGraphicsRootDescriptorTable(args.root_parameter_index,
|
||||
args.base_descriptor);
|
||||
} break;
|
||||
case Command::kD3DSetComputeRootShaderResourceView: {
|
||||
auto& args =
|
||||
*reinterpret_cast<const SetRootDescriptorArguments*>(stream);
|
||||
command_list->SetComputeRootShaderResourceView(
|
||||
args.root_parameter_index, args.buffer_location);
|
||||
} break;
|
||||
case Command::kD3DSetGraphicsRootShaderResourceView: {
|
||||
auto& args =
|
||||
*reinterpret_cast<const SetRootDescriptorArguments*>(stream);
|
||||
command_list->SetGraphicsRootShaderResourceView(
|
||||
args.root_parameter_index, args.buffer_location);
|
||||
} break;
|
||||
case Command::kD3DSetComputeRootSignature: {
|
||||
command_list->SetComputeRootSignature(
|
||||
*reinterpret_cast<ID3D12RootSignature* const*>(stream));
|
||||
@@ -215,6 +225,18 @@ void DeferredCommandList::Execute(ID3D12GraphicsCommandList* command_list,
|
||||
command_list->SetGraphicsRootSignature(
|
||||
*reinterpret_cast<ID3D12RootSignature* const*>(stream));
|
||||
} break;
|
||||
case Command::kD3DSetComputeRootUnorderedAccessView: {
|
||||
auto& args =
|
||||
*reinterpret_cast<const SetRootDescriptorArguments*>(stream);
|
||||
command_list->SetComputeRootUnorderedAccessView(
|
||||
args.root_parameter_index, args.buffer_location);
|
||||
} break;
|
||||
case Command::kD3DSetGraphicsRootUnorderedAccessView: {
|
||||
auto& args =
|
||||
*reinterpret_cast<const SetRootDescriptorArguments*>(stream);
|
||||
command_list->SetGraphicsRootUnorderedAccessView(
|
||||
args.root_parameter_index, args.buffer_location);
|
||||
} break;
|
||||
case Command::kSetDescriptorHeaps: {
|
||||
auto& args =
|
||||
*reinterpret_cast<const SetDescriptorHeapsArguments*>(stream);
|
||||
|
||||
Reference in New Issue
Block a user