On Tue, Nov 22, 2016 at 2:08 AM, Lionel Landwerlin < lionel.g.landwer...@intel.com> wrote:
> On 22/11/16 04:26, Jason Ekstrand wrote: > >> If we try to allocate a binding table and fail, we have to get a new >> binding table block, re-emit STATE_BASE_ADDRESS, and then try again. We >> already handle this correctly for 3D and blorp but it never got handled >> for >> CS. This fixes the new stress.lots-of-surface-state.cs.static crucible >> test. >> >> Cc: "13.0" <mesa-sta...@lists.freedesktop.org> >> Cc: Jordan Justen <jordan.l.jus...@intel.com> >> --- >> src/intel/vulkan/genX_cmd_buffer.c | 20 +++++++++++++++----- >> 1 file changed, 15 insertions(+), 5 deletions(-) >> >> diff --git a/src/intel/vulkan/genX_cmd_buffer.c >> b/src/intel/vulkan/genX_cmd_buffer.c >> index de3253f..6645d1b 100644 >> --- a/src/intel/vulkan/genX_cmd_buffer.c >> +++ b/src/intel/vulkan/genX_cmd_buffer.c >> @@ -1674,12 +1674,22 @@ flush_compute_descriptor_set(struct >> anv_cmd_buffer *cmd_buffer) >> struct anv_state surfaces = { 0, }, samplers = { 0, }; >> VkResult result; >> - result = emit_samplers(cmd_buffer, MESA_SHADER_COMPUTE, &samplers); >> - if (result != VK_SUCCESS) >> - return result; >> result = emit_binding_table(cmd_buffer, MESA_SHADER_COMPUTE, >> &surfaces); >> - if (result != VK_SUCCESS) >> - return result; >> + if (result != VK_SUCCESS) { >> > > Would it make sense to have the same assert(result == > VK_ERROR_OUT_OF_DEVICE_MEMORY); here? > Anyhow, > Yes, but I forgot to make the change before pushing. :( I'll push another patch. > Reviewed-by: Lionel Landwerlin <lionel.g.landwer...@intel.com> > Thanks! > > + result = anv_cmd_buffer_new_binding_table_block(cmd_buffer); >> + assert(result == VK_SUCCESS); >> + >> + /* Re-emit state base addresses so we get the new surface state >> base >> + * address before we start emitting binding tables etc. >> + */ >> + genX(cmd_buffer_emit_state_base_address)(cmd_buffer); >> + >> + result = emit_binding_table(cmd_buffer, MESA_SHADER_COMPUTE, >> &surfaces); >> + assert(result == VK_SUCCESS); >> + } >> + result = emit_samplers(cmd_buffer, MESA_SHADER_COMPUTE, &samplers); >> + assert(result == VK_SUCCESS); >> + >> struct anv_state push_state = anv_cmd_buffer_cs_push_constan >> ts(cmd_buffer); >> >> > > >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev