Vulkan/OpenGL Next Generation Initiative: unified API for mobile and non-mobile devices.

  • Thread starter Deleted member 13524
  • Start date
The pipeline layout (or descriptor set layout or layout chain or whatever it's called now) is roughly equivalent to a root signature.
 
Thank you. I always had issue to see the big picture from blog posts.
Now all I need is a comprehensive manual.
I also noted that with the last AMD compress library they added ASTC support. Hopefully they will come (back) on DX12 wtih "Redstone" update too : p
 
I wonder if there's a clue in GM204: Queues = 1

GRAPHICS_BIT
COMPUTE_BIT
TRANSFER_BIT
SPARSE_BINDING_BIT
 
caps-bits, caps-bits everywhere...


Code:
typedef struct VkPhysicalDeviceFeatures {
VkBool32 robustBufferAccess;
VkBool32 fullDrawIndexUint32;
VkBool32 imageCubeArray;
VkBool32 independentBlend;
VkBool32 geometryShader;
VkBool32 tessellationShader;
VkBool32 sampleRateShading;
VkBool32 dualSrcBlend;
VkBool32 logicOp;
VkBool32 multiDrawIndirect;
VkBool32 drawIndirectFirstInstance;
VkBool32 depthClamp;
VkBool32 depthBiasClamp;
VkBool32 fillModeNonSolid;
VkBool32 depthBounds;
VkBool32 wideLines;
VkBool32 largePoints;
VkBool32 alphaToOne;
VkBool32 multiViewport;
VkBool32 samplerAnisotropy;
VkBool32 textureCompressionETC2;
VkBool32 textureCompressionASTC_LDR;
VkBool32 textureCompressionBC;
VkBool32 occlusionQueryPrecise;
VkBool32 pipelineStatisticsQuery;
VkBool32 vertexPipelineStoresAndAtomics;
VkBool32 fragmentStoresAndAtomics;
VkBool32 shaderTessellationAndGeometryPointSize;
VkBool32 shaderImageGatherExtended;
VkBool32 shaderStorageImageExtendedFormats;
VkBool32 shaderStorageImageMultisample;
VkBool32 shaderStorageImageReadWithoutFormat;
VkBool32 shaderStorageImageWriteWithoutFormat;
VkBool32 shaderUniformBufferArrayDynamicIndexing;
VkBool32 shaderSampledImageArrayDynamicIndexing;
VkBool32 shaderStorageBufferArrayDynamicIndexing;
VkBool32 shaderStorageImageArrayDynamicIndexing;
VkBool32 shaderClipDistance;
VkBool32 shaderCullDistance;
VkBool32 shaderFloat64;
VkBool32 shaderInt64;
VkBool32 shaderInt16;
VkBool32 shaderResourceResidency;
VkBool32 shaderResourceMinLod;
VkBool32 sparseBinding;
VkBool32 sparseResidencyBuffer;
VkBool32 sparseResidencyImage2D;
VkBool32 sparseResidencyImage3D;
VkBool32 sparseResidency2Samples;
VkBool32 sparseResidency4Samples;
VkBool32 sparseResidency8Samples;
VkBool32 sparseResidency16Samples;
VkBool32 sparseResidencyAliased;
VkBool32 variableMultisampleRate;
VkBool32 inheritedQueries;
} VkPhysicalDeviceFeatures;

30.1.1 Feature Requirements
All Vulkan graphics implementations must support the following features:
• robustBufferAccess.
All other features are not required by the Specification.
 
The source seems to suggest Gen7 and up (i.e. Ivy Bridge and newer)… hopefully that includes Baytrail too.
That's curious, considering Gen7 doesn't support even DX12, and NVIDIA isn't bringing Vulkan to Fermi which does (in theory anyway, they still haven't actually delivered on that promise)
 
From https://cgit.freedesktop.org/mesa/mesa/tree/README.intel-vulkan.txt?h=vulkan

Supported Hardware
==================
- Broadwell & Sky Lake, main development focus
- Ivybridge
- Haswell
- Bay Trail
- Cherryview
- Broxton

Conformance
===========
First-wave conformance has been submitted for Broadwell, Sky Lake, and
Cherryview. They all pass 100% of the mustpass tests as of January 30,
2016.

Supported OS Platforms
======================
- Linux, tested on Fedora 22 with kernel >= 4.1
- X11 with DRI3
- Wayland
- Android
- TODO

But I swear I saw mention of sandy bridge in a github repo, maybe they were the valve drivers?

