ac/radeonsi: pass bindless bool to load_sampler_desc()
We also fix the base_index for bindless by using the driver location. Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
@@ -3030,6 +3030,7 @@ static LLVMValueRef get_sampler_desc(struct ac_nir_context *ctx,
|
|||||||
unsigned constant_index = 0;
|
unsigned constant_index = 0;
|
||||||
unsigned descriptor_set;
|
unsigned descriptor_set;
|
||||||
unsigned base_index;
|
unsigned base_index;
|
||||||
|
bool bindless = false;
|
||||||
|
|
||||||
if (!deref) {
|
if (!deref) {
|
||||||
assert(tex_instr && !image);
|
assert(tex_instr && !image);
|
||||||
@@ -3063,14 +3064,20 @@ static LLVMValueRef get_sampler_desc(struct ac_nir_context *ctx,
|
|||||||
tail = &child->deref;
|
tail = &child->deref;
|
||||||
}
|
}
|
||||||
descriptor_set = deref->var->data.descriptor_set;
|
descriptor_set = deref->var->data.descriptor_set;
|
||||||
base_index = deref->var->data.binding;
|
|
||||||
|
if (deref->var->data.bindless) {
|
||||||
|
bindless = deref->var->data.bindless;
|
||||||
|
base_index = deref->var->data.driver_location;
|
||||||
|
} else {
|
||||||
|
base_index = deref->var->data.binding;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ctx->abi->load_sampler_desc(ctx->abi,
|
return ctx->abi->load_sampler_desc(ctx->abi,
|
||||||
descriptor_set,
|
descriptor_set,
|
||||||
base_index,
|
base_index,
|
||||||
constant_index, index,
|
constant_index, index,
|
||||||
desc_type, image, write);
|
desc_type, image, write, bindless);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_tex_fetch_args(struct ac_llvm_context *ctx,
|
static void set_tex_fetch_args(struct ac_llvm_context *ctx,
|
||||||
|
@@ -157,7 +157,8 @@ struct ac_shader_abi {
|
|||||||
unsigned constant_index,
|
unsigned constant_index,
|
||||||
LLVMValueRef index,
|
LLVMValueRef index,
|
||||||
enum ac_descriptor_type desc_type,
|
enum ac_descriptor_type desc_type,
|
||||||
bool image, bool write);
|
bool image, bool write,
|
||||||
|
bool bindless);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load a Vulkan-specific resource.
|
* Load a Vulkan-specific resource.
|
||||||
|
@@ -1699,7 +1699,8 @@ static LLVMValueRef radv_get_sampler_desc(struct ac_shader_abi *abi,
|
|||||||
unsigned constant_index,
|
unsigned constant_index,
|
||||||
LLVMValueRef index,
|
LLVMValueRef index,
|
||||||
enum ac_descriptor_type desc_type,
|
enum ac_descriptor_type desc_type,
|
||||||
bool image, bool write)
|
bool image, bool write,
|
||||||
|
bool bindless)
|
||||||
{
|
{
|
||||||
struct radv_shader_context *ctx = radv_shader_context_from_abi(abi);
|
struct radv_shader_context *ctx = radv_shader_context_from_abi(abi);
|
||||||
LLVMValueRef list = ctx->descriptor_sets[descriptor_set];
|
LLVMValueRef list = ctx->descriptor_sets[descriptor_set];
|
||||||
|
@@ -784,7 +784,7 @@ si_nir_load_sampler_desc(struct ac_shader_abi *abi,
|
|||||||
unsigned descriptor_set, unsigned base_index,
|
unsigned descriptor_set, unsigned base_index,
|
||||||
unsigned constant_index, LLVMValueRef dynamic_index,
|
unsigned constant_index, LLVMValueRef dynamic_index,
|
||||||
enum ac_descriptor_type desc_type, bool image,
|
enum ac_descriptor_type desc_type, bool image,
|
||||||
bool write)
|
bool write, bool bindless)
|
||||||
{
|
{
|
||||||
struct si_shader_context *ctx = si_shader_context_from_abi(abi);
|
struct si_shader_context *ctx = si_shader_context_from_abi(abi);
|
||||||
LLVMBuilderRef builder = ctx->ac.builder;
|
LLVMBuilderRef builder = ctx->ac.builder;
|
||||||
|
Reference in New Issue
Block a user