Skip to content

Commit

Permalink
NRI: added resolve functionality:
Browse files Browse the repository at this point in the history
- added "CmdResolveTexture" (for MSAA resolve at least)
- extended "StageBits", "AccessBits" and "Layout"
- relaxed valid usage of "[src/dst]RegionDesc", which can be 0/non-0 independently
  • Loading branch information
dzhdanNV committed Nov 4, 2024
1 parent 9e93bb3 commit 0d825c0
Show file tree
Hide file tree
Showing 23 changed files with 397 additions and 148 deletions.
7 changes: 3 additions & 4 deletions Include/NRI.h
Original file line number Diff line number Diff line change
Expand Up @@ -154,12 +154,11 @@ NriStruct(CoreInterface) {
// Copy
void (NRI_CALL *CmdCopyBuffer) (NriRef(CommandBuffer) commandBuffer, NriRef(Buffer) dstBuffer, uint64_t dstOffset, const NriRef(Buffer) srcBuffer, uint64_t srcOffset, uint64_t size);
void (NRI_CALL *CmdCopyTexture) (NriRef(CommandBuffer) commandBuffer, NriRef(Texture) dstTexture, const NriPtr(TextureRegionDesc) dstRegionDesc, const NriRef(Texture) srcTexture, const NriPtr(TextureRegionDesc) srcRegionDesc);
void (NRI_CALL *CmdResolveTexture) (NriRef(CommandBuffer) commandBuffer, NriRef(Texture) dstTexture, const NriPtr(TextureRegionDesc) dstRegionDesc, const NriRef(Texture) srcTexture, const NriPtr(TextureRegionDesc) srcRegionDesc); // "isRegionResolveSupported" is needed for region specification
void (NRI_CALL *CmdUploadBufferToTexture) (NriRef(CommandBuffer) commandBuffer, NriRef(Texture) dstTexture, const NriRef(TextureRegionDesc) dstRegionDesc, const NriRef(Buffer) srcBuffer, const NriRef(TextureDataLayoutDesc) srcDataLayoutDesc);
void (NRI_CALL *CmdReadbackTextureToBuffer) (NriRef(CommandBuffer) commandBuffer, NriRef(Buffer) dstBuffer, const NriRef(TextureDataLayoutDesc) dstDataLayoutDesc, const NriRef(Texture) srcTexture, const NriRef(TextureRegionDesc) srcRegionDesc);

// Clear storage (potentially slow clear)
void (NRI_CALL *CmdClearStorageBuffer) (NriRef(CommandBuffer) commandBuffer, const NriRef(ClearStorageBufferDesc) clearDesc);
void (NRI_CALL *CmdClearStorageTexture) (NriRef(CommandBuffer) commandBuffer, const NriRef(ClearStorageTextureDesc) clearDesc);
void (NRI_CALL *CmdClearStorageBuffer) (NriRef(CommandBuffer) commandBuffer, const NriRef(ClearStorageBufferDesc) clearDesc); // potentially slow clear
void (NRI_CALL *CmdClearStorageTexture) (NriRef(CommandBuffer) commandBuffer, const NriRef(ClearStorageTextureDesc) clearDesc); // potentially slow clear

// Query
void (NRI_CALL *CmdResetQueries) (NriRef(CommandBuffer) commandBuffer, const NriRef(QueryPool) queryPool, uint32_t offset, uint32_t num);
Expand Down
23 changes: 15 additions & 8 deletions Include/NRIDescs.h
Original file line number Diff line number Diff line change
Expand Up @@ -255,13 +255,15 @@ NriBits(StageBits, uint32_t,
ANY_HIT_SHADER = NriBit(15), // Any hit shader
CALLABLE_SHADER = NriBit(16), // Callable shader

// Other stages
COPY = NriBit(17), // Invoked by "CmdCopy*", "CmdUpload*" and "CmdReadback*"
CLEAR_STORAGE = NriBit(18), // Invoked by "CmdClearStorage*"
ACCELERATION_STRUCTURE = NriBit(19), // Invoked by "Cmd*AccelerationStructure*"
ACCELERATION_STRUCTURE = NriBit(17), // Invoked by "Cmd*AccelerationStructure*"

// Copy
COPY = NriBit(18), // Invoked by "CmdCopy*", "CmdUpload*" and "CmdReadback*"
CLEAR_STORAGE = NriBit(19), // Invoked by "CmdClearStorage*"
RESOLVE = NriBit(20), // Invoked by "CmdResolveTexture"

// Modifiers
INDIRECT = NriBit(20), // Invoked by "Indirect" command (used in addition to other bits)
INDIRECT = NriBit(21), // Invoked by "Indirect" command (used in addition to other bits)

// Umbrella stages
TESSELLATION_SHADERS = NriMember(StageBits, TESS_CONTROL_SHADER) |
Expand Down Expand Up @@ -1041,9 +1043,11 @@ NriBits(AccessBits, uint16_t, // Compatible "StageBits" (i
DEPTH_STENCIL_ATTACHMENT_READ = NriBit(8), // DEPTH_STENCIL_ATTACHMENT
COPY_SOURCE = NriBit(9), // COPY
COPY_DESTINATION = NriBit(10), // COPY
ACCELERATION_STRUCTURE_READ = NriBit(11), // COMPUTE_SHADER, RAY_TRACING_SHADERS, ACCELERATION_STRUCTURE
ACCELERATION_STRUCTURE_WRITE = NriBit(12), // COMPUTE_SHADER, RAY_TRACING_SHADERS, ACCELERATION_STRUCTURE
SHADING_RATE_ATTACHMENT = NriBit(13) // FRAGMENT_SHADER
RESOLVE_SOURCE = NriBit(11), // RESOLVE
RESOLVE_DESTINATION = NriBit(12), // RESOLVE
ACCELERATION_STRUCTURE_READ = NriBit(13), // COMPUTE_SHADER, RAY_TRACING_SHADERS, ACCELERATION_STRUCTURE
ACCELERATION_STRUCTURE_WRITE = NriBit(14), // COMPUTE_SHADER, RAY_TRACING_SHADERS, ACCELERATION_STRUCTURE
SHADING_RATE_ATTACHMENT = NriBit(15) // FRAGMENT_SHADER
);

NriEnum(Layout, uint8_t, // Compatible "AccessBits":
Expand All @@ -1055,6 +1059,8 @@ NriEnum(Layout, uint8_t, // Compatible "AccessBits":
SHADER_RESOURCE_STORAGE, // SHADER_RESOURCE_STORAGE
COPY_SOURCE, // COPY_SOURCE
COPY_DESTINATION, // COPY_DESTINATION
RESOLVE_SOURCE, // RESOLVE_SOURCE
RESOLVE_DESTINATION, // RESOLVE_DESTINATION
PRESENT, // UNKNOWN
SHADING_RATE_ATTACHMENT // SHADING_RATE_ATTACHMENT
);
Expand Down Expand Up @@ -1474,6 +1480,7 @@ NriStruct(DeviceDesc) {
uint32_t isDynamicDepthBiasSupported : 1;
uint32_t isAdditionalShadingRatesSupported : 1;
uint32_t isViewportOriginBottomLeftSupported : 1;
uint32_t isRegionResolveSupported : 1;

// Shader features
uint32_t isShaderNativeI16Supported : 1;
Expand Down
1 change: 1 addition & 0 deletions Source/D3D11/CommandBufferD3D11.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ struct CommandBufferD3D11 final : public CommandBufferHelper {
void DrawIndexedIndirect(const Buffer& buffer, uint64_t offset, uint32_t drawNum, uint32_t stride, const Buffer* countBuffer, uint64_t countBufferOffset);
void CopyBuffer(Buffer& dstBuffer, uint64_t dstOffset, const Buffer& srcBuffer, uint64_t srcOffset, uint64_t size);
void CopyTexture(Texture& dstTexture, const TextureRegionDesc* dstRegionDesc, const Texture& srcTexture, const TextureRegionDesc* srcRegionDesc);
void ResolveTexture(Texture& dstTexture, const TextureRegionDesc* dstRegionDesc, const Texture& srcTexture, const TextureRegionDesc* srcRegionDesc);
void UploadBufferToTexture(Texture& dstTexture, const TextureRegionDesc& dstRegionDesc, const Buffer& srcBuffer, const TextureDataLayoutDesc& srcDataLayoutDesc);
void ReadbackTextureToBuffer(Buffer& dstBuffer, const TextureDataLayoutDesc& dstDataLayoutDesc, const Texture& srcTexture, const TextureRegionDesc& srcRegionDesc);
void Dispatch(const DispatchDesc& dispatchDesc);
Expand Down
63 changes: 49 additions & 14 deletions Source/D3D11/CommandBufferD3D11.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -375,17 +375,17 @@ NRI_INLINE void CommandBufferD3D11::DrawIndexedIndirect(const Buffer& buffer, ui
}

NRI_INLINE void CommandBufferD3D11::CopyBuffer(Buffer& dstBuffer, uint64_t dstOffset, const Buffer& srcBuffer, uint64_t srcOffset, uint64_t size) {
BufferD3D11& dst = (BufferD3D11&)dstBuffer;
BufferD3D11& src = (BufferD3D11&)srcBuffer;
const BufferD3D11& dst = (BufferD3D11&)dstBuffer;
const BufferD3D11& src = (BufferD3D11&)srcBuffer;

if (size == WHOLE_SIZE)
size = src.GetDesc().size;

bool isEntireResource = (srcOffset == 0 && dstOffset == 0);
isEntireResource &= src.GetDesc().size == size;
isEntireResource &= dst.GetDesc().size == size;
bool isWholeResource = (srcOffset == 0 && dstOffset == 0);
isWholeResource &= src.GetDesc().size == size;
isWholeResource &= dst.GetDesc().size == size;

if (isEntireResource)
if (isWholeResource)
m_DeferredContext->CopyResource(dst, src);
else {
D3D11_BOX box = {};
Expand All @@ -399,12 +399,19 @@ NRI_INLINE void CommandBufferD3D11::CopyBuffer(Buffer& dstBuffer, uint64_t dstOf
}

NRI_INLINE void CommandBufferD3D11::CopyTexture(Texture& dstTexture, const TextureRegionDesc* dstRegionDesc, const Texture& srcTexture, const TextureRegionDesc* srcRegionDesc) {
TextureD3D11& dst = (TextureD3D11&)dstTexture;
TextureD3D11& src = (TextureD3D11&)srcTexture;
const TextureD3D11& dst = (TextureD3D11&)dstTexture;
const TextureD3D11& src = (TextureD3D11&)srcTexture;

if ((!dstRegionDesc || !srcRegionDesc) || (dstRegionDesc->mipOffset == NULL_TEXTURE_REGION_DESC && srcRegionDesc->mipOffset == NULL_TEXTURE_REGION_DESC))
bool isWholeResource = (!dstRegionDesc && !srcRegionDesc) || (dstRegionDesc->mipOffset == NULL_TEXTURE_REGION_DESC && srcRegionDesc->mipOffset == NULL_TEXTURE_REGION_DESC);
if (isWholeResource)
m_DeferredContext->CopyResource(dst, src);
else {
TextureRegionDesc wholeResource = {};
if (!srcRegionDesc || srcRegionDesc->mipOffset == NULL_TEXTURE_REGION_DESC)
srcRegionDesc = &wholeResource;
if (!dstRegionDesc || dstRegionDesc->mipOffset == NULL_TEXTURE_REGION_DESC)
dstRegionDesc = &wholeResource;

D3D11_BOX srcBox = {};
srcBox.left = srcRegionDesc->x;
srcBox.top = srcRegionDesc->y;
Expand All @@ -416,16 +423,44 @@ NRI_INLINE void CommandBufferD3D11::CopyTexture(Texture& dstTexture, const Textu
srcBox.bottom += srcBox.top;
srcBox.back += srcBox.front;

uint32_t dstSubresource = dst.GetSubresourceIndex(*dstRegionDesc);
uint32_t srcSubresource = src.GetSubresourceIndex(*srcRegionDesc);
uint32_t dstSubresource = dst.GetSubresourceIndex(dstRegionDesc->layerOffset, dstRegionDesc->mipOffset);
uint32_t srcSubresource = src.GetSubresourceIndex(srcRegionDesc->layerOffset, srcRegionDesc->mipOffset);

m_DeferredContext->CopySubresourceRegion(dst, dstSubresource, dstRegionDesc->x, dstRegionDesc->y, dstRegionDesc->z, src, srcSubresource, &srcBox);
}
}

NRI_INLINE void CommandBufferD3D11::ResolveTexture(Texture& dstTexture, const TextureRegionDesc* dstRegionDesc, const Texture& srcTexture, const TextureRegionDesc* srcRegionDesc) {
const TextureD3D11& dst = (TextureD3D11&)dstTexture;
const TextureD3D11& src = (TextureD3D11&)srcTexture;
const TextureDesc& dstDesc = dst.GetDesc();
const DxgiFormat& dstFormat = GetDxgiFormat(dstDesc.format);

bool isWholeResource = (!dstRegionDesc && !srcRegionDesc) || (dstRegionDesc->mipOffset == NULL_TEXTURE_REGION_DESC && srcRegionDesc->mipOffset == NULL_TEXTURE_REGION_DESC);
if (isWholeResource) {
for (Dim_t layer = 0; layer < dstDesc.layerNum; layer++) {
for (Mip_t mip = 0; mip < dstDesc.mipNum; mip++) {
uint32_t subresource = dst.GetSubresourceIndex(layer, mip);
m_DeferredContext->ResolveSubresource(dst, subresource, src, subresource, dstFormat.typed);
}
}
} else {
TextureRegionDesc wholeResource = {};
if (!srcRegionDesc || srcRegionDesc->mipOffset == NULL_TEXTURE_REGION_DESC)
srcRegionDesc = &wholeResource;
if (!dstRegionDesc || dstRegionDesc->mipOffset == NULL_TEXTURE_REGION_DESC)
dstRegionDesc = &wholeResource;

uint32_t dstSubresource = dst.GetSubresourceIndex(dstRegionDesc->layerOffset, dstRegionDesc->mipOffset);
uint32_t srcSubresource = src.GetSubresourceIndex(srcRegionDesc->layerOffset, srcRegionDesc->mipOffset);

m_DeferredContext->ResolveSubresource(dst, dstSubresource, src, srcSubresource, dstFormat.typed);
}
}

NRI_INLINE void CommandBufferD3D11::UploadBufferToTexture(Texture& dstTexture, const TextureRegionDesc& dstRegionDesc, const Buffer& srcBuffer, const TextureDataLayoutDesc& srcDataLayoutDesc) {
BufferD3D11& src = (BufferD3D11&)srcBuffer;
TextureD3D11& dst = (TextureD3D11&)dstTexture;
const TextureD3D11& dst = (TextureD3D11&)dstTexture;

D3D11_BOX dstBox = {};
dstBox.left = dstRegionDesc.x;
Expand All @@ -438,7 +473,7 @@ NRI_INLINE void CommandBufferD3D11::UploadBufferToTexture(Texture& dstTexture, c
dstBox.bottom += dstBox.top;
dstBox.back += dstBox.front;

uint32_t dstSubresource = dst.GetSubresourceIndex(dstRegionDesc);
uint32_t dstSubresource = dst.GetSubresourceIndex(dstRegionDesc.layerOffset, dstRegionDesc.mipOffset);

uint8_t* data = (uint8_t*)src.Map(srcDataLayoutDesc.offset);
m_DeferredContext->UpdateSubresource(dst, dstSubresource, &dstBox, data, srcDataLayoutDesc.rowPitch, srcDataLayoutDesc.slicePitch);
Expand All @@ -449,7 +484,7 @@ NRI_INLINE void CommandBufferD3D11::ReadbackTextureToBuffer(Buffer& dstBuffer, c
CHECK(dstDataLayoutDesc.offset == 0, "D3D11 implementation currently supports copying a texture region to a buffer only with offset = 0!");

BufferD3D11& dst = (BufferD3D11&)dstBuffer;
TextureD3D11& src = (TextureD3D11&)srcTexture;
const TextureD3D11& src = (TextureD3D11&)srcTexture;

TextureD3D11& dstTemp = dst.RecreateReadbackTexture(src, srcRegionDesc, dstDataLayoutDesc);

Expand Down
1 change: 1 addition & 0 deletions Source/D3D11/CommandBufferEmuD3D11.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ struct CommandBufferEmuD3D11 final : public CommandBufferHelper {
void DrawIndexedIndirect(const Buffer& buffer, uint64_t offset, uint32_t drawNum, uint32_t stride, const Buffer* countBuffer, uint64_t countBufferOffset);
void CopyBuffer(Buffer& dstBuffer, uint64_t dstOffset, const Buffer& srcBuffer, uint64_t srcOffset, uint64_t size);
void CopyTexture(Texture& dstTexture, const TextureRegionDesc* dstRegionDesc, const Texture& srcTexture, const TextureRegionDesc* srcRegionDesc);
void ResolveTexture(Texture& dstTexture, const TextureRegionDesc* dstRegionDesc, const Texture& srcTexture, const TextureRegionDesc* srcRegionDesc);
void UploadBufferToTexture(Texture& dstTexture, const TextureRegionDesc& dstRegionDesc, const Buffer& srcBuffer, const TextureDataLayoutDesc& srcDataLayoutDesc);
void ReadbackTextureToBuffer(Buffer& dstBuffer, const TextureDataLayoutDesc& dstDataLayoutDesc, const Texture& srcTexture, const TextureRegionDesc& srcRegionDesc);
void Dispatch(const DispatchDesc& dispatchDesc);
Expand Down
40 changes: 36 additions & 4 deletions Source/D3D11/CommandBufferEmuD3D11.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ enum OpCode : uint32_t {
DRAW_INDEXED_INDIRECT,
COPY_BUFFER,
COPY_TEXTURE,
RESOLVE_TEXTURE,
UPLOAD_BUFFER_TO_TEXTURE,
READBACK_TEXTURE_TO_BUFFER,
DISPATCH,
Expand Down Expand Up @@ -351,6 +352,21 @@ void CommandBufferEmuD3D11::Submit() {

commandBuffer.CopyTexture(*dstTexture, &dstRegion, *srcTexture, &srcRegion);
} break;
case RESOLVE_TEXTURE: {
Texture* dstTexture;
Read(m_PushBuffer, i, dstTexture);

TextureRegionDesc dstRegion = {};
Read(m_PushBuffer, i, dstRegion);

Texture* srcTexture;
Read(m_PushBuffer, i, srcTexture);

TextureRegionDesc srcRegion = {};
Read(m_PushBuffer, i, srcRegion);

commandBuffer.ResolveTexture(*dstTexture, &dstRegion, *srcTexture, &srcRegion);
} break;
case UPLOAD_BUFFER_TO_TEXTURE: {
Texture* dstTexture;
Read(m_PushBuffer, i, dstTexture);
Expand Down Expand Up @@ -613,13 +629,13 @@ NRI_INLINE void CommandBufferEmuD3D11::CopyBuffer(Buffer& dstBuffer, uint64_t ds
}

NRI_INLINE void CommandBufferEmuD3D11::CopyTexture(Texture& dstTexture, const TextureRegionDesc* dstRegionDesc, const Texture& srcTexture, const TextureRegionDesc* srcRegionDesc) {
TextureRegionDesc fullResource = {};
fullResource.mipOffset = NULL_TEXTURE_REGION_DESC;
TextureRegionDesc wholeResource = {};
wholeResource.mipOffset = NULL_TEXTURE_REGION_DESC;

if (!dstRegionDesc)
dstRegionDesc = &fullResource;
dstRegionDesc = &wholeResource;
if (!srcRegionDesc)
srcRegionDesc = &fullResource;
srcRegionDesc = &wholeResource;

Push(m_PushBuffer, COPY_TEXTURE);
Push(m_PushBuffer, &dstTexture);
Expand All @@ -628,6 +644,22 @@ NRI_INLINE void CommandBufferEmuD3D11::CopyTexture(Texture& dstTexture, const Te
Push(m_PushBuffer, *srcRegionDesc);
}

NRI_INLINE void CommandBufferEmuD3D11::ResolveTexture(Texture& dstTexture, const TextureRegionDesc* dstRegionDesc, const Texture& srcTexture, const TextureRegionDesc* srcRegionDesc) {
TextureRegionDesc wholeResource = {};
wholeResource.mipOffset = NULL_TEXTURE_REGION_DESC;

if (!dstRegionDesc)
dstRegionDesc = &wholeResource;
if (!srcRegionDesc)
srcRegionDesc = &wholeResource;

Push(m_PushBuffer, RESOLVE_TEXTURE);
Push(m_PushBuffer, &dstTexture);
Push(m_PushBuffer, *dstRegionDesc);
Push(m_PushBuffer, &srcTexture);
Push(m_PushBuffer, *srcRegionDesc);
}

NRI_INLINE void CommandBufferEmuD3D11::UploadBufferToTexture(
Texture& dstTexture, const TextureRegionDesc& dstRegionDesc, const Buffer& srcBuffer, const TextureDataLayoutDesc& srcDataLayoutDesc) {
Push(m_PushBuffer, UPLOAD_BUFFER_TO_TEXTURE);
Expand Down
13 changes: 11 additions & 2 deletions Source/D3D11/ImplD3D11.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -439,6 +439,10 @@ static void NRI_CALL CmdCopyTexture(CommandBuffer& commandBuffer, Texture& dstTe
((CommandBufferD3D11&)commandBuffer).CopyTexture(dstTexture, dstRegionDesc, srcTexture, srcRegionDesc);
}

static void NRI_CALL CmdResolveTexture(CommandBuffer& commandBuffer, Texture& dstTexture, const TextureRegionDesc* dstRegionDesc, const Texture& srcTexture, const TextureRegionDesc* srcRegionDesc) {
((CommandBufferD3D11&)commandBuffer).ResolveTexture(dstTexture, dstRegionDesc, srcTexture, srcRegionDesc);
}

static void NRI_CALL CmdUploadBufferToTexture(CommandBuffer& commandBuffer, Texture& dstTexture, const TextureRegionDesc& dstRegionDesc, const Buffer& srcBuffer, const TextureDataLayoutDesc& srcDataLayoutDesc) {
((CommandBufferD3D11&)commandBuffer).UploadBufferToTexture(dstTexture, dstRegionDesc, srcBuffer, srcDataLayoutDesc);
}
Expand Down Expand Up @@ -605,11 +609,14 @@ static void NRI_CALL EmuCmdCopyBuffer(CommandBuffer& commandBuffer, Buffer& dstB
((CommandBufferEmuD3D11&)commandBuffer).CopyBuffer(dstBuffer, dstOffset, srcBuffer, srcOffset, size);
}

static void NRI_CALL EmuCmdCopyTexture(
CommandBuffer& commandBuffer, Texture& dstTexture, const TextureRegionDesc* dstRegionDesc, const Texture& srcTexture, const TextureRegionDesc* srcRegionDesc) {
static void NRI_CALL EmuCmdCopyTexture(CommandBuffer& commandBuffer, Texture& dstTexture, const TextureRegionDesc* dstRegionDesc, const Texture& srcTexture, const TextureRegionDesc* srcRegionDesc) {
((CommandBufferEmuD3D11&)commandBuffer).CopyTexture(dstTexture, dstRegionDesc, srcTexture, srcRegionDesc);
}

static void NRI_CALL EmuCmdResolveTexture(CommandBuffer& commandBuffer, Texture& dstTexture, const TextureRegionDesc* dstRegionDesc, const Texture& srcTexture, const TextureRegionDesc* srcRegionDesc) {
((CommandBufferEmuD3D11&)commandBuffer).ResolveTexture(dstTexture, dstRegionDesc, srcTexture, srcRegionDesc);
}

static void NRI_CALL EmuCmdUploadBufferToTexture(CommandBuffer& commandBuffer, Texture& dstTexture, const TextureRegionDesc& dstRegionDesc, const Buffer& srcBuffer, const TextureDataLayoutDesc& srcDataLayoutDesc) {
((CommandBufferEmuD3D11&)commandBuffer).UploadBufferToTexture(dstTexture, dstRegionDesc, srcBuffer, srcDataLayoutDesc);
}
Expand Down Expand Up @@ -814,6 +821,7 @@ Result DeviceD3D11::FillFunctionTable(CoreInterface& table) const {
table.CmdReadbackTextureToBuffer = ::EmuCmdReadbackTextureToBuffer;
table.CmdClearStorageBuffer = ::EmuCmdClearStorageBuffer;
table.CmdClearStorageTexture = ::EmuCmdClearStorageTexture;
table.CmdResolveTexture = ::EmuCmdResolveTexture;
table.CmdResetQueries = ::EmuCmdResetQueries;
table.CmdBeginQuery = ::EmuCmdBeginQuery;
table.CmdEndQuery = ::EmuCmdEndQuery;
Expand Down Expand Up @@ -857,6 +865,7 @@ Result DeviceD3D11::FillFunctionTable(CoreInterface& table) const {
table.CmdReadbackTextureToBuffer = ::CmdReadbackTextureToBuffer;
table.CmdClearStorageBuffer = ::CmdClearStorageBuffer;
table.CmdClearStorageTexture = ::CmdClearStorageTexture;
table.CmdResolveTexture = ::CmdResolveTexture;
table.CmdResetQueries = ::CmdResetQueries;
table.CmdBeginQuery = ::CmdBeginQuery;
table.CmdEndQuery = ::CmdEndQuery;
Expand Down
Loading

0 comments on commit 0d825c0

Please sign in to comment.