feat(gx): implement CGxDevice::BufData

This commit is contained in:
Joshua Achorn 2023-03-20 02:14:30 -04:00
parent b94d5825bb
commit 83e881f3aa
6 changed files with 24 additions and 0 deletions

View File

@ -194,6 +194,11 @@ int32_t CGxDevice::BufUnlock(CGxBuf* buf, uint32_t size) {
return 1; return 1;
} }
void CGxDevice::BufData(CGxBuf* buf, void* data, size_t size, uintptr_t offset) {
buf->unk1E = 1;
buf->unk1F = 0;
}
const CGxCaps& CGxDevice::Caps() const { const CGxCaps& CGxDevice::Caps() const {
return this->m_caps; return this->m_caps;
} }

View File

@ -120,6 +120,7 @@ class CGxDevice {
virtual void PoolSizeSet(CGxPool*, uint32_t) = 0; virtual void PoolSizeSet(CGxPool*, uint32_t) = 0;
virtual char* BufLock(CGxBuf*); virtual char* BufLock(CGxBuf*);
virtual int32_t BufUnlock(CGxBuf*, uint32_t); virtual int32_t BufUnlock(CGxBuf*, uint32_t);
virtual void BufData(CGxBuf*, void*, size_t, uintptr_t);
virtual int32_t TexCreate(EGxTexTarget, uint32_t, uint32_t, uint32_t, EGxTexFormat, EGxTexFormat, CGxTexFlags, void*, void (*)(EGxTexCommand, uint32_t, uint32_t, uint32_t, uint32_t, void*, uint32_t&, const void*&), const char*, CGxTex*&); virtual int32_t TexCreate(EGxTexTarget, uint32_t, uint32_t, uint32_t, EGxTexFormat, EGxTexFormat, CGxTexFlags, void*, void (*)(EGxTexCommand, uint32_t, uint32_t, uint32_t, uint32_t, void*, uint32_t&, const void*&), const char*, CGxTex*&);
virtual void TexDestroy(CGxTex* texId); virtual void TexDestroy(CGxTex* texId);
virtual void ShaderCreate(CGxShader*[], EGxShTarget, const char*, const char*, int32_t); virtual void ShaderCreate(CGxShader*[], EGxShTarget, const char*, const char*, int32_t);

View File

@ -394,6 +394,14 @@ int32_t CGxDeviceD3d::BufUnlock(CGxBuf* buf, uint32_t size) {
return 1; return 1;
} }
void CGxDeviceD3d::BufData(CGxBuf* buf, void* data, size_t size, uintptr_t offset) {
CGxDevice::BufData(buf, data, size, offset);
char* bufData = this->IBufLock(buf);
memcpy(reinterpret_cast<void*>(uintptr_t(bufData) + offset), data, size);
this->IBufUnlock(buf);
}
void CGxDeviceD3d::CapsWindowSize(CRect& dst) { void CGxDeviceD3d::CapsWindowSize(CRect& dst) {
dst = this->DeviceCurWindow(); dst = this->DeviceCurWindow();
} }

View File

@ -258,6 +258,7 @@ class CGxDeviceD3d : public CGxDevice {
virtual void PoolSizeSet(CGxPool* pool, uint32_t size); virtual void PoolSizeSet(CGxPool* pool, uint32_t size);
virtual char* BufLock(CGxBuf* buf); virtual char* BufLock(CGxBuf* buf);
virtual int32_t BufUnlock(CGxBuf* buf, uint32_t size); virtual int32_t BufUnlock(CGxBuf* buf, uint32_t size);
virtual void BufData(CGxBuf*, void*, size_t, uintptr_t);
virtual void IShaderCreate(CGxShader* shader); virtual void IShaderCreate(CGxShader* shader);
virtual void ShaderCreate(CGxShader* shaders[], EGxShTarget target, const char* a4, const char* a5, int32_t permutations); virtual void ShaderCreate(CGxShader* shaders[], EGxShTarget target, const char* a4, const char* a5, int32_t permutations);
virtual int32_t StereoEnabled(); virtual int32_t StereoEnabled();

View File

@ -117,6 +117,14 @@ int32_t CGxDeviceGLL::BufUnlock(CGxBuf* buf, uint32_t size) {
return this->IBufUnlock(buf); return this->IBufUnlock(buf);
} }
void CGxDeviceGLL::BufData(CGxBuf* buf, void* data, size_t size, uintptr_t offset) {
CGxDevice::BufData(buf, data, size, offset);
char* bufData = this->IBufLock(buf);
memcpy(reinterpret_cast<void*>(uintptr_t(bufData) + offset), data, size);
this->IBufUnlock(buf);
}
void CGxDeviceGLL::CapsWindowSize(CRect& rect) { void CGxDeviceGLL::CapsWindowSize(CRect& rect) {
CRect windowRect = this->DeviceCurWindow(); CRect windowRect = this->DeviceCurWindow();

View File

@ -43,6 +43,7 @@ class CGxDeviceGLL : public CGxDevice {
virtual void PoolSizeSet(CGxPool*, uint32_t); virtual void PoolSizeSet(CGxPool*, uint32_t);
virtual char* BufLock(CGxBuf*); virtual char* BufLock(CGxBuf*);
virtual int32_t BufUnlock(CGxBuf*, uint32_t); virtual int32_t BufUnlock(CGxBuf*, uint32_t);
virtual void BufData(CGxBuf*, void*, size_t, uintptr_t);
virtual void TexDestroy(CGxTex* texId); virtual void TexDestroy(CGxTex* texId);
virtual void IShaderCreate(CGxShader*); virtual void IShaderCreate(CGxShader*);
virtual void ShaderCreate(CGxShader*[], EGxShTarget, const char*, const char*, int32_t); virtual void ShaderCreate(CGxShader*[], EGxShTarget, const char*, const char*, int32_t);