RTech: enforce member name consistency

This commit is contained in:
Kawe Mazidjatari 2025-01-06 16:57:07 +01:00
parent 05f37cad73
commit 538df8e02c
2 changed files with 51 additions and 49 deletions

View File

@ -1,39 +1,41 @@
#ifndef TEXTURE_G_H
#define TEXTURE_G_H
#include <rtech/ipakfile.h>
//-----------------------------------------------------------------------------
// Structure definitions
//-----------------------------------------------------------------------------
/*schema*/ struct TextureDesc_s
{
uint64 m_AssetGuid;
const char* m_pDebugName;
uint16 m_nWidth;
uint16 m_nHeight;
uint16 m_nDepth;
uint16 m_nImageFormat;
PakGuid_t assetGuid;
const char* debugName;
uint16 width;
uint16 height;
uint16 depth;
uint16 imageFormat;
};
/*schema*/ struct TextureAsset_s : public TextureDesc_s
{
uint32 m_nDataLength;
uint8 unknown_2;
uint8 m_nOptStreamedMipCount;
uint8 m_nArraySize;
uint8 m_nLayerCount;
uint8 m_nCPUAccessFlag; // [ PIXIE ]: In RTech::CreateDXBuffer textureDescription Usage is determined by the CPU Access Flag so I assume it's the same case here.
uint8 m_nPermanentMipCount;
uint8 m_nStreamedMipCount;
uint8 unknown_4[13];
__int64 m_nPixelCount;
uint8 unknown_5[3];
uint8 m_nTotalStreamedMipCount; // Does not get set until after RTech::CreateDXTexture.
uint32 dataSize;
uint8 swizzleType;
uint8 optStreamedMipLevels;
uint8 arraySize;
uint8 layerCount;
uint8 usageFlags; // [ PIXIE ]: In RTech::CreateDXBuffer textureDescription Usage is determined by the CPU Access Flag so I assume it's the same case here.
uint8 permanentMipLevels;
uint8 streamedMipLevels;
uint8 unkPerMip[13];
uint64 texelCount;
uint16 streamedTextureIndex;
uint8 loadedStreamedMipLevelCount;
uint8 totalStreamedMipLevelCount; // Does not get set until after RTech::CreateDXTexture.
uint8 unk4[228];
uint8 unk5[57];
ID3D11Texture2D* m_ppTexture;
ID3D11ShaderResourceView* m_ppShaderResourceView;
uint8 m_nTextureMipLevels;
uint8 m_nTextureMipLevelsStreamedOpt;
ID3D11Texture2D* pInputTexture;
ID3D11ShaderResourceView* pShaderResourceView;
uint8 textureMipLevels;
uint8 textureMipLevelsStreamedOpt;
};
struct TextureBytesPerPixel_s

View File

