mesa: add LOCATION_COMPONENT support to GetProgramResourceiv

From Section 7.3.1.1 (Naming Active Resources) of the OpenGL 4.5 spec:

   "For the property LOCATION_COMPONENT, a single integer indicating the first
   component of the location assigned to an active input or output variable is
   written to params. For input and output variables with a component specified
   by a layout qualifier, the specified component is written. For all other
   input and output variables, the value zero is written."

Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
This commit is contained in:
Timothy Arceri
2015-11-28 09:16:45 +11:00
parent b1c872a81e
commit f982e2434b
3 changed files with 16 additions and 0 deletions

View File

@@ -3570,6 +3570,7 @@ create_shader_variable(struct gl_shader_program *shProg,
}
out->type = type;
out->component = in->data.location_frac;
out->index = in->data.index;
out->patch = in->data.patch;
out->mode = in->data.mode;

View File

@@ -2570,6 +2570,12 @@ struct gl_shader_variable
*/
int location;
/**
* Specifies the first component the variable is stored in as per
* ARB_enhanced_layouts.
*/
unsigned component:2;
/**
* Output index for dual source blending.
*

View File

@@ -1216,6 +1216,15 @@ _mesa_program_resource_prop(struct gl_shader_program *shProg,
default:
goto invalid_operation;
}
case GL_LOCATION_COMPONENT:
switch (res->Type) {
case GL_PROGRAM_INPUT:
case GL_PROGRAM_OUTPUT:
*val = RESOURCE_VAR(res)->component;
return 1;
default:
goto invalid_operation;
}
case GL_LOCATION_INDEX:
if (res->Type != GL_PROGRAM_OUTPUT)
goto invalid_operation;