Browse Source

Merge branch 'love2d:12.0-development' into 12.0-development

nikeinikei 2 years ago
parent
commit
755a9c8879
2 changed files with 15 additions and 8 deletions
  1. 13 6
      src/modules/graphics/vulkan/Graphics.cpp
  2. 2 2
      src/modules/graphics/vulkan/Vulkan.cpp

+ 13 - 6
src/modules/graphics/vulkan/Graphics.cpp

@@ -557,11 +557,11 @@ void Graphics::initCapabilities()
 {
 	// fixme: unsure what the first few features are for.
 	capabilities.features[FEATURE_MULTI_RENDER_TARGET_FORMATS] = true;
-	capabilities.features[FEATURE_CLAMP_ZERO] = false;
-	capabilities.features[FEATURE_CLAMP_ONE] = false;
-	capabilities.features[FEATURE_BLEND_MINMAX] = false;
-	capabilities.features[FEATURE_LIGHTEN] = false;
-	capabilities.features[FEATURE_FULL_NPOT] = false;
+	capabilities.features[FEATURE_CLAMP_ZERO] = true;
+	capabilities.features[FEATURE_CLAMP_ONE] = true;
+	capabilities.features[FEATURE_BLEND_MINMAX] = true;
+	capabilities.features[FEATURE_LIGHTEN] = true;
+	capabilities.features[FEATURE_FULL_NPOT] = true;
 	capabilities.features[FEATURE_PIXEL_SHADER_HIGHP] = true;
 	capabilities.features[FEATURE_SHADER_DERIVATIVES] = true;
 	capabilities.features[FEATURE_GLSL3] = true;
@@ -2527,7 +2527,14 @@ VkSampler Graphics::createSampler(const SamplerState &samplerState)
 	samplerInfo.addressModeW = Vulkan::getWrapMode(samplerState.wrapW);
 	samplerInfo.anisotropyEnable = VK_TRUE;
 	samplerInfo.maxAnisotropy = static_cast<float>(samplerState.maxAnisotropy);
-	samplerInfo.borderColor = VK_BORDER_COLOR_INT_OPAQUE_BLACK;
+
+	// TODO: This probably needs to branch on a pixel format to determine whether
+	// it should be float vs int, and opaque vs transparent.
+	bool clampone = samplerState.wrapU == SamplerState::WRAP_CLAMP_ONE
+		|| samplerState.wrapV == SamplerState::WRAP_CLAMP_ONE
+		|| samplerState.wrapW == SamplerState::WRAP_CLAMP_ONE;
+	samplerInfo.borderColor = clampone ? VK_BORDER_COLOR_INT_OPAQUE_WHITE : VK_BORDER_COLOR_INT_OPAQUE_BLACK;
+
 	samplerInfo.unnormalizedCoordinates = VK_FALSE;
 	if (samplerState.depthSampleMode.hasValue)
 	{

+ 2 - 2
src/modules/graphics/vulkan/Vulkan.cpp

@@ -665,11 +665,11 @@ VkSamplerAddressMode Vulkan::getWrapMode(SamplerState::WrapMode mode)
 {
 	switch (mode)
 	{
-		//fixme: not accounting for different clamps (how does that work in vulkan?)
 	case SamplerState::WRAP_CLAMP:
+		return VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
 	case SamplerState::WRAP_CLAMP_ZERO:
 	case SamplerState::WRAP_CLAMP_ONE:
-		return VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
+		return VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER;
 	case SamplerState::WRAP_REPEAT:
 		return VK_SAMPLER_ADDRESS_MODE_REPEAT;
 	case SamplerState::WRAP_MIRRORED_REPEAT: