33#include " AppSettings/ArgsParser.h"
44#include " Instance/Instance.h"
55#include " Utilities/Asset.h"
6+ #include " Utilities/Check.h"
67#include " Utilities/NotReached.h"
78
89#include < array>
@@ -33,13 +34,20 @@ std::string GetBufferPrefix(ViewType view_type)
3334 return " structured_buffer" ;
3435 case ViewType::kRWStructuredBuffer :
3536 return " rwstructured_buffer" ;
37+ case ViewType::kByteAddressBuffer :
38+ return " byte_address_buffer" ;
39+ case ViewType::kRWByteAddressBuffer :
40+ return " rwbyte_address_buffer" ;
3641 default :
3742 NOTREACHED ();
3843 }
3944}
4045
4146bool IsSupported (ViewType view_type, gli::format format)
4247{
48+ if (view_type == ViewType::kByteAddressBuffer || view_type == ViewType::kRWByteAddressBuffer ) {
49+ return format == gli::format::FORMAT_R32_UINT_PACK32;
50+ }
4351 if (format == gli::format::FORMAT_RGB32_UINT_PACK32) {
4452 return view_type != ViewType::kBuffer && view_type != ViewType::kRWBuffer ;
4553 }
@@ -110,6 +118,8 @@ BufferViewTestRenderer::BufferViewTestRenderer(const Settings& settings)
110118 ViewType::kRWBuffer ,
111119 ViewType::kStructuredBuffer ,
112120 ViewType::kRWStructuredBuffer ,
121+ ViewType::kByteAddressBuffer ,
122+ ViewType::kRWByteAddressBuffer ,
113123 });
114124 const auto formats = std::to_array ({
115125 gli::format::FORMAT_R32_UINT_PACK32,
@@ -131,7 +141,8 @@ BufferViewTestRenderer::BufferViewTestRenderer(const Settings& settings)
131141 if (buffer_desc.size % structure_stride != 0 ) {
132142 buffer_desc.size += structure_stride - (buffer_desc.size % structure_stride);
133143 }
134- if (view_type == ViewType::kBuffer || view_type == ViewType::kStructuredBuffer ) {
144+ if (view_type == ViewType::kBuffer || view_type == ViewType::kStructuredBuffer ||
145+ view_type == ViewType::kByteAddressBuffer ) {
135146 buffer_desc.usage = BindFlag::kShaderResource ;
136147 } else {
137148 buffer_desc.usage = BindFlag::kCopySource ;
@@ -144,7 +155,8 @@ BufferViewTestRenderer::BufferViewTestRenderer(const Settings& settings)
144155 }
145156 buffer->Unmap ();
146157
147- if (view_type == ViewType::kRWBuffer || view_type == ViewType::kRWStructuredBuffer ) {
158+ if (view_type == ViewType::kRWBuffer || view_type == ViewType::kRWStructuredBuffer ||
159+ view_type == ViewType::kRWByteAddressBuffer ) {
148160 upload_buffers_.push_back (std::move (buffer));
149161 buffer_desc.usage = BindFlag::kUnorderedAccess | BindFlag::kCopyDest ;
150162 buffer = device_->CreateBuffer (MemoryType::kDefault , buffer_desc);
@@ -168,9 +180,12 @@ BufferViewTestRenderer::BufferViewTestRenderer(const Settings& settings)
168180 }
169181 std::shared_ptr<View> buffer_view = device_->CreateView (buffer, buffer_view_desc);
170182
171- std::string bind_key_name = GetBufferPrefix (view_type) + " _uint" ;
172- bind_key_name += std::to_string (structure_stride / 4 );
183+ std::string bind_key_name = GetBufferPrefix (view_type);
184+ if (view_type != ViewType::kByteAddressBuffer && view_type != ViewType::kRWByteAddressBuffer ) {
185+ bind_key_name += " _uint" + std::to_string (structure_stride / 4 );
186+ }
173187 BindKey bind_key = pixel_shader_->GetBindKey (bind_key_name);
188+ DCHECK (bind_key.view_type == view_type);
174189 binding_set_layout_desc.bind_keys .push_back (bind_key);
175190 write_bindings_desc.bindings .emplace_back (bind_key, buffer_view);
176191
0 commit comments