Compare commits
14 Commits
mesa-10.2.
...
10.2
Author | SHA1 | Date | |
---|---|---|---|
|
52bd154980 | ||
|
9f1149876f | ||
|
b797208e6c | ||
|
8200c621a7 | ||
|
44dd7cbd52 | ||
|
bda7518e7c | ||
|
7d3f6f7995 | ||
|
907da04eb6 | ||
|
18336b99b2 | ||
|
38c5650656 | ||
|
b4584d9eed | ||
|
08923a1029 | ||
|
fc8fc3bfc8 | ||
|
f95fcb1716 |
@@ -1631,11 +1631,10 @@ if test "x$enable_gallium_llvm" = xyes; then
|
|||||||
AC_COMPUTE_INT([LLVM_VERSION_MINOR], [LLVM_VERSION_MINOR],
|
AC_COMPUTE_INT([LLVM_VERSION_MINOR], [LLVM_VERSION_MINOR],
|
||||||
[#include "${LLVM_INCLUDEDIR}/llvm/Config/llvm-config.h"])
|
[#include "${LLVM_INCLUDEDIR}/llvm/Config/llvm-config.h"])
|
||||||
|
|
||||||
dnl In LLVM 3.4.1 patch level was defined in config.h and not
|
LLVM_VERSION_PATCH=`echo $LLVM_VERSION | cut -d. -f3 | egrep -o '^[[0-9]]+'`
|
||||||
dnl llvm-config.h
|
if test -z "$LLVM_VERSION_PATCH"; then
|
||||||
AC_COMPUTE_INT([LLVM_VERSION_PATCH], [LLVM_VERSION_PATCH],
|
LLVM_VERSION_PATCH=0
|
||||||
[#include "${LLVM_INCLUDEDIR}/llvm/Config/config.h"],
|
fi
|
||||||
LLVM_VERSION_PATCH=0) dnl Default if LLVM_VERSION_PATCH not found
|
|
||||||
|
|
||||||
if test -n "${LLVM_VERSION_MAJOR}"; then
|
if test -n "${LLVM_VERSION_MAJOR}"; then
|
||||||
LLVM_VERSION_INT="${LLVM_VERSION_MAJOR}0${LLVM_VERSION_MINOR}"
|
LLVM_VERSION_INT="${LLVM_VERSION_MAJOR}0${LLVM_VERSION_MINOR}"
|
||||||
|
@@ -30,7 +30,9 @@ because compatibility contexts are not supported.
|
|||||||
|
|
||||||
<h2>SHA256 checksums</h2>
|
<h2>SHA256 checksums</h2>
|
||||||
<pre>
|
<pre>
|
||||||
TBD
|
4c5a25ccaf1a9734bbd10d62a1420cc8fd35a1060ce679f2fc846769a25fbeec MesaLib-10.2.8.tar.gz
|
||||||
|
1ef9ad3f241788d454f2ff8c9d65b6849dfc31c8fe91f70fd2930b81c8af1398 MesaLib-10.2.8.tar.bz2
|
||||||
|
d26218da3b44734b1d555267b4c63c48803c4c8b14d2bc53071be57014da37fa MesaLib-10.2.8.zip
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<h2>New features</h2>
|
<h2>New features</h2>
|
||||||
|
101
docs/relnotes/10.2.9.html
Normal file
101
docs/relnotes/10.2.9.html
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||||
|
<title>Mesa Release Notes</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<h1>The Mesa 3D Graphics Library</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<iframe src="../contents.html"></iframe>
|
||||||
|
<div class="content">
|
||||||
|
|
||||||
|
<h1>Mesa 10.2.9 Release Notes / October 12, 2014</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 10.2.9 is a bug fix release which fixes bugs found since the 10.2.8 release.
|
||||||
|
This is the final planned release for the 10.2 branch.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 10.2.9 implements the OpenGL 3.3 API, but the version reported by
|
||||||
|
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||||
|
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||||
|
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||||
|
3.3 is <strong>only</strong> available if requested at context creation
|
||||||
|
because compatibility contexts are not supported.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>SHA256 checksums</h2>
|
||||||
|
<pre>
|
||||||
|
f8d62857eed8f604a57710c58a8ffcfb8dab2dc4977ec27c956c7c4fd14032f6 MesaLib-10.2.9.tar.gz
|
||||||
|
f6031f8b7113a92325b60635c504c510490eebb2e707119bbff7bd86aa34657d MesaLib-10.2.9.tar.bz2
|
||||||
|
11c0ef4f3308fc29d9f15a77fd8f4842a946fce9e830250a1c95b171a446171a MesaLib-10.2.9.zip
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<h2>New features</h2>
|
||||||
|
<p>None</p>
|
||||||
|
|
||||||
|
<h2>Bug fixes</h2>
|
||||||
|
|
||||||
|
<p>This list is likely incomplete.</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=79462">Bug 79462</a> - [NVC0/Codegen] Shader compilation falis in spill logic</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83570">Bug 83570</a> - Glyphy demo throws unhandled Integer division by zero exception</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
<p>Andreas Pokorny (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>egl/drm: expose KHR_image_pixmap extension</li>
|
||||||
|
<li>i915: Fix black buffers when importing prime fds</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Emil Velikov (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: Add sha256 sums for the 10.2.8 release</li>
|
||||||
|
<li>Update VERSION to 10.2.9</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Ilia Mirkin (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nv50/ir: avoid deleting pseudo instructions too early</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Marek Olšák (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>radeonsi: release GS rings at context destruction</li>
|
||||||
|
<li>radeonsi: properly destroy the GS copy shader and scratch_bo for compute</li>
|
||||||
|
<li>st/dri: remove GALLIUM_MSAA and __GL_FSAA_MODE environment variables</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Roland Scheidegger (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallivm: fix idiv</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Thomas Hellstrom (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>st/xa: Fix regression in xa_yuv_planar_blit()</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Tom Stellard (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>configure.ac: Compute LLVM_VERSION_PATCH using llvm-config</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>rconde (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallivm,tgsi: fix idiv by zero crash</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -572,6 +572,7 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
disp->Extensions.EXT_buffer_age = EGL_TRUE;
|
disp->Extensions.EXT_buffer_age = EGL_TRUE;
|
||||||
|
disp->Extensions.KHR_image_pixmap = EGL_TRUE;
|
||||||
|
|
||||||
#ifdef HAVE_WAYLAND_PLATFORM
|
#ifdef HAVE_WAYLAND_PLATFORM
|
||||||
disp->Extensions.WL_bind_wayland_display = EGL_TRUE;
|
disp->Extensions.WL_bind_wayland_display = EGL_TRUE;
|
||||||
|
@@ -1248,8 +1248,24 @@ idiv_emit_cpu(
|
|||||||
struct lp_build_tgsi_context * bld_base,
|
struct lp_build_tgsi_context * bld_base,
|
||||||
struct lp_build_emit_data * emit_data)
|
struct lp_build_emit_data * emit_data)
|
||||||
{
|
{
|
||||||
emit_data->output[emit_data->chan] = lp_build_div(&bld_base->int_bld,
|
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||||
emit_data->args[0], emit_data->args[1]);
|
LLVMValueRef div_mask = lp_build_cmp(&bld_base->uint_bld,
|
||||||
|
PIPE_FUNC_EQUAL, emit_data->args[1],
|
||||||
|
bld_base->uint_bld.zero);
|
||||||
|
/* We want to make sure that we never divide/mod by zero to not
|
||||||
|
* generate sigfpe. We don't want to crash just because the
|
||||||
|
* shader is doing something weird. */
|
||||||
|
LLVMValueRef divisor = LLVMBuildOr(builder,
|
||||||
|
div_mask,
|
||||||
|
emit_data->args[1], "");
|
||||||
|
LLVMValueRef result = lp_build_div(&bld_base->int_bld,
|
||||||
|
emit_data->args[0], divisor);
|
||||||
|
LLVMValueRef not_div_mask = LLVMBuildNot(builder,
|
||||||
|
div_mask,"");
|
||||||
|
/* idiv by zero doesn't have a guaranteed return value chose 0 for now. */
|
||||||
|
emit_data->output[emit_data->chan] = LLVMBuildAnd(builder,
|
||||||
|
not_div_mask,
|
||||||
|
result, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TGSI_OPCODE_INEG (CPU Only) */
|
/* TGSI_OPCODE_INEG (CPU Only) */
|
||||||
@@ -1675,15 +1691,15 @@ udiv_emit_cpu(
|
|||||||
LLVMValueRef div_mask = lp_build_cmp(&bld_base->uint_bld,
|
LLVMValueRef div_mask = lp_build_cmp(&bld_base->uint_bld,
|
||||||
PIPE_FUNC_EQUAL, emit_data->args[1],
|
PIPE_FUNC_EQUAL, emit_data->args[1],
|
||||||
bld_base->uint_bld.zero);
|
bld_base->uint_bld.zero);
|
||||||
/* We want to make sure that we never divide/mod by zero to not
|
/* We want to make sure that we never divide/mod by zero to not
|
||||||
* generate sigfpe. We don't want to crash just because the
|
* generate sigfpe. We don't want to crash just because the
|
||||||
* shader is doing something weird. */
|
* shader is doing something weird. */
|
||||||
LLVMValueRef divisor = LLVMBuildOr(builder,
|
LLVMValueRef divisor = LLVMBuildOr(builder,
|
||||||
div_mask,
|
div_mask,
|
||||||
emit_data->args[1], "");
|
emit_data->args[1], "");
|
||||||
LLVMValueRef result = lp_build_div(&bld_base->uint_bld,
|
LLVMValueRef result = lp_build_div(&bld_base->uint_bld,
|
||||||
emit_data->args[0], divisor);
|
emit_data->args[0], divisor);
|
||||||
/* udiv by zero is guaranteed to return 0xffffffff */
|
/* udiv by zero is guaranteed to return 0xffffffff at least with d3d10 */
|
||||||
emit_data->output[emit_data->chan] = LLVMBuildOr(builder,
|
emit_data->output[emit_data->chan] = LLVMBuildOr(builder,
|
||||||
div_mask,
|
div_mask,
|
||||||
result, "");
|
result, "");
|
||||||
|
@@ -3332,10 +3332,10 @@ micro_idiv(union tgsi_exec_channel *dst,
|
|||||||
const union tgsi_exec_channel *src0,
|
const union tgsi_exec_channel *src0,
|
||||||
const union tgsi_exec_channel *src1)
|
const union tgsi_exec_channel *src1)
|
||||||
{
|
{
|
||||||
dst->i[0] = src0->i[0] / src1->i[0];
|
dst->i[0] = src1->i[0] ? src0->i[0] / src1->i[0] : 0;
|
||||||
dst->i[1] = src0->i[1] / src1->i[1];
|
dst->i[1] = src1->i[1] ? src0->i[1] / src1->i[1] : 0;
|
||||||
dst->i[2] = src0->i[2] / src1->i[2];
|
dst->i[2] = src1->i[2] ? src0->i[2] / src1->i[2] : 0;
|
||||||
dst->i[3] = src0->i[3] / src1->i[3];
|
dst->i[3] = src1->i[3] ? src0->i[3] / src1->i[3] : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#include <stack>
|
#include <stack>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
#include <tr1/unordered_set>
|
||||||
|
|
||||||
namespace nv50_ir {
|
namespace nv50_ir {
|
||||||
|
|
||||||
@@ -1544,6 +1545,11 @@ SpillCodeInserter::run(const std::list<ValuePair>& lst)
|
|||||||
LValue *lval = it->first->asLValue();
|
LValue *lval = it->first->asLValue();
|
||||||
Symbol *mem = it->second ? it->second->asSym() : NULL;
|
Symbol *mem = it->second ? it->second->asSym() : NULL;
|
||||||
|
|
||||||
|
// Keep track of which instructions to delete later. Deleting them
|
||||||
|
// inside the loop is unsafe since a single instruction may have
|
||||||
|
// multiple destinations that all need to be spilled (like OP_SPLIT).
|
||||||
|
std::tr1::unordered_set<Instruction *> to_del;
|
||||||
|
|
||||||
for (Value::DefIterator d = lval->defs.begin(); d != lval->defs.end();
|
for (Value::DefIterator d = lval->defs.begin(); d != lval->defs.end();
|
||||||
++d) {
|
++d) {
|
||||||
Value *slot = mem ?
|
Value *slot = mem ?
|
||||||
@@ -1576,7 +1582,7 @@ SpillCodeInserter::run(const std::list<ValuePair>& lst)
|
|||||||
d = lval->defs.erase(d);
|
d = lval->defs.erase(d);
|
||||||
--d;
|
--d;
|
||||||
if (slot->reg.file == FILE_MEMORY_LOCAL)
|
if (slot->reg.file == FILE_MEMORY_LOCAL)
|
||||||
delete_Instruction(func->getProgram(), defi);
|
to_del.insert(defi);
|
||||||
else
|
else
|
||||||
defi->setDef(0, slot);
|
defi->setDef(0, slot);
|
||||||
} else {
|
} else {
|
||||||
@@ -1584,6 +1590,9 @@ SpillCodeInserter::run(const std::list<ValuePair>& lst)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (std::tr1::unordered_set<Instruction *>::const_iterator it = to_del.begin();
|
||||||
|
it != to_del.end(); ++it)
|
||||||
|
delete_Instruction(func->getProgram(), *it);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: We're not trying to reuse old slots in a potential next iteration.
|
// TODO: We're not trying to reuse old slots in a potential next iteration.
|
||||||
|
@@ -40,6 +40,8 @@ static void si_destroy_context(struct pipe_context *context)
|
|||||||
|
|
||||||
si_release_all_descriptors(sctx);
|
si_release_all_descriptors(sctx);
|
||||||
|
|
||||||
|
pipe_resource_reference(&sctx->esgs_ring.buffer, NULL);
|
||||||
|
pipe_resource_reference(&sctx->gsvs_ring.buffer, NULL);
|
||||||
pipe_resource_reference(&sctx->null_const_buf.buffer, NULL);
|
pipe_resource_reference(&sctx->null_const_buf.buffer, NULL);
|
||||||
r600_resource_reference(&sctx->border_color_table, NULL);
|
r600_resource_reference(&sctx->border_color_table, NULL);
|
||||||
|
|
||||||
|
@@ -2616,5 +2616,8 @@ out:
|
|||||||
|
|
||||||
void si_pipe_shader_destroy(struct pipe_context *ctx, struct si_pipe_shader *shader)
|
void si_pipe_shader_destroy(struct pipe_context *ctx, struct si_pipe_shader *shader)
|
||||||
{
|
{
|
||||||
|
if (shader->gs_copy_shader)
|
||||||
|
si_pipe_shader_destroy(ctx, shader->gs_copy_shader);
|
||||||
|
|
||||||
r600_resource_reference(&shader->bo, NULL);
|
r600_resource_reference(&shader->bo, NULL);
|
||||||
}
|
}
|
||||||
|
@@ -2244,9 +2244,10 @@ static void si_delete_shader_selector(struct pipe_context *ctx,
|
|||||||
|
|
||||||
while (p) {
|
while (p) {
|
||||||
c = p->next_variant;
|
c = p->next_variant;
|
||||||
if (sel->type == PIPE_SHADER_GEOMETRY)
|
if (sel->type == PIPE_SHADER_GEOMETRY) {
|
||||||
si_pm4_delete_state(sctx, gs, p->pm4);
|
si_pm4_delete_state(sctx, gs, p->pm4);
|
||||||
else if (sel->type == PIPE_SHADER_FRAGMENT)
|
si_pm4_delete_state(sctx, vs, p->gs_copy_shader->pm4);
|
||||||
|
} else if (sel->type == PIPE_SHADER_FRAGMENT)
|
||||||
si_pm4_delete_state(sctx, ps, p->pm4);
|
si_pm4_delete_state(sctx, ps, p->pm4);
|
||||||
else if (p->key.vs.as_es)
|
else if (p->key.vs.as_es)
|
||||||
si_pm4_delete_state(sctx, es, p->pm4);
|
si_pm4_delete_state(sctx, es, p->pm4);
|
||||||
@@ -2259,7 +2260,7 @@ static void si_delete_shader_selector(struct pipe_context *ctx,
|
|||||||
|
|
||||||
free(sel->tokens);
|
free(sel->tokens);
|
||||||
free(sel);
|
free(sel);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void si_delete_vs_shader(struct pipe_context *ctx, void *state)
|
static void si_delete_vs_shader(struct pipe_context *ctx, void *state)
|
||||||
{
|
{
|
||||||
|
@@ -205,37 +205,6 @@ dri_fill_in_modes(struct dri_screen *screen)
|
|||||||
return (const __DRIconfig **)configs;
|
return (const __DRIconfig **)configs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The Gallium way to force MSAA. */
|
|
||||||
DEBUG_GET_ONCE_NUM_OPTION(msaa, "GALLIUM_MSAA", 0);
|
|
||||||
|
|
||||||
/* The NVIDIA way to force MSAA. The same variable is used by the NVIDIA
|
|
||||||
* driver. */
|
|
||||||
DEBUG_GET_ONCE_NUM_OPTION(msaa_nv, "__GL_FSAA_MODE", 0);
|
|
||||||
|
|
||||||
static void
|
|
||||||
dri_force_msaa_visual(struct st_visual *stvis,
|
|
||||||
struct pipe_screen *screen)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int samples = debug_get_option_msaa();
|
|
||||||
|
|
||||||
if (!samples)
|
|
||||||
samples = debug_get_option_msaa_nv();
|
|
||||||
|
|
||||||
if (samples <= 1)
|
|
||||||
return; /* nothing to do */
|
|
||||||
|
|
||||||
/* Choose a supported sample count greater than or equal to samples. */
|
|
||||||
for (i = samples; i <= MSAA_VISUAL_MAX_SAMPLES; i++) {
|
|
||||||
if (screen->is_format_supported(screen, stvis->color_format,
|
|
||||||
PIPE_TEXTURE_2D, i,
|
|
||||||
PIPE_BIND_RENDER_TARGET)) {
|
|
||||||
stvis->samples = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Roughly the converse of dri_fill_in_modes.
|
* Roughly the converse of dri_fill_in_modes.
|
||||||
*/
|
*/
|
||||||
@@ -260,10 +229,6 @@ dri_fill_st_visual(struct st_visual *stvis, struct dri_screen *screen,
|
|||||||
if (mode->sampleBuffers) {
|
if (mode->sampleBuffers) {
|
||||||
stvis->samples = mode->samples;
|
stvis->samples = mode->samples;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
/* This must be done after stvis->color_format is set. */
|
|
||||||
dri_force_msaa_visual(stvis, screen->base.screen);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (mode->depthBits) {
|
switch (mode->depthBits) {
|
||||||
default:
|
default:
|
||||||
|
@@ -530,11 +530,22 @@ renderer_draw_yuv(struct xa_context *r,
|
|||||||
src_x, src_y, src_w, src_h,
|
src_x, src_y, src_w, src_h,
|
||||||
dst_x, dst_y, dst_w, dst_h, srf);
|
dst_x, dst_y, dst_w, dst_h, srf);
|
||||||
|
|
||||||
|
if (!r->scissor_valid) {
|
||||||
|
r->scissor.minx = 0;
|
||||||
|
r->scissor.miny = 0;
|
||||||
|
r->scissor.maxx = r->dst->tex->width0;
|
||||||
|
r->scissor.maxy = r->dst->tex->height0;
|
||||||
|
}
|
||||||
|
|
||||||
|
r->pipe->set_scissor_states(r->pipe, 0, 1, &r->scissor);
|
||||||
|
|
||||||
cso_set_vertex_elements(r->cso, num_attribs, r->velems);
|
cso_set_vertex_elements(r->cso, num_attribs, r->velems);
|
||||||
util_draw_user_vertex_buffer(r->cso, r->buffer, PIPE_PRIM_QUADS,
|
util_draw_user_vertex_buffer(r->cso, r->buffer, PIPE_PRIM_QUADS,
|
||||||
4, /* verts */
|
4, /* verts */
|
||||||
num_attribs); /* attribs/vert */
|
num_attribs); /* attribs/vert */
|
||||||
r->buffer_size = 0;
|
r->buffer_size = 0;
|
||||||
|
|
||||||
|
xa_scissor_reset(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@@ -146,6 +146,7 @@ xa_yuv_planar_blit(struct xa_context *r,
|
|||||||
int w = box->x2 - box->x1;
|
int w = box->x2 - box->x1;
|
||||||
int h = box->y2 - box->y1;
|
int h = box->y2 - box->y1;
|
||||||
|
|
||||||
|
xa_scissor_update(r, x, y, box->x2, box->y2);
|
||||||
renderer_draw_yuv(r,
|
renderer_draw_yuv(r,
|
||||||
(float)src_x + scale_x * (x - dst_x),
|
(float)src_x + scale_x * (x - dst_x),
|
||||||
(float)src_y + scale_y * (y - dst_y),
|
(float)src_y + scale_y * (y - dst_y),
|
||||||
|
@@ -616,6 +616,8 @@ intel_create_image_from_fds(__DRIscreen *screen,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
intel_setup_image_from_dimensions(image);
|
||||||
|
|
||||||
image->planar_format = f;
|
image->planar_format = f;
|
||||||
for (i = 0; i < f->nplanes; i++) {
|
for (i = 0; i < f->nplanes; i++) {
|
||||||
index = f->planes[i].buffer_index;
|
index = f->planes[i].buffer_index;
|
||||||
|
Reference in New Issue
Block a user