intel: Take an intel_screen pointer in intel_alloc_region_* functions
This commit is contained in:
@@ -377,7 +377,8 @@ intel_update_renderbuffers(__DRIcontext *context, __DRIdrawable *drawable)
|
|||||||
intel_region_reference(®ion, depth_region);
|
intel_region_reference(®ion, depth_region);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
region = intel_region_alloc_for_handle(intel, buffers[i].cpp,
|
region = intel_region_alloc_for_handle(intel->intelScreen,
|
||||||
|
buffers[i].cpp,
|
||||||
drawable->w,
|
drawable->w,
|
||||||
drawable->h,
|
drawable->h,
|
||||||
buffers[i].pitch / buffers[i].cpp,
|
buffers[i].pitch / buffers[i].cpp,
|
||||||
|
@@ -182,7 +182,7 @@ intel_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
|
|||||||
/* alloc hardware renderbuffer */
|
/* alloc hardware renderbuffer */
|
||||||
DBG("Allocating %d x %d Intel RBO\n", width, height);
|
DBG("Allocating %d x %d Intel RBO\n", width, height);
|
||||||
|
|
||||||
irb->region = intel_region_alloc(intel, I915_TILING_NONE, cpp,
|
irb->region = intel_region_alloc(intel->intelScreen, I915_TILING_NONE, cpp,
|
||||||
width, height, GL_TRUE);
|
width, height, GL_TRUE);
|
||||||
if (!irb->region)
|
if (!irb->region)
|
||||||
return GL_FALSE; /* out of memory? */
|
return GL_FALSE; /* out of memory? */
|
||||||
|
@@ -137,7 +137,7 @@ intel_miptree_create(struct intel_context *intel,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
mt->region = intel_region_alloc(intel,
|
mt->region = intel_region_alloc(intel->intelScreen,
|
||||||
tiling,
|
tiling,
|
||||||
mt->cpp,
|
mt->cpp,
|
||||||
mt->total_width,
|
mt->total_width,
|
||||||
|
@@ -142,10 +142,10 @@ intel_region_unmap(struct intel_context *intel, struct intel_region *region)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct intel_region *
|
static struct intel_region *
|
||||||
intel_region_alloc_internal(struct intel_context *intel,
|
intel_region_alloc_internal(struct intel_screen *screen,
|
||||||
GLuint cpp,
|
GLuint cpp,
|
||||||
GLuint width, GLuint height, GLuint pitch,
|
GLuint width, GLuint height, GLuint pitch,
|
||||||
drm_intel_bo *buffer)
|
uint32_t tiling, drm_intel_bo *buffer)
|
||||||
{
|
{
|
||||||
struct intel_region *region;
|
struct intel_region *region;
|
||||||
|
|
||||||
@@ -164,44 +164,36 @@ intel_region_alloc_internal(struct intel_context *intel,
|
|||||||
region->pitch = pitch;
|
region->pitch = pitch;
|
||||||
region->refcount = 1;
|
region->refcount = 1;
|
||||||
region->buffer = buffer;
|
region->buffer = buffer;
|
||||||
|
region->tiling = tiling;
|
||||||
/* Default to no tiling */
|
region->screen = screen;
|
||||||
region->tiling = I915_TILING_NONE;
|
|
||||||
|
|
||||||
_DBG("%s <-- %p\n", __FUNCTION__, region);
|
_DBG("%s <-- %p\n", __FUNCTION__, region);
|
||||||
return region;
|
return region;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct intel_region *
|
struct intel_region *
|
||||||
intel_region_alloc(struct intel_context *intel,
|
intel_region_alloc(struct intel_screen *screen,
|
||||||
uint32_t tiling,
|
uint32_t tiling,
|
||||||
GLuint cpp, GLuint width, GLuint height,
|
GLuint cpp, GLuint width, GLuint height,
|
||||||
GLboolean expect_accelerated_upload)
|
GLboolean expect_accelerated_upload)
|
||||||
{
|
{
|
||||||
drm_intel_bo *buffer;
|
drm_intel_bo *buffer;
|
||||||
struct intel_region *region;
|
|
||||||
unsigned long flags = 0;
|
unsigned long flags = 0;
|
||||||
unsigned long aligned_pitch;
|
unsigned long aligned_pitch;
|
||||||
|
|
||||||
if (expect_accelerated_upload)
|
if (expect_accelerated_upload)
|
||||||
flags |= BO_ALLOC_FOR_RENDER;
|
flags |= BO_ALLOC_FOR_RENDER;
|
||||||
|
|
||||||
buffer = drm_intel_bo_alloc_tiled(intel->bufmgr, "region",
|
buffer = drm_intel_bo_alloc_tiled(screen->bufmgr, "region",
|
||||||
width, height, cpp,
|
width, height, cpp,
|
||||||
&tiling, &aligned_pitch, flags);
|
&tiling, &aligned_pitch, flags);
|
||||||
|
|
||||||
region = intel_region_alloc_internal(intel, cpp, width, height,
|
return intel_region_alloc_internal(screen, cpp, width, height,
|
||||||
aligned_pitch / cpp, buffer);
|
aligned_pitch / cpp, tiling, buffer);
|
||||||
if (region == NULL)
|
|
||||||
return region;
|
|
||||||
|
|
||||||
region->tiling = tiling;
|
|
||||||
|
|
||||||
return region;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct intel_region *
|
struct intel_region *
|
||||||
intel_region_alloc_for_handle(struct intel_context *intel,
|
intel_region_alloc_for_handle(struct intel_screen *screen,
|
||||||
GLuint cpp,
|
GLuint cpp,
|
||||||
GLuint width, GLuint height, GLuint pitch,
|
GLuint width, GLuint height, GLuint pitch,
|
||||||
GLuint handle, const char *name)
|
GLuint handle, const char *name)
|
||||||
@@ -209,9 +201,9 @@ intel_region_alloc_for_handle(struct intel_context *intel,
|
|||||||
struct intel_region *region, *dummy;
|
struct intel_region *region, *dummy;
|
||||||
drm_intel_bo *buffer;
|
drm_intel_bo *buffer;
|
||||||
int ret;
|
int ret;
|
||||||
uint32_t bit_6_swizzle;
|
uint32_t bit_6_swizzle, tiling;
|
||||||
|
|
||||||
region = _mesa_HashLookup(intel->intelScreen->named_regions, handle);
|
region = _mesa_HashLookup(screen->named_regions, handle);
|
||||||
if (region != NULL) {
|
if (region != NULL) {
|
||||||
dummy = NULL;
|
dummy = NULL;
|
||||||
if (region->width != width || region->height != height ||
|
if (region->width != width || region->height != height ||
|
||||||
@@ -225,25 +217,26 @@ intel_region_alloc_for_handle(struct intel_context *intel,
|
|||||||
return dummy;
|
return dummy;
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer = intel_bo_gem_create_from_name(intel->bufmgr, name, handle);
|
buffer = intel_bo_gem_create_from_name(screen->bufmgr, name, handle);
|
||||||
|
if (buffer == NULL)
|
||||||
region = intel_region_alloc_internal(intel, cpp,
|
return NULL;
|
||||||
width, height, pitch, buffer);
|
ret = drm_intel_bo_get_tiling(buffer, &tiling, &bit_6_swizzle);
|
||||||
if (region == NULL)
|
|
||||||
return region;
|
|
||||||
|
|
||||||
ret = drm_intel_bo_get_tiling(region->buffer, ®ion->tiling,
|
|
||||||
&bit_6_swizzle);
|
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
fprintf(stderr, "Couldn't get tiling of buffer %d (%s): %s\n",
|
fprintf(stderr, "Couldn't get tiling of buffer %d (%s): %s\n",
|
||||||
handle, name, strerror(-ret));
|
handle, name, strerror(-ret));
|
||||||
intel_region_release(®ion);
|
drm_intel_bo_unreference(buffer);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
region = intel_region_alloc_internal(screen, cpp,
|
||||||
|
width, height, pitch, tiling, buffer);
|
||||||
|
if (region == NULL) {
|
||||||
|
drm_intel_bo_unreference(buffer);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
region->name = handle;
|
region->name = handle;
|
||||||
region->screen = intel->intelScreen;
|
_mesa_HashInsert(screen->named_regions, handle, region);
|
||||||
_mesa_HashInsert(intel->intelScreen->named_regions, handle, region);
|
|
||||||
|
|
||||||
return region;
|
return region;
|
||||||
}
|
}
|
||||||
|
@@ -76,14 +76,14 @@ struct intel_region
|
|||||||
/* Allocate a refcounted region. Pointers to regions should only be
|
/* Allocate a refcounted region. Pointers to regions should only be
|
||||||
* copied by calling intel_reference_region().
|
* copied by calling intel_reference_region().
|
||||||
*/
|
*/
|
||||||
struct intel_region *intel_region_alloc(struct intel_context *intel,
|
struct intel_region *intel_region_alloc(struct intel_screen *screen,
|
||||||
uint32_t tiling,
|
uint32_t tiling,
|
||||||
GLuint cpp, GLuint width,
|
GLuint cpp, GLuint width,
|
||||||
GLuint height,
|
GLuint height,
|
||||||
GLboolean expect_accelerated_upload);
|
GLboolean expect_accelerated_upload);
|
||||||
|
|
||||||
struct intel_region *
|
struct intel_region *
|
||||||
intel_region_alloc_for_handle(struct intel_context *intel,
|
intel_region_alloc_for_handle(struct intel_screen *screen,
|
||||||
GLuint cpp,
|
GLuint cpp,
|
||||||
GLuint width, GLuint height, GLuint pitch,
|
GLuint width, GLuint height, GLuint pitch,
|
||||||
unsigned int handle, const char *name);
|
unsigned int handle, const char *name);
|
||||||
|
@@ -159,7 +159,8 @@ intel_create_image_from_name(__DRIcontext *context,
|
|||||||
image->data = loaderPrivate;
|
image->data = loaderPrivate;
|
||||||
cpp = _mesa_get_format_bytes(image->format);
|
cpp = _mesa_get_format_bytes(image->format);
|
||||||
|
|
||||||
image->region = intel_region_alloc_for_handle(intel, cpp, width, height,
|
image->region = intel_region_alloc_for_handle(intel->intelScreen,
|
||||||
|
cpp, width, height,
|
||||||
pitch, name, "image");
|
pitch, name, "image");
|
||||||
if (image->region == NULL) {
|
if (image->region == NULL) {
|
||||||
FREE(image);
|
FREE(image);
|
||||||
|
Reference in New Issue
Block a user