summaryrefslogtreecommitdiff
path: root/src/gallium/frontends/lavapipe/lvp_pipeline.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/frontends/lavapipe/lvp_pipeline.c')
-rw-r--r--src/gallium/frontends/lavapipe/lvp_pipeline.c35
1 files changed, 25 insertions, 10 deletions
diff --git a/src/gallium/frontends/lavapipe/lvp_pipeline.c b/src/gallium/frontends/lavapipe/lvp_pipeline.c
index 91375d4b11a..a183561d671 100644
--- a/src/gallium/frontends/lavapipe/lvp_pipeline.c
+++ b/src/gallium/frontends/lavapipe/lvp_pipeline.c
@@ -1118,16 +1118,23 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateGraphicsPipelines(
unsigned i = 0;
for (; i < count; i++) {
- VkResult r;
- r = lvp_graphics_pipeline_create(_device,
- pipelineCache,
- &pCreateInfos[i],
- pAllocator, &pPipelines[i]);
+ VkResult r = VK_PIPELINE_COMPILE_REQUIRED;
+ if (!(pCreateInfos[i].flags & VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT))
+ r = lvp_graphics_pipeline_create(_device,
+ pipelineCache,
+ &pCreateInfos[i],
+ pAllocator, &pPipelines[i]);
if (r != VK_SUCCESS) {
result = r;
pPipelines[i] = VK_NULL_HANDLE;
+ if (pCreateInfos[i].flags & VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT)
+ break;
}
}
+ if (result != VK_SUCCESS) {
+ for (; i < count; i++)
+ pPipelines[i] = VK_NULL_HANDLE;
+ }
return result;
}
@@ -1217,16 +1224,24 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateComputePipelines(
unsigned i = 0;
for (; i < count; i++) {
- VkResult r;
- r = lvp_compute_pipeline_create(_device,
- pipelineCache,
- &pCreateInfos[i],
- pAllocator, &pPipelines[i]);
+ VkResult r = VK_PIPELINE_COMPILE_REQUIRED;
+ if (!(pCreateInfos[i].flags & VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT))
+ r = lvp_compute_pipeline_create(_device,
+ pipelineCache,
+ &pCreateInfos[i],
+ pAllocator, &pPipelines[i]);
if (r != VK_SUCCESS) {
result = r;
pPipelines[i] = VK_NULL_HANDLE;
+ if (pCreateInfos[i].flags & VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT)
+ break;
}
}
+ if (result != VK_SUCCESS) {
+ for (; i < count; i++)
+ pPipelines[i] = VK_NULL_HANDLE;
+ }
+
return result;
}