DBG("This=%p State=%u(%s) Value=%08x\n", This,
         State, nine_d3drs_to_string(State), Value);
 
-    user_assert(State < D3DRS_COUNT, D3DERR_INVALIDCALL);
+    user_assert(State < D3DRS_COUNT, D3D_OK);
 
     if (unlikely(This->is_recording)) {
         state->rs_advertised[State] = Value;
                             DWORD *pValue )
 {
     user_assert(!This->pure, D3DERR_INVALIDCALL);
-    user_assert(State < D3DRS_COUNT, D3DERR_INVALIDCALL);
+    /* TODO: This needs tests */
+    if (State >= D3DRS_COUNT) {
+        *pValue = 0;
+        return D3D_OK;
+    }
 
     *pValue = This->state.rs_advertised[State];
     return D3D_OK;