From 3c398139e1022d38c0343ea9e69ec511340986dd Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Fri, 15 Oct 2021 16:55:37 -0500 Subject: [PATCH] lavapipe: Allow for texture types Reviewed-by: Jesse Natalie Part-of: --- src/gallium/auxiliary/nir/nir_to_tgsi.c | 6 ++++-- src/gallium/auxiliary/nir/nir_to_tgsi_info.c | 3 ++- src/gallium/frontends/lavapipe/lvp_lower_vulkan_resource.c | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/gallium/auxiliary/nir/nir_to_tgsi.c b/src/gallium/auxiliary/nir/nir_to_tgsi.c index 0bc6796aeda..3919485c474 100644 --- a/src/gallium/auxiliary/nir/nir_to_tgsi.c +++ b/src/gallium/auxiliary/nir/nir_to_tgsi.c @@ -471,12 +471,14 @@ static void ntt_setup_uniforms(struct ntt_compile *c) { nir_foreach_uniform_variable(var, c->s) { - if (glsl_type_is_sampler(glsl_without_array(var->type))) { + if (glsl_type_is_sampler(glsl_without_array(var->type)) || + glsl_type_is_texture(glsl_without_array(var->type))) { /* Don't use this size for the check for samplers -- arrays of structs * containing samplers should be ignored, and just the separate lowered * sampler uniform decl used. */ - int size = glsl_type_get_sampler_count(var->type); + int size = glsl_type_get_sampler_count(var->type) + + glsl_type_get_texture_count(var->type); const struct glsl_type *stype = glsl_without_array(var->type); enum tgsi_texture_type target = tgsi_texture_type_from_sampler_dim(glsl_get_sampler_dim(stype), diff --git a/src/gallium/auxiliary/nir/nir_to_tgsi_info.c b/src/gallium/auxiliary/nir/nir_to_tgsi_info.c index f54c3a9aee8..ce1e3412f42 100644 --- a/src/gallium/auxiliary/nir/nir_to_tgsi_info.c +++ b/src/gallium/auxiliary/nir/nir_to_tgsi_info.c @@ -786,7 +786,8 @@ void nir_tgsi_scan_shader(const struct nir_shader *nir, uint32_t sampler_mask = 0; nir_foreach_uniform_variable(var, nir) { - uint32_t sampler_count = glsl_type_get_sampler_count(var->type); + uint32_t sampler_count = glsl_type_get_sampler_count(var->type) + + glsl_type_get_texture_count(var->type); sampler_mask |= ((1ull << sampler_count) - 1) << var->data.binding; } uint32_t image_mask = 0; diff --git a/src/gallium/frontends/lavapipe/lvp_lower_vulkan_resource.c b/src/gallium/frontends/lavapipe/lvp_lower_vulkan_resource.c index 49285384f1a..42938693ca4 100644 --- a/src/gallium/frontends/lavapipe/lvp_lower_vulkan_resource.c +++ b/src/gallium/frontends/lavapipe/lvp_lower_vulkan_resource.c @@ -220,7 +220,7 @@ void lvp_lower_pipeline_layout(const struct lvp_device *device, struct lvp_descriptor_set_binding_layout *binding = &layout->set[desc_set_idx].layout->binding[binding_idx]; int value = 0; var->data.descriptor_set = 0; - if (base_type == GLSL_TYPE_SAMPLER) { + if (base_type == GLSL_TYPE_SAMPLER || base_type == GLSL_TYPE_TEXTURE) { if (binding->type == VK_DESCRIPTOR_TYPE_SAMPLER) { for (unsigned s = 0; s < desc_set_idx; s++) value += layout->set[s].layout->stage[shader->info.stage].sampler_count;