freedreno/ir3: split out regmask
[mesa.git] / src / freedreno / ir3 / ir3_image.c
index 09ee833de117253c21ecae6c28e382762a7813e8..b89f74d5de91ca989ad5c339f6a6dde85f269665 100644 (file)
@@ -39,10 +39,17 @@ ir3_ibo_mapping_init(struct ir3_ibo_mapping *mapping, unsigned num_textures)
        mapping->tex_base = num_textures;
 }
 
-unsigned
-ir3_ssbo_to_ibo(struct ir3_shader *shader, unsigned ssbo)
+struct ir3_instruction *
+ir3_ssbo_to_ibo(struct ir3_context *ctx, nir_src src)
 {
-       return ssbo;
+       if (ir3_bindless_resource(src)) {
+               ctx->so->bindless_ibo = true;
+               return ir3_get_src(ctx, &src)[0];
+       } else {
+               /* can this be non-const buffer_index?  how do we handle that? */
+               int ssbo_idx = nir_src_as_uint(src);
+               return create_immed(ctx->block, ssbo_idx);
+       }
 }
 
 unsigned
@@ -56,10 +63,17 @@ ir3_ssbo_to_tex(struct ir3_ibo_mapping *mapping, unsigned ssbo)
        return mapping->ssbo_to_tex[ssbo] + mapping->tex_base;
 }
 
-unsigned
-ir3_image_to_ibo(struct ir3_shader *shader, unsigned image)
+struct ir3_instruction *
+ir3_image_to_ibo(struct ir3_context *ctx, nir_src src)
 {
-       return shader->nir->info.num_ssbos + image;
+       if (ir3_bindless_resource(src)) {
+               ctx->so->bindless_ibo = true;
+               return ir3_get_src(ctx, &src)[0];
+       } else {
+               /* can this be non-const buffer_index?  how do we handle that? */
+               int image_idx = nir_src_as_uint(src);
+               return create_immed(ctx->block, ctx->s->info.num_ssbos + image_idx);
+       }
 }
 
 unsigned