wined3d: Improve float constant loading a bit.
- Use a list to keep track of what constants are set.
- Move TRACEs and checkGLcall calls out of the main constant loading loop.
diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c
index 6dde429..823bc7a 100644
--- a/dlls/wined3d/stateblock.c
+++ b/dlls/wined3d/stateblock.c
@@ -53,6 +53,9 @@
object->changed.vertexShaderConstantsF = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(BOOL) * GL_LIMITS(vshader_constantsF));
WINED3D_MEMCHECK(object->changed.vertexShaderConstantsF);
+ list_init(&object->set_vconstantsF);
+ list_init(&object->set_pconstantsF);
+
#undef WINED3D_MEMCHECK
return WINED3D_OK;
@@ -225,6 +228,8 @@
TRACE("(%p) : Releasing from %ld\n", This, refCount + 1);
if (!refCount) {
+ constant_entry *constant, *constant2;
+
/* type 0 represents the primary stateblock, so free all the resources */
if (This->blockType == WINED3DSBT_INIT) {
int counter;
@@ -274,6 +279,14 @@
HeapFree(GetProcessHeap(), 0, This->set.pixelShaderConstantsF);
HeapFree(GetProcessHeap(), 0, This->changed.pixelShaderConstantsF);
+ LIST_FOR_EACH_ENTRY_SAFE(constant, constant2, &This->set_vconstantsF, constant_entry, entry) {
+ HeapFree(GetProcessHeap(), 0, constant);
+ }
+
+ LIST_FOR_EACH_ENTRY_SAFE(constant, constant2, &This->set_pconstantsF, constant_entry, entry) {
+ HeapFree(GetProcessHeap(), 0, constant);
+ }
+
HeapFree(GetProcessHeap(), 0, This);
}
return refCount;