~mmach/netext73/mesa_2004

« back to all changes in this revision

Viewing changes to src/gallium/drivers/llvmpipe/lp_query.c

  • Committer: mmach
  • Date: 2021-03-12 20:48:59 UTC
  • Revision ID: netbit73@gmail.com-20210312204859-i194ujlcu82pq61p
21

Show diffs side-by-side

added added

removed removed

Lines of Context:
215
215
   }
216
216
 
217
217
 
218
 
   uint64_t value = 0;
 
218
   uint64_t value = 0, value2 = 0;
 
219
   unsigned num_values = 1;
219
220
   if (index == -1)
220
221
      if (unsignalled)
221
222
         value = 0;
259
260
            }
260
261
         }
261
262
         break;
 
263
      case PIPE_QUERY_SO_STATISTICS:
 
264
         value = pq->num_primitives_written[0];
 
265
         value2 = pq->num_primitives_generated[0];
 
266
         num_values = 2;
 
267
         break;
262
268
      case PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE:
263
269
         value = 0;
264
270
         for (unsigned s = 0; s < PIPE_MAX_VERTEX_STREAMS; s++)
315
321
   }
316
322
 
317
323
   void *dst = (uint8_t *)lpr->data + offset;
318
 
   switch (result_type) {
319
 
   case PIPE_QUERY_TYPE_I32: {
320
 
      int32_t *iptr = (int32_t *)dst;
321
 
      if (value > 0x7fffffff)
322
 
         *iptr = 0x7fffffff;
323
 
      else
324
 
         *iptr = (int32_t)value;
325
 
      break;
326
 
   }
327
 
   case PIPE_QUERY_TYPE_U32: {
328
 
      uint32_t *uptr = (uint32_t *)dst;
329
 
      if (value > 0xffffffff)
330
 
         *uptr = 0xffffffff;
331
 
      else
332
 
         *uptr = (uint32_t)value;
333
 
      break;
334
 
   }
335
 
   case PIPE_QUERY_TYPE_I64: {
336
 
      int64_t *iptr = (int64_t *)dst;
337
 
      *iptr = (int64_t)value;
338
 
      break;
339
 
   }
340
 
   case PIPE_QUERY_TYPE_U64: {
341
 
      uint64_t *uptr = (uint64_t *)dst;
342
 
      *uptr = (uint64_t)value;
343
 
      break;
344
 
   }
 
324
 
 
325
   for (unsigned i = 0; i < num_values; i++) {
 
326
 
 
327
      if (i == 1) {
 
328
         value = value2;
 
329
         dst = (char *)dst + ((result_type == PIPE_QUERY_TYPE_I64 ||
 
330
                               result_type == PIPE_QUERY_TYPE_U64) ? 8 : 4);
 
331
      }
 
332
      switch (result_type) {
 
333
      case PIPE_QUERY_TYPE_I32: {
 
334
         int32_t *iptr = (int32_t *)dst;
 
335
         if (value > 0x7fffffff)
 
336
            *iptr = 0x7fffffff;
 
337
         else
 
338
            *iptr = (int32_t)value;
 
339
         break;
 
340
      }
 
341
      case PIPE_QUERY_TYPE_U32: {
 
342
         uint32_t *uptr = (uint32_t *)dst;
 
343
         if (value > 0xffffffff)
 
344
            *uptr = 0xffffffff;
 
345
         else
 
346
            *uptr = (uint32_t)value;
 
347
         break;
 
348
      }
 
349
      case PIPE_QUERY_TYPE_I64: {
 
350
         int64_t *iptr = (int64_t *)dst;
 
351
         *iptr = (int64_t)value;
 
352
         break;
 
353
      }
 
354
      case PIPE_QUERY_TYPE_U64: {
 
355
         uint64_t *uptr = (uint64_t *)dst;
 
356
         *uptr = (uint64_t)value;
 
357
         break;
 
358
      }
 
359
      }
345
360
   }
346
361
}
347
362