mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-16 08:27:05 +00:00
Updating RenderPipelineDescriptor to the newest layout
Currently normalizes anything using the new layout to the old one for the sake of getting things working as quickly as possible. Follow up changes will gradually push the new layout through more of the stack. Bug: dawn:642 Change-Id: Ie92fa9dde21174f62ceba1a1f4866cbc24c5fc6f Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/38600 Commit-Queue: Brandon Jones <bajones@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org>
This commit is contained in:
committed by
Commit Bot service account
parent
c506385531
commit
0702b70469
@@ -46,6 +46,15 @@ class RenderPipelineValidationTest : public ValidationTest {
|
||||
// Test cases where creation should succeed
|
||||
TEST_F(RenderPipelineValidationTest, CreationSuccess) {
|
||||
{
|
||||
// New format
|
||||
utils::ComboRenderPipelineDescriptor2 descriptor;
|
||||
descriptor.vertex.module = vsModule;
|
||||
descriptor.cFragment.module = fsModule;
|
||||
|
||||
device.CreateRenderPipeline2(&descriptor);
|
||||
}
|
||||
{
|
||||
// Deprecated format
|
||||
utils::ComboRenderPipelineDescriptor descriptor(device);
|
||||
descriptor.vertexStage.module = vsModule;
|
||||
descriptor.cFragmentStage.module = fsModule;
|
||||
@@ -75,66 +84,71 @@ TEST_F(RenderPipelineValidationTest, CreationSuccess) {
|
||||
TEST_F(RenderPipelineValidationTest, DepthBiasParameterNotBeNaN) {
|
||||
// Control case, depth bias parameters in ComboRenderPipeline default to 0 which is finite
|
||||
{
|
||||
utils::ComboRenderPipelineDescriptor descriptor(device);
|
||||
descriptor.vertexStage.module = vsModule;
|
||||
descriptor.cFragmentStage.module = fsModule;
|
||||
device.CreateRenderPipeline(&descriptor);
|
||||
utils::ComboRenderPipelineDescriptor2 descriptor;
|
||||
descriptor.vertex.module = vsModule;
|
||||
descriptor.cFragment.module = fsModule;
|
||||
descriptor.depthStencil = &descriptor.cDepthStencil;
|
||||
device.CreateRenderPipeline2(&descriptor);
|
||||
}
|
||||
|
||||
// Infinite depth bias clamp is valid
|
||||
{
|
||||
utils::ComboRenderPipelineDescriptor descriptor(device);
|
||||
descriptor.vertexStage.module = vsModule;
|
||||
descriptor.cFragmentStage.module = fsModule;
|
||||
descriptor.cRasterizationState.depthBiasClamp = INFINITY;
|
||||
device.CreateRenderPipeline(&descriptor);
|
||||
utils::ComboRenderPipelineDescriptor2 descriptor;
|
||||
descriptor.vertex.module = vsModule;
|
||||
descriptor.cFragment.module = fsModule;
|
||||
descriptor.cDepthStencil.depthBiasClamp = INFINITY;
|
||||
descriptor.depthStencil = &descriptor.cDepthStencil;
|
||||
device.CreateRenderPipeline2(&descriptor);
|
||||
}
|
||||
// NAN depth bias clamp is invalid
|
||||
{
|
||||
utils::ComboRenderPipelineDescriptor descriptor(device);
|
||||
descriptor.vertexStage.module = vsModule;
|
||||
descriptor.cFragmentStage.module = fsModule;
|
||||
descriptor.cRasterizationState.depthBiasClamp = NAN;
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
|
||||
utils::ComboRenderPipelineDescriptor2 descriptor;
|
||||
descriptor.vertex.module = vsModule;
|
||||
descriptor.cFragment.module = fsModule;
|
||||
descriptor.cDepthStencil.depthBiasClamp = NAN;
|
||||
descriptor.depthStencil = &descriptor.cDepthStencil;
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
|
||||
}
|
||||
|
||||
// Infinite depth bias slope is valid
|
||||
{
|
||||
utils::ComboRenderPipelineDescriptor descriptor(device);
|
||||
descriptor.vertexStage.module = vsModule;
|
||||
descriptor.cFragmentStage.module = fsModule;
|
||||
descriptor.cRasterizationState.depthBiasSlopeScale = INFINITY;
|
||||
device.CreateRenderPipeline(&descriptor);
|
||||
utils::ComboRenderPipelineDescriptor2 descriptor;
|
||||
descriptor.vertex.module = vsModule;
|
||||
descriptor.cFragment.module = fsModule;
|
||||
descriptor.cDepthStencil.depthBiasSlopeScale = INFINITY;
|
||||
descriptor.depthStencil = &descriptor.cDepthStencil;
|
||||
device.CreateRenderPipeline2(&descriptor);
|
||||
}
|
||||
// NAN depth bias slope is invalid
|
||||
{
|
||||
utils::ComboRenderPipelineDescriptor descriptor(device);
|
||||
descriptor.vertexStage.module = vsModule;
|
||||
descriptor.cFragmentStage.module = fsModule;
|
||||
descriptor.cRasterizationState.depthBiasSlopeScale = NAN;
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
|
||||
utils::ComboRenderPipelineDescriptor2 descriptor;
|
||||
descriptor.vertex.module = vsModule;
|
||||
descriptor.cFragment.module = fsModule;
|
||||
descriptor.cDepthStencil.depthBiasSlopeScale = NAN;
|
||||
descriptor.depthStencil = &descriptor.cDepthStencil;
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
|
||||
}
|
||||
}
|
||||
|
||||
// Tests that at least one color state is required.
|
||||
TEST_F(RenderPipelineValidationTest, ColorStateRequired) {
|
||||
// Tests that at least one color target state is required.
|
||||
TEST_F(RenderPipelineValidationTest, ColorTargetStateRequired) {
|
||||
{
|
||||
// This one succeeds because attachment 0 is the color attachment
|
||||
utils::ComboRenderPipelineDescriptor descriptor(device);
|
||||
descriptor.vertexStage.module = vsModule;
|
||||
descriptor.cFragmentStage.module = fsModule;
|
||||
descriptor.colorStateCount = 1;
|
||||
utils::ComboRenderPipelineDescriptor2 descriptor;
|
||||
descriptor.vertex.module = vsModule;
|
||||
descriptor.cFragment.module = fsModule;
|
||||
descriptor.cFragment.targetCount = 1;
|
||||
|
||||
device.CreateRenderPipeline(&descriptor);
|
||||
device.CreateRenderPipeline2(&descriptor);
|
||||
}
|
||||
|
||||
{ // Fail because lack of color states (and depth/stencil state)
|
||||
utils::ComboRenderPipelineDescriptor descriptor(device);
|
||||
descriptor.vertexStage.module = vsModule;
|
||||
descriptor.cFragmentStage.module = fsModule;
|
||||
descriptor.colorStateCount = 0;
|
||||
{ // Fail because lack of color target states (and depth/stencil state)
|
||||
utils::ComboRenderPipelineDescriptor2 descriptor;
|
||||
descriptor.vertex.module = vsModule;
|
||||
descriptor.cFragment.module = fsModule;
|
||||
descriptor.cFragment.targetCount = 0;
|
||||
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,22 +156,22 @@ TEST_F(RenderPipelineValidationTest, ColorStateRequired) {
|
||||
TEST_F(RenderPipelineValidationTest, NonRenderableFormat) {
|
||||
{
|
||||
// Succeeds because RGBA8Unorm is renderable
|
||||
utils::ComboRenderPipelineDescriptor descriptor(device);
|
||||
descriptor.vertexStage.module = vsModule;
|
||||
descriptor.cFragmentStage.module = fsModule;
|
||||
descriptor.cColorStates[0].format = wgpu::TextureFormat::RGBA8Unorm;
|
||||
utils::ComboRenderPipelineDescriptor2 descriptor;
|
||||
descriptor.vertex.module = vsModule;
|
||||
descriptor.cFragment.module = fsModule;
|
||||
descriptor.cTargets[0].format = wgpu::TextureFormat::RGBA8Unorm;
|
||||
|
||||
device.CreateRenderPipeline(&descriptor);
|
||||
device.CreateRenderPipeline2(&descriptor);
|
||||
}
|
||||
|
||||
{
|
||||
// Fails because RG11B10Ufloat is non-renderable
|
||||
utils::ComboRenderPipelineDescriptor descriptor(device);
|
||||
descriptor.vertexStage.module = vsModule;
|
||||
descriptor.cFragmentStage.module = fsModule;
|
||||
descriptor.cColorStates[0].format = wgpu::TextureFormat::RG11B10Ufloat;
|
||||
utils::ComboRenderPipelineDescriptor2 descriptor;
|
||||
descriptor.vertex.module = vsModule;
|
||||
descriptor.cFragment.module = fsModule;
|
||||
descriptor.cTargets[0].format = wgpu::TextureFormat::RG11B10Ufloat;
|
||||
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -196,21 +210,21 @@ TEST_F(RenderPipelineValidationTest, FragmentOutputFormatCompatibility) {
|
||||
/// Tests that the sample count of the render pipeline must be valid.
|
||||
TEST_F(RenderPipelineValidationTest, SampleCount) {
|
||||
{
|
||||
utils::ComboRenderPipelineDescriptor descriptor(device);
|
||||
descriptor.vertexStage.module = vsModule;
|
||||
descriptor.cFragmentStage.module = fsModule;
|
||||
descriptor.sampleCount = 4;
|
||||
utils::ComboRenderPipelineDescriptor2 descriptor;
|
||||
descriptor.vertex.module = vsModule;
|
||||
descriptor.cFragment.module = fsModule;
|
||||
descriptor.multisample.count = 4;
|
||||
|
||||
device.CreateRenderPipeline(&descriptor);
|
||||
device.CreateRenderPipeline2(&descriptor);
|
||||
}
|
||||
|
||||
{
|
||||
utils::ComboRenderPipelineDescriptor descriptor(device);
|
||||
descriptor.vertexStage.module = vsModule;
|
||||
descriptor.cFragmentStage.module = fsModule;
|
||||
descriptor.sampleCount = 3;
|
||||
utils::ComboRenderPipelineDescriptor2 descriptor;
|
||||
descriptor.vertex.module = vsModule;
|
||||
descriptor.cFragment.module = fsModule;
|
||||
descriptor.multisample.count = 3;
|
||||
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -360,23 +374,23 @@ TEST_F(RenderPipelineValidationTest, SampleCountCompatibilityWithRenderPass) {
|
||||
// when the alphaToCoverage mode is enabled.
|
||||
TEST_F(RenderPipelineValidationTest, AlphaToCoverageAndSampleCount) {
|
||||
{
|
||||
utils::ComboRenderPipelineDescriptor descriptor(device);
|
||||
descriptor.vertexStage.module = vsModule;
|
||||
descriptor.cFragmentStage.module = fsModule;
|
||||
descriptor.sampleCount = 4;
|
||||
descriptor.alphaToCoverageEnabled = true;
|
||||
utils::ComboRenderPipelineDescriptor2 descriptor;
|
||||
descriptor.vertex.module = vsModule;
|
||||
descriptor.cFragment.module = fsModule;
|
||||
descriptor.multisample.count = 4;
|
||||
descriptor.multisample.alphaToCoverageEnabled = true;
|
||||
|
||||
device.CreateRenderPipeline(&descriptor);
|
||||
device.CreateRenderPipeline2(&descriptor);
|
||||
}
|
||||
|
||||
{
|
||||
utils::ComboRenderPipelineDescriptor descriptor(device);
|
||||
descriptor.vertexStage.module = vsModule;
|
||||
descriptor.cFragmentStage.module = fsModule;
|
||||
descriptor.sampleCount = 1;
|
||||
descriptor.alphaToCoverageEnabled = true;
|
||||
utils::ComboRenderPipelineDescriptor2 descriptor;
|
||||
descriptor.vertex.module = vsModule;
|
||||
descriptor.cFragment.module = fsModule;
|
||||
descriptor.multisample.count = 1;
|
||||
descriptor.multisample.alphaToCoverageEnabled = true;
|
||||
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -586,37 +600,37 @@ TEST_F(RenderPipelineValidationTest, EntryPointNameValidation) {
|
||||
}
|
||||
)");
|
||||
|
||||
utils::ComboRenderPipelineDescriptor descriptor(device);
|
||||
descriptor.vertexStage.module = module;
|
||||
descriptor.vertexStage.entryPoint = "vertex_main";
|
||||
descriptor.cFragmentStage.module = module;
|
||||
descriptor.cFragmentStage.entryPoint = "fragment_main";
|
||||
utils::ComboRenderPipelineDescriptor2 descriptor;
|
||||
descriptor.vertex.module = module;
|
||||
descriptor.vertex.entryPoint = "vertex_main";
|
||||
descriptor.cFragment.module = module;
|
||||
descriptor.cFragment.entryPoint = "fragment_main";
|
||||
|
||||
// Success case.
|
||||
device.CreateRenderPipeline(&descriptor);
|
||||
device.CreateRenderPipeline2(&descriptor);
|
||||
|
||||
// Test for the vertex stage entryPoint name.
|
||||
{
|
||||
// The entryPoint name doesn't exist in the module.
|
||||
descriptor.vertexStage.entryPoint = "main";
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
|
||||
descriptor.vertex.entryPoint = "main";
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
|
||||
|
||||
// The entryPoint name exists, but not for the correct stage.
|
||||
descriptor.vertexStage.entryPoint = "fragment_main";
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
|
||||
descriptor.vertex.entryPoint = "fragment_main";
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
|
||||
}
|
||||
|
||||
descriptor.vertexStage.entryPoint = "vertex_main";
|
||||
descriptor.vertex.entryPoint = "vertex_main";
|
||||
|
||||
// Test for the fragment stage entryPoint name.
|
||||
{
|
||||
// The entryPoint name doesn't exist in the module.
|
||||
descriptor.cFragmentStage.entryPoint = "main";
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
|
||||
descriptor.cFragment.entryPoint = "main";
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
|
||||
|
||||
// The entryPoint name exists, but not for the correct stage.
|
||||
descriptor.cFragmentStage.entryPoint = "vertex_main";
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
|
||||
descriptor.cFragment.entryPoint = "vertex_main";
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -639,33 +653,33 @@ TEST_F(RenderPipelineValidationTest, VertexAttribCorrectEntryPoint) {
|
||||
}
|
||||
)");
|
||||
|
||||
utils::ComboRenderPipelineDescriptor descriptor(device);
|
||||
descriptor.vertexStage.module = module;
|
||||
descriptor.cFragmentStage.module = fsModule;
|
||||
utils::ComboRenderPipelineDescriptor2 descriptor;
|
||||
descriptor.vertex.module = module;
|
||||
descriptor.cFragment.module = fsModule;
|
||||
|
||||
descriptor.cVertexState.vertexBufferCount = 1;
|
||||
descriptor.cVertexState.cVertexBuffers[0].attributeCount = 1;
|
||||
descriptor.cVertexState.cVertexBuffers[0].arrayStride = 16;
|
||||
descriptor.cVertexState.cAttributes[0].format = wgpu::VertexFormat::Float32x4;
|
||||
descriptor.cVertexState.cAttributes[0].offset = 0;
|
||||
descriptor.vertex.bufferCount = 1;
|
||||
descriptor.cBuffers[0].attributeCount = 1;
|
||||
descriptor.cBuffers[0].arrayStride = 16;
|
||||
descriptor.cAttributes[0].format = wgpu::VertexFormat::Float32x4;
|
||||
descriptor.cAttributes[0].offset = 0;
|
||||
|
||||
// Success cases, the attribute used by the entryPoint is declared in the pipeline.
|
||||
descriptor.vertexStage.entryPoint = "vertex0";
|
||||
descriptor.cVertexState.cAttributes[0].shaderLocation = 0;
|
||||
device.CreateRenderPipeline(&descriptor);
|
||||
descriptor.vertex.entryPoint = "vertex0";
|
||||
descriptor.cAttributes[0].shaderLocation = 0;
|
||||
device.CreateRenderPipeline2(&descriptor);
|
||||
|
||||
descriptor.vertexStage.entryPoint = "vertex1";
|
||||
descriptor.cVertexState.cAttributes[0].shaderLocation = 1;
|
||||
device.CreateRenderPipeline(&descriptor);
|
||||
descriptor.vertex.entryPoint = "vertex1";
|
||||
descriptor.cAttributes[0].shaderLocation = 1;
|
||||
device.CreateRenderPipeline2(&descriptor);
|
||||
|
||||
// Error cases, the attribute used by the entryPoint isn't declared in the pipeline.
|
||||
descriptor.vertexStage.entryPoint = "vertex1";
|
||||
descriptor.cVertexState.cAttributes[0].shaderLocation = 0;
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
|
||||
descriptor.vertex.entryPoint = "vertex1";
|
||||
descriptor.cAttributes[0].shaderLocation = 0;
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
|
||||
|
||||
descriptor.vertexStage.entryPoint = "vertex0";
|
||||
descriptor.cVertexState.cAttributes[0].shaderLocation = 1;
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
|
||||
descriptor.vertex.entryPoint = "vertex0";
|
||||
descriptor.cAttributes[0].shaderLocation = 1;
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
|
||||
}
|
||||
|
||||
// Test that fragment output validation is for the correct entryPoint
|
||||
@@ -686,27 +700,27 @@ TEST_F(RenderPipelineValidationTest, FragmentOutputCorrectEntryPoint) {
|
||||
}
|
||||
)");
|
||||
|
||||
utils::ComboRenderPipelineDescriptor descriptor(device);
|
||||
descriptor.vertexStage.module = vsModule;
|
||||
descriptor.cFragmentStage.module = module;
|
||||
utils::ComboRenderPipelineDescriptor2 descriptor;
|
||||
descriptor.vertex.module = vsModule;
|
||||
descriptor.cFragment.module = module;
|
||||
|
||||
// Success case, the component type matches between the pipeline and the entryPoint
|
||||
descriptor.cFragmentStage.entryPoint = "fragmentFloat";
|
||||
descriptor.cColorStates[0].format = wgpu::TextureFormat::RGBA32Float;
|
||||
device.CreateRenderPipeline(&descriptor);
|
||||
descriptor.cFragment.entryPoint = "fragmentFloat";
|
||||
descriptor.cTargets[0].format = wgpu::TextureFormat::RGBA32Float;
|
||||
device.CreateRenderPipeline2(&descriptor);
|
||||
|
||||
descriptor.cFragmentStage.entryPoint = "fragmentUint";
|
||||
descriptor.cColorStates[0].format = wgpu::TextureFormat::RGBA32Uint;
|
||||
device.CreateRenderPipeline(&descriptor);
|
||||
descriptor.cFragment.entryPoint = "fragmentUint";
|
||||
descriptor.cTargets[0].format = wgpu::TextureFormat::RGBA32Uint;
|
||||
device.CreateRenderPipeline2(&descriptor);
|
||||
|
||||
// Error case, the component type doesn't match between the pipeline and the entryPoint
|
||||
descriptor.cFragmentStage.entryPoint = "fragmentUint";
|
||||
descriptor.cColorStates[0].format = wgpu::TextureFormat::RGBA32Float;
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
|
||||
descriptor.cFragment.entryPoint = "fragmentUint";
|
||||
descriptor.cTargets[0].format = wgpu::TextureFormat::RGBA32Float;
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
|
||||
|
||||
descriptor.cFragmentStage.entryPoint = "fragmentFloat";
|
||||
descriptor.cColorStates[0].format = wgpu::TextureFormat::RGBA32Uint;
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
|
||||
descriptor.cFragment.entryPoint = "fragmentFloat";
|
||||
descriptor.cTargets[0].format = wgpu::TextureFormat::RGBA32Uint;
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
|
||||
}
|
||||
|
||||
// Test that fragment output validation is for the correct entryPoint
|
||||
@@ -743,25 +757,25 @@ TEST_F(RenderPipelineValidationTest, DISABLED_BindingsFromCorrectEntryPoint) {
|
||||
device, {{1, wgpu::ShaderStage::Vertex, wgpu::BufferBindingType::Uniform}});
|
||||
wgpu::PipelineLayout layout1 = utils::MakeBasicPipelineLayout(device, &bgl1);
|
||||
|
||||
utils::ComboRenderPipelineDescriptor descriptor(device);
|
||||
descriptor.vertexStage.module = module;
|
||||
descriptor.cFragmentStage.module = fsModule;
|
||||
utils::ComboRenderPipelineDescriptor2 descriptor;
|
||||
descriptor.vertex.module = module;
|
||||
descriptor.cFragment.module = fsModule;
|
||||
|
||||
// Success case, the BGL matches the bindings used by the entryPoint
|
||||
descriptor.vertexStage.entryPoint = "vertex0";
|
||||
descriptor.vertex.entryPoint = "vertex0";
|
||||
descriptor.layout = layout0;
|
||||
device.CreateRenderPipeline(&descriptor);
|
||||
device.CreateRenderPipeline2(&descriptor);
|
||||
|
||||
descriptor.vertexStage.entryPoint = "vertex1";
|
||||
descriptor.vertex.entryPoint = "vertex1";
|
||||
descriptor.layout = layout1;
|
||||
device.CreateRenderPipeline(&descriptor);
|
||||
device.CreateRenderPipeline2(&descriptor);
|
||||
|
||||
// Error case, the BGL doesn't match the bindings used by the entryPoint
|
||||
descriptor.vertexStage.entryPoint = "vertex1";
|
||||
descriptor.vertex.entryPoint = "vertex1";
|
||||
descriptor.layout = layout0;
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
|
||||
|
||||
descriptor.vertexStage.entryPoint = "vertex0";
|
||||
descriptor.vertex.entryPoint = "vertex0";
|
||||
descriptor.layout = layout1;
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
|
||||
ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user