diff options
author | Jason Ekstrand <[email protected]> | 2016-06-16 15:26:54 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2016-06-22 12:39:45 -0700 |
commit | c2f2c8e407207c31c29aab5570d23cd6e98d287a (patch) | |
tree | ad4cecf8a32a0293e0c63d1a5f91353f860d083f /src/intel/vulkan/gen7_pipeline.c | |
parent | 45c0f60999587ed29a7a9b81f09950dd8f58fb49 (diff) |
anv: Use different BOs for different scratch sizes and stages
This solves a race condition where we can end up having different stages
stomp on each other because they're all trying to scratch in the same BO
but they have different views of its layout.
Signed-off-by: Jason Ekstrand <[email protected]>
Cc: "12.0" <[email protected]>
Diffstat (limited to 'src/intel/vulkan/gen7_pipeline.c')
-rw-r--r-- | src/intel/vulkan/gen7_pipeline.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/intel/vulkan/gen7_pipeline.c b/src/intel/vulkan/gen7_pipeline.c index 56e59a4bab5..89cb51f8916 100644 --- a/src/intel/vulkan/gen7_pipeline.c +++ b/src/intel/vulkan/gen7_pipeline.c @@ -252,8 +252,10 @@ genX(graphics_pipeline_create)( vs.KernelStartPointer = pipeline->vs_vec4; vs.ScratchSpaceBasePointer = (struct anv_address) { - .bo = NULL, - .offset = pipeline->scratch_start[MESA_SHADER_VERTEX], + .bo = anv_scratch_pool_alloc(device, &device->scratch_pool, + MESA_SHADER_VERTEX, + vs_prog_data->base.base.total_scratch), + .offset = 0, }; vs.PerThreadScratchSpace = scratch_space(&vs_prog_data->base.base); @@ -276,8 +278,10 @@ genX(graphics_pipeline_create)( gs.KernelStartPointer = pipeline->gs_kernel; gs.ScratchSpaceBasePointer = (struct anv_address) { - .bo = NULL, - .offset = pipeline->scratch_start[MESA_SHADER_GEOMETRY], + .bo = anv_scratch_pool_alloc(device, &device->scratch_pool, + MESA_SHADER_GEOMETRY, + gs_prog_data->base.base.total_scratch), + .offset = 0, }; gs.PerThreadScratchSpace = scratch_space(&gs_prog_data->base.base); @@ -338,8 +342,10 @@ genX(graphics_pipeline_create)( ps.KernelStartPointer0 = pipeline->ps_ksp0; ps.ScratchSpaceBasePointer = (struct anv_address) { - .bo = NULL, - .offset = pipeline->scratch_start[MESA_SHADER_FRAGMENT], + .bo = anv_scratch_pool_alloc(device, &device->scratch_pool, + MESA_SHADER_FRAGMENT, + wm_prog_data->base.total_scratch), + .offset = 0, }; ps.PerThreadScratchSpace = scratch_space(&wm_prog_data->base); ps.MaximumNumberofThreads = device->info.max_wm_threads - 1; |