From 98afb421f408aa8651afff3dba1b21fad71131fe Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 24 Mar 2021 13:57:55 -0700 Subject: Reimplement Vulkan shader objects. (#1764) * Reimplement Vulkan shader objects. This change reimplements Vulkan shader objects in the `gfx` layer so that it is no longer layered on top of the `DescriptorSet` abstraction. Since this is the last implementation that uses `DescriptorSet`, the change also removes all `DescriptorSet` related API from public `gfx` interface. The Vulkan implementation now passes all test cases, but it still have two issues: 1. The PushConstant setting is not correct, this is because we don't seem to be able to get correct reflection data about the size of push constants for an entry-point. 2. The `shader-toy` example can't run on Vulkan, because it currently sets nullptr to `Texture` bindings, and this change doesn't properly handle setting resource to null in `ShaderObject`s yet. If we can use the `nullDescriptor` feature on vulkan, this implementation will be simple. However we still want to decide whether we want to use a Vulkan 1.2 feature for this. * Fix up --- examples/shader-object/main.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'examples/shader-object/main.cpp') diff --git a/examples/shader-object/main.cpp b/examples/shader-object/main.cpp index aaafc010a..4945de27b 100644 --- a/examples/shader-object/main.cpp +++ b/examples/shader-object/main.cpp @@ -136,6 +136,7 @@ int main() // interacting with the graphics API. Slang::ComPtr device; IDevice::Desc deviceDesc = {}; + deviceDesc.deviceType = DeviceType::Vulkan; SLANG_RETURN_ON_FAIL(gfxCreateDevice(&deviceDesc, device.writeRef())); // Now we can load the shader code. -- cgit v1.2.3