mirror of
https://gitee.com/openharmony/third_party_mesa3d
synced 2024-11-28 18:10:34 +00:00
intel: Add an interface for saving/restoring the batchbuffer state.
This will be used to avoid the prepare() step in the i965 driver's state setup. Instead, we can just speculatively emit the primitive into the batchbuffer, then check if the batch is too big, rollback and flush, and replay the primitive. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Acked-by: Paul Berry <stereotype441@gmail.com>
This commit is contained in:
parent
db364a8af0
commit
3faf56ffbd
@ -24,7 +24,7 @@ USER_CXXFLAGS="$CXXFLAGS"
|
|||||||
dnl Versions for external dependencies
|
dnl Versions for external dependencies
|
||||||
LIBDRM_REQUIRED=2.4.24
|
LIBDRM_REQUIRED=2.4.24
|
||||||
LIBDRM_RADEON_REQUIRED=2.4.24
|
LIBDRM_RADEON_REQUIRED=2.4.24
|
||||||
LIBDRM_INTEL_REQUIRED=2.4.24
|
LIBDRM_INTEL_REQUIRED=2.4.27
|
||||||
LIBDRM_NOUVEAU_REQUIRED=0.6
|
LIBDRM_NOUVEAU_REQUIRED=0.6
|
||||||
DRI2PROTO_REQUIRED=2.6
|
DRI2PROTO_REQUIRED=2.6
|
||||||
GLPROTO_REQUIRED=1.4.14
|
GLPROTO_REQUIRED=1.4.14
|
||||||
|
@ -87,6 +87,27 @@ intel_batchbuffer_reset(struct intel_context *intel)
|
|||||||
intel->batch.used = 0;
|
intel->batch.used = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
intel_batchbuffer_save_state(struct intel_context *intel)
|
||||||
|
{
|
||||||
|
intel->batch.saved.used = intel->batch.used;
|
||||||
|
intel->batch.saved.reloc_count =
|
||||||
|
drm_intel_gem_bo_get_reloc_count(intel->batch.bo);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
intel_batchbuffer_reset_to_saved(struct intel_context *intel)
|
||||||
|
{
|
||||||
|
drm_intel_gem_bo_clear_relocs(intel->batch.bo, intel->batch.saved.reloc_count);
|
||||||
|
|
||||||
|
intel->batch.used = intel->batch.saved.used;
|
||||||
|
|
||||||
|
/* Cached batch state is dead, since we just cleared some unknown part of the
|
||||||
|
* batchbuffer. Assume that the caller resets any other state necessary.
|
||||||
|
*/
|
||||||
|
clear_cache(intel);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
intel_batchbuffer_free(struct intel_context *intel)
|
intel_batchbuffer_free(struct intel_context *intel)
|
||||||
{
|
{
|
||||||
|
@ -12,6 +12,8 @@
|
|||||||
void intel_batchbuffer_init(struct intel_context *intel);
|
void intel_batchbuffer_init(struct intel_context *intel);
|
||||||
void intel_batchbuffer_reset(struct intel_context *intel);
|
void intel_batchbuffer_reset(struct intel_context *intel);
|
||||||
void intel_batchbuffer_free(struct intel_context *intel);
|
void intel_batchbuffer_free(struct intel_context *intel);
|
||||||
|
void intel_batchbuffer_save_state(struct intel_context *intel);
|
||||||
|
void intel_batchbuffer_reset_to_saved(struct intel_context *intel);
|
||||||
|
|
||||||
void _intel_batchbuffer_flush(struct intel_context *intel,
|
void _intel_batchbuffer_flush(struct intel_context *intel,
|
||||||
const char *file, int line);
|
const char *file, int line);
|
||||||
|
@ -210,6 +210,11 @@ struct intel_context
|
|||||||
|
|
||||||
uint32_t state_batch_offset;
|
uint32_t state_batch_offset;
|
||||||
bool is_blit;
|
bool is_blit;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
uint16_t used;
|
||||||
|
int reloc_count;
|
||||||
|
} saved;
|
||||||
} batch;
|
} batch;
|
||||||
|
|
||||||
drm_intel_bo *first_post_swapbuffers_batch;
|
drm_intel_bo *first_post_swapbuffers_batch;
|
||||||
|
Loading…
Reference in New Issue
Block a user