mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-15 13:10:31 +01:00
Merge remote-tracking branch 'mesa-public/master' into vulkan
This commit is contained in:
commit
09ba0a7c05
22 changed files with 283 additions and 79 deletions
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
130
docs/relnotes/10.6.9.html
Normal 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@entry=0x7fffd4097a08, fb=fb@entry=0x7fffd40fa900, buffers=buffers@entry=2, partial_clear=partial_clear@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 '& 3' instead of '% 4' everywhere</li>
|
||||
<li>t_dd_dmatmp: Pull out common 'count -= count & 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>
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -41,6 +41,8 @@ extern "C" {
|
|||
|
||||
struct lp_generated_code;
|
||||
|
||||
extern void
|
||||
gallivm_init_llvm_targets(void);
|
||||
|
||||
extern void
|
||||
lp_set_target_options(void);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 =
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 &&
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue