diff options
| author | 2022-08-04 09:51:56 -0700 | |
|---|---|---|
| committer | 2022-08-04 09:51:56 -0700 | |
| commit | 1f7e62e86ef8d370834c1c2f8c0c0430d2a89712 (patch) | |
| tree | 1a05d2f6572e8e39eab775c6d222d5b782ca5c71 /src/video_core/renderer_vulkan | |
| parent | Merge pull request #8681 from Docteh/test (diff) | |
| parent | renderer_vulkan: add format fallbacks for R16G16B16_SFLOAT, R16G16B16_SSCALED... (diff) | |
| download | yuzu-1f7e62e86ef8d370834c1c2f8c0c0430d2a89712.tar.gz yuzu-1f7e62e86ef8d370834c1c2f8c0c0430d2a89712.tar.xz yuzu-1f7e62e86ef8d370834c1c2f8c0c0430d2a89712.zip | |
Merge pull request #8702 from liamwhite/format-swap
renderer_vulkan: add format fallbacks for R16G16B16_SFLOAT, R16G16B16_SSCALED, R8G8B8_SSCALED
Diffstat (limited to 'src/video_core/renderer_vulkan')
4 files changed, 193 insertions, 183 deletions
diff --git a/src/video_core/renderer_vulkan/maxwell_to_vk.cpp b/src/video_core/renderer_vulkan/maxwell_to_vk.cpp index 689164a6a..7d1431b6d 100644 --- a/src/video_core/renderer_vulkan/maxwell_to_vk.cpp +++ b/src/video_core/renderer_vulkan/maxwell_to_vk.cpp | |||
| @@ -317,195 +317,204 @@ VkPrimitiveTopology PrimitiveTopology([[maybe_unused]] const Device& device, | |||
| 317 | } | 317 | } |
| 318 | } | 318 | } |
| 319 | 319 | ||
| 320 | VkFormat VertexFormat(Maxwell::VertexAttribute::Type type, Maxwell::VertexAttribute::Size size) { | 320 | VkFormat VertexFormat(const Device& device, Maxwell::VertexAttribute::Type type, |
| 321 | switch (type) { | 321 | Maxwell::VertexAttribute::Size size) { |
| 322 | case Maxwell::VertexAttribute::Type::UnsignedNorm: | 322 | const VkFormat format{([&]() { |
| 323 | switch (size) { | 323 | switch (type) { |
| 324 | case Maxwell::VertexAttribute::Size::Size_8: | 324 | case Maxwell::VertexAttribute::Type::UnsignedNorm: |
| 325 | return VK_FORMAT_R8_UNORM; | 325 | switch (size) { |
| 326 | case Maxwell::VertexAttribute::Size::Size_8_8: | 326 | case Maxwell::VertexAttribute::Size::Size_8: |
| 327 | return VK_FORMAT_R8G8_UNORM; | 327 | return VK_FORMAT_R8_UNORM; |
| 328 | case Maxwell::VertexAttribute::Size::Size_8_8_8: | 328 | case Maxwell::VertexAttribute::Size::Size_8_8: |
| 329 | return VK_FORMAT_R8G8B8_UNORM; | 329 | return VK_FORMAT_R8G8_UNORM; |
| 330 | case Maxwell::VertexAttribute::Size::Size_8_8_8_8: | 330 | case Maxwell::VertexAttribute::Size::Size_8_8_8: |
| 331 | return VK_FORMAT_R8G8B8A8_UNORM; | 331 | return VK_FORMAT_R8G8B8_UNORM; |
| 332 | case Maxwell::VertexAttribute::Size::Size_16: | 332 | case Maxwell::VertexAttribute::Size::Size_8_8_8_8: |
| 333 | return VK_FORMAT_R16_UNORM; | 333 | return VK_FORMAT_R8G8B8A8_UNORM; |
| 334 | case Maxwell::VertexAttribute::Size::Size_16_16: | 334 | case Maxwell::VertexAttribute::Size::Size_16: |
| 335 | return VK_FORMAT_R16G16_UNORM; | 335 | return VK_FORMAT_R16_UNORM; |
| 336 | case Maxwell::VertexAttribute::Size::Size_16_16_16: | 336 | case Maxwell::VertexAttribute::Size::Size_16_16: |
| 337 | return VK_FORMAT_R16G16B16_UNORM; | 337 | return VK_FORMAT_R16G16_UNORM; |
| 338 | case Maxwell::VertexAttribute::Size::Size_16_16_16_16: | 338 | case Maxwell::VertexAttribute::Size::Size_16_16_16: |
| 339 | return VK_FORMAT_R16G16B16A16_UNORM; | 339 | return VK_FORMAT_R16G16B16_UNORM; |
| 340 | case Maxwell::VertexAttribute::Size::Size_10_10_10_2: | 340 | case Maxwell::VertexAttribute::Size::Size_16_16_16_16: |
| 341 | return VK_FORMAT_A2B10G10R10_UNORM_PACK32; | 341 | return VK_FORMAT_R16G16B16A16_UNORM; |
| 342 | default: | 342 | case Maxwell::VertexAttribute::Size::Size_10_10_10_2: |
| 343 | return VK_FORMAT_A2B10G10R10_UNORM_PACK32; | ||
| 344 | default: | ||
| 345 | break; | ||
| 346 | } | ||
| 343 | break; | 347 | break; |
| 344 | } | 348 | case Maxwell::VertexAttribute::Type::SignedNorm: |
| 345 | break; | 349 | switch (size) { |
| 346 | case Maxwell::VertexAttribute::Type::SignedNorm: | 350 | case Maxwell::VertexAttribute::Size::Size_8: |
| 347 | switch (size) { | 351 | return VK_FORMAT_R8_SNORM; |
| 348 | case Maxwell::VertexAttribute::Size::Size_8: | 352 | case Maxwell::VertexAttribute::Size::Size_8_8: |
| 349 | return VK_FORMAT_R8_SNORM; | 353 | return VK_FORMAT_R8G8_SNORM; |
| 350 | case Maxwell::VertexAttribute::Size::Size_8_8: | 354 | case Maxwell::VertexAttribute::Size::Size_8_8_8: |
| 351 | return VK_FORMAT_R8G8_SNORM; | 355 | return VK_FORMAT_R8G8B8_SNORM; |
| 352 | case Maxwell::VertexAttribute::Size::Size_8_8_8: | 356 | case Maxwell::VertexAttribute::Size::Size_8_8_8_8: |
| 353 | return VK_FORMAT_R8G8B8_SNORM; | 357 | return VK_FORMAT_R8G8B8A8_SNORM; |
| 354 | case Maxwell::VertexAttribute::Size::Size_8_8_8_8: | 358 | case Maxwell::VertexAttribute::Size::Size_16: |
| 355 | return VK_FORMAT_R8G8B8A8_SNORM; | 359 | return VK_FORMAT_R16_SNORM; |
| 356 | case Maxwell::VertexAttribute::Size::Size_16: | 360 | case Maxwell::VertexAttribute::Size::Size_16_16: |
| 357 | return VK_FORMAT_R16_SNORM; | 361 | return VK_FORMAT_R16G16_SNORM; |
| 358 | case Maxwell::VertexAttribute::Size::Size_16_16: | 362 | case Maxwell::VertexAttribute::Size::Size_16_16_16: |
| 359 | return VK_FORMAT_R16G16_SNORM; | 363 | return VK_FORMAT_R16G16B16_SNORM; |
| 360 | case Maxwell::VertexAttribute::Size::Size_16_16_16: | 364 | case Maxwell::VertexAttribute::Size::Size_16_16_16_16: |
| 361 | return VK_FORMAT_R16G16B16_SNORM; | 365 | return VK_FORMAT_R16G16B16A16_SNORM; |
| 362 | case Maxwell::VertexAttribute::Size::Size_16_16_16_16: | 366 | case Maxwell::VertexAttribute::Size::Size_10_10_10_2: |
| 363 | return VK_FORMAT_R16G16B16A16_SNORM; | 367 | return VK_FORMAT_A2B10G10R10_SNORM_PACK32; |
| 364 | case Maxwell::VertexAttribute::Size::Size_10_10_10_2: | 368 | default: |
| 365 | return VK_FORMAT_A2B10G10R10_SNORM_PACK32; | 369 | break; |
| 366 | default: | 370 | } |
| 367 | break; | 371 | break; |
| 368 | } | 372 | case Maxwell::VertexAttribute::Type::UnsignedScaled: |
| 369 | break; | 373 | switch (size) { |
| 370 | case Maxwell::VertexAttribute::Type::UnsignedScaled: | 374 | case Maxwell::VertexAttribute::Size::Size_8: |
| 371 | switch (size) { | 375 | return VK_FORMAT_R8_USCALED; |
| 372 | case Maxwell::VertexAttribute::Size::Size_8: | 376 | case Maxwell::VertexAttribute::Size::Size_8_8: |
| 373 | return VK_FORMAT_R8_USCALED; | 377 | return VK_FORMAT_R8G8_USCALED; |
| 374 | case Maxwell::VertexAttribute::Size::Size_8_8: | 378 | case Maxwell::VertexAttribute::Size::Size_8_8_8: |
| 375 | return VK_FORMAT_R8G8_USCALED; | 379 | return VK_FORMAT_R8G8B8_USCALED; |
| 376 | case Maxwell::VertexAttribute::Size::Size_8_8_8: | 380 | case Maxwell::VertexAttribute::Size::Size_8_8_8_8: |
| 377 | return VK_FORMAT_R8G8B8_USCALED; | 381 | return VK_FORMAT_R8G8B8A8_USCALED; |
| 378 | case Maxwell::VertexAttribute::Size::Size_8_8_8_8: | 382 | case Maxwell::VertexAttribute::Size::Size_16: |
| 379 | return VK_FORMAT_R8G8B8A8_USCALED; | 383 | return VK_FORMAT_R16_USCALED; |
| 380 | case Maxwell::VertexAttribute::Size::Size_16: | 384 | case Maxwell::VertexAttribute::Size::Size_16_16: |
| 381 | return VK_FORMAT_R16_USCALED; | 385 | return VK_FORMAT_R16G16_USCALED; |
| 382 | case Maxwell::VertexAttribute::Size::Size_16_16: | 386 | case Maxwell::VertexAttribute::Size::Size_16_16_16: |
| 383 | return VK_FORMAT_R16G16_USCALED; | 387 | return VK_FORMAT_R16G16B16_USCALED; |
| 384 | case Maxwell::VertexAttribute::Size::Size_16_16_16: | 388 | case Maxwell::VertexAttribute::Size::Size_16_16_16_16: |
| 385 | return VK_FORMAT_R16G16B16_USCALED; | 389 | return VK_FORMAT_R16G16B16A16_USCALED; |
| 386 | case Maxwell::VertexAttribute::Size::Size_16_16_16_16: | 390 | case Maxwell::VertexAttribute::Size::Size_10_10_10_2: |
| 387 | return VK_FORMAT_R16G16B16A16_USCALED; | 391 | return VK_FORMAT_A2B10G10R10_USCALED_PACK32; |
| 388 | case Maxwell::VertexAttribute::Size::Size_10_10_10_2: | 392 | default: |
| 389 | return VK_FORMAT_A2B10G10R10_USCALED_PACK32; | 393 | break; |
| 390 | default: | 394 | } |
| 391 | break; | 395 | break; |
| 392 | } | 396 | case Maxwell::VertexAttribute::Type::SignedScaled: |
| 393 | break; | 397 | switch (size) { |
| 394 | case Maxwell::VertexAttribute::Type::SignedScaled: | 398 | case Maxwell::VertexAttribute::Size::Size_8: |
| 395 | switch (size) { | 399 | return VK_FORMAT_R8_SSCALED; |
| 396 | case Maxwell::VertexAttribute::Size::Size_8: | 400 | case Maxwell::VertexAttribute::Size::Size_8_8: |
| 397 | return VK_FORMAT_R8_SSCALED; | 401 | return VK_FORMAT_R8G8_SSCALED; |
| 398 | case Maxwell::VertexAttribute::Size::Size_8_8: | 402 | case Maxwell::VertexAttribute::Size::Size_8_8_8: |
| 399 | return VK_FORMAT_R8G8_SSCALED; | 403 | return VK_FORMAT_R8G8B8_SSCALED; |
| 400 | case Maxwell::VertexAttribute::Size::Size_8_8_8: | 404 | case Maxwell::VertexAttribute::Size::Size_8_8_8_8: |
| 401 | return VK_FORMAT_R8G8B8_SSCALED; | 405 | return VK_FORMAT_R8G8B8A8_SSCALED; |
| 402 | case Maxwell::VertexAttribute::Size::Size_8_8_8_8: | 406 | case Maxwell::VertexAttribute::Size::Size_16: |
| 403 | return VK_FORMAT_R8G8B8A8_SSCALED; | 407 | return VK_FORMAT_R16_SSCALED; |
| 404 | case Maxwell::VertexAttribute::Size::Size_16: | 408 | case Maxwell::VertexAttribute::Size::Size_16_16: |
| 405 | return VK_FORMAT_R16_SSCALED; | 409 | return VK_FORMAT_R16G16_SSCALED; |
| 406 | case Maxwell::VertexAttribute::Size::Size_16_16: | 410 | case Maxwell::VertexAttribute::Size::Size_16_16_16: |
| 407 | return VK_FORMAT_R16G16_SSCALED; | 411 | return VK_FORMAT_R16G16B16_SSCALED; |
| 408 | case Maxwell::VertexAttribute::Size::Size_16_16_16: | 412 | case Maxwell::VertexAttribute::Size::Size_16_16_16_16: |
| 409 | return VK_FORMAT_R16G16B16_SSCALED; | 413 | return VK_FORMAT_R16G16B16A16_SSCALED; |
| 410 | case Maxwell::VertexAttribute::Size::Size_16_16_16_16: | 414 | case Maxwell::VertexAttribute::Size::Size_10_10_10_2: |
| 411 | return VK_FORMAT_R16G16B16A16_SSCALED; | 415 | return VK_FORMAT_A2B10G10R10_SSCALED_PACK32; |
| 412 | case Maxwell::VertexAttribute::Size::Size_10_10_10_2: | 416 | default: |
| 413 | return VK_FORMAT_A2B10G10R10_SSCALED_PACK32; | 417 | break; |
| 414 | default: | 418 | } |
| 415 | break; | 419 | break; |
| 416 | } | 420 | case Maxwell::VertexAttribute::Type::UnsignedInt: |
| 417 | break; | 421 | switch (size) { |
| 418 | case Maxwell::VertexAttribute::Type::UnsignedInt: | 422 | case Maxwell::VertexAttribute::Size::Size_8: |
| 419 | switch (size) { | 423 | return VK_FORMAT_R8_UINT; |
| 420 | case Maxwell::VertexAttribute::Size::Size_8: | 424 | case Maxwell::VertexAttribute::Size::Size_8_8: |
| 421 | return VK_FORMAT_R8_UINT; | 425 | return VK_FORMAT_R8G8_UINT; |
| 422 | case Maxwell::VertexAttribute::Size::Size_8_8: | 426 | case Maxwell::VertexAttribute::Size::Size_8_8_8: |
| 423 | return VK_FORMAT_R8G8_UINT; | 427 | return VK_FORMAT_R8G8B8_UINT; |
| 424 | case Maxwell::VertexAttribute::Size::Size_8_8_8: | 428 | case Maxwell::VertexAttribute::Size::Size_8_8_8_8: |
| 425 | return VK_FORMAT_R8G8B8_UINT; | 429 | return VK_FORMAT_R8G8B8A8_UINT; |
| 426 | case Maxwell::VertexAttribute::Size::Size_8_8_8_8: | 430 | case Maxwell::VertexAttribute::Size::Size_16: |
| 427 | return VK_FORMAT_R8G8B8A8_UINT; | 431 | return VK_FORMAT_R16_UINT; |
| 428 | case Maxwell::VertexAttribute::Size::Size_16: | 432 | case Maxwell::VertexAttribute::Size::Size_16_16: |
| 429 | return VK_FORMAT_R16_UINT; | 433 | return VK_FORMAT_R16G16_UINT; |
| 430 | case Maxwell::VertexAttribute::Size::Size_16_16: | 434 | case Maxwell::VertexAttribute::Size::Size_16_16_16: |
| 431 | return VK_FORMAT_R16G16_UINT; | 435 | return VK_FORMAT_R16G16B16_UINT; |
| 432 | case Maxwell::VertexAttribute::Size::Size_16_16_16: | 436 | case Maxwell::VertexAttribute::Size::Size_16_16_16_16: |
| 433 | return VK_FORMAT_R16G16B16_UINT; | 437 | return VK_FORMAT_R16G16B16A16_UINT; |
| 434 | case Maxwell::VertexAttribute::Size::Size_16_16_16_16: | 438 | case Maxwell::VertexAttribute::Size::Size_32: |
| 435 | return VK_FORMAT_R16G16B16A16_UINT; | 439 | return VK_FORMAT_R32_UINT; |
| 436 | case Maxwell::VertexAttribute::Size::Size_32: | 440 | case Maxwell::VertexAttribute::Size::Size_32_32: |
| 437 | return VK_FORMAT_R32_UINT; | 441 | return VK_FORMAT_R32G32_UINT; |
| 438 | case Maxwell::VertexAttribute::Size::Size_32_32: | 442 | case Maxwell::VertexAttribute::Size::Size_32_32_32: |
| 439 | return VK_FORMAT_R32G32_UINT; | 443 | return VK_FORMAT_R32G32B32_UINT; |
| 440 | case Maxwell::VertexAttribute::Size::Size_32_32_32: | 444 | case Maxwell::VertexAttribute::Size::Size_32_32_32_32: |
| 441 | return VK_FORMAT_R32G32B32_UINT; | 445 | return VK_FORMAT_R32G32B32A32_UINT; |
| 442 | case Maxwell::VertexAttribute::Size::Size_32_32_32_32: | 446 | case Maxwell::VertexAttribute::Size::Size_10_10_10_2: |
| 443 | return VK_FORMAT_R32G32B32A32_UINT; | 447 | return VK_FORMAT_A2B10G10R10_UINT_PACK32; |
| 444 | case Maxwell::VertexAttribute::Size::Size_10_10_10_2: | 448 | default: |
| 445 | return VK_FORMAT_A2B10G10R10_UINT_PACK32; | 449 | break; |
| 446 | default: | 450 | } |
| 447 | break; | 451 | break; |
| 448 | } | 452 | case Maxwell::VertexAttribute::Type::SignedInt: |
| 449 | break; | 453 | switch (size) { |
| 450 | case Maxwell::VertexAttribute::Type::SignedInt: | 454 | case Maxwell::VertexAttribute::Size::Size_8: |
| 451 | switch (size) { | 455 | return VK_FORMAT_R8_SINT; |
| 452 | case Maxwell::VertexAttribute::Size::Size_8: | 456 | case Maxwell::VertexAttribute::Size::Size_8_8: |
| 453 | return VK_FORMAT_R8_SINT; | 457 | return VK_FORMAT_R8G8_SINT; |
| 454 | case Maxwell::VertexAttribute::Size::Size_8_8: | 458 | case Maxwell::VertexAttribute::Size::Size_8_8_8: |
| 455 | return VK_FORMAT_R8G8_SINT; | 459 | return VK_FORMAT_R8G8B8_SINT; |
| 456 | case Maxwell::VertexAttribute::Size::Size_8_8_8: | 460 | case Maxwell::VertexAttribute::Size::Size_8_8_8_8: |
| 457 | return VK_FORMAT_R8G8B8_SINT; | 461 | return VK_FORMAT_R8G8B8A8_SINT; |
| 458 | case Maxwell::VertexAttribute::Size::Size_8_8_8_8: | 462 | case Maxwell::VertexAttribute::Size::Size_16: |
| 459 | return VK_FORMAT_R8G8B8A8_SINT; | 463 | return VK_FORMAT_R16_SINT; |
| 460 | case Maxwell::VertexAttribute::Size::Size_16: | 464 | case Maxwell::VertexAttribute::Size::Size_16_16: |
| 461 | return VK_FORMAT_R16_SINT; | 465 | return VK_FORMAT_R16G16_SINT; |
| 462 | case Maxwell::VertexAttribute::Size::Size_16_16: | 466 | case Maxwell::VertexAttribute::Size::Size_16_16_16: |
| 463 | return VK_FORMAT_R16G16_SINT; | 467 | return VK_FORMAT_R16G16B16_SINT; |
| 464 | case Maxwell::VertexAttribute::Size::Size_16_16_16: | 468 | case Maxwell::VertexAttribute::Size::Size_16_16_16_16: |
| 465 | return VK_FORMAT_R16G16B16_SINT; | 469 | return VK_FORMAT_R16G16B16A16_SINT; |
| 466 | case Maxwell::VertexAttribute::Size::Size_16_16_16_16: | 470 | case Maxwell::VertexAttribute::Size::Size_32: |
| 467 | return VK_FORMAT_R16G16B16A16_SINT; | 471 | return VK_FORMAT_R32_SINT; |
| 468 | case Maxwell::VertexAttribute::Size::Size_32: | 472 | case Maxwell::VertexAttribute::Size::Size_32_32: |
| 469 | return VK_FORMAT_R32_SINT; | 473 | return VK_FORMAT_R32G32_SINT; |
| 470 | case Maxwell::VertexAttribute::Size::Size_32_32: | 474 | case Maxwell::VertexAttribute::Size::Size_32_32_32: |
| 471 | return VK_FORMAT_R32G32_SINT; | 475 | return VK_FORMAT_R32G32B32_SINT; |
| 472 | case Maxwell::VertexAttribute::Size::Size_32_32_32: | 476 | case Maxwell::VertexAttribute::Size::Size_32_32_32_32: |
| 473 | return VK_FORMAT_R32G32B32_SINT; | 477 | return VK_FORMAT_R32G32B32A32_SINT; |
| 474 | case Maxwell::VertexAttribute::Size::Size_32_32_32_32: | 478 | case Maxwell::VertexAttribute::Size::Size_10_10_10_2: |
| 475 | return VK_FORMAT_R32G32B32A32_SINT; | 479 | return VK_FORMAT_A2B10G10R10_SINT_PACK32; |
| 476 | case Maxwell::VertexAttribute::Size::Size_10_10_10_2: | 480 | default: |
| 477 | return VK_FORMAT_A2B10G10R10_SINT_PACK32; | 481 | break; |
| 478 | default: | 482 | } |
| 479 | break; | 483 | break; |
| 480 | } | 484 | case Maxwell::VertexAttribute::Type::Float: |
| 481 | break; | 485 | switch (size) { |
| 482 | case Maxwell::VertexAttribute::Type::Float: | 486 | case Maxwell::VertexAttribute::Size::Size_16: |
| 483 | switch (size) { | 487 | return VK_FORMAT_R16_SFLOAT; |
| 484 | case Maxwell::VertexAttribute::Size::Size_16: | 488 | case Maxwell::VertexAttribute::Size::Size_16_16: |
| 485 | return VK_FORMAT_R16_SFLOAT; | 489 | return VK_FORMAT_R16G16_SFLOAT; |
| 486 | case Maxwell::VertexAttribute::Size::Size_16_16: | 490 | case Maxwell::VertexAttribute::Size::Size_16_16_16: |
| 487 | return VK_FORMAT_R16G16_SFLOAT; | 491 | return VK_FORMAT_R16G16B16_SFLOAT; |
| 488 | case Maxwell::VertexAttribute::Size::Size_16_16_16: | 492 | case Maxwell::VertexAttribute::Size::Size_16_16_16_16: |
| 489 | return VK_FORMAT_R16G16B16_SFLOAT; | 493 | return VK_FORMAT_R16G16B16A16_SFLOAT; |
| 490 | case Maxwell::VertexAttribute::Size::Size_16_16_16_16: | 494 | case Maxwell::VertexAttribute::Size::Size_32: |
| 491 | return VK_FORMAT_R16G16B16A16_SFLOAT; | 495 | return VK_FORMAT_R32_SFLOAT; |
| 492 | case Maxwell::VertexAttribute::Size::Size_32: | 496 | case Maxwell::VertexAttribute::Size::Size_32_32: |
| 493 | return VK_FORMAT_R32_SFLOAT; | 497 | return VK_FORMAT_R32G32_SFLOAT; |
| 494 | case Maxwell::VertexAttribute::Size::Size_32_32: | 498 | case Maxwell::VertexAttribute::Size::Size_32_32_32: |
| 495 | return VK_FORMAT_R32G32_SFLOAT; | 499 | return VK_FORMAT_R32G32B32_SFLOAT; |
| 496 | case Maxwell::VertexAttribute::Size::Size_32_32_32: | 500 | case Maxwell::VertexAttribute::Size::Size_32_32_32_32: |
| 497 | return VK_FORMAT_R32G32B32_SFLOAT; | 501 | return VK_FORMAT_R32G32B32A32_SFLOAT; |
| 498 | case Maxwell::VertexAttribute::Size::Size_32_32_32_32: | 502 | case Maxwell::VertexAttribute::Size::Size_11_11_10: |
| 499 | return VK_FORMAT_R32G32B32A32_SFLOAT; | 503 | return VK_FORMAT_B10G11R11_UFLOAT_PACK32; |
| 500 | case Maxwell::VertexAttribute::Size::Size_11_11_10: | 504 | default: |
| 501 | return VK_FORMAT_B10G11R11_UFLOAT_PACK32; | 505 | break; |
| 502 | default: | 506 | } |
| 503 | break; | 507 | break; |
| 504 | } | 508 | } |
| 505 | break; | 509 | return VK_FORMAT_UNDEFINED; |
| 510 | })()}; | ||
| 511 | |||
| 512 | if (format == VK_FORMAT_UNDEFINED) { | ||
| 513 | UNIMPLEMENTED_MSG("Unimplemented vertex format of type={} and size={}", type, size); | ||
| 506 | } | 514 | } |
| 507 | UNIMPLEMENTED_MSG("Unimplemented vertex format of type={} and size={}", type, size); | 515 | |
| 508 | return {}; | 516 | return device.GetSupportedFormat(format, VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT, |
| 517 | FormatType::Buffer); | ||
| 509 | } | 518 | } |
| 510 | 519 | ||
| 511 | VkCompareOp ComparisonOp(Maxwell::ComparisonOp comparison) { | 520 | VkCompareOp ComparisonOp(Maxwell::ComparisonOp comparison) { |
diff --git a/src/video_core/renderer_vulkan/maxwell_to_vk.h b/src/video_core/renderer_vulkan/maxwell_to_vk.h index 9edd6af6a..356d46292 100644 --- a/src/video_core/renderer_vulkan/maxwell_to_vk.h +++ b/src/video_core/renderer_vulkan/maxwell_to_vk.h | |||
| @@ -48,7 +48,8 @@ VkShaderStageFlagBits ShaderStage(Shader::Stage stage); | |||
| 48 | 48 | ||
| 49 | VkPrimitiveTopology PrimitiveTopology(const Device& device, Maxwell::PrimitiveTopology topology); | 49 | VkPrimitiveTopology PrimitiveTopology(const Device& device, Maxwell::PrimitiveTopology topology); |
| 50 | 50 | ||
| 51 | VkFormat VertexFormat(Maxwell::VertexAttribute::Type type, Maxwell::VertexAttribute::Size size); | 51 | VkFormat VertexFormat(const Device& device, Maxwell::VertexAttribute::Type type, |
| 52 | Maxwell::VertexAttribute::Size size); | ||
| 52 | 53 | ||
| 53 | VkCompareOp ComparisonOp(Maxwell::ComparisonOp comparison); | 54 | VkCompareOp ComparisonOp(Maxwell::ComparisonOp comparison); |
| 54 | 55 | ||
diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp index 682f05335..5aca8f038 100644 --- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp | |||
| @@ -559,7 +559,7 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) { | |||
| 559 | vertex_attributes.push_back({ | 559 | vertex_attributes.push_back({ |
| 560 | .location = static_cast<u32>(index), | 560 | .location = static_cast<u32>(index), |
| 561 | .binding = attribute.buffer, | 561 | .binding = attribute.buffer, |
| 562 | .format = MaxwellToVK::VertexFormat(attribute.Type(), attribute.Size()), | 562 | .format = MaxwellToVK::VertexFormat(device, attribute.Type(), attribute.Size()), |
| 563 | .offset = attribute.offset, | 563 | .offset = attribute.offset, |
| 564 | }); | 564 | }); |
| 565 | } | 565 | } |
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 10f9fe7fe..16e46d3e5 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp | |||
| @@ -939,7 +939,7 @@ void RasterizerVulkan::UpdateVertexInput(Tegra::Engines::Maxwell3D::Regs& regs) | |||
| 939 | .pNext = nullptr, | 939 | .pNext = nullptr, |
| 940 | .location = static_cast<u32>(index), | 940 | .location = static_cast<u32>(index), |
| 941 | .binding = binding, | 941 | .binding = binding, |
| 942 | .format = MaxwellToVK::VertexFormat(attribute.type, attribute.size), | 942 | .format = MaxwellToVK::VertexFormat(device, attribute.type, attribute.size), |
| 943 | .offset = attribute.offset, | 943 | .offset = attribute.offset, |
| 944 | }); | 944 | }); |
| 945 | } | 945 | } |