misc d3d11 fixes
continuous-integration/drone/push Build is failing Details

d3d11
cosmonaut 2024-03-05 15:45:41 -08:00
parent 5ed41a7de2
commit 3c74ddf8fa
1 changed files with 54 additions and 57 deletions

View File

@ -350,9 +350,10 @@ static D3D11_FILTER RefreshToD3D11_Filter(Refresh_SamplerStateCreateInfo *create
typedef struct D3D11TextureSubresource typedef struct D3D11TextureSubresource
{ {
ID3D11View *targetView; /* can be NULL if not a target */ ID3D11RenderTargetView *colorTargetView; /* NULL if not a color target */
ID3D11UnorderedAccessView *uav; /* can be NULL if not used in compute */ ID3D11DepthStencilView *depthStencilTargetView; /* NULL if not a depth stencil target */
ID3D11Resource *msaaHandle; /* can be NULL if not using MSAA */ ID3D11UnorderedAccessView *uav; /* NULL if not used in compute */
ID3D11Resource *msaaHandle; /* NULL if not using MSAA */
uint32_t level; uint32_t level;
uint32_t layer; uint32_t layer;
} D3D11TextureSubresource; } D3D11TextureSubresource;
@ -421,7 +422,7 @@ typedef struct D3D11GraphicsPipeline
typedef struct D3D11ComputePipeline typedef struct D3D11ComputePipeline
{ {
ID3D11ComputeShader *computeShader; ID3D11ComputeShader *computeShader;
uint64_t computeUniformBlockSize; uint32_t computeUniformBlockSize;
uint32_t numTextures; uint32_t numTextures;
uint32_t numBuffers; uint32_t numBuffers;
} D3D11ComputePipeline; } D3D11ComputePipeline;
@ -770,8 +771,8 @@ static void D3D11_DrawInstancedPrimitives(
uint32_t instanceCount uint32_t instanceCount
) { ) {
D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*) commandBuffer; D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*) commandBuffer;
uint32_t vertexOffsetInConstants = d3d11CommandBuffer->vertexUniformBuffer->drawOffset / 16; uint32_t vertexOffsetInConstants = d3d11CommandBuffer->vertexUniformBuffer != NULL ? d3d11CommandBuffer->vertexUniformBuffer->drawOffset / 16 : 0;
uint32_t fragmentOffsetInConstants = d3d11CommandBuffer->fragmentUniformBuffer->drawOffset / 16; uint32_t fragmentOffsetInConstants = d3d11CommandBuffer->fragmentUniformBuffer != NULL ? d3d11CommandBuffer->fragmentUniformBuffer->drawOffset / 16 : 0;
uint32_t vertexBlockSizeInConstants = d3d11CommandBuffer->graphicsPipeline->vertexUniformBlockSize / 16; uint32_t vertexBlockSizeInConstants = d3d11CommandBuffer->graphicsPipeline->vertexUniformBlockSize / 16;
uint32_t fragmentBlockSizeInConstants = d3d11CommandBuffer->graphicsPipeline->fragmentUniformBlockSize / 16; uint32_t fragmentBlockSizeInConstants = d3d11CommandBuffer->graphicsPipeline->fragmentUniformBlockSize / 16;
@ -833,8 +834,8 @@ static void D3D11_DrawPrimitives(
uint32_t primitiveCount uint32_t primitiveCount
) { ) {
D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*) commandBuffer; D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*) commandBuffer;
uint32_t vertexOffsetInConstants = d3d11CommandBuffer->vertexUniformBuffer->drawOffset / 16; uint32_t vertexOffsetInConstants = d3d11CommandBuffer->vertexUniformBuffer != NULL ? d3d11CommandBuffer->vertexUniformBuffer->drawOffset / 16 : 0;
uint32_t fragmentOffsetInConstants = d3d11CommandBuffer->fragmentUniformBuffer->drawOffset / 16; uint32_t fragmentOffsetInConstants = d3d11CommandBuffer->fragmentUniformBuffer != NULL ? d3d11CommandBuffer->fragmentUniformBuffer->drawOffset / 16 : 0;
uint32_t vertexBlockSizeInConstants = d3d11CommandBuffer->graphicsPipeline->vertexUniformBlockSize / 16; uint32_t vertexBlockSizeInConstants = d3d11CommandBuffer->graphicsPipeline->vertexUniformBlockSize / 16;
uint32_t fragmentBlockSizeInConstants = d3d11CommandBuffer->graphicsPipeline->fragmentUniformBlockSize / 16; uint32_t fragmentBlockSizeInConstants = d3d11CommandBuffer->graphicsPipeline->fragmentUniformBlockSize / 16;
@ -879,8 +880,8 @@ static void D3D11_DrawPrimitivesIndirect(
) { ) {
D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*) commandBuffer; D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*) commandBuffer;
D3D11Buffer *d3d11Buffer = (D3D11Buffer*) gpuBuffer; D3D11Buffer *d3d11Buffer = (D3D11Buffer*) gpuBuffer;
uint32_t vertexOffsetInConstants = d3d11CommandBuffer->vertexUniformBuffer->drawOffset / 16; uint32_t vertexOffsetInConstants = d3d11CommandBuffer->vertexUniformBuffer != NULL ? d3d11CommandBuffer->vertexUniformBuffer->drawOffset / 16 : 0;
uint32_t fragmentOffsetInConstants = d3d11CommandBuffer->fragmentUniformBuffer->drawOffset / 16; uint32_t fragmentOffsetInConstants = d3d11CommandBuffer->fragmentUniformBuffer != NULL ? d3d11CommandBuffer->fragmentUniformBuffer->drawOffset / 16 : 0;
uint32_t vertexBlockSizeInConstants = d3d11CommandBuffer->graphicsPipeline->vertexUniformBlockSize / 16; uint32_t vertexBlockSizeInConstants = d3d11CommandBuffer->graphicsPipeline->vertexUniformBlockSize / 16;
uint32_t fragmentBlockSizeInConstants = d3d11CommandBuffer->graphicsPipeline->fragmentUniformBlockSize / 16; uint32_t fragmentBlockSizeInConstants = d3d11CommandBuffer->graphicsPipeline->fragmentUniformBlockSize / 16;
@ -1189,7 +1190,7 @@ static Refresh_ComputePipeline* D3D11_CreateComputePipeline(
pipeline->numBuffers = computeShaderInfo->bufferBindingCount; pipeline->numBuffers = computeShaderInfo->bufferBindingCount;
pipeline->computeShader = (ID3D11ComputeShader*) shaderModule->shader; pipeline->computeShader = (ID3D11ComputeShader*) shaderModule->shader;
pipeline->computeUniformBlockSize = D3D11_INTERNAL_NextHighestAlignment( pipeline->computeUniformBlockSize = D3D11_INTERNAL_NextHighestAlignment(
(uint32_t) computeShaderInfo->uniformBufferSize, computeShaderInfo->uniformBufferSize,
256 256
); );
@ -1627,6 +1628,10 @@ static Refresh_Texture* D3D11_CreateTexture(
d3d11Texture->levelCount d3d11Texture->levelCount
); );
d3d11Texture->subresources[subresourceIndex].colorTargetView = NULL;
d3d11Texture->subresources[subresourceIndex].depthStencilTargetView = NULL;
d3d11Texture->subresources[subresourceIndex].uav = NULL;
d3d11Texture->subresources[subresourceIndex].msaaHandle = NULL;
d3d11Texture->subresources[subresourceIndex].layer = layerIndex; d3d11Texture->subresources[subresourceIndex].layer = layerIndex;
d3d11Texture->subresources[subresourceIndex].level = levelIndex; d3d11Texture->subresources[subresourceIndex].level = levelIndex;
@ -1648,10 +1653,6 @@ static Refresh_Texture* D3D11_CreateTexture(
); );
ERROR_CHECK_RETURN("Could not create MSAA texture!", NULL); ERROR_CHECK_RETURN("Could not create MSAA texture!", NULL);
} }
else
{
d3d11Texture->subresources[subresourceIndex].msaaHandle = NULL;
}
if (d3d11Texture->isRenderTarget) if (d3d11Texture->isRenderTarget)
{ {
@ -1659,7 +1660,7 @@ static Refresh_Texture* D3D11_CreateTexture(
{ {
D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc; D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
dsvDesc.Format = format; dsvDesc.Format = RefreshToD3D11_TextureFormat[d3d11Texture->format];
dsvDesc.Flags = 0; dsvDesc.Flags = 0;
if (isMultisample) if (isMultisample)
@ -1676,7 +1677,7 @@ static Refresh_Texture* D3D11_CreateTexture(
renderer->device, renderer->device,
isMultisample ? d3d11Texture->subresources[subresourceIndex].msaaHandle : d3d11Texture->handle, isMultisample ? d3d11Texture->subresources[subresourceIndex].msaaHandle : d3d11Texture->handle,
&dsvDesc, &dsvDesc,
&d3d11Texture->subresources[subresourceIndex].targetView &d3d11Texture->subresources[subresourceIndex].depthStencilTargetView
); );
ERROR_CHECK_RETURN("Could not create DSV!", NULL); ERROR_CHECK_RETURN("Could not create DSV!", NULL);
} }
@ -1708,15 +1709,11 @@ static Refresh_Texture* D3D11_CreateTexture(
renderer->device, renderer->device,
d3d11Texture->handle, d3d11Texture->handle,
&rtvDesc, &rtvDesc,
&d3d11Texture->subresources[subresourceIndex].targetView &d3d11Texture->subresources[subresourceIndex].colorTargetView
); );
ERROR_CHECK_RETURN("Could not create RTV!", NULL); ERROR_CHECK_RETURN("Could not create RTV!", NULL);
} }
} }
else
{
d3d11Texture->subresources[subresourceIndex].targetView = NULL;
}
if (isCompute) if (isCompute)
{ {
@ -1751,10 +1748,6 @@ static Refresh_Texture* D3D11_CreateTexture(
); );
ERROR_CHECK_RETURN("Could not create UAV!", NULL); ERROR_CHECK_RETURN("Could not create UAV!", NULL);
} }
else
{
d3d11Texture->subresources[subresourceIndex].uav = NULL;
}
} }
} }
@ -1880,7 +1873,7 @@ static Refresh_TransferBuffer* D3D11_CreateTransferBuffer(
uint32_t sizeInBytes uint32_t sizeInBytes
) { ) {
D3D11Renderer *renderer = (D3D11Renderer*) driverData; D3D11Renderer *renderer = (D3D11Renderer*) driverData;
D3D11TransferBufferContainer *container = (D3D11TransferBufferContainer*) (sizeof(D3D11TransferBufferContainer)); D3D11TransferBufferContainer *container = (D3D11TransferBufferContainer*) SDL_malloc(sizeof(D3D11TransferBufferContainer));
D3D11TransferBuffer *transferBuffer = D3D11_INTERNAL_CreateTransferBuffer(renderer, sizeInBytes); D3D11TransferBuffer *transferBuffer = D3D11_INTERNAL_CreateTransferBuffer(renderer, sizeInBytes);
container->activeBuffer = transferBuffer; container->activeBuffer = transferBuffer;
@ -2046,18 +2039,16 @@ static void D3D11_UploadToBuffer(
D3D11TransferBufferContainer *container = (D3D11TransferBufferContainer*) transferBuffer; D3D11TransferBufferContainer *container = (D3D11TransferBufferContainer*) transferBuffer;
D3D11TransferBuffer *d3d11TransferBuffer = container->activeBuffer; D3D11TransferBuffer *d3d11TransferBuffer = container->activeBuffer;
D3D11Buffer *d3d11Buffer = (D3D11Buffer*) gpuBuffer; D3D11Buffer *d3d11Buffer = (D3D11Buffer*) gpuBuffer;
D3D11_BOX srcBox = { copyParams->srcOffset, 0, 0, copyParams->srcOffset + copyParams->size, 1, 1 }; D3D11_BOX dstBox = { copyParams->dstOffset, 0, 0, copyParams->dstOffset + copyParams->size, 1, 1 };
ID3D11DeviceContext1_CopySubresourceRegion1( ID3D11DeviceContext1_UpdateSubresource1(
d3d11CommandBuffer->context, d3d11CommandBuffer->context,
d3d11Buffer->handle, (ID3D11Resource*) d3d11Buffer->handle,
0, 0,
copyParams->dstOffset, &dstBox,
d3d11TransferBuffer->data + copyParams->srcOffset,
0, 0,
0, 0,
d3d11TransferBuffer->data,
0,
&srcBox,
writeOption == REFRESH_WRITEOPTIONS_SAFEDISCARD ? D3D11_COPY_DISCARD : 0 writeOption == REFRESH_WRITEOPTIONS_SAFEDISCARD ? D3D11_COPY_DISCARD : 0
); );
@ -2146,7 +2137,7 @@ static void D3D11_DownloadFromTexture(
ERROR_CHECK_RETURN("Could not map texture for reading",) ERROR_CHECK_RETURN("Could not map texture for reading",)
uint8_t* dataPtr = (uint8_t*) d3d11TransferBuffer->data + copyParams->bufferOffset; uint8_t* dataPtr = (uint8_t*) d3d11TransferBuffer->data + copyParams->bufferOffset;
for (int32_t row = textureRegion->y; row < copyParams->bufferImageHeight; row += 1) for (uint32_t row = textureRegion->y; row < copyParams->bufferImageHeight; row += 1)
{ {
SDL_memcpy( SDL_memcpy(
dataPtr, dataPtr,
@ -2213,12 +2204,12 @@ static void D3D11_DownloadFromBuffer(
ID3D11DeviceContext1_CopySubresourceRegion1( ID3D11DeviceContext1_CopySubresourceRegion1(
d3d11CommandBuffer->context, d3d11CommandBuffer->context,
stagingBuffer, (ID3D11Resource*) stagingBuffer,
0, 0,
0, 0,
0, 0,
0, 0,
d3d11Buffer->handle, (ID3D11Resource*) d3d11Buffer->handle,
0, 0,
&srcBox, &srcBox,
D3D11_COPY_NO_OVERWRITE D3D11_COPY_NO_OVERWRITE
@ -2313,12 +2304,12 @@ static void D3D11_CopyBufferToBuffer(
ID3D11DeviceContext1_CopySubresourceRegion1( ID3D11DeviceContext1_CopySubresourceRegion1(
d3d11CommandBuffer->context, d3d11CommandBuffer->context,
dstBuffer->handle, (ID3D11Resource*) dstBuffer->handle,
0, 0,
copyParams->dstOffset, copyParams->dstOffset,
0, 0,
0, 0,
srcBuffer->handle, (ID3D11Resource*) srcBuffer->handle,
0, 0,
&srcBox, &srcBox,
writeOption == REFRESH_WRITEOPTIONS_SAFEDISCARD ? D3D11_COPY_DISCARD : 0 writeOption == REFRESH_WRITEOPTIONS_SAFEDISCARD ? D3D11_COPY_DISCARD : 0
@ -2548,7 +2539,7 @@ static void D3D11_PushFragmentShaderUniforms(
d3d11CommandBuffer->fragmentUniformBuffer->offset += graphicsPipeline->fragmentUniformBlockSize; d3d11CommandBuffer->fragmentUniformBuffer->offset += graphicsPipeline->fragmentUniformBlockSize;
} }
static uint32_t D3D11_PushComputeShaderUniforms( static void D3D11_PushComputeShaderUniforms(
Refresh_Renderer *driverData, Refresh_Renderer *driverData,
Refresh_CommandBuffer *commandBuffer, Refresh_CommandBuffer *commandBuffer,
void *data, void *data,
@ -2580,7 +2571,7 @@ static uint32_t D3D11_PushComputeShaderUniforms(
); );
d3d11CommandBuffer->computeUniformBuffer->offset += d3d11CommandBuffer->computeUniformBuffer->offset +=
(uint32_t) computePipeline->computeUniformBlockSize; /* API FIXME: Is this cast safe? */ (uint32_t) computePipeline->computeUniformBlockSize;
} }
/* Samplers */ /* Samplers */
@ -2588,8 +2579,7 @@ static uint32_t D3D11_PushComputeShaderUniforms(
static void D3D11_BindVertexSamplers( static void D3D11_BindVertexSamplers(
Refresh_Renderer *driverData, Refresh_Renderer *driverData,
Refresh_CommandBuffer *commandBuffer, Refresh_CommandBuffer *commandBuffer,
Refresh_Texture **pTextures, Refresh_TextureSamplerBinding *pBindings
Refresh_Sampler **pSamplers
) { ) {
D3D11Renderer *renderer = (D3D11Renderer*) driverData; D3D11Renderer *renderer = (D3D11Renderer*) driverData;
D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*) commandBuffer; D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*) commandBuffer;
@ -2600,8 +2590,8 @@ static void D3D11_BindVertexSamplers(
for (int32_t i = 0; i < numVertexSamplers; i += 1) for (int32_t i = 0; i < numVertexSamplers; i += 1)
{ {
srvs[i] = ((D3D11Texture*) pTextures[i])->shaderView; srvs[i] = ((D3D11Texture*) pBindings[i].texture)->shaderView;
d3d11Samplers[i] = ((D3D11Sampler*) pSamplers[i])->handle; d3d11Samplers[i] = ((D3D11Sampler*) pBindings[i].sampler)->handle;
} }
ID3D11DeviceContext_VSSetShaderResources( ID3D11DeviceContext_VSSetShaderResources(
@ -2622,8 +2612,7 @@ static void D3D11_BindVertexSamplers(
static void D3D11_BindFragmentSamplers( static void D3D11_BindFragmentSamplers(
Refresh_Renderer *driverData, Refresh_Renderer *driverData,
Refresh_CommandBuffer *commandBuffer, Refresh_CommandBuffer *commandBuffer,
Refresh_Texture **pTextures, Refresh_TextureSamplerBinding *pBindings
Refresh_Sampler **pSamplers
) { ) {
D3D11Renderer *renderer = (D3D11Renderer*) driverData; D3D11Renderer *renderer = (D3D11Renderer*) driverData;
D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*) commandBuffer; D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*) commandBuffer;
@ -2634,8 +2623,8 @@ static void D3D11_BindFragmentSamplers(
for (int32_t i = 0; i < numFragmentSamplers; i += 1) for (int32_t i = 0; i < numFragmentSamplers; i += 1)
{ {
srvs[i] = ((D3D11Texture*) pTextures[i])->shaderView; srvs[i] = ((D3D11Texture*) pBindings[i].texture)->shaderView;
d3d11Samplers[i] = ((D3D11Sampler*) pSamplers[i])->handle; d3d11Samplers[i] = ((D3D11Sampler*) pBindings[i].sampler)->handle;
} }
ID3D11DeviceContext_PSSetShaderResources( ID3D11DeviceContext_PSSetShaderResources(
@ -2681,9 +2670,14 @@ static void D3D11_QueueDestroyTexture(
ID3D11Resource_Release(d3d11Texture->subresources[subresourceIndex].msaaHandle); ID3D11Resource_Release(d3d11Texture->subresources[subresourceIndex].msaaHandle);
} }
if (d3d11Texture->subresources[subresourceIndex].targetView != NULL) if (d3d11Texture->subresources[subresourceIndex].colorTargetView != NULL)
{ {
ID3D11RenderTargetView_Release(d3d11Texture->subresources[subresourceIndex].targetView); ID3D11RenderTargetView_Release(d3d11Texture->subresources[subresourceIndex].colorTargetView);
}
if (d3d11Texture->subresources[subresourceIndex].depthStencilTargetView != NULL)
{
ID3D11DepthStencilView_Release(d3d11Texture->subresources[subresourceIndex].depthStencilTargetView);
} }
if (d3d11Texture->subresources[subresourceIndex].uav != NULL) if (d3d11Texture->subresources[subresourceIndex].uav != NULL)
@ -2983,7 +2977,7 @@ static void D3D11_BeginRenderPass(
colorAttachmentInfos[i].textureSlice.layer, colorAttachmentInfos[i].textureSlice.layer,
texture->levelCount texture->levelCount
); );
rtvs[i] = texture->subresources[subresourceIndex].targetView; rtvs[i] = texture->subresources[subresourceIndex].colorTargetView;
if (texture->subresources[subresourceIndex].msaaHandle != NULL) if (texture->subresources[subresourceIndex].msaaHandle != NULL)
{ {
@ -3004,7 +2998,7 @@ static void D3D11_BeginRenderPass(
texture->levelCount texture->levelCount
); );
dsv = texture->subresources[subresourceIndex].targetView; dsv = texture->subresources[subresourceIndex].depthStencilTargetView;
} }
/* Actually set the RTs */ /* Actually set the RTs */
@ -3478,6 +3472,7 @@ static uint8_t D3D11_INTERNAL_InitializeSwapchainTexture(
return 0; return 0;
} }
uavDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
uavDesc.ViewDimension = D3D11_UAV_DIMENSION_TEXTURE2D; uavDesc.ViewDimension = D3D11_UAV_DIMENSION_TEXTURE2D;
uavDesc.Texture2D.MipSlice = 0; uavDesc.Texture2D.MipSlice = 0;
@ -3499,8 +3494,9 @@ static uint8_t D3D11_INTERNAL_InitializeSwapchainTexture(
pTexture->handle = NULL; /* The texture does not "own" the swapchain texture, and it can change dynamically. */ pTexture->handle = NULL; /* The texture does not "own" the swapchain texture, and it can change dynamically. */
pTexture->shaderView = NULL; pTexture->shaderView = NULL;
pTexture->subresources = SDL_malloc(sizeof(D3D11TextureSubresource)); pTexture->subresources = SDL_malloc(sizeof(D3D11TextureSubresource));
pTexture->subresources[0].targetView = rtv; pTexture->subresources[0].colorTargetView = rtv;
pTexture->subresources[0].uav = uav; pTexture->subresources[0].uav = uav;
pTexture->subresources[0].depthStencilTargetView = NULL;
pTexture->subresources[0].msaaHandle = NULL; pTexture->subresources[0].msaaHandle = NULL;
pTexture->subresources[0].layer = 0; pTexture->subresources[0].layer = 0;
pTexture->subresources[0].level = 0; pTexture->subresources[0].level = 0;
@ -3545,6 +3541,7 @@ static uint8_t D3D11_INTERNAL_CreateSwapchain(
swapchainDesc.BufferDesc.Height = 0; swapchainDesc.BufferDesc.Height = 0;
swapchainDesc.BufferDesc.RefreshRate.Numerator = 0; swapchainDesc.BufferDesc.RefreshRate.Numerator = 0;
swapchainDesc.BufferDesc.RefreshRate.Denominator = 0; swapchainDesc.BufferDesc.RefreshRate.Denominator = 0;
/* TODO: support different swapchain formats? */
swapchainDesc.BufferDesc.Format = RefreshToD3D11_TextureFormat[REFRESH_TEXTUREFORMAT_R8G8B8A8]; swapchainDesc.BufferDesc.Format = RefreshToD3D11_TextureFormat[REFRESH_TEXTUREFORMAT_R8G8B8A8];
swapchainDesc.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; swapchainDesc.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
swapchainDesc.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; swapchainDesc.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
@ -3552,7 +3549,7 @@ static uint8_t D3D11_INTERNAL_CreateSwapchain(
/* Initialize the rest of the swapchain descriptor */ /* Initialize the rest of the swapchain descriptor */
swapchainDesc.SampleDesc.Count = 1; swapchainDesc.SampleDesc.Count = 1;
swapchainDesc.SampleDesc.Quality = 0; swapchainDesc.SampleDesc.Quality = 0;
swapchainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; swapchainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_UNORDERED_ACCESS;
swapchainDesc.BufferCount = 2; swapchainDesc.BufferCount = 2;
swapchainDesc.OutputWindow = dxgiHandle; swapchainDesc.OutputWindow = dxgiHandle;
swapchainDesc.Windowed = 1; swapchainDesc.Windowed = 1;
@ -3644,7 +3641,7 @@ static uint8_t D3D11_INTERNAL_ResizeSwapchain(
int32_t height int32_t height
) { ) {
/* Release the old views */ /* Release the old views */
ID3D11RenderTargetView_Release(windowData->texture.subresources[0].targetView); ID3D11RenderTargetView_Release(windowData->texture.subresources[0].colorTargetView);
ID3D11UnorderedAccessView_Release(windowData->texture.subresources[0].uav); ID3D11UnorderedAccessView_Release(windowData->texture.subresources[0].uav);
SDL_free(windowData->texture.subresources); SDL_free(windowData->texture.subresources);
@ -3729,7 +3726,7 @@ static void D3D11_UnclaimWindow(
D3D11_Wait(driverData); D3D11_Wait(driverData);
ID3D11RenderTargetView_Release(windowData->texture.subresources[0].targetView); ID3D11RenderTargetView_Release(windowData->texture.subresources[0].colorTargetView);
ID3D11UnorderedAccessView_Release(windowData->texture.subresources[0].uav); ID3D11UnorderedAccessView_Release(windowData->texture.subresources[0].uav);
SDL_free(windowData->texture.subresources); SDL_free(windowData->texture.subresources);
IDXGISwapChain_Release(windowData->swapchain); IDXGISwapChain_Release(windowData->swapchain);