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)
|
||||
{
|
||||
unsigned int unBit;
|
||||
GLuint export_count = 0;
|
||||
|
||||
if(pR700AsmCode->depth_export_register_number >= 0)
|
||||
{
|
||||
@@ -4208,6 +4209,7 @@ GLboolean Process_Fragment_Exports(r700_AssemblerBase *pR700AsmCode,
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
export_count++;
|
||||
}
|
||||
unBit = 1 << FRAG_RESULT_DEPTH;
|
||||
if(OutputsWritten & unBit)
|
||||
@@ -4221,8 +4223,15 @@ GLboolean Process_Fragment_Exports(r700_AssemblerBase *pR700AsmCode,
|
||||
{
|
||||
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)
|
||||
{
|
||||
pR700AsmCode->cf_last_export_ptr->m_Word1.f.cf_inst = SQ_CF_INST_EXPORT_DONE;
|
||||
|
@@ -251,7 +251,15 @@ GLboolean r700TranslateFragmentShader(struct r700_fragment_program *fp,
|
||||
number_of_colors_exported--;
|
||||
}
|
||||
|
||||
fp->r700Shader.exportMode = number_of_colors_exported << 1 | z_enabled;
|
||||
/* illegal to set this to 0 */
|
||||
if(number_of_colors_exported || z_enabled)
|
||||
{
|
||||
fp->r700Shader.exportMode = number_of_colors_exported << 1 | z_enabled;
|
||||
}
|
||||
else
|
||||
{
|
||||
fp->r700Shader.exportMode = (1 << 1);
|
||||
}
|
||||
|
||||
fp->translated = GL_TRUE;
|
||||
|
||||
|
Reference in New Issue
Block a user