CreateTexture, SetTextureData, BindIndexBuffer, BindFragmentSamplers, QueueDestroyTexture, DrawIndexedPrimitives, DrawInstancedPrimitives
parent
4bdfc2293f
commit
e6402cbb14
|
@ -48,6 +48,46 @@ void Refresh_LogError(const char *fmt, ...);
|
|||
|
||||
/* Internal Helper Utilities */
|
||||
|
||||
static inline int32_t Texture_GetBlockSize(
|
||||
Refresh_TextureFormat format
|
||||
) {
|
||||
switch (format)
|
||||
{
|
||||
case REFRESH_TEXTUREFORMAT_BC1:
|
||||
case REFRESH_TEXTUREFORMAT_BC2:
|
||||
case REFRESH_TEXTUREFORMAT_BC3:
|
||||
case REFRESH_TEXTUREFORMAT_BC7:
|
||||
return 4;
|
||||
case REFRESH_TEXTUREFORMAT_R8:
|
||||
case REFRESH_TEXTUREFORMAT_R8_UINT:
|
||||
case REFRESH_TEXTUREFORMAT_R5G6B5:
|
||||
case REFRESH_TEXTUREFORMAT_B4G4R4A4:
|
||||
case REFRESH_TEXTUREFORMAT_A1R5G5B5:
|
||||
case REFRESH_TEXTUREFORMAT_R16_SFLOAT:
|
||||
case REFRESH_TEXTUREFORMAT_R8G8_SNORM:
|
||||
case REFRESH_TEXTUREFORMAT_R8G8_UINT:
|
||||
case REFRESH_TEXTUREFORMAT_R16_UINT:
|
||||
case REFRESH_TEXTUREFORMAT_R8G8B8A8:
|
||||
case REFRESH_TEXTUREFORMAT_R32_SFLOAT:
|
||||
case REFRESH_TEXTUREFORMAT_R16G16_SFLOAT:
|
||||
case REFRESH_TEXTUREFORMAT_R8G8B8A8_SNORM:
|
||||
case REFRESH_TEXTUREFORMAT_A2R10G10B10:
|
||||
case REFRESH_TEXTUREFORMAT_R8G8B8A8_UINT:
|
||||
case REFRESH_TEXTUREFORMAT_R16G16_UINT:
|
||||
case REFRESH_TEXTUREFORMAT_R16G16B16A16_SFLOAT:
|
||||
case REFRESH_TEXTUREFORMAT_R16G16B16A16:
|
||||
case REFRESH_TEXTUREFORMAT_R32G32_SFLOAT:
|
||||
case REFRESH_TEXTUREFORMAT_R16G16B16A16_UINT:
|
||||
case REFRESH_TEXTUREFORMAT_R32G32B32A32_SFLOAT:
|
||||
return 1;
|
||||
default:
|
||||
Refresh_LogError(
|
||||
"Unrecognized TextureFormat!"
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static inline uint32_t Texture_GetFormatSize(
|
||||
Refresh_TextureFormat format
|
||||
) {
|
||||
|
@ -87,7 +127,7 @@ static inline uint32_t Texture_GetFormatSize(
|
|||
return 16;
|
||||
default:
|
||||
Refresh_LogError(
|
||||
"Unrecognized SurfaceFormat!"
|
||||
"Unrecognized TextureFormat!"
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -153,6 +153,14 @@ static DXGI_FORMAT RefreshToD3D11_VertexFormat[] =
|
|||
DXGI_FORMAT_R16G16B16A16_FLOAT /* HALFVECTOR4 */
|
||||
};
|
||||
|
||||
static uint32_t RefreshToD3D11_SampleCount[] =
|
||||
{
|
||||
1, /* REFRESH_SAMPLECOUNT_1 */
|
||||
2, /* REFRESH_SAMPLECOUNT_2 */
|
||||
4, /* REFRESH_SAMPLECOUNT_4 */
|
||||
8 /* REFRESH_SAMPLECOUNT_8 */
|
||||
};
|
||||
|
||||
static DXGI_FORMAT RefreshToD3D11_IndexType[] =
|
||||
{
|
||||
DXGI_FORMAT_R16_UINT, /* 16BIT */
|
||||
|
@ -338,25 +346,15 @@ typedef struct D3D11Texture
|
|||
/* D3D Handles */
|
||||
ID3D11Resource *handle; /* ID3D11Texture2D* or ID3D11Texture3D* */
|
||||
ID3D11ShaderResourceView *shaderView;
|
||||
ID3D11View *targetView; /* ID3D11RenderTargetView* or ID3D11DepthStencilView* */
|
||||
|
||||
/* Basic Info */
|
||||
Refresh_TextureFormat format;
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
uint32_t depth;
|
||||
uint32_t levelCount;
|
||||
uint8_t isRenderTarget;
|
||||
|
||||
/* Dimensions*/
|
||||
#define REFRESH_D3D11_RENDERTARGET_2D 0
|
||||
#define REFRESH_D3D11_RENDERTARGET_3D 1
|
||||
#define REFRESH_D3D11_RENDERTARGET_CUBE 2
|
||||
uint8_t rtType;
|
||||
REFRESHNAMELESS union
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
ID3D11View *targetView; /* ID3D11RenderTargetView* or ID3D11DepthStencilView* */
|
||||
} twod;
|
||||
};
|
||||
uint8_t isCube;
|
||||
} D3D11Texture;
|
||||
|
||||
typedef struct D3D11SwapchainData
|
||||
|
@ -400,8 +398,10 @@ typedef struct D3D11GraphicsPipeline
|
|||
ID3D11VertexShader *vertexShader;
|
||||
ID3D11InputLayout *inputLayout;
|
||||
uint32_t *vertexStrides;
|
||||
uint32_t numVertexSamplers;
|
||||
|
||||
ID3D11PixelShader *fragmentShader;
|
||||
uint32_t numFragmentSamplers;
|
||||
} D3D11GraphicsPipeline;
|
||||
|
||||
typedef struct D3D11CommandBuffer
|
||||
|
@ -524,6 +524,16 @@ static void D3D11_INTERNAL_LogError(
|
|||
Refresh_LogError("%s! Error Code: %s (0x%08X)", msg, wszMsgBuff, res);
|
||||
}
|
||||
|
||||
/* Subresources */
|
||||
|
||||
static inline uint32_t D3D11_INTERNAL_CalcSubresource(
|
||||
uint32_t mipLevel,
|
||||
uint32_t arraySlice,
|
||||
uint32_t numLevels
|
||||
) {
|
||||
return mipLevel + (arraySlice * numLevels);
|
||||
}
|
||||
|
||||
/* Quit */
|
||||
|
||||
static void D3D11_DestroyDevice(
|
||||
|
@ -590,7 +600,18 @@ static void D3D11_DrawInstancedPrimitives(
|
|||
uint32_t vertexParamOffset,
|
||||
uint32_t fragmentParamOffset
|
||||
) {
|
||||
NOT_IMPLEMENTED
|
||||
D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*) commandBuffer;
|
||||
|
||||
ID3D11DeviceContext_DrawIndexedInstanced(
|
||||
d3d11CommandBuffer->context,
|
||||
PrimitiveVerts(d3d11CommandBuffer->graphicsPipeline->primitiveType, primitiveCount),
|
||||
instanceCount,
|
||||
startIndex,
|
||||
baseVertex,
|
||||
0
|
||||
);
|
||||
|
||||
/* FIXME: vertex/fragment param offsets */
|
||||
}
|
||||
|
||||
static void D3D11_DrawIndexedPrimitives(
|
||||
|
@ -602,7 +623,16 @@ static void D3D11_DrawIndexedPrimitives(
|
|||
uint32_t vertexParamOffset,
|
||||
uint32_t fragmentParamOffset
|
||||
) {
|
||||
NOT_IMPLEMENTED
|
||||
D3D11_DrawInstancedPrimitives(
|
||||
driverData,
|
||||
commandBuffer,
|
||||
baseVertex,
|
||||
startIndex,
|
||||
primitiveCount,
|
||||
1,
|
||||
vertexParamOffset,
|
||||
fragmentParamOffset
|
||||
);
|
||||
}
|
||||
|
||||
static void D3D11_DrawPrimitives(
|
||||
|
@ -969,6 +999,7 @@ static Refresh_GraphicsPipeline* D3D11_CreateGraphicsPipeline(
|
|||
ERROR_CHECK_RETURN("Could not create vertex shader", NULL);
|
||||
}
|
||||
pipeline->vertexShader = (ID3D11VertexShader*) vertShaderModule->shader;
|
||||
pipeline->numVertexSamplers = pipelineCreateInfo->vertexShaderInfo.samplerBindingCount;
|
||||
|
||||
/* Input Layout */
|
||||
|
||||
|
@ -1030,6 +1061,7 @@ static Refresh_GraphicsPipeline* D3D11_CreateGraphicsPipeline(
|
|||
ERROR_CHECK_RETURN("Could not create pixel shader", NULL);
|
||||
}
|
||||
pipeline->fragmentShader = (ID3D11PixelShader*) fragShaderModule->shader;
|
||||
pipeline->numFragmentSamplers = pipelineCreateInfo->fragmentShaderInfo.samplerBindingCount;
|
||||
|
||||
/* FIXME: Need to create uniform buffers for the shaders */
|
||||
|
||||
|
@ -1107,8 +1139,172 @@ static Refresh_Texture* D3D11_CreateTexture(
|
|||
Refresh_Renderer *driverData,
|
||||
Refresh_TextureCreateInfo *textureCreateInfo
|
||||
) {
|
||||
NOT_IMPLEMENTED
|
||||
return NULL;
|
||||
D3D11Renderer *renderer = (D3D11Renderer*) driverData;
|
||||
uint8_t isSampler, isCompute, isRenderTarget, isDepthStencil;
|
||||
ID3D11Resource *textureHandle;
|
||||
ID3D11ShaderResourceView *srv = NULL;
|
||||
ID3D11RenderTargetView *rtv = NULL;
|
||||
ID3D11DepthStencilView *dsv = NULL;
|
||||
D3D11Texture *d3d11Texture;
|
||||
HRESULT res;
|
||||
|
||||
isRenderTarget = textureCreateInfo->usageFlags & REFRESH_TEXTUREUSAGE_COLOR_TARGET_BIT;
|
||||
isDepthStencil = textureCreateInfo->usageFlags & REFRESH_TEXTUREUSAGE_DEPTH_STENCIL_TARGET_BIT;
|
||||
isSampler = textureCreateInfo->usageFlags & REFRESH_TEXTUREUSAGE_SAMPLER_BIT;
|
||||
isCompute = textureCreateInfo->usageFlags & REFRESH_TEXTUREUSAGE_COMPUTE_BIT;
|
||||
|
||||
if (textureCreateInfo->depth <= 1)
|
||||
{
|
||||
D3D11_TEXTURE2D_DESC desc2D;
|
||||
|
||||
desc2D.Width = textureCreateInfo->width;
|
||||
desc2D.Height = textureCreateInfo->height;
|
||||
|
||||
desc2D.BindFlags = 0;
|
||||
if (isSampler)
|
||||
{
|
||||
desc2D.BindFlags |= D3D11_BIND_SHADER_RESOURCE;
|
||||
}
|
||||
if (isCompute)
|
||||
{
|
||||
desc2D.BindFlags |= D3D11_BIND_UNORDERED_ACCESS;
|
||||
}
|
||||
if (isRenderTarget)
|
||||
{
|
||||
desc2D.BindFlags |= D3D11_BIND_RENDER_TARGET;
|
||||
}
|
||||
if (isDepthStencil)
|
||||
{
|
||||
desc2D.BindFlags |= D3D11_BIND_DEPTH_STENCIL;
|
||||
}
|
||||
|
||||
desc2D.ArraySize = textureCreateInfo->isCube ? 6 : 1;
|
||||
desc2D.CPUAccessFlags = 0;
|
||||
desc2D.Format = RefreshToD3D11_TextureFormat[textureCreateInfo->format];
|
||||
desc2D.MipLevels = textureCreateInfo->levelCount;
|
||||
desc2D.MiscFlags = (
|
||||
(textureCreateInfo->usageFlags & REFRESH_TEXTUREUSAGE_COLOR_TARGET_BIT) ?
|
||||
D3D11_RESOURCE_MISC_GENERATE_MIPS :
|
||||
0
|
||||
);
|
||||
desc2D.SampleDesc.Count = RefreshToD3D11_SampleCount[textureCreateInfo->sampleCount];
|
||||
desc2D.SampleDesc.Quality = 0;
|
||||
desc2D.Usage = D3D11_USAGE_DEFAULT;
|
||||
|
||||
res = ID3D11Device_CreateTexture2D(
|
||||
renderer->device,
|
||||
&desc2D,
|
||||
NULL,
|
||||
(ID3D11Texture2D**) &textureHandle
|
||||
);
|
||||
ERROR_CHECK_RETURN("Could not create Texture2D", NULL);
|
||||
|
||||
/* Create the SRV, if applicable */
|
||||
if (isSampler)
|
||||
{
|
||||
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
|
||||
srvDesc.Format = desc2D.Format;
|
||||
|
||||
if (textureCreateInfo->isCube)
|
||||
{
|
||||
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE;
|
||||
srvDesc.TextureCube.MipLevels = desc2D.MipLevels;
|
||||
srvDesc.TextureCube.MostDetailedMip = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
|
||||
srvDesc.Texture2D.MipLevels = desc2D.MipLevels;
|
||||
srvDesc.Texture2D.MostDetailedMip = 0;
|
||||
}
|
||||
|
||||
res = ID3D11Device_CreateShaderResourceView(
|
||||
renderer->device,
|
||||
textureHandle,
|
||||
&srvDesc,
|
||||
&srv
|
||||
);
|
||||
if (FAILED(res))
|
||||
{
|
||||
ID3D11Resource_Release(textureHandle);
|
||||
D3D11_INTERNAL_LogError(renderer->device, "Could not create SRV for 2D texture", res);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
D3D11_TEXTURE3D_DESC desc3D;
|
||||
|
||||
desc3D.Width = textureCreateInfo->width;
|
||||
desc3D.Height = textureCreateInfo->height;
|
||||
desc3D.Depth = textureCreateInfo->depth;
|
||||
|
||||
desc3D.BindFlags = 0;
|
||||
if (isSampler)
|
||||
{
|
||||
desc3D.BindFlags |= D3D11_BIND_SHADER_RESOURCE;
|
||||
}
|
||||
if (isCompute)
|
||||
{
|
||||
desc3D.BindFlags |= D3D11_BIND_UNORDERED_ACCESS;
|
||||
}
|
||||
|
||||
desc3D.CPUAccessFlags = 0;
|
||||
desc3D.Format = RefreshToD3D11_TextureFormat[textureCreateInfo->format];
|
||||
desc3D.MipLevels = textureCreateInfo->levelCount;
|
||||
desc3D.MiscFlags = 0;
|
||||
desc3D.Usage = D3D11_USAGE_DEFAULT;
|
||||
|
||||
res = ID3D11Device_CreateTexture3D(
|
||||
renderer->device,
|
||||
&desc3D,
|
||||
NULL,
|
||||
(ID3D11Texture3D**) &textureHandle
|
||||
);
|
||||
ERROR_CHECK_RETURN("Could not create Texture3D", NULL);
|
||||
|
||||
/* Create the SRV, if applicable */
|
||||
if (isSampler)
|
||||
{
|
||||
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
|
||||
|
||||
srvDesc.Format = desc3D.Format;
|
||||
srvDesc.ViewDimension = D3D10_SRV_DIMENSION_TEXTURE3D;
|
||||
srvDesc.Texture3D.MipLevels = desc3D.MipLevels;
|
||||
srvDesc.Texture3D.MostDetailedMip = 0;
|
||||
|
||||
if (FAILED(res))
|
||||
{
|
||||
ID3D11Resource_Release(textureHandle);
|
||||
D3D11_INTERNAL_LogError(renderer->device, "Could not create SRV for 3D texture", res);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Create the RTV or DSV, if applicable */
|
||||
if (isRenderTarget)
|
||||
{
|
||||
NOT_IMPLEMENTED
|
||||
}
|
||||
else if (isDepthStencil)
|
||||
{
|
||||
NOT_IMPLEMENTED
|
||||
}
|
||||
|
||||
d3d11Texture = (D3D11Texture*) SDL_malloc(sizeof(D3D11Texture));
|
||||
d3d11Texture->handle = textureHandle;
|
||||
d3d11Texture->format = textureCreateInfo->format;
|
||||
d3d11Texture->width = textureCreateInfo->width;
|
||||
d3d11Texture->height = textureCreateInfo->height;
|
||||
d3d11Texture->depth = textureCreateInfo->depth;
|
||||
d3d11Texture->levelCount = textureCreateInfo->levelCount;
|
||||
d3d11Texture->isCube = textureCreateInfo->isCube;
|
||||
d3d11Texture->targetView = isRenderTarget ? (ID3D11View*) rtv : (ID3D11View*) dsv;
|
||||
d3d11Texture->shaderView = srv;
|
||||
|
||||
return (Refresh_Texture*) d3d11Texture;
|
||||
}
|
||||
|
||||
static Refresh_Buffer* D3D11_CreateBuffer(
|
||||
|
@ -1167,7 +1363,41 @@ static void D3D11_SetTextureData(
|
|||
void *data,
|
||||
uint32_t dataLengthInBytes
|
||||
) {
|
||||
NOT_IMPLEMENTED
|
||||
D3D11Renderer *renderer = (D3D11Renderer*) driverData;
|
||||
D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*) commandBuffer;
|
||||
D3D11Texture *d3d11Texture = (D3D11Texture*) textureSlice->texture;
|
||||
|
||||
int32_t w = textureSlice->rectangle.w;
|
||||
int32_t h = textureSlice->rectangle.h;
|
||||
|
||||
int32_t blockSize = Texture_GetBlockSize(d3d11Texture->format);
|
||||
if (blockSize > 1)
|
||||
{
|
||||
w = (w + blockSize - 1) & ~(blockSize - 1);
|
||||
h = (h + blockSize - 1) & ~(blockSize - 1);
|
||||
}
|
||||
|
||||
D3D11_BOX dstBox;
|
||||
dstBox.left = textureSlice->rectangle.x;
|
||||
dstBox.top = textureSlice->rectangle.y;
|
||||
dstBox.front = textureSlice->depth;
|
||||
dstBox.right = textureSlice->rectangle.x + w;
|
||||
dstBox.bottom = textureSlice->rectangle.y + h;
|
||||
dstBox.back = textureSlice->depth + 1;
|
||||
|
||||
ID3D11DeviceContext_UpdateSubresource(
|
||||
d3d11CommandBuffer->context,
|
||||
d3d11Texture->handle,
|
||||
D3D11_INTERNAL_CalcSubresource(
|
||||
textureSlice->level,
|
||||
textureSlice->layer,
|
||||
d3d11Texture->levelCount
|
||||
),
|
||||
&dstBox,
|
||||
data,
|
||||
BytesPerRow(w, d3d11Texture->format),
|
||||
BytesPerImage(w, h, d3d11Texture->format)
|
||||
);
|
||||
}
|
||||
|
||||
static void D3D11_SetTextureDataYUV(
|
||||
|
@ -1292,7 +1522,32 @@ static void D3D11_BindFragmentSamplers(
|
|||
Refresh_Texture **pTextures,
|
||||
Refresh_Sampler **pSamplers
|
||||
) {
|
||||
NOT_IMPLEMENTED
|
||||
D3D11Renderer *renderer = (D3D11Renderer*) driverData;
|
||||
D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*) commandBuffer;
|
||||
ID3D11ShaderResourceView* srvs[MAX_TEXTURE_SAMPLERS];
|
||||
ID3D11SamplerState* d3d11Samplers[MAX_TEXTURE_SAMPLERS];
|
||||
|
||||
int32_t numFragmentSamplers = d3d11CommandBuffer->graphicsPipeline->numFragmentSamplers;
|
||||
|
||||
for (int32_t i = 0; i < numFragmentSamplers; i += 1)
|
||||
{
|
||||
srvs[i] = ((D3D11Texture*) pTextures[i])->shaderView;
|
||||
d3d11Samplers[i] = ((D3D11Sampler*) pSamplers[i])->handle;
|
||||
}
|
||||
|
||||
ID3D11DeviceContext_PSSetShaderResources(
|
||||
d3d11CommandBuffer->context,
|
||||
0,
|
||||
numFragmentSamplers,
|
||||
srvs
|
||||
);
|
||||
|
||||
ID3D11DeviceContext_PSSetSamplers(
|
||||
d3d11CommandBuffer->context,
|
||||
0,
|
||||
numFragmentSamplers,
|
||||
d3d11Samplers
|
||||
);
|
||||
}
|
||||
|
||||
/* Getters */
|
||||
|
@ -1312,7 +1567,9 @@ static void D3D11_QueueDestroyTexture(
|
|||
Refresh_Renderer *driverData,
|
||||
Refresh_Texture *texture
|
||||
) {
|
||||
NOT_IMPLEMENTED
|
||||
D3D11Texture *d3d11Texture = (D3D11Texture*) texture;
|
||||
ID3D11Resource_Release(d3d11Texture->handle);
|
||||
SDL_free(d3d11Texture);
|
||||
}
|
||||
|
||||
static void D3D11_QueueDestroySampler(
|
||||
|
@ -1502,13 +1759,14 @@ static void D3D11_BeginRenderPass(
|
|||
for (i = 0; i < colorAttachmentCount; i += 1)
|
||||
{
|
||||
/* FIXME: Cube RTs */
|
||||
d3d11CommandBuffer->rtViews[i] = (ID3D11RenderTargetView*) ((D3D11Texture*) colorAttachmentInfos[i].texture)->twod.targetView;
|
||||
|
||||
d3d11CommandBuffer->rtViews[i] = (ID3D11RenderTargetView*) ((D3D11Texture*) colorAttachmentInfos[i].texture)->targetView;
|
||||
}
|
||||
|
||||
/* Get the DSV for the depth stencil attachment, if applicable */
|
||||
if (depthStencilAttachmentInfo != NULL)
|
||||
{
|
||||
d3d11CommandBuffer->dsView = (ID3D11DepthStencilView*) ((D3D11Texture*) depthStencilAttachmentInfo->texture)->twod.targetView;
|
||||
d3d11CommandBuffer->dsView = (ID3D11DepthStencilView*) ((D3D11Texture*) depthStencilAttachmentInfo->texture)->targetView;
|
||||
}
|
||||
|
||||
/* Actually set the RTs */
|
||||
|
@ -1531,7 +1789,7 @@ static void D3D11_BeginRenderPass(
|
|||
|
||||
ID3D11DeviceContext_ClearRenderTargetView(
|
||||
d3d11CommandBuffer->context,
|
||||
(ID3D11RenderTargetView*) ((D3D11Texture*) colorAttachmentInfos[i].texture)->twod.targetView,
|
||||
(ID3D11RenderTargetView*) ((D3D11Texture*) colorAttachmentInfos[i].texture)->targetView,
|
||||
clearColors
|
||||
);
|
||||
}
|
||||
|
@ -1553,7 +1811,7 @@ static void D3D11_BeginRenderPass(
|
|||
{
|
||||
ID3D11DeviceContext_ClearDepthStencilView(
|
||||
d3d11CommandBuffer->context,
|
||||
(ID3D11DepthStencilView*) ((D3D11Texture*) depthStencilAttachmentInfo->texture)->twod.targetView,
|
||||
(ID3D11DepthStencilView*) ((D3D11Texture*) depthStencilAttachmentInfo->texture)->targetView,
|
||||
dsClearFlags,
|
||||
depthStencilAttachmentInfo->depthStencilClearValue.depth,
|
||||
(uint8_t) depthStencilAttachmentInfo->depthStencilClearValue.stencil
|
||||
|
@ -1564,8 +1822,8 @@ static void D3D11_BeginRenderPass(
|
|||
/* Set default viewport and scissor state */
|
||||
viewport.TopLeftX = 0;
|
||||
viewport.TopLeftY = 0;
|
||||
viewport.Width = (float) ((D3D11Texture*) colorAttachmentInfos[0].texture)->twod.width;
|
||||
viewport.Height = (float) ((D3D11Texture*) colorAttachmentInfos[0].texture)->twod.height;
|
||||
viewport.Width = (float) ((D3D11Texture*) colorAttachmentInfos[0].texture)->width;
|
||||
viewport.Height = (float) ((D3D11Texture*) colorAttachmentInfos[0].texture)->height;
|
||||
viewport.MinDepth = 0;
|
||||
viewport.MaxDepth = 1;
|
||||
|
||||
|
@ -1727,7 +1985,16 @@ static void D3D11_BindIndexBuffer(
|
|||
uint64_t offset,
|
||||
Refresh_IndexElementSize indexElementSize
|
||||
) {
|
||||
NOT_IMPLEMENTED
|
||||
D3D11Renderer *renderer = (D3D11Renderer*) driverData;
|
||||
D3D11CommandBuffer *d3d11CommandBuffer = (D3D11CommandBuffer*) commandBuffer;
|
||||
D3D11Buffer *d3d11Buffer = (D3D11Buffer*) buffer;
|
||||
|
||||
ID3D11DeviceContext_IASetIndexBuffer(
|
||||
d3d11CommandBuffer->context,
|
||||
d3d11Buffer->handle,
|
||||
RefreshToD3D11_IndexType[indexElementSize],
|
||||
(UINT) offset
|
||||
);
|
||||
}
|
||||
|
||||
/* Compute State */
|
||||
|
@ -1795,7 +2062,7 @@ static uint8_t D3D11_INTERNAL_InitializeSwapchainTexture(
|
|||
renderer->device,
|
||||
(ID3D11Resource*) swapchainTexture,
|
||||
&rtvDesc,
|
||||
(ID3D11RenderTargetView**) &pTexture->twod.targetView
|
||||
(ID3D11RenderTargetView**) &pTexture->targetView
|
||||
);
|
||||
if (FAILED(res))
|
||||
{
|
||||
|
@ -1807,13 +2074,13 @@ static uint8_t D3D11_INTERNAL_InitializeSwapchainTexture(
|
|||
/* Fill out the rest of the texture struct */
|
||||
pTexture->handle = NULL;
|
||||
pTexture->shaderView = NULL;
|
||||
pTexture->isRenderTarget = 1;
|
||||
pTexture->rtType = REFRESH_D3D11_RENDERTARGET_2D;
|
||||
pTexture->depth = 1;
|
||||
pTexture->isCube = 0;
|
||||
|
||||
ID3D11Texture2D_GetDesc(swapchainTexture, &textureDesc);
|
||||
pTexture->levelCount = textureDesc.MipLevels;
|
||||
pTexture->twod.width = textureDesc.Width;
|
||||
pTexture->twod.height = textureDesc.Height;
|
||||
pTexture->width = textureDesc.Width;
|
||||
pTexture->height = textureDesc.Height;
|
||||
|
||||
/* Cleanup */
|
||||
ID3D11Texture2D_Release(swapchainTexture);
|
||||
|
@ -1933,7 +2200,7 @@ static uint8_t D3D11_INTERNAL_ResizeSwapchain(
|
|||
HRESULT res;
|
||||
|
||||
/* Release the old RTV */
|
||||
ID3D11RenderTargetView_Release(swapchainData->texture.twod.targetView);
|
||||
ID3D11RenderTargetView_Release(swapchainData->texture.targetView);
|
||||
|
||||
/* Resize the swapchain */
|
||||
res = IDXGISwapChain_ResizeBuffers(
|
||||
|
@ -1972,7 +2239,7 @@ static void D3D11_INTERNAL_DestroySwapchain(
|
|||
return;
|
||||
}
|
||||
|
||||
ID3D11RenderTargetView_Release(swapchainData->texture.twod.targetView);
|
||||
ID3D11RenderTargetView_Release(swapchainData->texture.targetView);
|
||||
IDXGISwapChain_Release(swapchainData->swapchain);
|
||||
|
||||
windowData->swapchainData = NULL;
|
||||
|
@ -2107,8 +2374,8 @@ static Refresh_Texture* D3D11_AcquireSwapchainTexture(
|
|||
d3d11CommandBuffer->swapchainData = swapchainData;
|
||||
|
||||
/* Send the dimensions to the out parameters. */
|
||||
*pWidth = swapchainData->texture.twod.width;
|
||||
*pHeight = swapchainData->texture.twod.height;
|
||||
*pWidth = swapchainData->texture.width;
|
||||
*pHeight = swapchainData->texture.height;
|
||||
|
||||
/* Return the swapchain texture */
|
||||
return (Refresh_Texture*) &swapchainData->texture;
|
||||
|
|
Loading…
Reference in New Issue