Merge remote-tracking branch 'mesa-public/master' into vulkan

This commit is contained in:
Jason Ekstrand 2015-10-03 11:32:29 -07:00
commit 09ba0a7c05
22 changed files with 283 additions and 79 deletions

View file

@ -16,6 +16,16 @@
<h1>News</h1>
<h2>October 3, 2015</h2>
<p>
<a href="relnotes/10.6.9.html">Mesa 10.6.9</a> is released.
This is a bug-fix release.
<br>
NOTE: It is anticipated that 10.6.9 will be the final release in the 10.6
series. Users of 10.5 are encouraged to migrate to the 11.0 series in order
to obtain future fixes.
</p>
<h2>September 28, 2015</h2>
<p>
<a href="relnotes/11.0.2.html">Mesa 11.0.2</a> is released.

View file

@ -21,6 +21,7 @@ The release notes summarize what's new or changed in each Mesa release.
</p>
<ul>
<li><a href="relnotes/10.6.9.html">10.6.9 release notes</a>
<li><a href="relnotes/11.0.2.html">11.0.2 release notes</a>
<li><a href="relnotes/11.0.1.html">11.0.1 release notes</a>
<li><a href="relnotes/10.6.8.html">10.6.8 release notes</a>

130
docs/relnotes/10.6.9.html Normal file
View file

@ -0,0 +1,130 @@
<!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.6.9 Release Notes / Octover 03, 2015</h1>
<p>
Mesa 10.6.9 is a bug fix release which fixes bugs found since the 10.6.8 release.
</p>
<p>
Mesa 10.6.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>
3406876aac67546d0c3e2cb97da330b62644c313e7992b95618662e13c54296a mesa-10.6.9.tar.gz
b04c4de6280b863babc2929573da17218d92e9e4ba6272d548d135415723e8c3 mesa-10.6.9.tar.xz
</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=38109">Bug 38109</a> - i915 driver crashes if too few vertices are submitted (Mesa 7.10.2)</li>
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=55552">Bug 55552</a> - Compile errors with --enable-mangling</li>
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86281">Bug 86281</a> - brw_meta_fast_clear (brw=brw&#64;entry=0x7fffd4097a08, fb=fb&#64;entry=0x7fffd40fa900, buffers=buffers&#64;entry=2, partial_clear=partial_clear&#64;entry=false)</li>
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91970">Bug 91970</a> - [BSW regression] dEQP-GLES3.functional.shaders.precision.int.highp_mul_vertex</li>
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=92072">Bug 92072</a> - Wine breakage since d082c5324 (st/mesa: don't call st_validate_state in BlitFramebuffer)</li>
</ul>
<h2>Changes</h2>
<p>Brian Paul (1):</p>
<ul>
<li>st/mesa: try PIPE_BIND_RENDER_TARGET when choosing float texture formats</li>
</ul>
<p>Chris Wilson (1):</p>
<ul>
<li>i965: Remove early release of DRI2 miptree</li>
</ul>
<p>Emil Velikov (4):</p>
<ul>
<li>docs: add sha256 checksums for 10.6.8</li>
<li>cherry-ignore: add commit non applicable for 10.6</li>
<li>cherry-ignore: add commit non applicable for 10.6</li>
<li>Update version to 10.6.9</li>
</ul>
<p>Iago Toral Quiroga (1):</p>
<ul>
<li>mesa: Fix GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE for default framebuffer.</li>
</ul>
<p>Ian Romanick (5):</p>
<ul>
<li>t_dd_dmatmp: Make "count" actually be the count</li>
<li>t_dd_dmatmp: Clean up improper code formatting from previous patch</li>
<li>t_dd_dmatmp: Use '&amp; 3' instead of '% 4' everywhere</li>
<li>t_dd_dmatmp: Pull out common 'count -= count &amp; 3' code</li>
<li>t_dd_dmatmp: Use addition instead of subtraction in loop bounds</li>
</ul>
<p>Jeremy Huddleston (1):</p>
<ul>
<li>configure.ac: Add support to enable read-only text segment on x86.</li>
</ul>
<p>Kristian Høgsberg Kristensen (1):</p>
<ul>
<li>i965: Respect stride and subreg_offset for ATTR registers</li>
</ul>
<p>Kyle Brenneman (3):</p>
<ul>
<li>glx: Fix build errors with --enable-mangling (v2)</li>
<li>mapi: Make _glapi_get_stub work with "gl" or "mgl" prefix.</li>
<li>glx: Don't hard-code the name "libGL.so.1" in driOpenDriver (v3)</li>
</ul>
<p>Leo Liu (1):</p>
<ul>
<li>radeon/vce: fix vui time_scale zero error</li>
</ul>
<p>Marek Olšák (1):</p>
<ul>
<li>st/mesa: fix front buffer regression after dropping st_validate_state in Blit</li>
</ul>
<p>Roland Scheidegger (1):</p>
<ul>
<li>mesa: fix mipmap generation for immutable, compressed textures</li>
</ul>
</div>
</body>
</html>

