diff options
Diffstat (limited to 'src/amd')
-rw-r--r-- | src/amd/common/ac_nir_to_llvm.c | 9 | ||||
-rw-r--r-- | src/amd/vulkan/radv_device.c | 18 | ||||
-rw-r--r-- | src/amd/vulkan/radv_image.c | 14 | ||||
-rw-r--r-- | src/amd/vulkan/radv_meta_clear.c | 2 |
4 files changed, 21 insertions, 22 deletions
diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 31d7b6e..0daef08 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -3517,12 +3517,13 @@ static void visit_tex(struct nir_to_llvm_context *ctx, nir_tex_instr *instr) if (offsets && instr->op == nir_texop_txf) { nir_const_value *const_offset = nir_src_as_const_value(instr->src[const_src].src); - + int num_offsets = instr->src[const_src].src.ssa->num_components; assert(const_offset); - if (instr->coord_components > 2) + num_offsets = MIN2(num_offsets, instr->coord_components); + if (num_offsets > 2) address[2] = LLVMBuildAdd(ctx->builder, address[2], LLVMConstInt(ctx->i32, const_offset->i32[2], false), ""); - if (instr->coord_components > 1) + if (num_offsets > 1) address[1] = LLVMBuildAdd(ctx->builder, address[1], LLVMConstInt(ctx->i32, const_offset->i32[1], false), ""); address[0] = LLVMBuildAdd(ctx->builder, @@ -3544,6 +3545,8 @@ static void visit_tex(struct nir_to_llvm_context *ctx, nir_tex_instr *instr) if (instr->op == nir_texop_query_levels) result = LLVMBuildExtractElement(ctx->builder, result, LLVMConstInt(ctx->i32, 3, false), ""); + else if (instr->is_shadow && instr->op != nir_texop_txs && instr->op != nir_texop_lod) + result = LLVMBuildExtractElement(ctx->builder, result, ctx->i32zero, ""); else if (instr->op == nir_texop_txs && instr->sampler_dim == GLSL_SAMPLER_DIM_CUBE && instr->is_array) { diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index 4a924ea..94a2ef0 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -659,17 +659,15 @@ VkResult radv_EnumerateInstanceExtensionProperties( uint32_t* pPropertyCount, VkExtensionProperties* pProperties) { - unsigned i; if (pProperties == NULL) { *pPropertyCount = ARRAY_SIZE(global_extensions); return VK_SUCCESS; } - for (i = 0; i < *pPropertyCount; i++) - memcpy(&pProperties[i], &global_extensions[i], sizeof(VkExtensionProperties)); + *pPropertyCount = MIN2(*pPropertyCount, ARRAY_SIZE(global_extensions)); + typed_memcpy(pProperties, global_extensions, *pPropertyCount); - *pPropertyCount = i; - if (i < ARRAY_SIZE(global_extensions)) + if (*pPropertyCount < ARRAY_SIZE(global_extensions)) return VK_INCOMPLETE; return VK_SUCCESS; @@ -681,19 +679,17 @@ VkResult radv_EnumerateDeviceExtensionProperties( uint32_t* pPropertyCount, VkExtensionProperties* pProperties) { - unsigned i; - if (pProperties == NULL) { *pPropertyCount = ARRAY_SIZE(device_extensions); return VK_SUCCESS; } - for (i = 0; i < *pPropertyCount; i++) - memcpy(&pProperties[i], &device_extensions[i], sizeof(VkExtensionProperties)); + *pPropertyCount = MIN2(*pPropertyCount, ARRAY_SIZE(device_extensions)); + typed_memcpy(pProperties, device_extensions, *pPropertyCount); - *pPropertyCount = i; - if (i < ARRAY_SIZE(device_extensions)) + if (*pPropertyCount < ARRAY_SIZE(device_extensions)) return VK_INCOMPLETE; + return VK_SUCCESS; } diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index 3099d83..9649158 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -831,29 +831,29 @@ void radv_image_set_optimal_micro_tile_mode(struct radv_device *device, switch (micro_tile_mode) { case 0: /* displayable */ switch (image->surface.bpe) { - case 8: + case 1: image->surface.tiling_index[0] = 10; break; - case 16: + case 2: image->surface.tiling_index[0] = 11; break; - default: /* 32, 64 */ + default: /* 4, 8 */ image->surface.tiling_index[0] = 12; break; } break; case 1: /* thin */ switch (image->surface.bpe) { - case 8: + case 1: image->surface.tiling_index[0] = 14; break; - case 16: + case 2: image->surface.tiling_index[0] = 15; break; - case 32: + case 4: image->surface.tiling_index[0] = 16; break; - default: /* 64, 128 */ + default: /* 8, 16 */ image->surface.tiling_index[0] = 17; break; } diff --git a/src/amd/vulkan/radv_meta_clear.c b/src/amd/vulkan/radv_meta_clear.c index 7e3e5f4..a347703 100644 --- a/src/amd/vulkan/radv_meta_clear.c +++ b/src/amd/vulkan/radv_meta_clear.c @@ -998,7 +998,7 @@ radv_cmd_clear_image(struct radv_cmd_buffer *cmd_buffer, const VkImageSubresourceRange *range = &ranges[r]; for (uint32_t l = 0; l < radv_get_levelCount(image, range); ++l) { const uint32_t layer_count = image->type == VK_IMAGE_TYPE_3D ? - radv_minify(image->extent.depth, l) : + radv_minify(image->extent.depth, range->baseMipLevel + l) : radv_get_layerCount(image, range); for (uint32_t s = 0; s < layer_count; ++s) { struct radv_image_view iview; |