Merge pull request #4191 from Morph1984/vertex-formats
maxwell_to_gl/vk: Reorder vertex formats
This commit is contained in:
		
						commit
						d217017c9e
					
				| @ -213,9 +213,10 @@ void RasterizerOpenGL::SetupVertexFormat() { | ||||
|         if (attrib.type == Maxwell::VertexAttribute::Type::SignedInt || | ||||
|             attrib.type == Maxwell::VertexAttribute::Type::UnsignedInt) { | ||||
|             glVertexAttribIFormat(gl_index, attrib.ComponentCount(), | ||||
|                                   MaxwellToGL::VertexType(attrib), attrib.offset); | ||||
|                                   MaxwellToGL::VertexFormat(attrib), attrib.offset); | ||||
|         } else { | ||||
|             glVertexAttribFormat(gl_index, attrib.ComponentCount(), MaxwellToGL::VertexType(attrib), | ||||
|             glVertexAttribFormat(gl_index, attrib.ComponentCount(), | ||||
|                                  MaxwellToGL::VertexFormat(attrib), | ||||
|                                  attrib.IsNormalized() ? GL_TRUE : GL_FALSE, attrib.offset); | ||||
|         } | ||||
|         glVertexAttribBinding(gl_index, attrib.buffer); | ||||
|  | ||||
| @ -24,10 +24,11 @@ namespace MaxwellToGL { | ||||
| 
 | ||||
| using Maxwell = Tegra::Engines::Maxwell3D::Regs; | ||||
| 
 | ||||
| inline GLenum VertexType(Maxwell::VertexAttribute attrib) { | ||||
| inline GLenum VertexFormat(Maxwell::VertexAttribute attrib) { | ||||
|     switch (attrib.type) { | ||||
|     case Maxwell::VertexAttribute::Type::UnsignedInt: | ||||
|     case Maxwell::VertexAttribute::Type::UnsignedNorm: | ||||
|     case Maxwell::VertexAttribute::Type::UnsignedScaled: | ||||
|     case Maxwell::VertexAttribute::Type::UnsignedInt: | ||||
|         switch (attrib.size) { | ||||
|         case Maxwell::VertexAttribute::Size::Size_8: | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8: | ||||
| @ -48,8 +49,9 @@ inline GLenum VertexType(Maxwell::VertexAttribute attrib) { | ||||
|             return GL_UNSIGNED_INT_2_10_10_10_REV; | ||||
|         } | ||||
|         break; | ||||
|     case Maxwell::VertexAttribute::Type::SignedInt: | ||||
|     case Maxwell::VertexAttribute::Type::SignedNorm: | ||||
|     case Maxwell::VertexAttribute::Type::SignedScaled: | ||||
|     case Maxwell::VertexAttribute::Type::SignedInt: | ||||
|         switch (attrib.size) { | ||||
|         case Maxwell::VertexAttribute::Size::Size_8: | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8: | ||||
| @ -84,36 +86,8 @@ inline GLenum VertexType(Maxwell::VertexAttribute attrib) { | ||||
|             return GL_FLOAT; | ||||
|         } | ||||
|         break; | ||||
|     case Maxwell::VertexAttribute::Type::UnsignedScaled: | ||||
|         switch (attrib.size) { | ||||
|         case Maxwell::VertexAttribute::Size::Size_8: | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8: | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8_8: | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8_8_8: | ||||
|             return GL_UNSIGNED_BYTE; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16: | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16: | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16_16: | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16_16_16: | ||||
|             return GL_UNSIGNED_SHORT; | ||||
|         } | ||||
|         break; | ||||
|     case Maxwell::VertexAttribute::Type::SignedScaled: | ||||
|         switch (attrib.size) { | ||||
|         case Maxwell::VertexAttribute::Size::Size_8: | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8: | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8_8: | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8_8_8: | ||||
|             return GL_BYTE; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16: | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16: | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16_16: | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16_16_16: | ||||
|             return GL_SHORT; | ||||
|         } | ||||
|         break; | ||||
|     } | ||||
|     UNIMPLEMENTED_MSG("Unimplemented vertex type={} and size={}", attrib.TypeString(), | ||||
|     UNIMPLEMENTED_MSG("Unimplemented vertex format of type={} and size={}", attrib.TypeString(), | ||||
|                       attrib.SizeString()); | ||||
|     return {}; | ||||
| } | ||||
|  | ||||
| @ -294,30 +294,6 @@ VkPrimitiveTopology PrimitiveTopology([[maybe_unused]] const VKDevice& device, | ||||
| 
 | ||||
| VkFormat VertexFormat(Maxwell::VertexAttribute::Type type, Maxwell::VertexAttribute::Size size) { | ||||
|     switch (type) { | ||||
|     case Maxwell::VertexAttribute::Type::SignedNorm: | ||||
|         switch (size) { | ||||
|         case Maxwell::VertexAttribute::Size::Size_8: | ||||
|             return VK_FORMAT_R8_SNORM; | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8: | ||||
|             return VK_FORMAT_R8G8_SNORM; | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8_8: | ||||
|             return VK_FORMAT_R8G8B8_SNORM; | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8_8_8: | ||||
|             return VK_FORMAT_R8G8B8A8_SNORM; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16: | ||||
|             return VK_FORMAT_R16_SNORM; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16: | ||||
|             return VK_FORMAT_R16G16_SNORM; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16_16: | ||||
|             return VK_FORMAT_R16G16B16_SNORM; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16_16_16: | ||||
|             return VK_FORMAT_R16G16B16A16_SNORM; | ||||
|         case Maxwell::VertexAttribute::Size::Size_10_10_10_2: | ||||
|             return VK_FORMAT_A2B10G10R10_SNORM_PACK32; | ||||
|         default: | ||||
|             break; | ||||
|         } | ||||
|         break; | ||||
|     case Maxwell::VertexAttribute::Type::UnsignedNorm: | ||||
|         switch (size) { | ||||
|         case Maxwell::VertexAttribute::Size::Size_8: | ||||
| @ -338,38 +314,72 @@ VkFormat VertexFormat(Maxwell::VertexAttribute::Type type, Maxwell::VertexAttrib | ||||
|             return VK_FORMAT_R16G16B16A16_UNORM; | ||||
|         case Maxwell::VertexAttribute::Size::Size_10_10_10_2: | ||||
|             return VK_FORMAT_A2B10G10R10_UNORM_PACK32; | ||||
|         default: | ||||
|             break; | ||||
|         } | ||||
|         break; | ||||
|     case Maxwell::VertexAttribute::Type::SignedInt: | ||||
|     case Maxwell::VertexAttribute::Type::SignedNorm: | ||||
|         switch (size) { | ||||
|         case Maxwell::VertexAttribute::Size::Size_8: | ||||
|             return VK_FORMAT_R8_SINT; | ||||
|             return VK_FORMAT_R8_SNORM; | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8: | ||||
|             return VK_FORMAT_R8G8_SINT; | ||||
|             return VK_FORMAT_R8G8_SNORM; | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8_8: | ||||
|             return VK_FORMAT_R8G8B8_SINT; | ||||
|             return VK_FORMAT_R8G8B8_SNORM; | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8_8_8: | ||||
|             return VK_FORMAT_R8G8B8A8_SINT; | ||||
|             return VK_FORMAT_R8G8B8A8_SNORM; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16: | ||||
|             return VK_FORMAT_R16_SINT; | ||||
|             return VK_FORMAT_R16_SNORM; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16: | ||||
|             return VK_FORMAT_R16G16_SINT; | ||||
|             return VK_FORMAT_R16G16_SNORM; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16_16: | ||||
|             return VK_FORMAT_R16G16B16_SINT; | ||||
|             return VK_FORMAT_R16G16B16_SNORM; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16_16_16: | ||||
|             return VK_FORMAT_R16G16B16A16_SINT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_32: | ||||
|             return VK_FORMAT_R32_SINT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_32_32: | ||||
|             return VK_FORMAT_R32G32_SINT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_32_32_32: | ||||
|             return VK_FORMAT_R32G32B32_SINT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_32_32_32_32: | ||||
|             return VK_FORMAT_R32G32B32A32_SINT; | ||||
|         default: | ||||
|             break; | ||||
|             return VK_FORMAT_R16G16B16A16_SNORM; | ||||
|         case Maxwell::VertexAttribute::Size::Size_10_10_10_2: | ||||
|             return VK_FORMAT_A2B10G10R10_SNORM_PACK32; | ||||
|         } | ||||
|         break; | ||||
|     case Maxwell::VertexAttribute::Type::UnsignedScaled: | ||||
|         switch (size) { | ||||
|         case Maxwell::VertexAttribute::Size::Size_8: | ||||
|             return VK_FORMAT_R8_USCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8: | ||||
|             return VK_FORMAT_R8G8_USCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8_8: | ||||
|             return VK_FORMAT_R8G8B8_USCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8_8_8: | ||||
|             return VK_FORMAT_R8G8B8A8_USCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16: | ||||
|             return VK_FORMAT_R16_USCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16: | ||||
|             return VK_FORMAT_R16G16_USCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16_16: | ||||
|             return VK_FORMAT_R16G16B16_USCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16_16_16: | ||||
|             return VK_FORMAT_R16G16B16A16_USCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_10_10_10_2: | ||||
|             return VK_FORMAT_A2B10G10R10_USCALED_PACK32; | ||||
|         } | ||||
|         break; | ||||
|     case Maxwell::VertexAttribute::Type::SignedScaled: | ||||
|         switch (size) { | ||||
|         case Maxwell::VertexAttribute::Size::Size_8: | ||||
|             return VK_FORMAT_R8_SSCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8: | ||||
|             return VK_FORMAT_R8G8_SSCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8_8: | ||||
|             return VK_FORMAT_R8G8B8_SSCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8_8_8: | ||||
|             return VK_FORMAT_R8G8B8A8_SSCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16: | ||||
|             return VK_FORMAT_R16_SSCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16: | ||||
|             return VK_FORMAT_R16G16_SSCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16_16: | ||||
|             return VK_FORMAT_R16G16B16_SSCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16_16_16: | ||||
|             return VK_FORMAT_R16G16B16A16_SSCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_10_10_10_2: | ||||
|             return VK_FORMAT_A2B10G10R10_SSCALED_PACK32; | ||||
|         } | ||||
|         break; | ||||
|     case Maxwell::VertexAttribute::Type::UnsignedInt: | ||||
| @ -398,64 +408,42 @@ VkFormat VertexFormat(Maxwell::VertexAttribute::Type type, Maxwell::VertexAttrib | ||||
|             return VK_FORMAT_R32G32B32_UINT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_32_32_32_32: | ||||
|             return VK_FORMAT_R32G32B32A32_UINT; | ||||
|         default: | ||||
|             break; | ||||
|         case Maxwell::VertexAttribute::Size::Size_10_10_10_2: | ||||
|             return VK_FORMAT_A2B10G10R10_UINT_PACK32; | ||||
|         } | ||||
|         break; | ||||
|     case Maxwell::VertexAttribute::Type::UnsignedScaled: | ||||
|     case Maxwell::VertexAttribute::Type::SignedInt: | ||||
|         switch (size) { | ||||
|         case Maxwell::VertexAttribute::Size::Size_8: | ||||
|             return VK_FORMAT_R8_USCALED; | ||||
|             return VK_FORMAT_R8_SINT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8: | ||||
|             return VK_FORMAT_R8G8_USCALED; | ||||
|             return VK_FORMAT_R8G8_SINT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8_8: | ||||
|             return VK_FORMAT_R8G8B8_USCALED; | ||||
|             return VK_FORMAT_R8G8B8_SINT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8_8_8: | ||||
|             return VK_FORMAT_R8G8B8A8_USCALED; | ||||
|             return VK_FORMAT_R8G8B8A8_SINT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16: | ||||
|             return VK_FORMAT_R16_USCALED; | ||||
|             return VK_FORMAT_R16_SINT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16: | ||||
|             return VK_FORMAT_R16G16_USCALED; | ||||
|             return VK_FORMAT_R16G16_SINT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16_16: | ||||
|             return VK_FORMAT_R16G16B16_USCALED; | ||||
|             return VK_FORMAT_R16G16B16_SINT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16_16_16: | ||||
|             return VK_FORMAT_R16G16B16A16_USCALED; | ||||
|         default: | ||||
|             break; | ||||
|         } | ||||
|         break; | ||||
|     case Maxwell::VertexAttribute::Type::SignedScaled: | ||||
|         switch (size) { | ||||
|         case Maxwell::VertexAttribute::Size::Size_8: | ||||
|             return VK_FORMAT_R8_SSCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8: | ||||
|             return VK_FORMAT_R8G8_SSCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8_8: | ||||
|             return VK_FORMAT_R8G8B8_SSCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_8_8_8_8: | ||||
|             return VK_FORMAT_R8G8B8A8_SSCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16: | ||||
|             return VK_FORMAT_R16_SSCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16: | ||||
|             return VK_FORMAT_R16G16_SSCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16_16: | ||||
|             return VK_FORMAT_R16G16B16_SSCALED; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16_16_16: | ||||
|             return VK_FORMAT_R16G16B16A16_SSCALED; | ||||
|         default: | ||||
|             break; | ||||
|             return VK_FORMAT_R16G16B16A16_SINT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_32: | ||||
|             return VK_FORMAT_R32_SINT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_32_32: | ||||
|             return VK_FORMAT_R32G32_SINT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_32_32_32: | ||||
|             return VK_FORMAT_R32G32B32_SINT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_32_32_32_32: | ||||
|             return VK_FORMAT_R32G32B32A32_SINT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_10_10_10_2: | ||||
|             return VK_FORMAT_A2B10G10R10_SINT_PACK32; | ||||
|         } | ||||
|         break; | ||||
|     case Maxwell::VertexAttribute::Type::Float: | ||||
|         switch (size) { | ||||
|         case Maxwell::VertexAttribute::Size::Size_32: | ||||
|             return VK_FORMAT_R32_SFLOAT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_32_32: | ||||
|             return VK_FORMAT_R32G32_SFLOAT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_32_32_32: | ||||
|             return VK_FORMAT_R32G32B32_SFLOAT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_32_32_32_32: | ||||
|             return VK_FORMAT_R32G32B32A32_SFLOAT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16: | ||||
|             return VK_FORMAT_R16_SFLOAT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16: | ||||
| @ -464,8 +452,14 @@ VkFormat VertexFormat(Maxwell::VertexAttribute::Type type, Maxwell::VertexAttrib | ||||
|             return VK_FORMAT_R16G16B16_SFLOAT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_16_16_16_16: | ||||
|             return VK_FORMAT_R16G16B16A16_SFLOAT; | ||||
|         default: | ||||
|             break; | ||||
|         case Maxwell::VertexAttribute::Size::Size_32: | ||||
|             return VK_FORMAT_R32_SFLOAT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_32_32: | ||||
|             return VK_FORMAT_R32G32_SFLOAT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_32_32_32: | ||||
|             return VK_FORMAT_R32G32B32_SFLOAT; | ||||
|         case Maxwell::VertexAttribute::Size::Size_32_32_32_32: | ||||
|             return VK_FORMAT_R32G32B32A32_SFLOAT; | ||||
|         } | ||||
|         break; | ||||
|     } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Rodrigo Locatti
						Rodrigo Locatti