summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/vulkan/anv_pipeline.c7
-rw-r--r--src/vulkan/anv_private.h2
2 files changed, 9 insertions, 0 deletions
diff --git a/src/vulkan/anv_pipeline.c b/src/vulkan/anv_pipeline.c
index dba2a5e7b46..833957a32e2 100644
--- a/src/vulkan/anv_pipeline.c
+++ b/src/vulkan/anv_pipeline.c
@@ -385,16 +385,23 @@ VkResult anv_CreatePipelineLayout(
uint32_t sampler_start[VK_SHADER_STAGE_NUM] = { 0, };
for (uint32_t s = 0; s < VK_SHADER_STAGE_NUM; s++) {
+ layout->stage[s].has_dynamic_offsets = false;
layout->stage[s].surface_count = 0;
layout->stage[s].sampler_count = 0;
}
+ uint32_t num_dynamic_offsets = 0;
for (uint32_t i = 0; i < pCreateInfo->descriptorSetCount; i++) {
ANV_FROM_HANDLE(anv_descriptor_set_layout, set_layout,
pCreateInfo->pSetLayouts[i]);
layout->set[i].layout = set_layout;
+ layout->set[i].dynamic_offset_start = num_dynamic_offsets;
+ num_dynamic_offsets += set_layout->num_dynamic_buffers;
for (uint32_t s = 0; s < VK_SHADER_STAGE_NUM; s++) {
+ if (set_layout->num_dynamic_buffers > 0)
+ layout->stage[s].has_dynamic_offsets = true;
+
layout->set[i].stage[s].surface_start = surface_start[s];
surface_start[s] += set_layout->stage[s].surface_count;
layout->set[i].stage[s].sampler_start = sampler_start[s];
diff --git a/src/vulkan/anv_private.h b/src/vulkan/anv_private.h
index f556161679f..b290d60cc08 100644
--- a/src/vulkan/anv_private.h
+++ b/src/vulkan/anv_private.h
@@ -664,6 +664,7 @@ anv_descriptor_set_destroy(struct anv_device *device,
struct anv_pipeline_layout {
struct {
struct anv_descriptor_set_layout *layout;
+ uint32_t dynamic_offset_start;
struct {
uint32_t surface_start;
uint32_t sampler_start;
@@ -673,6 +674,7 @@ struct anv_pipeline_layout {
uint32_t num_sets;
struct {
+ bool has_dynamic_offsets;
uint32_t surface_count;
uint32_t sampler_count;
} stage[VK_SHADER_STAGE_NUM];