@ -120,30 +120,30 @@ void(*v_CreateTextureResource)(TextureAsset_s*, INT_PTR);
constexpr uint32_t ALIGNMENT_SIZE = 15; // Creates 2D texture and shader resource from textureHeader and imageData.
void CreateTextureResource(TextureAsset_s* textureHeader, INT_PTR imageData)
{
if (textureHeader->m_nDepth && !textureHeader->m_nHeight) // Return never gets hit. Maybe its some debug check?
if (textureHeader->depth && !textureHeader->height) // Return never gets hit. Maybe its some debug check?
return;
i64 initialData[4096]{};
textureHeader->m_nTextureMipLevels = textureHeader->m_nPermanentMipCount;
textureHeader->textureMipLevels = textureHeader->permanentMipLevels;
const int totalStreamedMips = textureHeader->m_nOptStreamedMipCount + textureHeader->m_nStreamedMipCount;
int mipLevel = textureHeader->m_nPermanentMipCount + totalStreamedMips;
const int totalStreamedMips = textureHeader->optStreamedMipLevels + textureHeader->streamedMipLevels;
int mipLevel = textureHeader->permanentMipLevels + totalStreamedMips;
if (mipLevel != totalStreamedMips)
{
do
{
--mipLevel;
if (textureHeader->m_nArraySize)
if (textureHeader->arraySize)
{
int mipWidth = 0;
if (textureHeader->m_nWidth >> mipLevel > 1)
mipWidth = (textureHeader->m_nWidth >> mipLevel) - 1;
if (textureHeader->width >> mipLevel > 1)
mipWidth = (textureHeader->width >> mipLevel) - 1;
int mipHeight = 0;
if (textureHeader->m_nHeight >> mipLevel > 1)
mipHeight = (textureHeader->m_nHeight >> mipLevel) - 1;
if (textureHeader->height >> mipLevel > 1)
mipHeight = (textureHeader->height >> mipLevel) - 1;
const TextureBytesPerPixel_s& perPixel = s_pBytesPerPixel[textureHeader->m_nImageFormat];
const TextureBytesPerPixel_s& perPixel = s_pBytesPerPixel[textureHeader->imageFormat];
const u8 x = perPixel.x;
const u8 y = perPixel.y;
@ -156,7 +156,7 @@ void CreateTextureResource(TextureAsset_s* textureHeader, INT_PTR imageData)
const u32 slicePitch = x * bppWidth * bppHeight;
u32 subResourceEntry = mipLevel;
for (int i = 0; i < textureHeader->m_nArraySize; i++)
for (int i = 0; i < textureHeader->arraySize; i++)
{
const u32 offsetCurrentResourceData = subResourceEntry << 4u;
@ -165,45 +165,45 @@ void CreateTextureResource(TextureAsset_s* textureHeader, INT_PTR imageData)
*(u32*)((u8*)&initialData[1] + offsetCurrentResourceData + 4) = slicePitch;
imageData += (slicePitch + ALIGNMENT_SIZE) & ~ALIGNMENT_SIZE;
subResourceEntry += textureHeader->m_nPermanentMipCount;
subResourceEntry += textureHeader->permanentMipLevels;
}
}
} while (mipLevel != totalStreamedMips);
}
const DXGI_FORMAT dxgiFormat = g_TxtrAssetToDxgiFormat[textureHeader->m_nImageFormat]; // Get dxgi format
const DXGI_FORMAT dxgiFormat = g_TxtrAssetToDxgiFormat[textureHeader->imageFormat]; // Get dxgi format
D3D11_TEXTURE2D_DESC textureDesc{};
textureDesc.Width = textureHeader->m_nWidth >> mipLevel;
textureDesc.Height = textureHeader->m_nHeight >> mipLevel;
textureDesc.MipLevels = textureHeader->m_nPermanentMipCount;
textureDesc.ArraySize = textureHeader->m_nArraySize;
textureDesc.Width = textureHeader->width >> mipLevel;
textureDesc.Height = textureHeader->height >> mipLevel;
textureDesc.MipLevels = textureHeader->permanentMipLevels;
textureDesc.ArraySize = textureHeader->arraySize;
textureDesc.Format = dxgiFormat;
textureDesc.SampleDesc.Count = 1;
textureDesc.SampleDesc.Quality = 0;
textureDesc.Usage = textureHeader->m_nCPUAccessFlag != 2 ? D3D11_USAGE_IMMUTABLE : D3D11_USAGE_DEFAULT;
textureDesc.Usage = textureHeader->usageFlags != 2 ? D3D11_USAGE_IMMUTABLE : D3D11_USAGE_DEFAULT;
textureDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
textureDesc.MiscFlags = 2 * (textureHeader->m_nLayerCount & 2);
textureDesc.MiscFlags = 2 * (textureHeader->layerCount & 2);
const u32 offsetStartResourceData = mipLevel << 4u;
const D3D11_SUBRESOURCE_DATA* subResData = (D3D11_SUBRESOURCE_DATA*)((uint8_t*)initialData + offsetStartResourceData);
const HRESULT createTextureRes = D3D11Device()->CreateTexture2D(&textureDesc, subResData, &textureHeader->m_ppTexture);
const HRESULT createTextureRes = D3D11Device()->CreateTexture2D(&textureDesc, subResData, &textureHeader->pInputTexture);
if (createTextureRes < S_OK)
Error(eDLL_T::RTECH, EXIT_FAILURE, "Couldn't create texture \"%s\": error code = %08x\n", textureHeader->m_pDebugName, createTextureRes);
Error(eDLL_T::RTECH, EXIT_FAILURE, "Couldn't create texture \"%s\": error code = %08x\n", textureHeader->debugName, createTextureRes);
D3D11_SHADER_RESOURCE_VIEW_DESC shaderResource{};
shaderResource.Format = dxgiFormat;
shaderResource.Texture2D.MipLevels = textureHeader->m_nTextureMipLevels;
shaderResource.Texture2D.MipLevels = textureHeader->textureMipLevels;
if (textureHeader->m_nArraySize > 1) // Do we have a texture array?
if (textureHeader->arraySize > 1) // Do we have a texture array?
{
const bool isCubeMap = (textureHeader->m_nLayerCount & 2);
const bool isCubeMap = (textureHeader->layerCount & 2);
if (!isCubeMap)
{
shaderResource.Texture2DArray.FirstArraySlice = 0;
shaderResource.Texture2DArray.ArraySize = textureHeader->m_nArraySize;
shaderResource.Texture2DArray.ArraySize = textureHeader->arraySize;
shaderResource.ViewDimension = D3D_SRV_DIMENSION_TEXTURE2DARRAY;
}
else
@ -214,10 +214,10 @@ void CreateTextureResource(TextureAsset_s* textureHeader, INT_PTR imageData)
shaderResource.ViewDimension = D3D_SRV_DIMENSION_TEXTURE2D;
}
const HRESULT createShaderResourceRes = D3D11Device()->CreateShaderResourceView(textureHeader->m_ppTexture, &shaderResource, &textureHeader->m_ppShaderResourceView);
const HRESULT createShaderResourceRes = D3D11Device()->CreateShaderResourceView(textureHeader->pInputTexture, &shaderResource, &textureHeader->pShaderResourceView);
if (createShaderResourceRes < S_OK)
Error(eDLL_T::RTECH, EXIT_FAILURE, "Couldn't create shader resource view for texture \"%s\" (%llX): error code = %08x\n",
textureHeader->m_pDebugName, textureHeader->m_AssetGuid, createShaderResourceRes);
textureHeader->debugName, textureHeader->assetGuid, createShaderResourceRes);
}
#pragma warning( pop )