r600: need to export something from PS
Also avoids empty shader for "END" - seems to be somewhat valid fp Maybe this can be done differently in the future (fake FRAG_RESULT_COLOR already in Map_Fragment_Program() or is there a way to program the chip to not hang in case of no exports.
This commit is contained in:
@@ -4187,6 +4187,7 @@ GLboolean Process_Fragment_Exports(r700_AssemblerBase *pR700AsmCode,
|
|||||||
GLbitfield OutputsWritten)
|
GLbitfield OutputsWritten)
|
||||||
{
|
{
|
||||||
unsigned int unBit;
|
unsigned int unBit;
|
||||||
|
GLuint export_count = 0;
|
||||||
|
|
||||||
if(pR700AsmCode->depth_export_register_number >= 0)
|
if(pR700AsmCode->depth_export_register_number >= 0)
|
||||||
{
|
{
|
||||||
@@ -4208,6 +4209,7 @@ GLboolean Process_Fragment_Exports(r700_AssemblerBase *pR700AsmCode,
|
|||||||
{
|
{
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
|
export_count++;
|
||||||
}
|
}
|
||||||
unBit = 1 << FRAG_RESULT_DEPTH;
|
unBit = 1 << FRAG_RESULT_DEPTH;
|
||||||
if(OutputsWritten & unBit)
|
if(OutputsWritten & unBit)
|
||||||
@@ -4221,6 +4223,13 @@ GLboolean Process_Fragment_Exports(r700_AssemblerBase *pR700AsmCode,
|
|||||||
{
|
{
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
|
export_count++;
|
||||||
|
}
|
||||||
|
/* Need to export something, otherwise we'll hang
|
||||||
|
* results are undefined anyway */
|
||||||
|
if(export_count == 0)
|
||||||
|
{
|
||||||
|
Process_Export(pR700AsmCode, SQ_EXPORT_PIXEL, 0, 1, 0, GL_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(pR700AsmCode->cf_last_export_ptr != NULL)
|
if(pR700AsmCode->cf_last_export_ptr != NULL)
|
||||||
|
@@ -251,7 +251,15 @@ GLboolean r700TranslateFragmentShader(struct r700_fragment_program *fp,
|
|||||||
number_of_colors_exported--;
|
number_of_colors_exported--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* illegal to set this to 0 */
|
||||||
|
if(number_of_colors_exported || z_enabled)
|
||||||
|
{
|
||||||
fp->r700Shader.exportMode = number_of_colors_exported << 1 | z_enabled;
|
fp->r700Shader.exportMode = number_of_colors_exported << 1 | z_enabled;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fp->r700Shader.exportMode = (1 << 1);
|
||||||
|
}
|
||||||
|
|
||||||
fp->translated = GL_TRUE;
|
fp->translated = GL_TRUE;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user