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 #ifndef TEXTURE_G_H
#define TEXTURE_G_H #define TEXTURE_G_H
#include <rtech/ipakfile.h>
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Structure definitions // Structure definitions
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
/*schema*/ struct TextureDesc_s /*schema*/ struct TextureDesc_s
{ {
uint64 m_AssetGuid; PakGuid_t assetGuid;
const char* m_pDebugName; const char* debugName;
uint16 m_nWidth; uint16 width;
uint16 m_nHeight; uint16 height;
uint16 m_nDepth; uint16 depth;
uint16 m_nImageFormat; uint16 imageFormat;
}; };
/*schema*/ struct TextureAsset_s : public TextureDesc_s /*schema*/ struct TextureAsset_s : public TextureDesc_s
{ {
uint32 m_nDataLength; uint32 dataSize;
uint8 unknown_2; uint8 swizzleType;
uint8 m_nOptStreamedMipCount; uint8 optStreamedMipLevels;
uint8 m_nArraySize; uint8 arraySize;
uint8 m_nLayerCount; uint8 layerCount;
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 usageFlags; // [ 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 permanentMipLevels;
uint8 m_nStreamedMipCount; uint8 streamedMipLevels;
uint8 unknown_4[13]; uint8 unkPerMip[13];
__int64 m_nPixelCount; uint64 texelCount;
uint8 unknown_5[3]; uint16 streamedTextureIndex;
uint8 m_nTotalStreamedMipCount; // Does not get set until after RTech::CreateDXTexture. uint8 loadedStreamedMipLevelCount;
uint8 totalStreamedMipLevelCount; // Does not get set until after RTech::CreateDXTexture.
uint8 unk4[228]; uint8 unk4[228];
uint8 unk5[57]; uint8 unk5[57];
ID3D11Texture2D* m_ppTexture; ID3D11Texture2D* pInputTexture;
ID3D11ShaderResourceView* m_ppShaderResourceView; ID3D11ShaderResourceView* pShaderResourceView;
uint8 m_nTextureMipLevels; uint8 textureMipLevels;
uint8 m_nTextureMipLevelsStreamedOpt; uint8 textureMipLevelsStreamedOpt;
}; };
struct TextureBytesPerPixel_s 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. constexpr uint32_t ALIGNMENT_SIZE = 15; // Creates 2D texture and shader resource from textureHeader and imageData.
void CreateTextureResource(TextureAsset_s* textureHeader, INT_PTR 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; return;
i64 initialData[4096]{}; i64 initialData[4096]{};
textureHeader->m_nTextureMipLevels = textureHeader->m_nPermanentMipCount; textureHeader->textureMipLevels = textureHeader->permanentMipLevels;
const int totalStreamedMips = textureHeader->m_nOptStreamedMipCount + textureHeader->m_nStreamedMipCount; const int totalStreamedMips = textureHeader->optStreamedMipLevels + textureHeader->streamedMipLevels;
int mipLevel = textureHeader->m_nPermanentMipCount + totalStreamedMips; int mipLevel = textureHeader->permanentMipLevels + totalStreamedMips;
if (mipLevel != totalStreamedMips) if (mipLevel != totalStreamedMips)
{ {
do do
{ {
--mipLevel; --mipLevel;
if (textureHeader->m_nArraySize) if (textureHeader->arraySize)
{ {
int mipWidth = 0; int mipWidth = 0;
if (textureHeader->m_nWidth >> mipLevel > 1) if (textureHeader->width >> mipLevel > 1)
mipWidth = (textureHeader->m_nWidth >> mipLevel) - 1; mipWidth = (textureHeader->width >> mipLevel) - 1;
int mipHeight = 0; int mipHeight = 0;
if (textureHeader->m_nHeight >> mipLevel > 1) if (textureHeader->height >> mipLevel > 1)
mipHeight = (textureHeader->m_nHeight >> 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 x = perPixel.x;
const u8 y = perPixel.y; const u8 y = perPixel.y;
@ -156,7 +156,7 @@ void CreateTextureResource(TextureAsset_s* textureHeader, INT_PTR imageData)
const u32 slicePitch = x * bppWidth * bppHeight; const u32 slicePitch = x * bppWidth * bppHeight;
u32 subResourceEntry = mipLevel; 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; const u32 offsetCurrentResourceData = subResourceEntry << 4u;
@ -165,45 +165,45 @@ void CreateTextureResource(TextureAsset_s* textureHeader, INT_PTR imageData)
*(u32*)((u8*)&initialData[1] + offsetCurrentResourceData + 4) = slicePitch; *(u32*)((u8*)&initialData[1] + offsetCurrentResourceData + 4) = slicePitch;
imageData += (slicePitch + ALIGNMENT_SIZE) & ~ALIGNMENT_SIZE; imageData += (slicePitch + ALIGNMENT_SIZE) & ~ALIGNMENT_SIZE;
subResourceEntry += textureHeader->m_nPermanentMipCount; subResourceEntry += textureHeader->permanentMipLevels;
} }
} }
} while (mipLevel != totalStreamedMips); } 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{}; D3D11_TEXTURE2D_DESC textureDesc{};
textureDesc.Width = textureHeader->m_nWidth >> mipLevel; textureDesc.Width = textureHeader->width >> mipLevel;
textureDesc.Height = textureHeader->m_nHeight >> mipLevel; textureDesc.Height = textureHeader->height >> mipLevel;
textureDesc.MipLevels = textureHeader->m_nPermanentMipCount; textureDesc.MipLevels = textureHeader->permanentMipLevels;
textureDesc.ArraySize = textureHeader->m_nArraySize; textureDesc.ArraySize = textureHeader->arraySize;
textureDesc.Format = dxgiFormat; textureDesc.Format = dxgiFormat;
textureDesc.SampleDesc.Count = 1; textureDesc.SampleDesc.Count = 1;
textureDesc.SampleDesc.Quality = 0; 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.BindFlags = D3D11_BIND_SHADER_RESOURCE;
textureDesc.MiscFlags = 2 * (textureHeader->m_nLayerCount & 2); textureDesc.MiscFlags = 2 * (textureHeader->layerCount & 2);
const u32 offsetStartResourceData = mipLevel << 4u; const u32 offsetStartResourceData = mipLevel << 4u;
const D3D11_SUBRESOURCE_DATA* subResData = (D3D11_SUBRESOURCE_DATA*)((uint8_t*)initialData + offsetStartResourceData); 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) 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{}; D3D11_SHADER_RESOURCE_VIEW_DESC shaderResource{};
shaderResource.Format = dxgiFormat; 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) if (!isCubeMap)
{ {
shaderResource.Texture2DArray.FirstArraySlice = 0; shaderResource.Texture2DArray.FirstArraySlice = 0;
shaderResource.Texture2DArray.ArraySize = textureHeader->m_nArraySize; shaderResource.Texture2DArray.ArraySize = textureHeader->arraySize;
shaderResource.ViewDimension = D3D_SRV_DIMENSION_TEXTURE2DARRAY; shaderResource.ViewDimension = D3D_SRV_DIMENSION_TEXTURE2DARRAY;
} }
else else
@ -214,10 +214,10 @@ void CreateTextureResource(TextureAsset_s* textureHeader, INT_PTR imageData)
shaderResource.ViewDimension = D3D_SRV_DIMENSION_TEXTURE2D; 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) if (createShaderResourceRes < S_OK)
Error(eDLL_T::RTECH, EXIT_FAILURE, "Couldn't create shader resource view for texture \"%s\" (%llX): error code = %08x\n", 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 ) #pragma warning( pop )