Also CAPS FOR EVERYBODY!!!:
Supported Features:
- Index buffers, instanced draw, indirect draw
- Nested command buffers
- Consumes SPIR-V (no GLSL "backdoor")
- Fragment, vertex, geometry, and compute shaders
- Uniform buffers, sampled images, dynamic uniform buffers
- Shader storage buffers
- Push constants
- Color, depth and stencil attachments
- 1D, 2D, 3D textures, texture arrays
- Memory barrier
- Optionally integrates with LunarGs loader
- WSI extension for X11
- Fences
- Most copy/blit commands for color and depth buffers,
vkCmdCopyImageToBuffer for stencil buffers
- Occlution query and timestamps
- VkkSemaphore and VkEvent
- Shader specialization
- Storage images
- MSAA

Unsupported Features:
- Tesselation shaders
- Push constants in GS and VS on HSW and prior
- Sparse resources
- Input attachments
 
So here one of the developers of The Talos Principle talks about their plans for re-engineering their graphics engine for Vulkan:

http://steamcommunity.com/app/257510/discussions/0/412447331651559970/#c412447331651997070


engine design for Vulkan is basically consited of three major parts:\

1)
Port. Make it work as fast as possible just by wrapping current engine design around Vulkan. Avoid all pitfalls and bottlenecks. This is what we did by now and released as patch for Talos.

2)
Use Vulkan for multi-threaded rendering. Our engine is designed really well for multi-threaded rendering, but we have only our wrapper for it - calls to graphics API (like Vulkan) are not multi-threaded. Yet.
That being said, this is the next step what we'll do. And probably release that also as patch for Talos. I tried to do that with Direct3D 11 long time ago (support for its deffered contexts), but it was too much pain and too little or even no gain. :( That's just one of reasons why we decided to stick with our own approach for MT renderer for that long. :/

3)
Redesign engine for Vulkan. This is the biggest step and can be split in two:

3a)
Precache all rendering states (which mostly mean materials in game) up front. This will make rendering calls much simplier and faster. So, instead of deciding at rendering time what is needed for a material to be rendered via Vulkan, do this at loading time and then when material needs to be rendered just give it to Vulkan, via one or two simple function calls.

3b)
Precache all geometry, material, textures, everything that is needed for rendering an object up front. This basically creates so called command buffer ready for Vulkan, and nothing extra needs to be set or created at render time.

3rd part of port is, obviously, the most complex one, and it'll take time to change engine design for it, step-by-step.
 
Vulkan is the first new generation, low-level API that is cross platform. This allows developers to create applications for a variety of PC, mobile and embedded devices using diverse operating systems. Like OpenGL, Vulkan is an open, royalty-free standard available for any platform to adopt. For developers who prefer to remain on OpenGL or OpenGL ES, NVIDIA will continue to drive innovations on those traditional APIs too.

Our support for Vulkan, on the day it launches, not just on multiple platforms, but in cutting-edge games such as The Talos Principle, has some of the industry’s most respected observers taking notice.

“To be able to play a game like The Talos Principle on the same day an API launches, is an unheard of achievement,” said Jon Peddie, president of Jon Peddie Research. “NVIDIA’s multi-platform compatibility and fully conformant driver support across many operating systems is a testament to the company’s leadership role in Vulkan’s development.”
....
NVIDIA is shipping fully-conformant Vulkan drivers for all GeForce boards based on Kepler or Maxwell GPUs running Windows (Windows 7 or later) or Linux. “We have been using NVIDIA hardware and drivers on both Windows and Android for Vulkan development, and the reductions in CPU overhead have been impressive,” said Oculus Chief Technology Officer John Carmack.GeForce gamers will be the first to play the Vulkan version of The Talos Principle, a puzzle game from Croteam that also shipped today. “We’ve successfully collaborated with the NVIDIA driver support team in the past, but I was amazed with the work they did on Vulkan,” said Croteam Senior Programmer Dean Sekuliuc. “They promptly provided us with the latest beta drivers so we were able to quickly implement the new API into Serious Engine and make The Talos Principle one of the first titles supporting Vulkan. Smooth!”

http://www.guru3d.com/news-story/nvidia-blogs-about-vulkan-will-kepler-and-maxwell-gpus.html

Two Vulcan demos:
https://developer.nvidia.com/vulkan-android#samples

Windows driver version 356.39 and Linux driver version 355.00.26 provide beta support for Vulkan.
https://developer.nvidia.com/vulkan-driver
 
Last edited:
http://www.computerbase.de/2016-02/vulkan-erste-benchmarks-der-neuen-api-in-talos-principle/

First Vulkan bench, though as the Talos Principle devs said, their Vulkan support is mostly just proof of concept and not ready for prime time. Still, it outpaces OpenGL on every resolution, and for what it's worth, Fury X seems to gain in general more than 980 Ti. Nowhere near DX11 performance in the game, though.
Funny they used Nvidia driver version 361.91 for their testbed. The only beta driver supporting Vulkan on windows is 356.39.
 
Back
Top