View file

@ -152,12 +152,51 @@ _eglParseContextAttribList(_EGLContext *ctx, _EGLDisplay *dpy,
/* The EGL_KHR_create_context spec says:
*
* "Flags are only defined for OpenGL context creation, and
* specifying a flags value other than zero for other types of
* contexts, including OpenGL ES contexts, will generate an
* error."
* "If the EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR flag bit is set in
* EGL_CONTEXT_FLAGS_KHR, then a <debug context> will be created.
* [...]
* In some cases a debug context may be identical to a non-debug
* context. This bit is supported for OpenGL and OpenGL ES
* contexts."
*/
if (api != EGL_OPENGL_API && val != 0) {
if ((val & EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR) &&
(api != EGL_OPENGL_API && api != EGL_OPENGL_ES_API)) {
err = EGL_BAD_ATTRIBUTE;
break;
}
/* The EGL_KHR_create_context spec says:
*
* "If the EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR flag bit
* is set in EGL_CONTEXT_FLAGS_KHR, then a <forward-compatible>
* context will be created. Forward-compatible contexts are
* defined only for OpenGL versions 3.0 and later. They must not
* support functionality marked as <deprecated> by that version of
* the API, while a non-forward-compatible context must support
* all functionality in that version, deprecated or not. This bit
* is supported for OpenGL contexts, and requesting a
* forward-compatible context for OpenGL versions less than 3.0
* will generate an error."
*/
if ((val & EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR) &&
(api != EGL_OPENGL_API || ctx->ClientMajorVersion < 3)) {
err = EGL_BAD_ATTRIBUTE;
break;
}
/* The EGL_KHR_create_context_spec says:
*
* "If the EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR bit is set in
* EGL_CONTEXT_FLAGS_KHR, then a context supporting <robust buffer
* access> will be created. Robust buffer access is defined in the
* GL_ARB_robustness extension specification, and the resulting
* context must also support either the GL_ARB_robustness
* extension, or a version of OpenGL incorporating equivalent
* functionality. This bit is supported for OpenGL contexts.
*/
if ((val & EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR) &&
(api != EGL_OPENGL_API ||
!dpy->Extensions.EXT_create_context_robustness)) {
err = EGL_BAD_ATTRIBUTE;
break;
}

View file

@ -81,6 +81,8 @@
# pragma pop_macro("DEBUG")
#endif
#include "c11/threads.h"
#include "os/os_thread.h"
#include "pipe/p_config.h"
#include "util/u_debug.h"
#include "util/u_cpu_detect.h"
@ -103,6 +105,33 @@ static LLVMEnsureMultithreaded lLVMEnsureMultithreaded;
}
static once_flag init_native_targets_once_flag;
static void init_native_targets()
{
// If we have a native target, initialize it to ensure it is linked in and
// usable by the JIT.
llvm::InitializeNativeTarget();
llvm::InitializeNativeTargetAsmPrinter();
llvm::InitializeNativeTargetDisassembler();
}
/**
* The llvm target registry is not thread-safe, so drivers and state-trackers
* that want to initialize targets should use the gallivm_init_llvm_targets()
* function to safely initialize targets.
*
* LLVM targets should be initialized before the driver or state-tracker tries
* to access the registry.
*/
extern "C" void
gallivm_init_llvm_targets(void)
{
call_once(&init_native_targets_once_flag, init_native_targets);
}
extern "C" void
lp_set_target_options(void)
{
@ -115,13 +144,7 @@ lp_set_target_options(void)
llvm::DisablePrettyStackTrace = true;
#endif
// If we have a native target, initialize it to ensure it is linked in and
// usable by the JIT.
llvm::InitializeNativeTarget();
llvm::InitializeNativeTargetAsmPrinter();
llvm::InitializeNativeTargetDisassembler();
gallivm_init_llvm_targets();
}

View file

@ -41,6 +41,8 @@ extern "C" {
struct lp_generated_code;
extern void
gallivm_init_llvm_targets(void);
extern void
lp_set_target_options(void);

View file

@ -25,6 +25,8 @@
*/
#include "radeon_llvm_emit.h"
#include "radeon_elf_util.h"
#include "c11/threads.h"
#include "gallivm/lp_bld_misc.h"
#include "util/u_memory.h"
#include "pipe/p_shader_tokens.h"
@ -86,30 +88,29 @@ void radeon_llvm_shader_type(LLVMValueRef F, unsigned type)
static void init_r600_target()
{
static unsigned initialized = 0;
if (!initialized) {
gallivm_init_llvm_targets();
#if HAVE_LLVM < 0x0307
LLVMInitializeR600TargetInfo();
LLVMInitializeR600Target();
LLVMInitializeR600TargetMC();
LLVMInitializeR600AsmPrinter();
LLVMInitializeR600TargetInfo();
LLVMInitializeR600Target();
LLVMInitializeR600TargetMC();
LLVMInitializeR600AsmPrinter();
#else
LLVMInitializeAMDGPUTargetInfo();
LLVMInitializeAMDGPUTarget();
LLVMInitializeAMDGPUTargetMC();
LLVMInitializeAMDGPUAsmPrinter();
LLVMInitializeAMDGPUTargetInfo();
LLVMInitializeAMDGPUTarget();
LLVMInitializeAMDGPUTargetMC();
LLVMInitializeAMDGPUAsmPrinter();
#endif
initialized = 1;
}
}
static once_flag init_r600_target_once_flag = ONCE_FLAG_INIT;
LLVMTargetRef radeon_llvm_get_r600_target(const char *triple)
{
LLVMTargetRef target = NULL;
char *err_message = NULL;
init_r600_target();
call_once(&init_r600_target_once_flag, init_r600_target);
if (LLVMGetTargetFromTriple(triple, &target, &err_message)) {
fprintf(stderr, "Cannot find target for triple %s ", triple);

View file

@ -35,7 +35,8 @@ lib@OPENCL_LIBNAME@_la_LIBADD = \
-lclangEdit \
-lclangLex \
-lclangBasic \
$(LLVM_LIBS)
$(LLVM_LIBS) \
$(PTHREAD_LIBS)
nodist_EXTRA_lib@OPENCL_LIBNAME@_la_SOURCES = dummy.cpp
lib@OPENCL_LIBNAME@_la_SOURCES =

View file

@ -370,6 +370,9 @@ typedef struct {
const struct glsl_type *interface_type;
} nir_variable;
#define nir_foreach_variable(var, var_list) \
foreach_list_typed(nir_variable, var, node, var_list)
typedef struct {
struct exec_node node;

View file

@ -218,7 +218,7 @@ nir_lower_clip_vs(nir_shader *shader, unsigned ucp_enables)
return;
/* find clipvertex/position outputs: */
foreach_list_typed(nir_variable, var, node, &shader->outputs) {
nir_foreach_variable(var, &shader->outputs) {
int loc = var->data.driver_location;
/* keep track of last used driver-location.. we'll be
@ -310,7 +310,7 @@ nir_lower_clip_fs(nir_shader *shader, unsigned ucp_enables)
if (!ucp_enables)
return;
foreach_list_typed(nir_variable, var, node, &shader->inputs) {
nir_foreach_variable(var, &shader->inputs) {
int loc = var->data.driver_location;
/* keep track of last used driver-location.. we'll be

View file

@ -47,7 +47,7 @@ nir_assign_var_locations(struct exec_list *var_list, unsigned *size,
{
unsigned location = 0;
foreach_list_typed(nir_variable, var, node, var_list) {
nir_foreach_variable(var, var_list) {
/*
* UBO's have their own address spaces, so don't count them towards the
* number of global uniforms

View file

@ -84,7 +84,7 @@ nir_lower_outputs_to_temporaries(nir_shader *shader)
/* Walk over all of the outputs turn each output into a temporary and
* make a new variable for the actual output.
*/
foreach_list_typed(nir_variable, var, node, &state.old_outputs) {
nir_foreach_variable(var, &state.old_outputs) {
nir_variable *output = ralloc(shader, nir_variable);
memcpy(output, var, sizeof *output);

View file

@ -83,7 +83,7 @@ setup_inputs(lower_2side_state *state)
int maxloc = -1;
/* find color/face inputs: */
foreach_list_typed(nir_variable, var, node, &state->shader->inputs) {
nir_foreach_variable(var, &state->shader->inputs) {
int loc = var->data.driver_location;
/* keep track of last used driver-location.. we'll be

View file

@ -453,7 +453,7 @@ print_intrinsic_instr(nir_intrinsic_instr *instr, print_state *state)
return;
}
foreach_list_typed(nir_variable, var, node, var_list) {
nir_foreach_variable(var, var_list) {
if ((var->data.driver_location == instr->const_index[0]) &&
var->name) {
fprintf(fp, "\t/* %s */", var->name);
@ -872,7 +872,7 @@ print_function_impl(nir_function_impl *impl, print_state *state)
fprintf(fp, "{\n");
foreach_list_typed(nir_variable, var, node, &impl->locals) {
nir_foreach_variable(var, &impl->locals) {
fprintf(fp, "\t");
print_var_decl(var, state);
}
@ -970,23 +970,23 @@ nir_print_shader(nir_shader *shader, FILE *fp)
fprintf(fp, "shader: %s\n", gl_shader_stage_name(shader->stage));
foreach_list_typed(nir_variable, var, node, &shader->uniforms) {
nir_foreach_variable(var, &shader->uniforms) {
print_var_decl(var, &state);
}
foreach_list_typed(nir_variable, var, node, &shader->inputs) {
nir_foreach_variable(var, &shader->inputs) {
print_var_decl(var, &state);
}
foreach_list_typed(nir_variable, var, node, &shader->outputs) {
nir_foreach_variable(var, &shader->outputs) {
print_var_decl(var, &state);
}
foreach_list_typed(nir_variable, var, node, &shader->globals) {
nir_foreach_variable(var, &shader->globals) {
print_var_decl(var, &state);
}
foreach_list_typed(nir_variable, var, node, &shader->system_values) {
nir_foreach_variable(var, &shader->system_values) {
print_var_decl(var, &state);
}

View file

@ -934,7 +934,7 @@ validate_function_impl(nir_function_impl *impl, validate_state *state)
state->parent_node = &impl->cf_node;
exec_list_validate(&impl->locals);
foreach_list_typed(nir_variable, var, node, &impl->locals) {
nir_foreach_variable(var, &impl->locals) {
validate_var_decl(var, false, state);
}
@ -1016,27 +1016,27 @@ nir_validate_shader(nir_shader *shader)
state.shader = shader;
exec_list_validate(&shader->uniforms);
foreach_list_typed(nir_variable, var, node, &shader->uniforms) {
nir_foreach_variable(var, &shader->uniforms) {
validate_var_decl(var, true, &state);
}
exec_list_validate(&shader->inputs);
foreach_list_typed(nir_variable, var, node, &shader->inputs) {
nir_foreach_variable(var, &shader->inputs) {
validate_var_decl(var, true, &state);
}
exec_list_validate(&shader->outputs);
foreach_list_typed(nir_variable, var, node, &shader->outputs) {
nir_foreach_variable(var, &shader->outputs) {
validate_var_decl(var, true, &state);
}
exec_list_validate(&shader->globals);
foreach_list_typed(nir_variable, var, node, &shader->globals) {
nir_foreach_variable(var, &shader->globals) {
validate_var_decl(var, true, &state);
}
exec_list_validate(&shader->system_values);
foreach_list_typed(nir_variable, var, node, &shader->system_values) {
nir_foreach_variable(var, &shader->system_values) {
validate_var_decl(var, true, &state);
}

View file

@ -58,7 +58,7 @@ fs_visitor::nir_setup_inputs()
{
nir_inputs = bld.vgrf(BRW_REGISTER_TYPE_F, nir->num_inputs);
foreach_list_typed(nir_variable, var, node, &nir->inputs) {
nir_foreach_variable(var, &nir->inputs) {
enum brw_reg_type type = brw_type_for_base_type(var->type);
fs_reg input = offset(nir_inputs, bld, var->data.driver_location);
@ -122,7 +122,7 @@ fs_visitor::nir_setup_outputs()
nir_outputs = bld.vgrf(BRW_REGISTER_TYPE_F, nir->num_outputs);
foreach_list_typed(nir_variable, var, node, &nir->outputs) {
nir_foreach_variable(var, &nir->outputs) {
fs_reg reg = offset(nir_outputs, bld, var->data.driver_location);
int vector_elements =
@ -180,7 +180,7 @@ fs_visitor::nir_setup_uniforms()
uniforms = nir->num_uniforms;
foreach_list_typed(nir_variable, var, node, &nir->uniforms) {
nir_foreach_variable(var, &nir->uniforms) {
/* UBO's and atomics don't take up space in the uniform file */
if (var->interface_type != NULL || var->type->contains_atomic())
continue;

View file

@ -40,7 +40,7 @@ brw_nir_lower_outputs(nir_shader *nir, bool is_scalar)
if (is_scalar) {
nir_assign_var_locations(&nir->outputs, &nir->num_outputs, type_size_scalar);
} else {
foreach_list_typed(nir_variable, var, node, &nir->outputs)
nir_foreach_variable(var, &nir->outputs)
var->data.driver_location = var->data.location;
}
}

View file

@ -129,7 +129,7 @@ brw_nir_setup_glsl_uniforms(nir_shader *shader,
{
unsigned comps_per_unit = is_scalar ? 1 : 4;
foreach_list_typed(nir_variable, var, node, &shader->uniforms) {
nir_foreach_variable(var, &shader->uniforms) {
/* UBO's, atomics and samplers don't take up space in the
uniform file */
if (var->interface_type != NULL || var->type->contains_atomic())

View file

@ -119,7 +119,7 @@ vec4_visitor::nir_setup_inputs()
{
nir_inputs = ralloc_array(mem_ctx, src_reg, nir->num_inputs);
foreach_list_typed(nir_variable, var, node, &nir->inputs) {
nir_foreach_variable(var, &nir->inputs) {
int offset = var->data.driver_location;
unsigned size = type_size_vec4(var->type);
for (unsigned i = 0; i < size; i++) {
@ -134,7 +134,7 @@ vec4_visitor::nir_setup_uniforms()
{
uniforms = nir->num_uniforms;
foreach_list_typed(nir_variable, var, node, &nir->uniforms) {
nir_foreach_variable(var, &nir->uniforms) {
/* UBO's and atomics don't take up space in the uniform file */
if (var->interface_type != NULL || var->type->contains_atomic())
continue;

View file

@ -44,33 +44,23 @@
* (see enum brw_wm_barycentric_interp_mode) is needed by the fragment shader.
*/
unsigned
brw_compute_barycentric_interp_modes(struct brw_context *brw,
brw_compute_barycentric_interp_modes(const struct brw_device_info *devinfo,
bool shade_model_flat,
bool persample_shading,
const struct gl_fragment_program *fprog)
nir_shader *shader)
{
unsigned barycentric_interp_modes = 0;
int attr;
/* Loop through all fragment shader inputs to figure out what interpolation
* modes are in use, and set the appropriate bits in
* barycentric_interp_modes.
*/
for (attr = 0; attr < VARYING_SLOT_MAX; ++attr) {
enum glsl_interp_qualifier interp_qualifier =
fprog->InterpQualifier[attr];
bool is_centroid = (fprog->IsCentroid & BITFIELD64_BIT(attr)) &&
!persample_shading;
bool is_sample = (fprog->IsSample & BITFIELD64_BIT(attr)) ||
persample_shading;
bool is_gl_Color = attr == VARYING_SLOT_COL0 || attr == VARYING_SLOT_COL1;
/* Ignore unused inputs. */
if (!(fprog->Base.InputsRead & BITFIELD64_BIT(attr)))
continue;
nir_foreach_variable(var, &shader->inputs) {
enum glsl_interp_qualifier interp_qualifier = var->data.interpolation;
bool is_centroid = var->data.centroid && !persample_shading;
bool is_sample = var->data.sample || persample_shading;
bool is_gl_Color = (var->data.location == VARYING_SLOT_COL0) ||
(var->data.location == VARYING_SLOT_COL1);
/* Ignore WPOS and FACE, because they don't require interpolation. */
if (attr == VARYING_SLOT_POS || attr == VARYING_SLOT_FACE)
if (var->data.location == VARYING_SLOT_POS ||
var->data.location == VARYING_SLOT_FACE)
continue;
/* Determine the set (or sets) of barycentric coordinates needed to
@ -88,7 +78,7 @@ brw_compute_barycentric_interp_modes(struct brw_context *brw,
1 << BRW_WM_NONPERSPECTIVE_SAMPLE_BARYCENTRIC;
}
if ((!is_centroid && !is_sample) ||
brw->needs_unlit_centroid_workaround) {
devinfo->needs_unlit_centroid_workaround) {
barycentric_interp_modes |=
1 << BRW_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC;
}
@ -103,7 +93,7 @@ brw_compute_barycentric_interp_modes(struct brw_context *brw,
1 << BRW_WM_PERSPECTIVE_SAMPLE_BARYCENTRIC;
}
if ((!is_centroid && !is_sample) ||
brw->needs_unlit_centroid_workaround) {
devinfo->needs_unlit_centroid_workaround) {
barycentric_interp_modes |=
1 << BRW_WM_PERSPECTIVE_PIXEL_BARYCENTRIC;
}
@ -220,9 +210,10 @@ brw_codegen_wm_prog(struct brw_context *brw,
}
prog_data.barycentric_interp_modes =
brw_compute_barycentric_interp_modes(brw, key->flat_shade,
brw_compute_barycentric_interp_modes(brw->intelScreen->devinfo,
key->flat_shade,
key->persample_shading,
&fp->program);
fp->program.Base.nir);
if (unlikely(brw->perf_debug)) {
start_busy = (brw->batch.last_bo &&

View file

@ -89,11 +89,13 @@ void brw_wm_debug_recompile(struct brw_context *brw,
void
brw_upload_wm_prog(struct brw_context *brw);
struct nir_shader;
unsigned
brw_compute_barycentric_interp_modes(struct brw_context *brw,
brw_compute_barycentric_interp_modes(const struct brw_device_info *devinfo,
bool shade_model_flat,
bool persample_shading,
const struct gl_fragment_program *fprog);
struct nir_shader *shader);
#ifdef __cplusplus
} // extern "C"

View file

@ -509,9 +509,10 @@ really_do_wm_prog(struct brw_context *brw,
anv_nir_apply_dynamic_offsets(pipeline, fs->Program->nir, &prog_data->base);
prog_data->barycentric_interp_modes =
brw_compute_barycentric_interp_modes(brw, key->flat_shade,
brw_compute_barycentric_interp_modes(brw->intelScreen->devinfo,
key->flat_shade,
key->persample_shading,
&fp->program);
fp->program.Base.nir);
set_binding_table_layout(&prog_data->base, pipeline,
VK_SHADER_STAGE_FRAGMENT);