diff options
author | Timothy Arceri <[email protected]> | 2018-02-13 17:00:40 +1100 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2018-02-15 09:02:41 +1100 |
commit | 9740c8a8aa5497d02a589ccaca3783056199fbe0 (patch) | |
tree | 28c35c338b0fb66d1212d3380c7e4d0b74a372d5 /src/amd/common | |
parent | c6b70a0eaea63e824e3733b16cb90e1595b01c1d (diff) |
ac: implement nir_intrinsic_image_samples
Fixes cts test:
KHR-GL45.shader_texture_image_samples_tests.image_functional_test
Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/amd/common')
-rw-r--r-- | src/amd/common/ac_nir_to_llvm.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index dc551172d98..7f0bb058626 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -3781,6 +3781,26 @@ static LLVMValueRef visit_image_atomic(struct ac_nir_context *ctx, return ac_build_intrinsic(&ctx->ac, intrinsic_name, ctx->ac.i32, params, param_count, 0); } +static LLVMValueRef visit_image_samples(struct ac_nir_context *ctx, + const nir_intrinsic_instr *instr) +{ + const nir_variable *var = instr->variables[0]->var; + const struct glsl_type *type = glsl_without_array(var->type); + bool da = glsl_sampler_type_is_array(type) || + glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_CUBE || + glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_3D; + + struct ac_image_args args = { 0 }; + args.da = da; + args.dmask = 0xf; + args.resource = get_sampler_desc(ctx, instr->variables[0], + AC_DESC_IMAGE, NULL, true, false); + args.opcode = ac_image_get_resinfo; + args.addr = ctx->ac.i32_0; + + return ac_build_image_opcode(&ctx->ac, &args); +} + static LLVMValueRef visit_image_size(struct ac_nir_context *ctx, const nir_intrinsic_instr *instr) { @@ -4479,6 +4499,9 @@ static void visit_intrinsic(struct ac_nir_context *ctx, case nir_intrinsic_store_shared: visit_store_shared(ctx, instr); break; + case nir_intrinsic_image_samples: + result = visit_image_samples(ctx, instr); + break; case nir_intrinsic_image_load: result = visit_image_load(ctx, instr); break; |