aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/intel/vulkan/anv_pipeline.c39
-rw-r--r--src/intel/vulkan/anv_private.h6
-rw-r--r--src/intel/vulkan/genX_pipeline.c3
3 files changed, 27 insertions, 21 deletions
diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c
index eeeb9f324ed..9f14fb88f82 100644
--- a/src/intel/vulkan/anv_pipeline.c
+++ b/src/intel/vulkan/anv_pipeline.c
@@ -1051,13 +1051,14 @@ anv_pipeline_add_executable(struct anv_pipeline *pipeline,
free(stream_data);
}
- pipeline->executables[pipeline->num_executables++] =
- (struct anv_pipeline_executable) {
- .stage = stage->stage,
- .stats = *stats,
- .nir = nir,
- .disasm = disasm,
- };
+ const struct anv_pipeline_executable exe = {
+ .stage = stage->stage,
+ .stats = *stats,
+ .nir = nir,
+ .disasm = disasm,
+ };
+ util_dynarray_append(&pipeline->executables,
+ struct anv_pipeline_executable, exe);
}
static void
@@ -1873,7 +1874,8 @@ anv_pipeline_init(struct anv_pipeline *pipeline,
* of various prog_data pointers. Make them NULL by default.
*/
memset(pipeline->shaders, 0, sizeof(pipeline->shaders));
- pipeline->num_executables = 0;
+
+ util_dynarray_init(&pipeline->executables, pipeline->mem_ctx);
result = anv_pipeline_compile_graphics(pipeline, cache, pCreateInfo);
if (result != VK_SUCCESS) {
@@ -1976,12 +1978,12 @@ VkResult anv_GetPipelineExecutablePropertiesKHR(
ANV_FROM_HANDLE(anv_pipeline, pipeline, pPipelineInfo->pipeline);
VK_OUTARRAY_MAKE(out, pProperties, pExecutableCount);
- for (uint32_t i = 0; i < pipeline->num_executables; i++) {
+ util_dynarray_foreach (&pipeline->executables, struct anv_pipeline_executable, exe) {
vk_outarray_append(&out, props) {
- gl_shader_stage stage = pipeline->executables[i].stage;
+ gl_shader_stage stage = exe->stage;
props->stages = mesa_to_vk_shader_stage(stage);
- unsigned simd_width = pipeline->executables[i].stats.dispatch_width;
+ unsigned simd_width = exe->stats.dispatch_width;
if (stage == MESA_SHADER_FRAGMENT) {
WRITE_STR(props->name, "%s%d %s",
simd_width ? "SIMD" : "vec",
@@ -2005,6 +2007,15 @@ VkResult anv_GetPipelineExecutablePropertiesKHR(
return vk_outarray_status(&out);
}
+static const struct anv_pipeline_executable *
+anv_pipeline_get_executable(struct anv_pipeline *pipeline, uint32_t index)
+{
+ assert(index < util_dynarray_num_elements(&pipeline->executables,
+ struct anv_pipeline_executable));
+ return util_dynarray_element(
+ &pipeline->executables, struct anv_pipeline_executable, index);
+}
+
VkResult anv_GetPipelineExecutableStatisticsKHR(
VkDevice device,
const VkPipelineExecutableInfoKHR* pExecutableInfo,
@@ -2014,9 +2025,8 @@ VkResult anv_GetPipelineExecutableStatisticsKHR(
ANV_FROM_HANDLE(anv_pipeline, pipeline, pExecutableInfo->pipeline);
VK_OUTARRAY_MAKE(out, pStatistics, pStatisticCount);
- assert(pExecutableInfo->executableIndex < pipeline->num_executables);
const struct anv_pipeline_executable *exe =
- &pipeline->executables[pExecutableInfo->executableIndex];
+ anv_pipeline_get_executable(pipeline, pExecutableInfo->executableIndex);
const struct brw_stage_prog_data *prog_data =
pipeline->shaders[exe->stage]->prog_data;
@@ -2127,9 +2137,8 @@ VkResult anv_GetPipelineExecutableInternalRepresentationsKHR(
pInternalRepresentationCount);
bool incomplete_text = false;
- assert(pExecutableInfo->executableIndex < pipeline->num_executables);
const struct anv_pipeline_executable *exe =
- &pipeline->executables[pExecutableInfo->executableIndex];
+ anv_pipeline_get_executable(pipeline, pExecutableInfo->executableIndex);
if (exe->nir) {
vk_outarray_append(&out, ir) {
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index cdb2a725a91..3607b7d4fcd 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -3145,9 +3145,6 @@ anv_shader_bin_unref(struct anv_device *device, struct anv_shader_bin *shader)
anv_shader_bin_destroy(device, shader);
}
-/* 5 possible simultaneous shader stages and FS may have up to 3 binaries */
-#define MAX_PIPELINE_EXECUTABLES 7
-
struct anv_pipeline_executable {
gl_shader_stage stage;
@@ -3178,8 +3175,7 @@ struct anv_pipeline {
struct anv_shader_bin * shaders[MESA_SHADER_STAGES];
- uint32_t num_executables;
- struct anv_pipeline_executable executables[MAX_PIPELINE_EXECUTABLES];
+ struct util_dynarray executables;
const struct gen_l3_config * l3_config;
diff --git a/src/intel/vulkan/genX_pipeline.c b/src/intel/vulkan/genX_pipeline.c
index c5c5e73874e..5b692a7e813 100644
--- a/src/intel/vulkan/genX_pipeline.c
+++ b/src/intel/vulkan/genX_pipeline.c
@@ -2256,7 +2256,8 @@ compute_pipeline_create(
* of various prog_data pointers. Make them NULL by default.
*/
memset(pipeline->shaders, 0, sizeof(pipeline->shaders));
- pipeline->num_executables = 0;
+
+ util_dynarray_init(&pipeline->executables, pipeline->mem_ctx);
assert(pCreateInfo->stage.stage == VK_SHADER_STAGE_COMPUTE_BIT);
pipeline->active_stages |= VK_SHADER_STAGE_COMPUTE_BIT;