From: Dave Airlie <airl...@redhat.com>

---
 src/amd/common/ac_llvm_build.c  |  3 +++
 src/amd/common/ac_nir_to_llvm.c | 33 +++++++++++++++++++++++----------
 src/amd/vulkan/radv_device.c    |  2 +-
 3 files changed, 27 insertions(+), 11 deletions(-)

diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c
index 93ae273f900..c42c907e936 100644
--- a/src/amd/common/ac_llvm_build.c
+++ b/src/amd/common/ac_llvm_build.c
@@ -210,6 +210,9 @@ static LLVMTypeRef to_integer_type_scalar(struct 
ac_llvm_context *ctx, LLVMTypeR
 LLVMTypeRef
 ac_to_integer_type(struct ac_llvm_context *ctx, LLVMTypeRef t)
 {
+       if (LLVMGetTypeKind(t) == LLVMPointerTypeKind) {
+               return t;
+       }
        if (LLVMGetTypeKind(t) == LLVMVectorTypeKind) {
                LLVMTypeRef elem_type = LLVMGetElementType(t);
                return LLVMVectorType(to_integer_type_scalar(ctx, elem_type),
diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 83d8b9a4425..49d9e79fe9c 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -1739,23 +1739,33 @@ static LLVMValueRef visit_load_var(struct 
ac_nir_context *ctx,
        nir_variable *var = 
nir_deref_instr_get_variable(nir_instr_as_deref(instr->src[0].ssa->parent_instr));
 
        LLVMValueRef values[8];
-       int idx = var->data.driver_location;
+       int idx = 0;
        int ve = instr->dest.ssa.num_components;
-       unsigned comp = var->data.location_frac;
+       unsigned comp = 0;
        LLVMValueRef indir_index;
        LLVMValueRef ret;
        unsigned const_index;
-       unsigned stride = var->data.compact ? 1 : 4;
-       bool vs_in = ctx->stage == MESA_SHADER_VERTEX &&
-                    var->data.mode == nir_var_shader_in;
-
-       get_deref_offset(ctx, 
nir_instr_as_deref(instr->src[0].ssa->parent_instr), vs_in, NULL, NULL,
-                        &const_index, &indir_index);
-
+       unsigned stride = 4;
+       bool vs_in = false;
+       int mode = nir_var_shared;
+
+       /* if we don't have a var we are getting a deref into shared memory */
+       if (var) {
+               if (var->data.compact)
+                   stride = 1;
+               comp = var->data.location_frac;
+               idx = var->data.driver_location;
+               mode = var->data.mode;
+               vs_in = ctx->stage == MESA_SHADER_VERTEX &&
+                       var->data.mode == nir_var_shader_in;
+
+               get_deref_offset(ctx, 
nir_instr_as_deref(instr->src[0].ssa->parent_instr), vs_in, NULL, NULL,
+                                &const_index, &indir_index);
+       }
        if (instr->dest.ssa.bit_size == 64)
                ve *= 2;
 
-       switch (var->data.mode) {
+       switch (mode) {
        case nir_var_shader_in:
                if (ctx->stage == MESA_SHADER_TESS_CTRL ||
                    ctx->stage == MESA_SHADER_TESS_EVAL) {
@@ -3592,6 +3602,9 @@ static void visit_deref(struct ac_nir_context *ctx,
                result = ac_build_gep0(&ctx->ac, get_src(ctx, instr->parent),
                                       get_src(ctx, instr->arr.index));
                break;
+       case nir_deref_type_cast:
+               result = get_src(ctx, instr->parent);
+               break;
        default:
                unreachable("Unhandled deref_instr deref type");
        }
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 73c48cef1f0..7e10f1ba21e 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -745,7 +745,7 @@ void radv_GetPhysicalDeviceFeatures2(
                case 
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR: {
                        VkPhysicalDeviceVariablePointerFeaturesKHR *features = 
(void *)ext;
                        features->variablePointersStorageBuffer = true;
-                       features->variablePointers = false;
+                       features->variablePointers = true;
                        break;
                }
                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR: {
-- 
2.17.1

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to