port: Grp texture/image/buffer units toward 40250 (+ port.grp_resource)

GrpImage/GrpSubImage verbatim; GrpImageTexture DDS path through CDXTCImage
header + low-texture-memory mip bias, CreateDeviceObjects/CreateFromDiskFile
verbatim; GrpTexture::SetTextureStage via STATEMANAGER. Port-map entries for
GrpTexture/Image/SubImage/ImageTexture/IndexBuffer/VertexBuffer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
shenlei
2026-09-30 14:15:45 +09:00
co-authored by Claude Opus 5.5
parent 7e385f827b
commit 010e99f070
13 changed files with 1142 additions and 135 deletions
+134
View File
@@ -0,0 +1,134 @@
{
"reference": "EterLib/GrpImage.cpp",
"reference_sha256": "1966e1d5eaf45ad2391a1e71e42e3c7c30408aed246a1dc79be428396382837d",
"priority": "P4",
"contracts": [],
"functions": {
"CGraphicImage::CGraphicImage": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImage.cpp:CGraphicImage::CGraphicImage"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImage::~CGraphicImage": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImage.cpp:CGraphicImage::~CGraphicImage"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImage::CreateDeviceObjects": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImage.cpp:CGraphicImage::CreateDeviceObjects"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImage::DestroyDeviceObjects": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImage.cpp:CGraphicImage::DestroyDeviceObjects"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImage::Type": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImage.cpp:CGraphicImage::Type"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImage::OnIsType": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImage.cpp:CGraphicImage::OnIsType"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImage::GetWidth": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImage.cpp:CGraphicImage::GetWidth"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImage::GetHeight": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImage.cpp:CGraphicImage::GetHeight"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImage::GetTextureReference": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImage.cpp:CGraphicImage::GetTextureReference"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImage::GetTexturePointer": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImage.cpp:CGraphicImage::GetTexturePointer"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImage::GetRectReference": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImage.cpp:CGraphicImage::GetRectReference"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImage::OnLoad": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImage.cpp:CGraphicImage::OnLoad"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImage::OnClear": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImage.cpp:CGraphicImage::OnClear"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImage::OnIsEmpty": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImage.cpp:CGraphicImage::OnIsEmpty"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
}
}
}
+91 -20
View File
@@ -5,56 +5,127 @@
"contracts": [],
"functions": {
"CGraphicImageTexture::Lock": {
"status": "TODO"
"status": "ADAPTED",
"note": "40250: LockRect on the D3D texture. Port: the memory texture's native bytes in its own format, pitch = width*bpp. Invariant: the font pages write the same A4R4G4B4 words.",
"impl": [
"src/platform/EterLib/GrpImageTexture.cpp:CGraphicImageTexture::Lock"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImageTexture::Unlock": {
"status": "TODO"
"status": "ADAPTED",
"note": "40250: UnlockRect. Port: converts the native pixels to ARGB32 and bumps the revision in the handle name. Invariant: the canvas sees the written pixels after Unlock.",
"impl": [
"src/platform/EterLib/GrpImageTexture.cpp:CGraphicImageTexture::Unlock"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImageTexture::Initialize": {
"status": "TODO"
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImageTexture.cpp:CGraphicImageTexture::Initialize"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImageTexture::Destroy": {
"status": "TODO"
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImageTexture.cpp:CGraphicImageTexture::Destroy"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImageTexture::CreateDeviceObjects": {
"status": "TODO"
"status": "ADAPTED",
"note": "40250: CreateTexture (font) / pack Get + CreateFromMemoryFile. Port: the empty-name branch makes a memory texture; the file branch is verbatim. Invariant: same success/failure and size.",
"impl": [
"src/platform/EterLib/GrpImageTexture.cpp:CGraphicImageTexture::CreateDeviceObjects"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImageTexture::Create": {
"status": "TODO"
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImageTexture.cpp:CGraphicImageTexture::Create"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImageTexture::CreateFromTexturePointer": {
"status": "TODO"
"status": "ADAPTED",
"note": "40250: shares the source D3D texture with AddRef. Port: handles are not reference counted, so the copy gets its own handle naming the source's pack path. Invariant: the sub image draws the source file with the source size.",
"impl": [
"src/platform/EterLib/GrpImageTexture.cpp:CGraphicImageTexture::CreateFromTexturePointer"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImageTexture::CreateDDSTexture": {
"status": "ADAPTED",
"impl": [
"src/host/dxt.cpp:decode",
"src/host/vk_textures.cpp:get_gpu_texture",
"src/host/vk_textures.cpp:upload_texture"
"src/platform/EterLib/GrpImageTexture.cpp:CGraphicImageTexture::CreateDDSTexture"
],
"test": "tests/port/dxt_decode_test.cpp",
"note": "The platform CreateDDSTexture member is a stub; its level logic lives in the texture decode/upload the renderer does. mipmapCount = max(1, min(dwMipMapCount, MAX_MIPLEVELS=12)), level i read at sum(dwLinearSize>>2k) with CDXTCImage::Copy's dwLinearSize>>2i bytes (the rest zero, uninitialised in 40250), decoded to RGBA8 (no GPU DXT) and uploaded as file levels, not regenerated. Divergence: without DDSD_MIPMAPCOUNT, or with DDSD_PITCH, 40250 creates the extra levels uninitialised; here that is one level. IsLowTextureMemory's uTexBias level skip is not applied (the port's ms_isLowTextureMemory is false). The far-terrain look NEEDS_LIVE."
"test": [
"tests/port/port_grp_resource_test.cpp"
],
"note": "40250: D3DXCreateTexture + per-level LockRect/Copy (and an A4R4G4B4/A1R5G5B5 copy without DXT support). Port: a file handle; the renderers decode the .dds. Invariant: the size, including the low-texture-memory top-mip skip, is 40250's."
},
"CGraphicImageTexture::CreateFromMemoryFile": {
"status": "ADAPTED",
"impl": [
"src/platform/EterLib/GrpImageTexture.cpp:CGraphicImageTexture::CreateFromMemoryFile",
"src/host/vk_textures.cpp:get_gpu_texture"
"src/platform/EterLib/GrpImageTexture.cpp:CGraphicImageTexture::CreateFromMemoryFile"
],
"test": "tests/port/dxt_decode_test.cpp",
"note": "The platform body records only the size and file name; the renderer decodes the bytes. 40250 dispatch is kept: a DXT DDS takes the CreateDDSTexture levels, anything else takes D3DXCreateTextureFromFileInMemoryEx(MipLevels=D3DX_DEFAULT), i.e. a full generated chain (vkCmdBlitImage linear, instead of D3DX's box filter). The invented is_ui_tex rule (no mips for icon/, ui/, locale/ and textures <=128px) was removed. Memory textures (mem:, 40250 CreateTexture levels=1) get one level. GRAPHICS_CAPS_HALF_SIZE_IMAGE/low-memory A4R4G4B4 re-encode is not applied."
"test": [
"tests/port/port_grp_resource_test.cpp"
],
"note": "40250: LoadHeaderFromMemory → CreateDDSTexture, else D3DXCreateTextureFromFileInMemoryEx. Port: same DDS check (only when the buffer holds 128 bytes), else the size is read from the DDS/PNG/JPEG/BMP/TGA header and the canvas decodes. Invariant: same width/height and failure on undecodable bytes."
},
"CGraphicImageTexture::SetFileName": {
"status": "TODO"
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImageTexture.cpp:CGraphicImageTexture::SetFileName"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImageTexture::CreateFromDiskFile": {
"status": "TODO"
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImageTexture.cpp:CGraphicImageTexture::CreateFromDiskFile"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImageTexture::CGraphicImageTexture": {
"status": "TODO"
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImageTexture.cpp:CGraphicImageTexture::CGraphicImageTexture"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicImageTexture::~CGraphicImageTexture": {
"status": "TODO"
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpImageTexture.cpp:CGraphicImageTexture::~CGraphicImageTexture"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
}
}
}
@@ -0,0 +1,123 @@
{
"reference": "EterLib/GrpIndexBuffer.cpp",
"reference_sha256": "ef734b7d12aa0da8881bdb55d9356f932bbfe528c445504c81c816ba004201af",
"priority": "P4",
"contracts": [],
"functions": {
"CGraphicIndexBuffer::GetD3DIndexBuffer": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpIndexBuffer.cpp:CGraphicIndexBuffer::GetD3DIndexBuffer"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicIndexBuffer::SetIndices": {
"status": "ADAPTED",
"note": "40250: D3D8 index buffer Lock/Unlock/CreateIndexBuffer/Release. Port: CPU memory (CpuBuffer.h MtCpu*Buffer); Lock hands out the bytes, Unlock bumps the revision the renderer re-uploads on. Invariant: the same bytes and sizes reach the draw; no device needed (Granny loader thread).",
"impl": [
"src/platform/EterLib/GrpIndexBuffer.cpp:CGraphicIndexBuffer::SetIndices"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicIndexBuffer::Lock": {
"status": "ADAPTED",
"note": "40250: D3D8 index buffer Lock/Unlock/CreateIndexBuffer/Release. Port: CPU memory (CpuBuffer.h MtCpu*Buffer); Lock hands out the bytes, Unlock bumps the revision the renderer re-uploads on. Invariant: the same bytes and sizes reach the draw; no device needed (Granny loader thread).",
"impl": [
"src/platform/EterLib/GrpIndexBuffer.cpp:CGraphicIndexBuffer::Lock"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicIndexBuffer::Unlock": {
"status": "ADAPTED",
"note": "40250: D3D8 index buffer Lock/Unlock/CreateIndexBuffer/Release. Port: CPU memory (CpuBuffer.h MtCpu*Buffer); Lock hands out the bytes, Unlock bumps the revision the renderer re-uploads on. Invariant: the same bytes and sizes reach the draw; no device needed (Granny loader thread).",
"impl": [
"src/platform/EterLib/GrpIndexBuffer.cpp:CGraphicIndexBuffer::Unlock"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicIndexBuffer::Copy": {
"status": "ADAPTED",
"note": "40250: D3D8 index buffer Lock/Unlock/CreateIndexBuffer/Release. Port: CPU memory (CpuBuffer.h MtCpu*Buffer); Lock hands out the bytes, Unlock bumps the revision the renderer re-uploads on. Invariant: the same bytes and sizes reach the draw; no device needed (Granny loader thread).",
"impl": [
"src/platform/EterLib/GrpIndexBuffer.cpp:CGraphicIndexBuffer::Copy"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicIndexBuffer::Create": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpIndexBuffer.cpp:CGraphicIndexBuffer::Create"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicIndexBuffer::CreateDeviceObjects": {
"status": "ADAPTED",
"note": "40250: D3D8 index buffer Lock/Unlock/CreateIndexBuffer/Release. Port: CPU memory (CpuBuffer.h MtCpu*Buffer); Lock hands out the bytes, Unlock bumps the revision the renderer re-uploads on. Invariant: the same bytes and sizes reach the draw; no device needed (Granny loader thread).",
"impl": [
"src/platform/EterLib/GrpIndexBuffer.cpp:CGraphicIndexBuffer::CreateDeviceObjects"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicIndexBuffer::DestroyDeviceObjects": {
"status": "ADAPTED",
"note": "40250: D3D8 index buffer Lock/Unlock/CreateIndexBuffer/Release. Port: CPU memory (CpuBuffer.h MtCpu*Buffer); Lock hands out the bytes, Unlock bumps the revision the renderer re-uploads on. Invariant: the same bytes and sizes reach the draw; no device needed (Granny loader thread).",
"impl": [
"src/platform/EterLib/GrpIndexBuffer.cpp:CGraphicIndexBuffer::DestroyDeviceObjects"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicIndexBuffer::Destroy": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpIndexBuffer.cpp:CGraphicIndexBuffer::Destroy"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicIndexBuffer::Initialize": {
"status": "ADAPTED",
"note": "40250: leaves m_iidxCount/m_dwBufferSize unset. Port: zeroes them. Invariant: every 40250 reader runs after Create, which sets both.",
"impl": [
"src/platform/EterLib/GrpIndexBuffer.cpp:CGraphicIndexBuffer::Initialize"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicIndexBuffer::CGraphicIndexBuffer": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpIndexBuffer.cpp:CGraphicIndexBuffer::CGraphicIndexBuffer"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicIndexBuffer::~CGraphicIndexBuffer": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpIndexBuffer.cpp:CGraphicIndexBuffer::~CGraphicIndexBuffer"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
}
}
}
+125
View File
@@ -0,0 +1,125 @@
{
"reference": "EterLib/GrpSubImage.cpp",
"reference_sha256": "b0fd32d1c7cd5b11d932acfda8caaa44db8cb222ba68d834950db5f15870103b",
"priority": "P4",
"contracts": [],
"functions": {
"CGraphicSubImage::Type": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpSubImage.cpp:CGraphicSubImage::Type"
],
"test": [
"build/native/src/host/mt_native_render --live-client (UI sub images)"
]
},
"CGraphicSubImage::CGraphicSubImage": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpSubImage.cpp:CGraphicSubImage::CGraphicSubImage"
],
"test": [
"build/native/src/host/mt_native_render --live-client (UI sub images)"
]
},
"CGraphicSubImage::~CGraphicSubImage": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpSubImage.cpp:CGraphicSubImage::~CGraphicSubImage"
],
"test": [
"build/native/src/host/mt_native_render --live-client (UI sub images)"
]
},
"CGraphicSubImage::CreateDeviceObjects": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpSubImage.cpp:CGraphicSubImage::CreateDeviceObjects"
],
"test": [
"build/native/src/host/mt_native_render --live-client (UI sub images)"
]
},
"CGraphicSubImage::SetImagePointer": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpSubImage.cpp:CGraphicSubImage::SetImagePointer"
],
"test": [
"build/native/src/host/mt_native_render --live-client (UI sub images)"
]
},
"CGraphicSubImage::SetImageFileName": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpSubImage.cpp:CGraphicSubImage::SetImageFileName"
],
"test": [
"build/native/src/host/mt_native_render --live-client (UI sub images)"
]
},
"CGraphicSubImage::SetRectPosition": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpSubImage.cpp:CGraphicSubImage::SetRectPosition"
],
"test": [
"build/native/src/host/mt_native_render --live-client (UI sub images)"
]
},
"CGraphicSubImage::SetRectReference": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpSubImage.cpp:CGraphicSubImage::SetRectReference"
],
"test": [
"build/native/src/host/mt_native_render --live-client (UI sub images)"
]
},
"CGraphicSubImage::SetSearchPath": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpSubImage.cpp:CGraphicSubImage::SetSearchPath"
],
"test": [
"build/native/src/host/mt_native_render --live-client (UI sub images)"
]
},
"CGraphicSubImage::OnLoad": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpSubImage.cpp:CGraphicSubImage::OnLoad"
],
"test": [
"build/native/src/host/mt_native_render --live-client (UI sub images)"
]
},
"CGraphicSubImage::OnClear": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpSubImage.cpp:CGraphicSubImage::OnClear"
],
"test": [
"build/native/src/host/mt_native_render --live-client (UI sub images)"
]
},
"CGraphicSubImage::OnIsEmpty": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpSubImage.cpp:CGraphicSubImage::OnIsEmpty"
],
"test": [
"build/native/src/host/mt_native_render --live-client (UI sub images)"
]
},
"CGraphicSubImage::OnIsType": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpSubImage.cpp:CGraphicSubImage::OnIsType"
],
"test": [
"build/native/src/host/mt_native_render --live-client (UI sub images)"
]
}
}
}
@@ -0,0 +1,99 @@
{
"reference": "EterLib/GrpTexture.cpp",
"reference_sha256": "82f803e743bc476e87eaff32919cc9d8e77bf09cf5aff90b093f3e041f42a8d2",
"priority": "P4",
"contracts": [],
"functions": {
"CGraphicTexture::DestroyDeviceObjects": {
"status": "ADAPTED",
"note": "40250: safe_release(m_lpd3dTexture). Port: UIRenderReleaseMemoryTexture frees the platform handle. Invariant: the handle is gone and m_lpd3dTexture is NULL.",
"impl": [
"src/platform/EterLib/GrpTexture.cpp:CGraphicTexture::DestroyDeviceObjects"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicTexture::Destroy": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpTexture.cpp:CGraphicTexture::Destroy"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicTexture::Initialize": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpTexture.cpp:CGraphicTexture::Initialize"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicTexture::IsEmpty": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpTexture.cpp:CGraphicTexture::IsEmpty"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicTexture::SetTextureStage": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpTexture.cpp:CGraphicTexture::SetTextureStage"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicTexture::GetD3DTexture": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpTexture.cpp:CGraphicTexture::GetD3DTexture"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicTexture::GetWidth": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpTexture.cpp:CGraphicTexture::GetWidth"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicTexture::GetHeight": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpTexture.cpp:CGraphicTexture::GetHeight"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicTexture::CGraphicTexture": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpTexture.cpp:CGraphicTexture::CGraphicTexture"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicTexture::~CGraphicTexture": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpTexture.cpp:CGraphicTexture::~CGraphicTexture"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
}
}
}
@@ -0,0 +1,171 @@
{
"reference": "EterLib/GrpVertexBuffer.cpp",
"reference_sha256": "0c6f3f6331b7e837f4a38f4b4a9993a158081dcd80d7f4f8a84f947a4fbe49fd",
"priority": "P4",
"contracts": [],
"functions": {
"CGraphicVertexBuffer::GetVertexStride": {
"status": "ADAPTED",
"note": "40250: D3DXGetFVFVertexSize. Port: mt_fvf_vertex_size, the same D3D8 FVF size rule. Invariant: equal stride for every FVF.",
"impl": [
"src/platform/EterLib/GrpVertexBuffer.cpp:CGraphicVertexBuffer::GetVertexStride"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicVertexBuffer::GetFlexibleVertexFormat": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpVertexBuffer.cpp:CGraphicVertexBuffer::GetFlexibleVertexFormat"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicVertexBuffer::GetVertexCount": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpVertexBuffer.cpp:CGraphicVertexBuffer::GetVertexCount"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicVertexBuffer::SetStream": {
"status": "ADAPTED",
"note": "40250: assert(ms_lpd3dDevice) + STATEMANAGER.SetStreamSource. Port: without the assert (CPU buffers exist without a device). Invariant: same stream binding.",
"impl": [
"src/platform/EterLib/GrpVertexBuffer.cpp:CGraphicVertexBuffer::SetStream"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicVertexBuffer::LockRange": {
"status": "ADAPTED",
"note": "40250: D3D8 vertex buffer Lock/Unlock/CreateVertexBuffer/Release. Port: CPU memory (CpuBuffer.h MtCpu*Buffer); Lock hands out the bytes, Unlock bumps the revision the renderer re-uploads on. Invariant: the same bytes and sizes reach the draw; no device needed (Granny loader thread).",
"impl": [
"src/platform/EterLib/GrpVertexBuffer.cpp:CGraphicVertexBuffer::LockRange"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicVertexBuffer::Lock": {
"status": "ADAPTED",
"note": "40250: D3D8 vertex buffer Lock/Unlock/CreateVertexBuffer/Release. Port: CPU memory (CpuBuffer.h MtCpu*Buffer); Lock hands out the bytes, Unlock bumps the revision the renderer re-uploads on. Invariant: the same bytes and sizes reach the draw; no device needed (Granny loader thread).",
"impl": [
"src/platform/EterLib/GrpVertexBuffer.cpp:CGraphicVertexBuffer::Lock"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicVertexBuffer::Unlock": {
"status": "ADAPTED",
"note": "40250: D3D8 vertex buffer Lock/Unlock/CreateVertexBuffer/Release. Port: CPU memory (CpuBuffer.h MtCpu*Buffer); Lock hands out the bytes, Unlock bumps the revision the renderer re-uploads on. Invariant: the same bytes and sizes reach the draw; no device needed (Granny loader thread).",
"impl": [
"src/platform/EterLib/GrpVertexBuffer.cpp:CGraphicVertexBuffer::Unlock"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicVertexBuffer::IsEmpty": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpVertexBuffer.cpp:CGraphicVertexBuffer::IsEmpty"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicVertexBuffer::LockDynamic": {
"status": "ADAPTED",
"note": "40250: D3D8 vertex buffer Lock/Unlock/CreateVertexBuffer/Release. Port: CPU memory (CpuBuffer.h MtCpu*Buffer); Lock hands out the bytes, Unlock bumps the revision the renderer re-uploads on. Invariant: the same bytes and sizes reach the draw; no device needed (Granny loader thread).",
"impl": [
"src/platform/EterLib/GrpVertexBuffer.cpp:CGraphicVertexBuffer::LockDynamic"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicVertexBuffer::Copy": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpVertexBuffer.cpp:CGraphicVertexBuffer::Copy"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicVertexBuffer::CreateDeviceObjects": {
"status": "ADAPTED",
"note": "40250: D3D8 vertex buffer Lock/Unlock/CreateVertexBuffer/Release. Port: CPU memory (CpuBuffer.h MtCpu*Buffer); Lock hands out the bytes, Unlock bumps the revision the renderer re-uploads on. Invariant: the same bytes and sizes reach the draw; no device needed (Granny loader thread).",
"impl": [
"src/platform/EterLib/GrpVertexBuffer.cpp:CGraphicVertexBuffer::CreateDeviceObjects"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicVertexBuffer::DestroyDeviceObjects": {
"status": "ADAPTED",
"note": "40250: D3D8 vertex buffer Lock/Unlock/CreateVertexBuffer/Release. Port: CPU memory (CpuBuffer.h MtCpu*Buffer); Lock hands out the bytes, Unlock bumps the revision the renderer re-uploads on. Invariant: the same bytes and sizes reach the draw; no device needed (Granny loader thread).",
"impl": [
"src/platform/EterLib/GrpVertexBuffer.cpp:CGraphicVertexBuffer::DestroyDeviceObjects"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicVertexBuffer::Create": {
"status": "ADAPTED",
"note": "40250: D3DXGetFVFVertexSize(fvf)*count, assert(device). Port: mt_fvf_vertex_size, no device assert (CPU buffers). Invariant: same buffer size.",
"impl": [
"src/platform/EterLib/GrpVertexBuffer.cpp:CGraphicVertexBuffer::Create"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicVertexBuffer::Destroy": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpVertexBuffer.cpp:CGraphicVertexBuffer::Destroy"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicVertexBuffer::Initialize": {
"status": "ADAPTED",
"note": "40250: leaves m_dwFVF unset. Port: zeroes it. Invariant: every 40250 reader runs after Create, which sets it.",
"impl": [
"src/platform/EterLib/GrpVertexBuffer.cpp:CGraphicVertexBuffer::Initialize"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicVertexBuffer::CGraphicVertexBuffer": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpVertexBuffer.cpp:CGraphicVertexBuffer::CGraphicVertexBuffer"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
},
"CGraphicVertexBuffer::~CGraphicVertexBuffer": {
"status": "PORTED",
"impl": [
"src/platform/EterLib/GrpVertexBuffer.cpp:CGraphicVertexBuffer::~CGraphicVertexBuffer"
],
"test": [
"tests/port/port_grp_resource_test.cpp"
]
}
}
}