Browse Source

vulkan: fix Shader::attach()

niki 3 years ago
parent
commit
4c33d0aa36
2 changed files with 19 additions and 10 deletions
  1. 4 1
      src/modules/graphics/vulkan/Shader.h
  2. 15 9
      src/modules/graphics/vulkan/Vulkan.cpp

+ 4 - 1
src/modules/graphics/vulkan/Shader.h

@@ -22,7 +22,10 @@ namespace love {
 				}
 				}
 
 
 				void attach() override {
 				void attach() override {
-					Shader::current = this;
+					if (Shader::current != this) {
+						Graphics::flushBatchedDrawsGlobal();
+						Shader::current = this;
+					}
 				}
 				}
 
 
 				ptrdiff_t getHandle() const { return 0; }
 				ptrdiff_t getHandle() const { return 0; }

+ 15 - 9
src/modules/graphics/vulkan/Vulkan.cpp

@@ -172,14 +172,10 @@ namespace love {
 						textureFormat.internalFormat = VK_FORMAT_R8G8B8A8_SRGB;
 						textureFormat.internalFormat = VK_FORMAT_R8G8B8A8_SRGB;
 						break;
 						break;
 					case PIXELFORMAT_BGRA8_UNORM:
 					case PIXELFORMAT_BGRA8_UNORM:
-						textureFormat.internalFormat = VK_FORMAT_R8G8B8A8_UNORM;
-						textureFormat.swizzleR = VK_COMPONENT_SWIZZLE_B;
-						textureFormat.swizzleB = VK_COMPONENT_SWIZZLE_R;
+						textureFormat.internalFormat = VK_FORMAT_B8G8R8A8_UNORM;
 						break;
 						break;
 					case PIXELFORMAT_BGRA8_UNORM_sRGB:
 					case PIXELFORMAT_BGRA8_UNORM_sRGB:
-						textureFormat.internalFormat = VK_FORMAT_R8G8B8A8_SRGB;
-						textureFormat.swizzleR = VK_COMPONENT_SWIZZLE_B;
-						textureFormat.swizzleB = VK_COMPONENT_SWIZZLE_R;
+						textureFormat.internalFormat = VK_FORMAT_B8G8R8A8_SRGB;
 						break;
 						break;
 					case PIXELFORMAT_RGBA8_INT:
 					case PIXELFORMAT_RGBA8_INT:
 						textureFormat.internalFormat = VK_FORMAT_R8G8B8A8_SINT;
 						textureFormat.internalFormat = VK_FORMAT_R8G8B8A8_SINT;
@@ -265,12 +261,22 @@ namespace love {
 			// as specified at https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceProperties.html
 			// as specified at https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceProperties.html
 			std::string Vulkan::getVendorName(uint32_t vendorId) {
 			std::string Vulkan::getVendorName(uint32_t vendorId) {
 				switch (vendorId) {
 				switch (vendorId) {
+				case 4130:
+					return "AMD";
 				case 4318:
 				case 4318:
 					return "Nvidia";
 					return "Nvidia";
 				case 8086:
 				case 8086:
 					return "Intel";
 					return "Intel";
-				case 4130:
-					return "Advanced Micro Devices";
+				case 4203:
+					return "Apple";
+				case 5140:
+					return "Microsoft";
+				case 5045:
+					return "ARM";
+				case 20803:
+					return "Qualcomm";
+				case 5348:
+					return "Broadcom";
 				default:
 				default:
 					return "unknown";
 					return "unknown";
 				}
 				}
@@ -279,7 +285,7 @@ namespace love {
 			std::string Vulkan::getVulkanApiVersion(uint32_t version) {
 			std::string Vulkan::getVulkanApiVersion(uint32_t version) {
 				std::stringstream ss;
 				std::stringstream ss;
 
 
-				ss << "." << VK_API_VERSION_MAJOR(version) 
+				ss << VK_API_VERSION_MAJOR(version) 
 				   << "." << VK_API_VERSION_MINOR(version) 
 				   << "." << VK_API_VERSION_MINOR(version) 
 				   << "." << VK_API_VERSION_PATCH(version);
 				   << "." << VK_API_VERSION_PATCH(version);