*pFeatures = (VkPhysicalDeviceFeatures) {
.robustBufferAccess = false,
.fullDrawIndexUint32 = true,
- .imageCubeArray = false,
+ .imageCubeArray = true,
.independentBlend = true,
.geometryShader = true,
.tessellationShader = false,
properties->maxTransformFeedbackStreamDataSize = 512;
properties->maxTransformFeedbackBufferDataSize = 512;
properties->maxTransformFeedbackBufferDataStride = 512;
- /* TODO: enable xfb query */
- properties->transformFeedbackQueries = false;
+ properties->transformFeedbackQueries = true;
properties->transformFeedbackStreamsLinesTriangles = false;
properties->transformFeedbackRasterizationStreamSelect = false;
properties->transformFeedbackDraw = true;
properties->variableSampleLocations = true;
break;
}
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES: {
+ VkPhysicalDeviceSamplerFilterMinmaxProperties *properties =
+ (VkPhysicalDeviceSamplerFilterMinmaxProperties *)ext;
+ properties->filterMinmaxImageComponentMapping = true;
+ properties->filterMinmaxSingleComponentFormats = true;
+ break;
+ }
default:
break;
return A6XX_TEX_NEAREST;
case VK_FILTER_LINEAR:
return aniso ? A6XX_TEX_ANISO : A6XX_TEX_LINEAR;
- case VK_FILTER_CUBIC_IMG:
+ case VK_FILTER_CUBIC_EXT:
+ return A6XX_TEX_CUBIC;
default:
unreachable("illegal texture filter");
break;
struct tu_sampler *sampler,
const VkSamplerCreateInfo *pCreateInfo)
{
+ const struct VkSamplerReductionModeCreateInfo *reduction =
+ vk_find_struct_const(pCreateInfo->pNext, SAMPLER_REDUCTION_MODE_CREATE_INFO);
+
unsigned aniso = pCreateInfo->anisotropyEnable ?
util_last_bit(MIN2((uint32_t)pCreateInfo->maxAnisotropy >> 1, 8)) : 0;
bool miplinear = (pCreateInfo->mipmapMode == VK_SAMPLER_MIPMAP_MODE_LINEAR);
sizeof(struct bcolor_entry));
sampler->descriptor[3] = 0;
+ if (reduction) {
+ /* note: vulkan enum matches hw */
+ sampler->descriptor[2] |= A6XX_TEX_SAMP_2_REDUCTION_MODE(reduction->reductionMode);
+ }
+
/* TODO:
* A6XX_TEX_SAMP_1_MIPFILTER_LINEAR_FAR disables mipmapping, but vk has no NONE mipfilter?
*/