diff --git a/src/freedreno/vulkan/tu_cmd_buffer.cc b/src/freedreno/vulkan/tu_cmd_buffer.cc index f149b7bc5e9..795634d0670 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.cc +++ b/src/freedreno/vulkan/tu_cmd_buffer.cc @@ -1543,10 +1543,10 @@ tu6_init_static_regs(struct tu_device *dev, struct tu_cs *cs) tu_cs_emit_regs(cs, A6XX_SP_TP_BORDER_COLOR_BASE_ADDR(.bo = dev->global_bo, - .bo_offset = gb_offset(bcolor_builtin))); + .bo_offset = gb_offset(bcolor))); tu_cs_emit_regs(cs, A6XX_SP_PS_TP_BORDER_COLOR_BASE_ADDR(.bo = dev->global_bo, - .bo_offset = gb_offset(bcolor_builtin))); + .bo_offset = gb_offset(bcolor))); if (CHIP == A7XX) { tu_cs_emit_regs(cs, TPL1_BICUBIC_WEIGHTS_TABLE_0(CHIP, 0), diff --git a/src/freedreno/vulkan/tu_device.cc b/src/freedreno/vulkan/tu_device.cc index dd79caf6927..7f537cc448b 100644 --- a/src/freedreno/vulkan/tu_device.cc +++ b/src/freedreno/vulkan/tu_device.cc @@ -2689,11 +2689,6 @@ tu_CreateDevice(VkPhysicalDevice physicalDevice, global->dbg_gmem_taken_loads = 0; global->dbg_gmem_total_stores = 0; global->dbg_gmem_taken_stores = 0; - for (int i = 0; i < TU_BORDER_COLOR_BUILTIN; i++) { - VkClearColorValue border_color = vk_border_color_value((VkBorderColor) i); - tu6_pack_border_color(&global->bcolor_builtin[i], &border_color, - vk_border_color_is_int((VkBorderColor) i)); - } /* initialize to ones so ffs can be used to find unused slots */ BITSET_ONES(device->custom_border_color); diff --git a/src/freedreno/vulkan/tu_device.h b/src/freedreno/vulkan/tu_device.h index 1ffb9edc840..58eae80f131 100644 --- a/src/freedreno/vulkan/tu_device.h +++ b/src/freedreno/vulkan/tu_device.h @@ -34,7 +34,6 @@ #define TU_MAX_QUEUE_FAMILIES 1 #define TU_BORDER_COLOR_COUNT 4096 -#define TU_BORDER_COLOR_BUILTIN 6 #define TU_BLIT_SHADER_SIZE 4096 @@ -261,8 +260,7 @@ struct tu6_global volatile uint32_t userspace_fence; uint32_t _pad5; - /* note: larger global bo will be used for customBorderColors */ - struct bcolor_entry bcolor_builtin[TU_BORDER_COLOR_BUILTIN], bcolor[]; + struct bcolor_entry bcolor[]; }; #define gb_offset(member) offsetof(struct tu6_global, member) #define global_iova(cmd, member) ((cmd)->device->global_bo->iova + gb_offset(member)) diff --git a/src/freedreno/vulkan/tu_sampler.cc b/src/freedreno/vulkan/tu_sampler.cc index 35752fcc610..f11e9648394 100644 --- a/src/freedreno/vulkan/tu_sampler.cc +++ b/src/freedreno/vulkan/tu_sampler.cc @@ -33,10 +33,6 @@ tu_CreateSampler(VkDevice _device, const struct VkSamplerYcbcrConversionInfo *ycbcr_conversion = vk_find_struct_const(pCreateInfo->pNext, SAMPLER_YCBCR_CONVERSION_INFO); - /* for non-custom border colors, the VK enum is translated directly to an offset in - * the border color buffer. custom border colors are located immediately after the - * builtin colors, and thus an offset of TU_BORDER_COLOR_BUILTIN is added. - */ uint32_t border_color = (unsigned) pCreateInfo->borderColor; if (vk_border_color_is_custom(pCreateInfo->borderColor)) { mtx_lock(&device->mutex); @@ -61,7 +57,6 @@ tu_CreateSampler(VkDevice _device, tu6_pack_border_color( &device->global_bo_map->bcolor[border_color], &color, pCreateInfo->borderColor == VK_BORDER_COLOR_INT_CUSTOM_EXT); - border_color += TU_BORDER_COLOR_BUILTIN; } else { fast_border_color_enable = true; switch (pCreateInfo->borderColor) { @@ -145,9 +140,10 @@ tu_DestroySampler(VkDevice _device, if (!sampler) return; - border_color = (sampler->descriptor[2] & A6XX_TEX_SAMP_2_BCOLOR__MASK) >> A6XX_TEX_SAMP_2_BCOLOR__SHIFT; - if (border_color >= TU_BORDER_COLOR_BUILTIN) { - border_color -= TU_BORDER_COLOR_BUILTIN; + bool fast_border_color = + (sampler->descriptor[2] & A6XX_TEX_SAMP_2_FASTBORDERCOLOREN) != 0; + if (!fast_border_color) { + border_color = (sampler->descriptor[2] & A6XX_TEX_SAMP_2_BCOLOR__MASK) >> A6XX_TEX_SAMP_2_BCOLOR__SHIFT; /* if the sampler had a custom border color, free it. TODO: no lock */ mtx_lock(&device->mutex); assert(!BITSET_TEST(device->custom_border_color, border_color));