Skip to content

Commit

Permalink
HIGHLIGHTS:
Browse files Browse the repository at this point in the history
- improved depth bias flexibility

DETAILS:
- Core: added "CmdSetDepthBias", which can be used to override depth bias in the current pipeline (if enabled)
- Core: depth bias values grouped into "DepthBiasDesc" for comfortable usage
- Core: exposed "DeviceDesc::isDynamicDepthBiasSupported"
- Core: "antialiasedLines" renamed to "smoothLines" to match "isLineSmoothingSupported"
- VK: "VK_EXT_line_rasterization" replaced with the "KHR" version
- improved docs
  • Loading branch information
dzhdanNV committed Sep 2, 2024
1 parent ac7f61a commit b600e70
Show file tree
Hide file tree
Showing 28 changed files with 169 additions and 90 deletions.
15 changes: 9 additions & 6 deletions Include/NRI.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ Non-goals:
#pragma once

#define NRI_VERSION_MAJOR 1
#define NRI_VERSION_MINOR 145
#define NRI_VERSION_DATE "1 September 2024"
#define NRI_VERSION_MINOR 146
#define NRI_VERSION_DATE "2 September 2024"

#include "NRIDescs.h"

Expand Down Expand Up @@ -110,16 +110,19 @@ NriStruct(CoreInterface) {
void (NRI_CALL *CmdSetIndexBuffer)(NriRef(CommandBuffer) commandBuffer, const NriRef(Buffer) buffer, uint64_t offset, Nri(IndexType) indexType);
void (NRI_CALL *CmdSetVertexBuffers)(NriRef(CommandBuffer) commandBuffer, uint32_t baseSlot, uint32_t bufferNum, const NriPtr(Buffer) const* buffers, const uint64_t* offsets);

// Mandatory state for "Graphics"
// Initial state
void (NRI_CALL *CmdSetViewports)(NriRef(CommandBuffer) commandBuffer, const NriPtr(Viewport) viewports, uint32_t viewportNum);
void (NRI_CALL *CmdSetScissors)(NriRef(CommandBuffer) commandBuffer, const NriPtr(Rect) rects, uint32_t rectNum);

// Mandatory state for "Graphics", if enabled in the pipeline (since this state is global in D3D11/D3D12 better treat it as global)
// Initial state, if enabled in the pipeline (since this state is global inside a command buffer in D3D11/D3D12 better treat it as global even in VK to avoid discrepancies)
void (NRI_CALL *CmdSetStencilReference)(NriRef(CommandBuffer) commandBuffer, uint8_t frontRef, uint8_t backRef); // "backRef" requires "isIndependentFrontAndBackStencilReferenceAndMasksSupported"
void (NRI_CALL *CmdSetDepthBounds)(NriRef(CommandBuffer) commandBuffer, float boundsMin, float boundsMax);
void (NRI_CALL *CmdSetBlendConstants)(NriRef(CommandBuffer) commandBuffer, const NriRef(Color32f) color);
void (NRI_CALL *CmdSetSamplePositions)(NriRef(CommandBuffer) commandBuffer, const NriPtr(SamplePosition) positions, Nri(Sample_t) positionNum, Nri(Sample_t) sampleNum);
void (NRI_CALL *CmdSetShadingRate)(NriRef(CommandBuffer) commandBuffer, const NriRef(ShadingRateDesc) shadingRateDesc);
void (NRI_CALL *CmdSetSamplePositions)(NriRef(CommandBuffer) commandBuffer, const NriPtr(SamplePosition) positions, Nri(Sample_t) positionNum, Nri(Sample_t) sampleNum); // requires "isProgrammableSampleLocationsSupported"
void (NRI_CALL *CmdSetShadingRate)(NriRef(CommandBuffer) commandBuffer, const NriRef(ShadingRateDesc) shadingRateDesc); // requires "isShadingRateSupported"

// State override, if enabled in the pipeline
void (NRI_CALL *CmdSetDepthBias)(NriRef(CommandBuffer) commandBuffer, const NriRef(DepthBiasDesc) depthBiasDesc); // requires "isDynamicDepthBiasSupported"

// Graphics
void (NRI_CALL *CmdBeginRendering)(NriRef(CommandBuffer) commandBuffer, const NriRef(AttachmentsDesc) attachmentsDesc);
Expand Down
41 changes: 28 additions & 13 deletions Include/NRIDescs.h
Original file line number Diff line number Diff line change
Expand Up @@ -650,25 +650,41 @@ NriEnum(ShadingRateCombiner, uint8_t,
SUM
);

/*
R - minimum resolvable difference
S - maximum slope
bias = constant * R + slopeFactor * S
if (clamp > 0)
bias = min(bias, clamp)
else if (clamp < 0)
bias = max(bias, clamp)
enabled if constant != 0 or slope != 0
*/
NriStruct(DepthBiasDesc) {
float constant;
float clamp;
float slope;
};

NriStruct(RasterizationDesc) {
uint32_t viewportNum;
float depthBias;
float depthBiasClamp;
float depthBiasSlopeFactor;
Nri(DepthBiasDesc) depthBias;
Nri(FillMode) fillMode;
Nri(CullMode) cullMode;
bool frontCounterClockwise;
bool depthClamp;
bool antialiasedLines; // Requires "isLineSmoothingSupported"
bool conservativeRasterization; // Requires "conservativeRasterTier > 0"
bool shadingRate; // Requires "is[Pipeline/Primitive/Attachment]ShadingRateSupported", expects "CmdSetShadingRate" and optionally "AttachmentsDesc::shadingRate"
bool smoothLines; // requires "isLineSmoothingSupported"
bool conservativeRasterization; // requires "conservativeRasterTier != 0"
bool shadingRate; // requires "isShadingRateSupported", expects "CmdSetShadingRate" and optionally "AttachmentsDesc::shadingRate"
};

NriStruct(MultisampleDesc) {
uint32_t sampleMask;
Nri(Sample_t) sampleNum;
bool alphaToCoverage;
bool programmableSampleLocations; // Requires "isProgrammableSampleLocationsSupported", expects "CmdSetSamplePositions"
bool programmableSampleLocations; // requires "isProgrammableSampleLocationsSupported", expects "CmdSetSamplePositions"
};

NriStruct(ShadingRateDesc) {
Expand All @@ -683,7 +699,6 @@ NriStruct(ShadingRateDesc) {
#pragma region [ Output merger ]
//===============================================================================================================================

// Requires "isLogicOpSupported"
// S - source color 0
// D - destination color
NriEnum(LogicFunc, uint8_t,
Expand Down Expand Up @@ -821,20 +836,20 @@ NriStruct(ColorAttachmentDesc) {
NriStruct(DepthAttachmentDesc) {
Nri(CompareFunc) compareFunc;
bool write;
bool boundsTest; // Requires "isDepthBoundsTestSupported", expects "CmdSetDepthBounds"
bool boundsTest; // requires "isDepthBoundsTestSupported", expects "CmdSetDepthBounds"
};

NriStruct(StencilAttachmentDesc) {
Nri(StencilDesc) front;
Nri(StencilDesc) back; // Requires "isIndependentFrontAndBackStencilReferenceAndMasksSupported" for "back.writeMask"
Nri(StencilDesc) back; // requires "isIndependentFrontAndBackStencilReferenceAndMasksSupported" for "back.writeMask"
};

NriStruct(OutputMergerDesc) {
const NriPtr(ColorAttachmentDesc) color;
Nri(DepthAttachmentDesc) depth;
Nri(StencilAttachmentDesc) stencil;
Nri(Format) depthStencilFormat;
Nri(LogicFunc) colorLogicFunc;
Nri(LogicFunc) colorLogicFunc; // requires "isLogicOpSupported"
uint32_t colorNum;
};

Expand All @@ -856,7 +871,6 @@ NriEnum(Filter, uint8_t,
LINEAR
);

// Requires "isTextureFilterMinMaxSupported"
NriEnum(FilterExt, uint8_t,
NONE,
MIN,
Expand All @@ -877,7 +891,7 @@ NriStruct(AddressModes) {

NriStruct(Filters) {
Nri(Filter) min, mag, mip;
Nri(FilterExt) ext;
Nri(FilterExt) ext; // requires "isTextureFilterMinMaxSupported"
};

NriStruct(SamplerDesc) {
Expand Down Expand Up @@ -1375,6 +1389,7 @@ NriStruct(DeviceDesc) {
uint32_t isPipelineShadingRateSupported : 1;
uint32_t isPrimitiveShadingRateSupported : 1;
uint32_t isAttachmentShadingRateSupported : 1;
uint32_t isDynamicDepthBiasSupported : 1;

// Shader features
uint32_t isShaderNativeI16Supported : 1;
Expand Down
15 changes: 14 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,20 @@ Key features:
- validation layers (GAPI- and NRI- provided)
- default D3D11 behavior is changed to match D3D12/VK using *NVAPI* or *AMD AGS* libraries, where applicable
- supporting as much as possible VK-enabled platforms: Windows, Linux, MacOS, Android
- can be used as a *shared* or *static* library.
- can be used as a *shared* or *static* library

Available interfaces:
- `NRI.h` - core functionality
- `NRIDeviceCreation.h` - device creation and related functionality
- `NRIHelper.h` - a collection of various helpers to ease use of the core interface
- `NRILowLatency.h` - low latency support (aka *NVIDIA REFLEX*)
- `NRIMeshShader.h` - mesh shaders
- `NRIRayTracing.h` - ray tracing
- `NRIResourceAllocator.h` - convenient creation of resources using *AMD Virtual Memory Allocator*, which get returned already bound to memory
- `NRIStreamer.h` - a convenient way to stream data into resources
- `NRISwapChain.h` - swap chain and related functionality

*(some interfaces can be missing in the listing)*

*NRI* is used in:
- [*NRI samples*](https://github.com/NVIDIAGameWorks/NRISamples)
Expand Down
2 changes: 1 addition & 1 deletion Resources/Version.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#define STR(x) STR_HELPER(x)

#define VERSION_MAJOR 1
#define VERSION_MINOR 145
#define VERSION_MINOR 146
#define VERSION_BUILD 0
#define VERSION_REVISION 0

Expand Down
4 changes: 0 additions & 4 deletions Source/D3D11/CommandBufferD3D11.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,10 +167,6 @@ void CommandBufferD3D11::SetBlendConstants(const Color32f& color) {
m_BlendFactor = color;
}

void CommandBufferD3D11::SetShadingRate(const ShadingRateDesc& shadingRateDesc) {
MaybeUnused(shadingRateDesc); // doesn't exist in D3D11
}

void CommandBufferD3D11::ClearAttachments(const ClearDesc* clearDescs, uint32_t clearDescNum, const Rect* rects, uint32_t rectNum) {
if (!clearDescNum)
return;
Expand Down
1 change: 0 additions & 1 deletion Source/D3D11/CommandBufferD3D11.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ struct CommandBufferD3D11 final : public CommandBufferHelper {
void SetStencilReference(uint8_t frontRef, uint8_t backRef);
void SetSamplePositions(const SamplePosition* positions, Sample_t positionNum, Sample_t sampleNum);
void SetBlendConstants(const Color32f& color);
void SetShadingRate(const ShadingRateDesc& shadingRateDesc);
void ClearAttachments(const ClearDesc* clearDescs, uint32_t clearDescNum, const Rect* rects, uint32_t rectNum);
void ClearStorageBuffer(const ClearStorageBufferDesc& clearDesc);
void ClearStorageTexture(const ClearStorageTextureDesc& clearDesc);
Expand Down
6 changes: 5 additions & 1 deletion Source/D3D11/CommandBufferD3D11.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,11 @@ static void NRI_CALL CmdSetBlendConstants(CommandBuffer& commandBuffer, const Co
}

static void NRI_CALL CmdSetShadingRate(CommandBuffer& commandBuffer, const ShadingRateDesc& shadingRateDesc) {
((CommandBufferD3D11&)commandBuffer).SetShadingRate(shadingRateDesc);
MaybeUnused(commandBuffer, shadingRateDesc);
}

static void NRI_CALL CmdSetDepthBias(CommandBuffer& commandBuffer, const DepthBiasDesc& depthBiasDesc) {
MaybeUnused(commandBuffer, depthBiasDesc);
}

static void NRI_CALL CmdClearAttachments(CommandBuffer& commandBuffer, const ClearDesc* clearDescs, uint32_t clearDescNum, const Rect* rects, uint32_t rectNum) {
Expand Down
16 changes: 0 additions & 16 deletions Source/D3D11/CommandBufferEmuD3D11.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ enum OpCode : uint32_t {
SET_STENCIL_REFERENCE,
SET_SAMPLE_POSITIONS,
SET_BLEND_CONSTANTS,
SET_SHADING_RATE,
CLEAR_ATTACHMENTS,
CLEAR_STORAGE_BUFFER,
CLEAR_STORAGE_TEXTURE,
Expand Down Expand Up @@ -178,12 +177,6 @@ void CommandBufferEmuD3D11::Submit() {

commandBuffer.SetBlendConstants(color);
} break;
case SET_SHADING_RATE: {
ShadingRateDesc shadingRateDesc = {};
Read(m_PushBuffer, i, shadingRateDesc);

commandBuffer.SetShadingRate(shadingRateDesc);
} break;
case CLEAR_ATTACHMENTS: {
ClearDesc* clearDescs;
uint32_t clearDescNum;
Expand Down Expand Up @@ -527,11 +520,6 @@ inline void CommandBufferEmuD3D11::SetBlendConstants(const Color32f& color) {
Push(m_PushBuffer, color);
}

inline void CommandBufferEmuD3D11::SetShadingRate(const ShadingRateDesc& shadingRateDesc) {
Push(m_PushBuffer, SET_SHADING_RATE);
Push(m_PushBuffer, shadingRateDesc);
}

inline void CommandBufferEmuD3D11::ClearAttachments(const ClearDesc* clearDescs, uint32_t clearDescNum, const Rect* rects, uint32_t rectNum) {
Push(m_PushBuffer, CLEAR_ATTACHMENTS);
Push(m_PushBuffer, clearDescs, clearDescNum);
Expand Down Expand Up @@ -582,10 +570,6 @@ inline void CommandBufferEmuD3D11::SetPipeline(const Pipeline& pipeline) {
Push(m_PushBuffer, &pipeline);
}

inline void CommandBufferEmuD3D11::SetDescriptorPool(const DescriptorPool& descriptorPool) {
MaybeUnused(descriptorPool);
}

inline void CommandBufferEmuD3D11::SetDescriptorSet(uint32_t setIndexInPipelineLayout, const DescriptorSet& descriptorSet, const uint32_t* dynamicConstantBufferOffsets) {
uint32_t dynamicConstantBufferNum = ((DescriptorSetD3D11&)descriptorSet).GetDynamicConstantBufferNum();

Expand Down
6 changes: 0 additions & 6 deletions Source/D3D11/CommandBufferEmuD3D11.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,6 @@ struct CommandBufferEmuD3D11 final : public CommandBufferHelper {
// NRI
//================================================================================================================

inline void SetDebugName(const char* name) {
MaybeUnused(name);
}

Result Begin(const DescriptorPool* descriptorPool);
Result End();
void SetViewports(const Viewport* viewports, uint32_t viewportNum);
Expand All @@ -45,7 +41,6 @@ struct CommandBufferEmuD3D11 final : public CommandBufferHelper {
void SetStencilReference(uint8_t frontRef, uint8_t backRef);
void SetSamplePositions(const SamplePosition* positions, Sample_t positionNum, Sample_t sampleNum);
void SetBlendConstants(const Color32f& color);
void SetShadingRate(const ShadingRateDesc& shadingRateDesc);
void ClearAttachments(const ClearDesc* clearDescs, uint32_t clearDescNum, const Rect* rects, uint32_t rectNum);
void ClearStorageBuffer(const ClearStorageBufferDesc& clearDesc);
void ClearStorageTexture(const ClearStorageTextureDesc& clearDesc);
Expand All @@ -55,7 +50,6 @@ struct CommandBufferEmuD3D11 final : public CommandBufferHelper {
void SetIndexBuffer(const Buffer& buffer, uint64_t offset, IndexType indexType);
void SetPipelineLayout(const PipelineLayout& pipelineLayout);
void SetPipeline(const Pipeline& pipeline);
void SetDescriptorPool(const DescriptorPool& descriptorPool);
void SetDescriptorSet(uint32_t setIndexInPipelineLayout, const DescriptorSet& descriptorSet, const uint32_t* dynamicConstantBufferOffsets);
void SetConstants(uint32_t pushConstantIndex, const void* data, uint32_t size);
void Draw(const DrawDesc& drawDesc);
Expand Down
11 changes: 8 additions & 3 deletions Source/D3D11/CommandBufferEmuD3D11.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#pragma region[ Core ]

static void NRI_CALL SetCommandBufferDebugName(CommandBuffer& commandBuffer, const char* name) {
((CommandBufferEmuD3D11&)commandBuffer).SetDebugName(name);
MaybeUnused(commandBuffer, name);
}

static Result NRI_CALL BeginCommandBuffer(CommandBuffer& commandBuffer, const DescriptorPool* descriptorPool) {
Expand All @@ -27,7 +27,7 @@ static void NRI_CALL CmdBarrier(CommandBuffer& commandBuffer, const BarrierGroup
}

static void NRI_CALL CmdSetDescriptorPool(CommandBuffer& commandBuffer, const DescriptorPool& descriptorPool) {
((CommandBufferEmuD3D11&)commandBuffer).SetDescriptorPool(descriptorPool);
MaybeUnused(commandBuffer, descriptorPool);
}

static void NRI_CALL CmdSetDescriptorSet(CommandBuffer& commandBuffer, uint32_t setIndexInPipelineLayout, const DescriptorSet& descriptorSet, const uint32_t* dynamicConstantBufferOffsets) {
Expand Down Expand Up @@ -71,7 +71,11 @@ static void NRI_CALL CmdSetBlendConstants(CommandBuffer& commandBuffer, const Co
}

static void NRI_CALL CmdSetShadingRate(CommandBuffer& commandBuffer, const ShadingRateDesc& shadingRateDesc) {
((CommandBufferEmuD3D11&)commandBuffer).SetShadingRate(shadingRateDesc);
MaybeUnused(commandBuffer, shadingRateDesc);
}

static void NRI_CALL CmdSetDepthBias(CommandBuffer& commandBuffer, const DepthBiasDesc& depthBiasDesc) {
MaybeUnused(commandBuffer, depthBiasDesc);
}

static void NRI_CALL CmdClearAttachments(CommandBuffer& commandBuffer, const ClearDesc* clearDescs, uint32_t clearDescNum, const Rect* rects, uint32_t rectNum) {
Expand Down Expand Up @@ -185,6 +189,7 @@ void Core_CommandBufferEmu_PartiallyFillFunctionTable(CoreInterface& table) {
table.CmdSetSamplePositions = ::CmdSetSamplePositions;
table.CmdSetBlendConstants = ::CmdSetBlendConstants;
table.CmdSetShadingRate = ::CmdSetShadingRate;
table.CmdSetDepthBias = ::CmdSetDepthBias;
table.CmdSetIndexBuffer = ::CmdSetIndexBuffer;
table.CmdSetVertexBuffers = ::CmdSetVertexBuffers;
table.CmdDraw = ::CmdDraw;
Expand Down
8 changes: 4 additions & 4 deletions Source/D3D11/PipelineD3D11.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,12 +95,12 @@ Result PipelineD3D11::Create(const GraphicsPipelineDesc& pipelineDesc) {
rasterizerDesc.FillMode = r.fillMode == FillMode::SOLID ? D3D11_FILL_SOLID : D3D11_FILL_WIREFRAME;
rasterizerDesc.CullMode = GetD3D11CullModeFromCullMode(r.cullMode);
rasterizerDesc.FrontCounterClockwise = r.frontCounterClockwise;
rasterizerDesc.DepthBias = (INT)r.depthBias;
rasterizerDesc.DepthBiasClamp = r.depthBiasClamp;
rasterizerDesc.SlopeScaledDepthBias = r.depthBiasSlopeFactor;
rasterizerDesc.DepthBias = (INT)r.depthBias.constant;
rasterizerDesc.DepthBiasClamp = r.depthBias.clamp;
rasterizerDesc.SlopeScaledDepthBias = r.depthBias.slope;
rasterizerDesc.DepthClipEnable = r.depthClamp;
rasterizerDesc.ScissorEnable = TRUE;
rasterizerDesc.AntialiasedLineEnable = r.antialiasedLines;
rasterizerDesc.AntialiasedLineEnable = r.smoothLines;
rasterizerDesc.MultisampleEnable = sampleNum > 1 ? TRUE : FALSE;
// D3D11_RASTERIZER_DESC1
rasterizerDesc.ForcedSampleCount = sampleNum > 1 ? sampleNum : 0;
Expand Down
7 changes: 7 additions & 0 deletions Source/D3D12/CommandBufferD3D12.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,13 @@ inline void CommandBufferD3D12::SetShadingRate(const ShadingRateDesc& shadingRat
m_GraphicsCommandList->RSSetShadingRate(shadingRate, shadingRateCombiners);
}

inline void CommandBufferD3D12::SetDepthBias(const DepthBiasDesc& depthBiasDesc) {
MaybeUnused(depthBiasDesc);
#ifdef NRI_USE_AGILITY_SDK
m_GraphicsCommandList->RSSetDepthBias(depthBiasDesc.constant, depthBiasDesc.clamp, depthBiasDesc.slope);
#endif
}

inline void CommandBufferD3D12::ClearAttachments(const ClearDesc* clearDescs, uint32_t clearDescNum, const Rect* rects, uint32_t rectNum) {
if (!clearDescNum)
return;
Expand Down
1 change: 1 addition & 0 deletions Source/D3D12/CommandBufferD3D12.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ struct CommandBufferD3D12 {
void SetSamplePositions(const SamplePosition* positions, Sample_t positionNum, Sample_t sampleNum);
void SetBlendConstants(const Color32f& color);
void SetShadingRate(const ShadingRateDesc& shadingRateDesc);
void SetDepthBias(const DepthBiasDesc& depthBiasDesc);
void ClearAttachments(const ClearDesc* clearDescs, uint32_t clearDescNum, const Rect* rects, uint32_t rectNum);
void ClearStorageBuffer(const ClearStorageBufferDesc& clearDesc);
void ClearStorageTexture(const ClearStorageTextureDesc& clearDesc);
Expand Down
4 changes: 4 additions & 0 deletions Source/D3D12/CommandBufferD3D12.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@ static void NRI_CALL CmdSetShadingRate(CommandBuffer& commandBuffer, const Shadi
((CommandBufferD3D12&)commandBuffer).SetShadingRate(shadingRateDesc);
}

static void NRI_CALL CmdSetDepthBias(CommandBuffer& commandBuffer, const DepthBiasDesc& depthBiasDesc) {
((CommandBufferD3D12&)commandBuffer).SetDepthBias(depthBiasDesc);
}

static void NRI_CALL CmdClearAttachments(CommandBuffer& commandBuffer, const ClearDesc* clearDescs, uint32_t clearDescNum, const Rect* rects, uint32_t rectNum) {
((CommandBufferD3D12&)commandBuffer).ClearAttachments(clearDescs, clearDescNum, rects, rectNum);
}
Expand Down
1 change: 1 addition & 0 deletions Source/D3D12/DeviceD3D12.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,7 @@ void DeviceD3D12::FillDesc(const DeviceCreationDesc& deviceCreationDesc) {
if (FAILED(hr))
REPORT_WARNING(this, "ID3D12Device::CheckFeatureSupport(options16) failed, result = 0x%08X!", hr);
m_Desc.deviceUploadHeapSize = options16.GPUUploadHeapSupported ? m_Desc.adapterDesc.videoMemorySize : 0;
m_Desc.isDynamicDepthBiasSupported = options16.DynamicDepthBiasSupported;

D3D12_FEATURE_DATA_D3D12_OPTIONS17 options17 = {};
hr = m_Device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS17, &options17, sizeof(options17));
Expand Down
Loading

0 comments on commit b600e70

Please sign in to comment.