Module: Mesa Branch: master Commit: 80b96a21585ebb689d256cec9e60c69f76bf6b73 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=80b96a21585ebb689d256cec9e60c69f76bf6b73
Author: Ilia Mirkin <imir...@alum.mit.edu> Date: Wed Feb 24 18:39:25 2021 -0500 st/mesa: adapt for the case where buffers are not supported in frag Some logic was tuned to buffers / atomics / images being supported in frag stages in order to expose any support at all. Fix some of these assumptions. Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu> Reviewed-by: Marek Olšák <marek.ol...@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10161> --- src/mesa/state_tracker/st_extensions.c | 18 +++++++++++------- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 10 +++++----- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 2481c2697e7..f8f5e18b803 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -510,21 +510,24 @@ void st_init_limits(struct pipe_screen *screen, c->NumProgramBinaryFormats = 1; c->MaxAtomicBufferBindings = - c->Program[MESA_SHADER_FRAGMENT].MaxAtomicBuffers; - c->MaxAtomicBufferSize = - c->Program[MESA_SHADER_FRAGMENT].MaxAtomicCounters * ATOMIC_COUNTER_SIZE; + MAX2(c->Program[MESA_SHADER_FRAGMENT].MaxAtomicBuffers, + c->Program[MESA_SHADER_COMPUTE].MaxAtomicBuffers); + c->MaxAtomicBufferSize = ATOMIC_COUNTER_SIZE * + MAX2(c->Program[MESA_SHADER_FRAGMENT].MaxAtomicCounters, + c->Program[MESA_SHADER_COMPUTE].MaxAtomicCounters); c->MaxCombinedAtomicBuffers = MIN2(screen->get_param(screen, PIPE_CAP_MAX_COMBINED_HW_ATOMIC_COUNTER_BUFFERS), MAX_COMBINED_ATOMIC_BUFFERS); if (!c->MaxCombinedAtomicBuffers) { - c->MaxCombinedAtomicBuffers = + c->MaxCombinedAtomicBuffers = MAX2( c->Program[MESA_SHADER_VERTEX].MaxAtomicBuffers + c->Program[MESA_SHADER_TESS_CTRL].MaxAtomicBuffers + c->Program[MESA_SHADER_TESS_EVAL].MaxAtomicBuffers + c->Program[MESA_SHADER_GEOMETRY].MaxAtomicBuffers + - c->Program[MESA_SHADER_FRAGMENT].MaxAtomicBuffers; + c->Program[MESA_SHADER_FRAGMENT].MaxAtomicBuffers, + c->Program[MESA_SHADER_COMPUTE].MaxAtomicBuffers); assert(c->MaxCombinedAtomicBuffers <= MAX_COMBINED_ATOMIC_BUFFERS); } @@ -546,12 +549,13 @@ void st_init_limits(struct pipe_screen *screen, MIN2(screen->get_param(screen, PIPE_CAP_MAX_COMBINED_SHADER_BUFFERS), MAX_COMBINED_SHADER_STORAGE_BUFFERS); if (!c->MaxCombinedShaderStorageBlocks) { - c->MaxCombinedShaderStorageBlocks = + c->MaxCombinedShaderStorageBlocks = MAX2( c->Program[MESA_SHADER_VERTEX].MaxShaderStorageBlocks + c->Program[MESA_SHADER_TESS_CTRL].MaxShaderStorageBlocks + c->Program[MESA_SHADER_TESS_EVAL].MaxShaderStorageBlocks + c->Program[MESA_SHADER_GEOMETRY].MaxShaderStorageBlocks + - c->Program[MESA_SHADER_FRAGMENT].MaxShaderStorageBlocks; + c->Program[MESA_SHADER_FRAGMENT].MaxShaderStorageBlocks, + c->Program[MESA_SHADER_COMPUTE].MaxShaderStorageBlocks); assert(c->MaxCombinedShaderStorageBlocks < MAX_COMBINED_SHADER_STORAGE_BUFFERS); } c->MaxShaderStorageBufferBindings = c->MaxCombinedShaderStorageBlocks; diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 96c1f93c474..96d92165ace 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -6662,8 +6662,8 @@ st_translate_program( struct pipe_screen *screen = st_context(ctx)->screen; struct st_translate *t; unsigned i; - struct gl_program_constants *frag_const = - &ctx->Const.Program[MESA_SHADER_FRAGMENT]; + struct gl_program_constants *prog_const = + &ctx->Const.Program[program->shader->Stage]; enum pipe_error ret = PIPE_OK; assert(numInputs <= ARRAY_SIZE(t->inputs)); @@ -6999,7 +6999,7 @@ st_translate_program( assert(i == program->num_immediates); /* texture samplers */ - for (i = 0; i < frag_const->MaxTextureImageUnits; i++) { + for (i = 0; i < prog_const->MaxTextureImageUnits; i++) { if (program->samplers_used & (1u << i)) { enum tgsi_return_type type = st_translate_texture_type(program->sampler_types[i]); @@ -7020,7 +7020,7 @@ st_translate_program( unsigned index = (prog->info.num_ssbos + prog->sh.AtomicBuffers[i]->Binding); assert(prog->sh.AtomicBuffers[i]->Binding < - frag_const->MaxAtomicBuffers); + prog_const->MaxAtomicBuffers); t->buffers[index] = ureg_DECL_buffer(ureg, index, true); } } else { @@ -7033,7 +7033,7 @@ st_translate_program( } } - assert(prog->info.num_ssbos <= frag_const->MaxShaderStorageBlocks); + assert(prog->info.num_ssbos <= prog_const->MaxShaderStorageBlocks); for (i = 0; i < prog->info.num_ssbos; i++) { t->buffers[i] = ureg_DECL_buffer(ureg, i, false); } _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit