Skip to content

Commit dc35e5b

Browse files
committed
Merge branch 'feature/texture-arrays' into 'main'
Use texture arrays instead of 3d textures for vector field sampling See merge request vr-vis/VR-Group/vulkan-flow!12
2 parents 3ac0dc6 + 71b5f09 commit dc35e5b

File tree

5 files changed

+167
-156
lines changed

5 files changed

+167
-156
lines changed

src/dataset.cpp

+9-9
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,15 @@ bool Dataset::Image::create(lava::device_p device, const DataSource::Ptr& data,
5656
const VkImageCreateInfo image_create_info{
5757
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
5858
.flags = 0,
59-
.imageType = VK_IMAGE_TYPE_3D,
59+
.imageType = data->format == DataSource::Format::BC6H ? VK_IMAGE_TYPE_2D : VK_IMAGE_TYPE_3D,
6060
.format = format,
6161
.extent = VkExtent3D{
6262
.width = data->dimensions.x,
6363
.height = data->dimensions.y,
64-
.depth = data->dimensions.z,
64+
.depth = data->format == DataSource::Format::BC6H ? 1 : data->dimensions.z,
6565
},
6666
.mipLevels = 1,
67-
.arrayLayers = 1,
67+
.arrayLayers = data->format == DataSource::Format::BC6H ? data->dimensions.z : 1,
6868
.samples = VK_SAMPLE_COUNT_1_BIT,
6969
.tiling = VK_IMAGE_TILING_OPTIMAL,
7070
.usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT,
@@ -91,14 +91,14 @@ bool Dataset::Image::create(lava::device_p device, const DataSource::Ptr& data,
9191
const VkImageViewCreateInfo image_view_info{
9292
.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
9393
.image = this->image,
94-
.viewType = VK_IMAGE_VIEW_TYPE_3D,
94+
.viewType = data->format == DataSource::Format::BC6H ? VK_IMAGE_VIEW_TYPE_2D_ARRAY : VK_IMAGE_VIEW_TYPE_3D,
9595
.format = format,
9696
.subresourceRange = {
9797
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
9898
.baseMipLevel = 0,
9999
.levelCount = 1,
100100
.baseArrayLayer = 0,
101-
.layerCount = 1,
101+
.layerCount = data->format == DataSource::Format::BC6H ? data->dimensions.z : 1,
102102
},
103103
};
104104

@@ -440,7 +440,7 @@ void Dataset::load(std::size_t staging_buffer_count) {
440440
.baseMipLevel = 0,
441441
.levelCount = 1,
442442
.baseArrayLayer = 0,
443-
.layerCount = 1,
443+
.layerCount = data->format == DataSource::Format::BC6H ? data->dimensions.z : 1,
444444
},
445445
};
446446
vkCmdPipelineBarrier(command_buffer, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, 1, &barrier);
@@ -454,7 +454,7 @@ void Dataset::load(std::size_t staging_buffer_count) {
454454
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
455455
.mipLevel = 0,
456456
.baseArrayLayer = 0,
457-
.layerCount = 1,
457+
.layerCount = data->format == DataSource::Format::BC6H ? data->dimensions.z : 1,
458458
},
459459
.imageOffset = VkOffset3D{
460460
.x = 0,
@@ -464,7 +464,7 @@ void Dataset::load(std::size_t staging_buffer_count) {
464464
.imageExtent = VkExtent3D{
465465
.width = data->dimensions.x,
466466
.height = data->dimensions.y,
467-
.depth = data->dimensions.z,
467+
.depth = data->format == DataSource::Format::BC6H ? 1 : data->dimensions.z,
468468
},
469469
};
470470

@@ -567,7 +567,7 @@ void Dataset::transition_images(VkCommandBuffer command_buffer) {
567567
.baseMipLevel = 0,
568568
.levelCount = 1,
569569
.baseArrayLayer = 0,
570-
.layerCount = 1,
570+
.layerCount = data->format == DataSource::Format::BC6H ? data->dimensions.z : 1,
571571
},
572572
};
573573
vkCmdPipelineBarrier(command_buffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, 0, 0, nullptr, 0, nullptr, 1, &barrier);

src/dataset_view.cpp

+63-63
Original file line numberDiff line numberDiff line change
@@ -106,27 +106,27 @@ void DatasetView::destroy() {
106106
}
107107

108108
void DatasetView::render(VkCommandBuffer command_buffer) {
109-
if (!this->visible || !this->dataset) {
110-
return;
111-
}
112-
113-
const bool dataset_loaded = this->dataset->loaded();
114-
if (dataset_loaded) {
115-
if (this->descriptor_sets.size() == 0) {
116-
this->allocate_descriptor_sets();
117-
}
118-
119-
Constants c{
120-
.minimum = this->min,
121-
.difference = this->max - this->min,
122-
.depth = static_cast<float>(this->z_slice - 1) / (this->dataset->data->dimensions.z - 1),
123-
.channel_count = this->dataset->data->channel_count,
124-
};
125-
126-
this->pipeline_layout->bind(command_buffer, this->descriptor_sets[this->t_slice - 1]);
127-
vkCmdPushConstants(command_buffer, this->pipeline_layout->get(), VK_SHADER_STAGE_FRAGMENT_BIT, 0, sizeof(Constants), &c);
128-
this->quad->bind_draw(command_buffer);
129-
}
109+
// if (!this->visible || !this->dataset) {
110+
// return;
111+
// }
112+
113+
// const bool dataset_loaded = this->dataset->loaded();
114+
// if (dataset_loaded) {
115+
// if (this->descriptor_sets.size() == 0) {
116+
// this->allocate_descriptor_sets();
117+
// }
118+
119+
// Constants c{
120+
// .minimum = this->min,
121+
// .difference = this->max - this->min,
122+
// .depth = static_cast<float>(this->z_slice - 1) / (this->dataset->data->dimensions.z - 1),
123+
// .channel_count = this->dataset->data->channel_count,
124+
// };
125+
126+
// this->pipeline_layout->bind(command_buffer, this->descriptor_sets[this->t_slice - 1]);
127+
// vkCmdPushConstants(command_buffer, this->pipeline_layout->get(), VK_SHADER_STAGE_FRAGMENT_BIT, 0, sizeof(Constants), &c);
128+
// this->quad->bind_draw(command_buffer);
129+
// }
130130
}
131131

132132
void DatasetView::imgui() {
@@ -144,48 +144,48 @@ void DatasetView::set_dataset(Dataset::Ptr dataset) {
144144
}
145145

146146
void DatasetView::allocate_descriptor_sets() {
147-
assert(this->descriptor);
148-
assert(this->descriptor_pool);
149-
assert(this->descriptor_sets.size() == 0);
150-
151-
const auto num_time_slices = this->dataset->data->dimensions.w;
152-
this->descriptor_sets.reserve(num_time_slices);
153-
std::vector<VkWriteDescriptorSet> descriptor_set_writes;
154-
for (unsigned t = 0; t < num_time_slices; ++t) {
155-
auto descriptor_set = this->descriptor->allocate(this->descriptor_pool->get());
156-
this->descriptor_sets.push_back(descriptor_set);
157-
158-
const bool single_channel = this->dataset->data->channel_count == 1;
159-
160-
descriptor_set_writes.push_back(VkWriteDescriptorSet{
161-
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
162-
.dstSet = descriptor_set,
163-
.dstBinding = 0,
164-
.dstArrayElement = 0,
165-
.descriptorCount = 1,
166-
.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
167-
.pImageInfo = &this->dataset->get_image(0, t).image_info
168-
});
169-
descriptor_set_writes.push_back(VkWriteDescriptorSet{
170-
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
171-
.dstSet = descriptor_set,
172-
.dstBinding = 0,
173-
.dstArrayElement = 1,
174-
.descriptorCount = 1,
175-
.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
176-
.pImageInfo = &this->dataset->get_image(single_channel ? 0 : 1, t).image_info
177-
});
178-
descriptor_set_writes.push_back(VkWriteDescriptorSet{
179-
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
180-
.dstSet = descriptor_set,
181-
.dstBinding = 0,
182-
.dstArrayElement = 2,
183-
.descriptorCount = 1,
184-
.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
185-
.pImageInfo = &this->dataset->get_image(single_channel ? 0 : 2, t).image_info
186-
});
187-
}
188-
this->device->vkUpdateDescriptorSets(descriptor_set_writes.size(), descriptor_set_writes.data());
147+
// assert(this->descriptor);
148+
// assert(this->descriptor_pool);
149+
// assert(this->descriptor_sets.size() == 0);
150+
151+
// const auto num_time_slices = this->dataset->data->dimensions.w;
152+
// this->descriptor_sets.reserve(num_time_slices);
153+
// std::vector<VkWriteDescriptorSet> descriptor_set_writes;
154+
// for (unsigned t = 0; t < num_time_slices; ++t) {
155+
// auto descriptor_set = this->descriptor->allocate(this->descriptor_pool->get());
156+
// this->descriptor_sets.push_back(descriptor_set);
157+
158+
// const bool single_channel = this->dataset->data->channel_count == 1;
159+
160+
// descriptor_set_writes.push_back(VkWriteDescriptorSet{
161+
// .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
162+
// .dstSet = descriptor_set,
163+
// .dstBinding = 0,
164+
// .dstArrayElement = 0,
165+
// .descriptorCount = 1,
166+
// .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
167+
// .pImageInfo = &this->dataset->get_image(0, t).image_info
168+
// });
169+
// descriptor_set_writes.push_back(VkWriteDescriptorSet{
170+
// .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
171+
// .dstSet = descriptor_set,
172+
// .dstBinding = 0,
173+
// .dstArrayElement = 1,
174+
// .descriptorCount = 1,
175+
// .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
176+
// .pImageInfo = &this->dataset->get_image(single_channel ? 0 : 1, t).image_info
177+
// });
178+
// descriptor_set_writes.push_back(VkWriteDescriptorSet{
179+
// .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
180+
// .dstSet = descriptor_set,
181+
// .dstBinding = 0,
182+
// .dstArrayElement = 2,
183+
// .descriptorCount = 1,
184+
// .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
185+
// .pImageInfo = &this->dataset->get_image(single_channel ? 0 : 2, t).image_info
186+
// });
187+
// }
188+
// this->device->vkUpdateDescriptorSets(descriptor_set_writes.size(), descriptor_set_writes.data());
189189
}
190190

191191
void DatasetView::free_descriptor_sets() {

0 commit comments

Comments
 (0)